Schalter mit 4 Zuständen via Rule auswerten
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Schalter mit 4 Zuständen via Rule auswerten
Ja, sicher ist das sinnvoll. Du möchtest vermutlich abhängig von der gewählten Taste unterschiedlich lange Ein/Ausschalten?
Gesendet von meinem SM-G973F mit Tapatalk
Gesendet von meinem SM-G973F mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 66
- Registriert: 28. Aug 2019 10:52
Re: Schalter mit 4 Zuständen via Rule auswerten
also, ich hab's geschnallt !!! danke!!!
aber ... obwohl ich doch schon einiges mit rules gelöste habe, stoße ich dennoch auf ein Hinternis:
wie schaffe ich es, den aktuellen Wert/Command von Rollo_X_Zustand auzulesen?
Mir wird egal bei welchem Wert, nur die 1 angezeigt.
aber ... obwohl ich doch schon einiges mit rules gelöste habe, stoße ich dennoch auf ein Hinternis:
wie schaffe ich es, den aktuellen Wert/Command von Rollo_X_Zustand auzulesen?
Mir wird egal bei welchem Wert, nur die 1 angezeigt.
Code: Alles auswählen
rule Rollo_X
when
Item Rollo_X_Zustand received command
then
//val Rollo_X_Zustandstate = Rollo_X_Zustand.state.toString
//logInfo("light", Rollo_X_Zustandstate.state.toString)
if (Rollo_X_Zustand.state.toString == "1")
{ logInfo("test", "test 1") }
else if (Rollo_X_Zustand.state.toString == "2")
{ logInfo("test", "test 2") }
else if (Rollo_X_Zustand.state.toString == "3")
{ logInfo("test", "test 3") }
else if (Rollo_X_Zustand.state.toString == "4")
{ logInfo("test", "CtestH 4") }
end
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Schalter mit 4 Zuständen via Rule auswerten
Da nun an der Tastatur und nicht per Handy, etwas ausführlicher 
Du hast das Item so definiert, dass autoupdate="false" gesetzt ist. Das Item ist ansonsten mit keinem Binding gekoppelt.
Wenn Du in der Sitemap ein Item betätigst, wird immer ein Kommando gesendet. Gewöhnlich löst dieses Kommando auch eine Änderung des Status aus, da Du das aber explizit abgeschaltet hast, unterbleibt das Update des Status.
Du reagierst in der Rule auf ein Kommando. Nun sollte Dich nicht der Status eines Items (zufälligerweise das selbe, wie das, von dem das Kommando kommt) interessieren, sondern das Kommando. Dieses steht mit der impliziten Variablen receivedCommand zur Verfügung.
Deine Rule sähe also besser so aus:
Jetzt komme ich aber gleich mit einer wichtigen Frage: Das X deutet für mich an, dass es um mehrere Rollos geht. Wenn das so ist, solltest Du von Anfang an darauf achten, die Rule allgemein zu fassen.
Du möchtest nicht zehn Rules anlegen, die bis auf das triggernde Item und das beeinflusste Item identisch sind. Stattdessen sollte die Rule auf alle betroffenen Items triggern und anschließend selbst bestimmen, auf welches Item sie einwirken soll.
Um so eine Rule zu entwickeln, muss aber schon konkret bekannt sein, was die Rule machen soll. Bezogen auf das Beispiel oben: Packe alle Items Rollo_X_Zustand in eine Gruppe gRollo_Zustand. Anschließend sieht die Rule so aus:
Es hat sich also (fast) nichts geändert. Lediglich der Trigger ist nun ein anderer und im logInfo wird eine zweite implizite Variable verwendet, triggeringItem ist das Item, welches die Rule ausgelöst hat, es handelt sich um einen Zeiger auf das Original Item, somit verhält sich triggeringItem exakt wie das Original.

Du hast das Item so definiert, dass autoupdate="false" gesetzt ist. Das Item ist ansonsten mit keinem Binding gekoppelt.
Wenn Du in der Sitemap ein Item betätigst, wird immer ein Kommando gesendet. Gewöhnlich löst dieses Kommando auch eine Änderung des Status aus, da Du das aber explizit abgeschaltet hast, unterbleibt das Update des Status.
Du reagierst in der Rule auf ein Kommando. Nun sollte Dich nicht der Status eines Items (zufälligerweise das selbe, wie das, von dem das Kommando kommt) interessieren, sondern das Kommando. Dieses steht mit der impliziten Variablen receivedCommand zur Verfügung.
Deine Rule sähe also besser so aus:
Code: Alles auswählen
rule "Rollo X"
when
Item Rollo_X_Zustand received command
then
logInfo("test", "Empfangenes Kommando für Rollo_X_Zustand: {}",receivedCommand)
end
Du möchtest nicht zehn Rules anlegen, die bis auf das triggernde Item und das beeinflusste Item identisch sind. Stattdessen sollte die Rule auf alle betroffenen Items triggern und anschließend selbst bestimmen, auf welches Item sie einwirken soll.
Um so eine Rule zu entwickeln, muss aber schon konkret bekannt sein, was die Rule machen soll. Bezogen auf das Beispiel oben: Packe alle Items Rollo_X_Zustand in eine Gruppe gRollo_Zustand. Anschließend sieht die Rule so aus:
Code: Alles auswählen
rule "Rollo X"
when
Member of gRollo_Zustand received command
then
logInfo("test", "Empfangenes Kommando für {}: {}",triggeringItem.name,receivedCommand)
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 66
- Registriert: 28. Aug 2019 10:52
Re: Schalter mit 4 Zuständen via Rule auswerten
Jetzt habe ich gerade etwas Zeit für die Weiterarbeit, und da muss ich dir gleich mal für die ausführliche Erklärung danken! So hat alles geklappt und es funktioniert wie gewollt!!
-
- Beiträge: 66
- Registriert: 28. Aug 2019 10:52
Re: Schalter mit 4 Zuständen via Rule auswerten
Ich habe gestern das Thema wieder aufgenommen und hänge noch immer an einem -wahrscheinlich- Interpretationsfehler!
Die Rule spricht bei Wertänderung des Items an, brint mir auch die Meldung im log. Aber die Schaltzustände selbst lassen sich nicht auswerten. Im Log wird aber dennoch die Wertänderung protokolliert. Sorry, ich komme leider ohne Hilfe nicht mehr weiter
Das Item:
Die Rule:
Die Rule spricht bei Wertänderung des Items an, brint mir auch die Meldung im log. Aber die Schaltzustände selbst lassen sich nicht auswerten. Im Log wird aber dennoch die Wertänderung protokolliert. Sorry, ich komme leider ohne Hilfe nicht mehr weiter

Code: Alles auswählen
2020-07-08 19:32:10.608 [ome.event.ItemCommandEvent] - Item 'PLC_Rollo_X_STRG' received command 0
Code: Alles auswählen
Number PLC_Rollo_X_STRG {autoupdate="false"}
Code: Alles auswählen
rule "Rollo X1"
when
Item PLC_Rollo_X_STRG received command
then
logInfo("test", "Rollosteuerung_Wert empfangen: {}",receivedCommand)
if (PLC_Rollo_X_STRG.state.toString == 0){ // STOP
logInfo("test", "Rollosteuerung_Kokreter Wert: {}",receivedCommand)
}
....
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Schalter mit 4 Zuständen via Rule auswerten
...hast du schon mal probiert das ".toString" bei der If-Abfrage weg zu lassen, oder aber die 0 in Hochkomma "0" zu setzen ?
Code: Alles auswählen
if (PLC_Rollo_X_STRG.state == 0)
Code: Alles auswählen
if (PLC_Rollo_X_STRG.state.toString == "0")
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 66
- Registriert: 28. Aug 2019 10:52
Re: Schalter mit 4 Zuständen via Rule auswerten
bestimmt, aber ich hab noch einmal zur Sicherheit folgende Varianten -ohne Erfolg- probiert:
Code: Alles auswählen
if (PLC_Rollo_X_STRG.state == "0"){
if (PLC_Rollo_X_STRG.state == 0){
if (PLC_Rollo_X_STRG.state.toString == "0"){
if (PLC_Rollo_X_STRG.state.toString == 0){
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Schalter mit 4 Zuständen via Rule auswerten
...andere Frage: Triggert die Rule ? D.h. bekommst du die LogInfos ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Schalter mit 4 Zuständen via Rule auswerten
Wenn Du einen String verwendest, musst Du auch mit einem String vergleichen.
Aber wie oben erwähnt, darfst Du Dich nicht für den Status interessieren, sondern nur für das Kommando, das sind zwei komplett unabhängige Dinge!!!
Deine Abfrage MUSS receivedCommand auswerten und DARF NICHT Item.state auswerten!!!
Alternativ, falls Du mit String arbeiten willst:
Aber wie oben erwähnt, darfst Du Dich nicht für den Status interessieren, sondern nur für das Kommando, das sind zwei komplett unabhängige Dinge!!!
Deine Abfrage MUSS receivedCommand auswerten und DARF NICHT Item.state auswerten!!!
Code: Alles auswählen
rule "Rollo X1"
when
Item PLC_Rollo_X_STRG received command
then
logInfo("test", "Rollosteuerung_Wert empfangen: {}",receivedCommand)
if (receivedCommand == 0) // STOP
logInfo("test", "Rollosteuerung hat Null empfangen")
if (receivedCommand == 1)
logInfo("test", "Rollosteuerung hat Eins empfangen")
if (receivedCommand == 2)
logInfo("test", "Rollosteuerung hat Zwei empfangen")
end
Code: Alles auswählen
rule "Rollo X1"
when
Item PLC_Rollo_X_STRG received command
then
logInfo("test", "Rollosteuerung_Wert empfangen: {}",receivedCommand)
if (receivedCommand.toString == "0") // STOP
logInfo("test", "Rollosteuerung hat Null empfangen")
if (receivedCommand.toString == "1")
logInfo("test", "Rollosteuerung hat Eins empfangen")
if (receivedCommand.toString == "2")
logInfo("test", "Rollosteuerung hat Zwei empfangen")
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 66
- Registriert: 28. Aug 2019 10:52
Re: Schalter mit 4 Zuständen via Rule auswerten
Da war mein Fehler. Ich habe immer
Code: Alles auswählen
PLC_Rollo_X_STRG.receivedCommand
Code: Alles auswählen
receivedCommand
Danke