Seite 1 von 1

shelly 2.5 rule mit Schalter

Verfasst: 30. Aug 2022 18:09
von urlauber22
Hallo,

Ich habe mir eine Regel erstellt, die meinen Rolladen abschaltet wenn die Balkontür offen ist. Sie funktioniert über die APP sehr gut.

Code: Alles auswählen

rule "Balkontür auf Rolladen hoch APP"

when

 		Item DGRolladenWZTuer_Steuerung0offen100geschlossen received command DOWN 

then
		if ((receivedCommand == DOWN) && (ZWaveNode003FGDW_SensorDoor.state == OPEN))    {
              	 sendCommand(DGRolladenWZTuer_Steuerung0offen100geschlossen, STOP)
}
end

Jetzt brauche Ich aber noch eine für den Hardware Schalter mit dem ich den shelly schalte.

Wenn Ich den Schalter betätige kommt im Log folgendes:

[openhab.event.ItemStateChangedEvent ] - Item 'DGRolladenWZTuer_Status' changed from stop to close]


Ich komme einfach nicht mit dem "ItemStateChangedEvent" klar, habe da keinen ansetzpunkt.

hat da jemande eine Idee?

Re: shelly 2.5 rule mit Schalter

Verfasst: 31. Aug 2022 00:21
von udo1toni
Ich verstehe nicht, was Dein konkretes Problem ist.

Das Changed Event kann ebenfalls als Trigger für Rules verwendet werden, nur dass es halt nicht received command heißt sondern changed.

Deine Itemnamen sind übrigens fürchterlich ;)

Code: Alles auswählen

rule "Balkontür auf Rolladen hoch Taster"
when
    Item DGRolladenWZTuer_Status changed
then
    if(DGRolladenWZTuer_Status.state.toString == "close" && ZWaveNode003FGDW_SensorDoor.state == OPEN) 
        DGRolladenWZTuer_Steuerung0offen100geschlossen.sendCommand(STOP)
end

Re: shelly 2.5 rule mit Schalter

Verfasst: 31. Aug 2022 15:50
von urlauber22
Hallo udo1toni,

dankeschön, das ist genau das was Ich gesucht habe, aber nicht hinbekommen habe.

Mit den Bezeichnungen hast recht, Werde mich bessern :)

Re: shelly 2.5 rule mit Schalter

Verfasst: 2. Sep 2022 16:29
von urlauber22
Hi,

wenn Ich jetzt in die Regel folgendes implementier:

Code: Alles auswählen

 Item DGRolladenWZTuer_Status changed from stop to close 
funkioniert sie nicht mehr.

Grund ist Ich muss die Richtung vorgeben.
Das bedeutet sie soll funktionieren wenn der Rolladen oben ist und geschlossen wird.

Re: shelly 2.5 rule mit Schalter

Verfasst: 3. Sep 2022 11:10
von udo1toni
Was kein Wunder ist. Du kannst nicht einfach beliebige Dinge als Status im Trigger hinterlegen. Da es sich hier um ein String Item handelt, ist stop und close kein Status, sondern ein String.

Das mag aus Anwendersicht verwirrend sein :) aber so als Grundsatz:
Erlaubte Status sind:
Für alle Itemtypen: UNDEV, NULL (eventuell gibt es auch noch weitere "kein gültiger Status" Status, NULL ist der Urzustand beim Start von openHAB)
Zusätzlich für Switch: ON, OFF
Zusätzlich für Contact: OPEN, CLOSED
Es gibt noch ein paar weitere Itemtypen mit potenziell sinnvollen Status, z.B. das Player Item (STOP, PLAY), aber schon bei Number kommen erhebliche Probleme auf, denn 1.0 ist ein anderer Status als 1.
Es gibt aber auch keinen triftigen Grund, den Status so abzufragen. Wenn Du möchtest, dass die Rule nur reagiert, wenn der Rollladen vorher gestoppt war, kannst Du die Rule weitgehend unverändert verwenden, Du musst lediglich eine weitere Bedingung einbauen:

Code: Alles auswählen

rule "Balkontür auf Rolladen hoch Taster"
when
    Item DGRolladenWZTuer_Status changed
then
    if(previousState.toString == "stop" && newState.toString == "close" && ZWaveNode003FGDW_SensorDoor.state == OPEN) 
        DGRolladenWZTuer_Steuerung0offen100geschlossen.sendCommand(STOP)
end
Die beiden Objekte perviousState und newState sind implizite Variablen, welche automatisch in jeder Rule zur Verfügung stehen, die über das changed Ereignis getriggert wurden.

Allerdings könnte man dann den Rollladen schließen, indem man zunächst den Befehl zum Öffnen sendet und unmittelbar daran anschließend den Schließen Befehl.

Re: shelly 2.5 rule mit Schalter

Verfasst: 3. Sep 2022 15:00
von urlauber22
Lese Ich das dann so richtig:

Erstens wird abgefragt, wie der Status zu Beginn ist. Dann wird Abgefragt ob der Befehl "close" und dann noch ob die Tür "offen" ist.

War dann doch schwieriger als gedacht. Hatte noch nie so was.

Danke

Re: shelly 2.5 rule mit Schalter

Verfasst: 3. Sep 2022 18:25
von udo1toni
Nein, die Rule löst beim Ereignis changed aus. Das bedeutet, der Status des angegebenen Items hat sich geändert.

Innerhalb der Rule werden zwei Status abgefragt, nämlich der vom triggernden Item und der von der Tür.
Es geht hier nicht um Befehle, sondern ausschließlich um Zustände (Status).

Wenn man im Trigger schreibt: changed from <alter Wert> to <neuer Wert>, wird der Trigger eben entsprechend eingeschränkt, er löst erst aus, wenn das angegebene Item vom Zustand <alter Wert> kommend direkt zum Zustand <neuer Wert> wechselt.
Diese Einschränkung kann sinnvoll sein, genauso kann man aber innerhalb der Rule beide Zustände abfragen, eben über die impliziten Variablen previousState und newState. Dann muss man die Einschränkung nicht im Trigger vornehmen (besonders praktisch, wenn man sonst mehrere Rules bräuchte).

Ich kenne ja die Unstände drum herum nicht, gewöhnlich sollte ein Aktor als Item abgebildet sein. Es sollte nicht möglich sein, den Aktor zu steuern, ohne dass openHAB das umgehend mitbekommt, z.B. indem der Aktor eine Meldung schickt, dass er den Motor startet. Das ist hier wohl indirekt der Fall, das Item DGRolladenWZTuer_Status meldet den Start der Fahrt, sobald diese beginnt. Nur deshalb lässt sich die Fahrt auch zu Beginn stoppen.