Ankündigung

Einklappen
Keine Ankündigung bisher.

Switch-Zustände AND verknüpfen/Timer und Zustände

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

    [Codebeispiel] Switch-Zustände AND verknüpfen/Timer und Zustände

    Hallo Leute,

    ihr habt mir schon sehr weitergeholfen.
    Jetzt habe ich eine neue Idee:

    Ich habe vor, in Openhab einen Schalter zu definieren, der die Automatik der Jalousie (soll zu definierter Zeit runterfahren und rauffahren) ein bzw ausschalten kann.



    Es sollte irgendwie so aussehen:

    Code:
    Wenn Schalter Automatik = EIN und
    definierte Zeit (cron ...) = EIN 
    
    dann
    
    Jalousie down
    Das sollte auch funktionieren, (das runterfahren) wenn die Zeit bereits überschritten wurde, und der Schalter dann auf Automatik gestellt wird, z.B bis Sonnenaufgang. Wenn Sonnenaufgang überschritten wurde und es wird auf Automatik gestellt, soll bis Sonnenuntergang nichts passieren.


    Meine Items lauten:

    Code:
    Automatik-Schalter
    Switch   Jalousien   "Automatik Jalousien" 	<rollershutter>	(gAutomatik, gGarage)
    
    Sonnenaufgang
    Switch   Sunrise_Event	{astro="type=SUNRISE"}
    
    Sonnenuntergang
    Switch   Sunset_Event {astro="type=SUNSET"}
    
    Rollershutter Jalousie_1_Wohnzimmer "Wohnzimmer Fenster 1 [%d %%]" 		(UG_Wohnzimmer, gJalousieEG)	{ knx="1/1/11, 1/1/12, 5/1/28" }
    Bin Siemens-gebeutelt und habe daher keine Erfahrung in JAVA...
    Kann mir da jemand auf die Sprünge helfen?

    Ist das überhaupt mit einer Rule möglich?
    Ich muss da doch irgendwie einen Merker definieren, z.b. bei Siemens (M1.0 soll von Sonnenuntergang bis Sonnenaufgang gesetzt sein)

    U Switch Sunset_Event
    S M1.0
    U Switch Sunrise_Event
    R M1.0

    Das ist so aber in Java nicht möglich.
    Kann mir jemand helfen?



    UND:

    Ich habe da noch was:

    Die Steuerung meiner Garagentore mit der Garagenbeleuchtung:
    Wenn Garagentor 1 oder 2 betätigt wird, soll die Garagenbeleuchtung für 2 min eingeschaltet und danach wieder ausgeschaltet werden.
    Wenn die Beleuchtung vorher bereits eingeschaltet wurde und das Garagentor betätigt wird, soll das Licht eingeschaltet bleiben.

    Ich habe da noch die Items:


    Code:
    Garagentor:
    
    Switch Garage_Tor1	"Garagentor 1"	(Garage)	{ knx="1.001:3/3/1", autoupdate="false"}
    
    Switch Garage_Tor2	"Garagentor 2"	(Garage)	{ knx="1.001:3/3/2", autoupdate="false"}
    
    
    Garagenbeleuchtung:
    
    Switch Licht_Garage    "Licht Garage"    	(gLichtEG, Garage)	{ knx="1.001:1/2/0" }
    Irgendwie muss da der Status abgefragt werden, (Ist Licht an oder nicht),
    ich komme damit aber auch nicht klar.
    Wäre toll, wenn mir da jemad einen Tip geben könnte.

    Tausend Dank im Voraus.

    #2
    Habe mich mal an die Garagenbeleuchtung gemacht.
    Habe mithilfe der demo.rules folgendes zusammengeschrieben.

    Aber irgendwie scheint das noch nicht zu funktionieren.
    Kann da mal jemand einen Blick drüber werfen, wo die Klinke sitzt?

    Code:
    rule "Garagenbeleuchtung"
    
    when
    
            Item Garage_Tor1 received update ON or
    		Item Garage_Tor2 received update ON                   /*Garagentore werden betätigt */
    
    then
    
    	      if (Licht_Garage.state == OFF)  {                         /*Statusabfrage Licht AUS */         
    		   if(timer==null) {                       /* Einschaltbefehl und starten des Timers */
    			timer = createTimer(now.plusSeconds(10)) [|
    			sendCommand(Licht_Garage, ON)
    			]
    		} else {                                  
    			timer.reschedule(now.plusSeconds(10))
    		}
    	} else if(Licht_Garage.state == ON) {
    		if(timer!=null) {
    			timer.cancel
    			timer = null
    		}	
    	}
    end
    Stehe im Moment auf dem Schlauch....

    Kommentar


      #3
      Das mit den Rollos habe ich wie folgt gelöst:
      es gibt zwei Switches (IsDay und Bettruhe). IsDay beschreibt, ob es Tag ist (zwischen Sonnenaufgang und Sonnenuntergang) und Bettruhe, ob wir schlafen gegangen sind.

      Code:
      rule "Rollos hoch"
      when
          Item IsDay changed to ON or
          Item Bettruhe changed to OFF
      then
          if (IsDay.state==ON && Bettruhe.state==OFF) {
              logInfo("Astro Regeln", "Rollos hoch")
              sendCommand(RolloGaestezimmer, UP)
              sendCommand(RolloSchlafzimmer, UP)
          }
          
      end
      Die Regel wird ausgelöst, wenn beide Bedingungen (AND) erfüllt sind.

      Du kannst das analog mit Deinen beiden Schaltern Rolloautomatik und Sunrise machen, wobei Sunrise meinem IsDay entspricht und nicht ein Event sein sollte, sondern ein Status. Also nicht ein einmaliges Ereignis, sondern ein Status, der solange besteht, wie es eben gewüscht ist (bei mir zwischen Sonnenauf und -untergang).

      Viele Grüße
      Michael

      Kommentar


        #4
        Habe es mal so versucht zu lösen:

        Code:
        /*Regel zur Steuerung der Jalousien in Automatik*/
        
        rule "Jalousien_Automatik runter"
        
        when
        
             Time cron "0 30 21 * * ?"		/* taeglich 21:30 */
        
        then
        	if (Auto_Jalousien.state==ON)      {
        
        		sendCommand(Jalousie_1_Wohnzimmer, DOWN)
        		sendCommand(Jalousie_2_Wohnzimmer, DOWN)
        		sendCommand(Jalousie_3_Wohnzimmer, DOWN)
        		/*sendCommand(Jalousie_Kueche_Terasse, DOWN)*/
        		sendCommand(Jalousie_Kueche, DOWN)
        		sendCommand(Jalousie_WC, DOWN)
        		sendCommand(Jalousie_GaesteWC, DOWN)
        		sendCommand(Jalousie_1_Buero, DOWN)
        		sendCommand(Jalousie_2_Buero, DOWN)
        		sendCommand(Jalousie_3_Buero, DOWN)
        	 }
        
        end
        
        
        
        rule "Jalousien_Automatik hoch"
        
        when
        
             Time cron "00 00 08 * * ?"		/* taeglich 08:00 ss mm hh */
        
        then
        	if (Auto_Jalousien.state==ON)        {
        
        		sendCommand(Jalousie_1_Wohnzimmer, UP)
        		sendCommand(Jalousie_2_Wohnzimmer, UP)
        		sendCommand(Jalousie_3_Wohnzimmer, UP)
        		/*sendCommand(Jalousie_Kueche_Terasse, UP)*/
        		sendCommand(Jalousie_Kueche, UP)
        		sendCommand(Jalousie_WC, UP)
        		sendCommand(Jalousie_GaesteWC, UP)
        		sendCommand(Jalousie_1_Buero, UP)
        		sendCommand(Jalousie_2_Buero, UP)
        		sendCommand(Jalousie_3_Buero, UP)
        		}
        
        end

        Die Zustände Sonnenauf- und Untergang frage ich folgendermaßen ab:

        Code:
        /* Regel zum Schalten der Zustände Sonnenaufgang/Sonnenuntergang */
        
        rule "Festlegung Sonnenuntergang"
        
        when
                Item Sunset_Event changed from OFF to ON
        
            then
        
                 sendCommand(Sunset_Auto, ON)
                 sendCommand(Sunrise_Auto, OFF)
        end
        
        rule "Festlegung Sonnenaufgang"
        
        when
                Item Sunrise_Event changed from OFF to ON
        
            then
        
                 sendCommand(Sunrise_Auto, ON)
                 sendCommand(Sunset_Auto, OFF)
        end

        Folgende Items habe ich angelegt:

        Code:
        Switch 			Sunset_Auto				 "Status Sonnenuntergang"
        Switch 			Sunrise_Auto			 "Status Sonnenaufgang"

        mal schauen, ob das so funktioniert.

        Kommentar

        Lädt...
        X