Schalter mit 4 Zuständen via Rule auswerten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von udo1toni »

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

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hurra
Beiträge: 66
Registriert: 28. Aug 2019 10:52
Answers: 0

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von hurra »

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.

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

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von udo1toni »

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:

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
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:

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
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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hurra
Beiträge: 66
Registriert: 28. Aug 2019 10:52
Answers: 0

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von hurra »

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!!

hurra
Beiträge: 66
Registriert: 28. Aug 2019 10:52
Answers: 0

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von hurra »

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 :?

Code: Alles auswählen

2020-07-08 19:32:10.608 [ome.event.ItemCommandEvent] - Item 'PLC_Rollo_X_STRG' received command 0
Das Item:

Code: Alles auswählen

Number PLC_Rollo_X_STRG {autoupdate="false"}
Die Rule:

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) 
        }
....

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von peter-pan »

...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

hurra
Beiträge: 66
Registriert: 28. Aug 2019 10:52
Answers: 0

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von hurra »

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){

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von peter-pan »

...andere Frage: Triggert die Rule ? D.h. bekommst du die LogInfos ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von udo1toni »

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!!!

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
Alternativ, falls Du mit String arbeiten willst:

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

hurra
Beiträge: 66
Registriert: 28. Aug 2019 10:52
Answers: 0

Re: Schalter mit 4 Zuständen via Rule auswerten

Beitrag von hurra »

udo1toni hat geschrieben: 9. Jul 2020 01:22 ...

Deine Abfrage MUSS receivedCommand auswerten und DARF NICHT Item.state auswerten!!!
Da war mein Fehler. Ich habe immer

Code: Alles auswählen

 PLC_Rollo_X_STRG.receivedCommand
ausgwertet. Warum auch immer... aber wenn ich nur

Code: Alles auswählen

receivedCommand 
auswerte, komm ich auf die Lösung!

Danke

Antworten