Ankündigung

Einklappen
Keine Ankündigung bisher.

Nachtschaltung für Kinderzimmer

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Ok, danke für den Tipp. Dass || eine oder-Verknüpfung ist, wusste ich nicht. Das habe ich mir aus MadDogs Rule geklaut und es als und-Verknüpfung interpretiert.
    Jetzt klappt es, danke!

    Kommentar


      #17
      Ich nochmal, irgendwie funktioniert das so noch nicht. Es sieht so aus, als wenn die Regel ignoriert wird. Er fährt die Rollos einfach nicht hoch. Vielleicht hab ich da noch einen Bug in meinem Code?

      Code:
      rule "Öffne alle Rollos,wenn Lucas zwischen 6 Uhr und 9 Uhr wach wird"
      when
      Item Shutter_G1OG_Child received command UP
      then
              if (now.getHourOfDay >= 6 && now.getHourofDay <= 9)
              then
                      Shutter_GKG_Kitchen.sendCommand(UP)
                      Shutter_GKG_Living.sendCommand(UP)
      end

      Kommentar


        #18
        Hi Jan,

        getHourofDay schreibst du einmal mit kleinem o
        Vielleicht liegt es daran?

        Michael

        Kommentar


          #19
          Nee, das war es leider auch nicht. Kann es sein, dass ich erst eine bestimmte Bibliothek einbinden muß, damit das ausgeführt wird? Ich poste hier mal meine komplette Rule-Datei, vielleicht kommt sich die Regel mit einer anderen in die Quere?

          Code:
          import org.openhab.core.library.types.*
          import java.lang.Math
          
          
          // Constants
          var Number K = 0.017453
          
          // Change this reflecting your destination
          var Number latitude = 49.656030
          var Number longitude = 08.649870
          
          
          rule "Set Sun sonnenhoehe and Dawn States"
          when
          	Time cron "0 0/5 * * * ?"
          then
          	var Number tageszahl
          	var Number deklination
          	var Number zeitgleichung
          	var Number stundenwinkel
          	var Number x 
          	var Number y
          	var Number sonnenhoehe
          	var Number azimut
          	
          	var month  = now.getMonthOfYear
          	var day    = now.getDayOfMonth
          	var hour   = now.getHourOfDay
          	var minute = now.getMinuteOfHour
          	
          	// Source: http://www.jgiesen.de/SME/tk/index.htm
          	tageszahl = (month - 1) * 30 + day + hour / 24 
          	deklination = -23.45 * Math::cos((K * 360 * (tageszahl + 10) / 365).doubleValue)
          	zeitgleichung = 60.0 * (-0.171 * Math::sin((0.0337*tageszahl+0.465).doubleValue) - 0.1299 * Math::sin((0.01787*tageszahl-0.168).doubleValue))
          	stundenwinkel = 15.0 * (hour.doubleValue + (minute.doubleValue/60.0) - (15.0-longitude)/15.0 - 12.0 + zeitgleichung/60.0)
          	x = Math::sin((K * latitude).doubleValue()) * Math::sin((K * deklination).doubleValue()) + Math::cos((K * latitude).doubleValue()) * Math::cos((K * deklination).doubleValue()) * Math::cos((K * stundenwinkel).doubleValue())
          	y = - (Math::sin((K*latitude).doubleValue) * x - Math::sin((K*deklination).doubleValue)) / (Math::cos((K*latitude).doubleValue) * Math::sin(Math::acos(x.doubleValue)))
          	sonnenhoehe = Math::asin(x.doubleValue) / K
          	
          	var break = hour.doubleValue + (minute.doubleValue/60.0) <= 12.0 + (15.0-longitude)/15.0 - zeitgleichung/60.0 
          	if (break) {
          		azimut = Math::acos(y.doubleValue) / K
          	} else {
          		azimut = 360.0 - Math::acos(y.doubleValue) / K
          	}
          	 	 
          	logDebug("Sun.rules", "month: " + month)
          	logDebug("Sun.rules", "day: " + day)
          	logDebug("Sun.rules", "hour: " + hour)
          	logDebug("Sun.rules", "minute: " + minute)
          	logDebug("Sun.rules", "tageszahl: " + tageszahl)
          	logDebug("Sun.rules", "deklination: " + deklination)
          	logDebug("Sun.rules", "zeitgleichung: " + zeitgleichung)
          	logDebug("Sun.rules", "stundenwinkel: " + stundenwinkel)
          	logDebug("Sun.rules", "x: " + x)
          	logDebug("Sun.rules", "y: " + y)
          	logDebug("Sun.rules", "sonnenhoehe: " + sonnenhoehe)
          	logDebug("Sun.rules", "azimut: " + azimut)
          	
          	logDebug("Sun.rules", "Calculated new SunHeight angle '" + sonnenhoehe + "°'")
          	logDebug("Sun.rules", "Calculated new Azimut angle '" + azimut + "°'")
          	
          	// Berechnungen auf den Bus schicken ...
          
          	Sun_Height.postUpdate(sonnenhoehe)
          	Sun_Azimut.postUpdate(azimut)
          end
          
          rule "calculate dawn"
          when
            Item Sun_Height changed
          then
            Sun_Dawn_Solar.postUpdate( if (Sun_Height.state < 0) ON else OFF )
            Sun_Dawn_Civil.postUpdate( if (Sun_Height.state < -3.5) ON else OFF )
            Sun_Dawn_Nautical.postUpdate( if (Sun_Height.state < -12) ON else OFF )
            Sun_Dawn_Astronomical.postUpdate( if (Sun_Height.state < -18) ON else OFF)
          end
          
          
          rule "Schliesse Rollaeden bei Sonnenuntergang"
          when 
          	Item Sun_Dawn_Civil changed to ON
          then
          		Shutter_GKG_Kitchen.sendCommand(DOWN)
          		Shutter_GKG_Living.sendCommand(DOWN)
          
          		Shutter_GEG_LivingWindow.sendCommand(DOWN)	
          		Shutter_GEG_LivingBalkon.sendCommand(DOWN)
          		Shutter_GEG_Living.sendCommand(DOWN)
          		Shutter_GEG_LivingTerrasse.sendCommand(DOWN)
          		Shutter_GEG_Toilet.sendCommand(DOWN)
          		Shutter_GEG_KitchenEast.sendCommand(DOWN)
          		Shutter_GEG_KitchenSouth.sendCommand(DOWN)
          
          		Shutter_G1OG_Bath.sendCommand(DOWN)
          		Shutter_G1OG_Parents1.sendCommand(DOWN)
          		Shutter_G1OG_Parents2.sendCommand(DOWN)
          		Shutter_G1OG_Zimmer1.sendCommand(DOWN)
          		Shutter_G1OG_Zimmer2.sendCommand(DOWN)
          
          		Shutter_GDG_Buero.sendCommand(DOWN)
          		Shutter_GDG_Buero2.sendCommand(DOWN)
          		Shutter_GDG_Zimmer.sendCommand(DOWN)  
          end
          
          	
          rule "oeffne Rollaeden bei Sonnenaufgang"
          when
            Item Sun_Dawn_Solar changed to OFF
          then
            Shutter_GKG_Kitchen.sendCommand(UP)
            Shutter_GKG_Living.sendCommand(UP) 
          
            Shutter_GEG_LivingWindow.sendCommand(UP)
            Shutter_GEG_LivingBalkon.sendCommand(UP)
            Shutter_GEG_Living.sendCommand(UP)
            Shutter_GEG_LivingTerrasse.sendCommand(UP)
            Shutter_GEG_Toilet.sendCommand(UP)
            Shutter_GEG_KitchenEast.sendCommand(UP)
            Shutter_GEG_KitchenSouth.sendCommand(UP)
           
            Shutter_G1OG_Bath.sendCommand(UP)
            Shutter_G1OG_Zimmer1.sendCommand(UP)
            Shutter_G1OG_Zimmer2.sendCommand(UP)
          
          
            Shutter_GDG_Buero.sendCommand(UP)
            Shutter_GDG_Buero2.sendCommand(UP)
          end
          
          
          rule "Öffne wenn Lucas zwischen 6 Uhr und 9 Uhr wach wird"
          when 
          Item Shutter_G1OG_Child received command UP 
          then
          	if (now.getHourofDay >= 6 && now.getHourofDay <= 9)
          	then
          	  	Shutter_GKG_Kitchen.sendCommand(UP)
           		Shutter_GKG_Living.sendCommand(UP)
          
            		Shutter_GEG_LivingWindow.sendCommand(UP)
            		Shutter_GEG_LivingBalkon.sendCommand(UP)
            		Shutter_GEG_Living.sendCommand(UP)
            		Shutter_GEG_LivingTerrasse.sendCommand(UP)
            		Shutter_GEG_Toilet.sendCommand(UP)
            		Shutter_GEG_KitchenEast.sendCommand(UP)
            		Shutter_GEG_KitchenSouth.sendCommand(UP)
          
          		Shutter_G1OG_Bath.sendCommand(UP)
          		Shutter_G1OG_Parents1.sendCommand(UP)
          		Shutter_G1OG_Parents2.sendCommand(UP)
            		Shutter_G1OG_Zimmer1.sendCommand(UP)
            		Shutter_G1OG_Zimmer2.sendCommand(UP)
          		
            		Shutter_GDG_Buero.sendCommand(UP)
            		Shutter_GDG_Buero2.sendCommand(UP)
            		Shutter_GDG_Zimmer.sendCommand(UP)
            		Shutter_GDG_Zimmer.sendCommand(UP)
          end

          Kommentar


            #20
            Du vermischst da dauernd die Syntax der Trigger (dem WHEN-Teil) und des auszuführenden Scripts (dem THEN-Teil).

            Richtig wäre:

            Code:
            rule "Öffne alle Rollos,wenn Lucas zwischen 6 Uhr und 9 Uhr wach wird"
            when
            Item Shutter_G1OG_Child received command UP
            then
                    if (now.getHourOfDay >= 6 && now.getHourOfDay <= 9) {
                            Shutter_GKG_Kitchen.sendCommand(UP)
                            Shutter_GKG_Living.sendCommand(UP)
                    }
            end
            Das sollte der Designer Dir aber doch auch alles anmeckern, oder?

            Grüße,
            Kai

            Kommentar


              #21
              Ich habe das noch nicht im Designer gehabt, da ich OpenHAB mittlerweile auf dem Raspberry am Laufen habe und die Konfiguration per Texteditor anpasse. Aber da werde ich mir für die nächsten Gehversuche doch besser die einzelnen Scripte auf meinen Desktop holen und dort am Designer anpassen.

              Kommentar


                #22
                Hab deinen Code jetzt auch ausprobiert, es funktioniert! Danke!

                Kommentar


                  #23
                  Zitat von Jan0815 Beitrag anzeigen
                  Aber da werde ich mir für die nächsten Gehversuche doch besser die einzelnen Scripte auf meinen Desktop holen und dort am Designer anpassen.
                  oder nutze einfach die Dropbox-Integration (DropboxIOBundle - openhab - Documentation of the Dropbox IO Bundle - empowering the smart home - Google Project Hosting) ...
                  Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                  Kommentar


                    #24
                    Mal eine kleine Verständnisfrage meinerseits zu einem Schnipsel.
                    Macht es einen Unterschied wie hier im Thread beschrieben
                    Code:
                    Shutter_GKG_Living.sendCommand(UP)
                    zu benutzen, oder ist es egal und man kann sich auch an der Demo orientieren die so schreiben würde
                    Code:
                    sendCommand(Shutter_GKG_Living, UP)
                    Danke und Gruß
                    Tom

                    Kommentar


                      #25
                      Ich glaube, beide Varianten sind gleich.
                      Ich mag persönlich die erste lieber.

                      Kommentar


                        #26
                        Danke maddog :-)

                        Kommentar


                          #27
                          Zitat von stone13 Beitrag anzeigen
                          Macht es einen Unterschied wie hier im Thread beschrieben
                          nein, macht es nicht!

                          Beide Schnipsel sind komplett identisch. Tatsächlich wird durch Xtext-Magie aus der ersten Variante die Zweite erzeugt und dann ausgeführt.

                          Besser lesbar ist für mich die erste Variante. Die fühlt sich irgendwie "objektorientierter" an :-)

                          Gruß,

                          Thomas E.-E.
                          Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                          Kommentar


                            #28
                            Zitat von maddog Beitrag anzeigen
                            Hi Jan,

                            getHourofDay schreibst du einmal mit kleinem o
                            Vielleicht liegt es daran?

                            Michael
                            Ich habe den letzten Codeschnipsel von Kai hierzu verwendet und auch der lief erst nicht. Nach einer Änderung von getHourOfDay zu getHourofDay funktioniert es auch bei mir.

                            LG und Danke
                            Tom

                            Kommentar


                              #29
                              Zitat von stone13 Beitrag anzeigen
                              Nach einer Änderung von getHourOfDay zu getHourofDay funktioniert es auch bei mir
                              hmm, dass ist allerdings schräg, denn die Methode wird tatsächlich bspw. so

                              Code:
                              now.getHourOfDay == 15
                              aufgerufen.

                              Gruß,

                              Thomas E.-E.
                              Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                              Kommentar

                              Lädt...
                              X