Seite 1 von 3

Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 8. Jan 2021 20:37
von LutzTH
Ich bin wieder einmal dabei ein Problem zu lösen. Ich setze zum Schalten von Steckdosen, einen 8 fach Switch (Schalter ZRC-90EU) ein.
http://manuals-backend.z-wave.info/make ... =REMEZRC90
Zum Schalten setze ich folgende Rule ein. Somit ist beim Drücken einer Taste am 8 fach Switch ein anderes ITEM (Lampe) ein bzw. auszuschalten.
Bis vor ein paar Tagen war dieses mit der Rule auch möglich. Seit kurzem ist dieses nicht mehr möglich. Beim Drücken wird der Verbraucher ein und gleich wieder ausgeschaltet.
Im Nachhinein ist dieses aber bei dem Aufbau der Rule auch nachvollziehbar.
Ich habe aber nicht die Erfahrung was ich an der Rule verändern kann, damit diese diese korrekt arbeitet.
Hier meine Rule.

Code: Alles auswählen

rule	"Wall Switch SRC90 Taste 2"
// Licht Decke
when
	Item L_Switch_Wall received update 2
	
then
if (L_Light.state == ON)   {
logInfo("Test Tasten", "Switch")
//Living_Room_Harmony_Activity.sendCommand(“PowerOff”)
//Kitchen_Sonos_Controller.sendCommand(PAUSE)
L_Light.sendCommand(OFF)

}
else {
 //(L_Light.state == OFF ) 
L_Light.sendCommand(ON)  

}
Wie kann ich diesen Eintrag richtig stellen. "when Item L_Switch_Wall received update 2"

hier noch ein Log Auszug

Code: Alles auswählen

2021-01-08 20:14:18.095 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON

2021-01-08 20:14:18.121 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON

2021-01-08 20:14:18.144 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON

2021-01-08 20:14:18.164 [nt.ItemStatePredictedEvent] - L_Light predicted to become OFF

2021-01-08 20:14:18.168 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON

2021-01-08 20:14:18.186 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON

2021-01-08 20:14:18.212 [nt.ItemStatePredictedEvent] - L_Light predicted to become OFF

2021-01-08 20:14:18.215 [nt.ItemStatePredictedEvent] - L_Light predicted to become OFF

2021-01-08 20:14:18.217 [nt.ItemStatePredictedEvent] - L_Light predicted to become OFF

2021-01-08 20:14:18.220 [nt.ItemStatePredictedEvent] - L_Light predicted to become OFF

2021-01-08 20:14:30.237 [GroupItemStateChangedEvent] - gLight changed from OFF to ON through L_Light

2021-01-08 20:14:30.243 [vent.ItemStateChangedEvent] - L_Light changed from OFF to ON

Re: Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 9. Jan 2021 01:02
von udo1toni
Das ist nicht die ganze Rule, oder?

Wenn es um das Toggeln einer Leuchte geht, so sollte das so aussehen:

Code: Alles auswählen

rule "Wall Switch SRC90 Taste 2"
when
    Item L_Switch_Wall received update 2
then
    L_Light.sendCommand(if(L_Light.state != ON) ON else OFF)
end
Ich vermute mal, dass Du acht solche Rules hast, die alle auf das gleiche Item L_Switch_Wall triggern, nur mit unterschiedlichem Wert? Dann böte es sich an, das in einer Rule zusammenzufassen.
Weiterhin könnte ich mir vorstellen, dass die Rule doppelt getriggert wird, das würde dann erklären, warum das Licht zweimal geschaltet wird. Das könnte man mit einer Logzeile verifizieren:

Code: Alles auswählen

rule "Wall Switch SRC90 Taste 2"
when
    Item L_Switch_Wall received update 2
then
    logInfo("wallswitch","L_Switch_Wall mit Wert 2 getriggert")
    L_Light.sendCommand(if(L_Light.state != ON) ON else OFF)
end
Taucht die Meldung nur einmal oder zweimal im Log auf? Mich würden auch die Meldungen zu L_Switch_Wall im events.log interessieren, eventuell nutzt Du den falschen Trigger.

EDIT: Tippfehler in Rule korrigiert.

Re: Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 9. Jan 2021 10:53
von LutzTH
Hallo Udo, vielen Dank für deine schnelle Antwort. :-) Ja es sind Rules. Für jeden Taster eine. Es besteht aber immer noch dieses Probleme. Mit einem Druck auf die Taste möchte ich ON oder OFF erreichen, je nach Zustand der Lampe.
Der Schaltzustand soll aber nur geändert werden wenn ich die Taste drücke und nicht auch wenn ich die Taste wieder loslasse. Also muss es irgendwie abgebildet werden mit (Item L_Switch_Wall received command ON 2) und nicht (Item L_Switch_Wall received update 2). received update reagiert ja nun auf alle beide Schaltzustände. (Drücken und Loslassen ON/OFF)
Ich wollte deine Rule einsetzen für log einsetzen. Sie hat noch einen Syntaxfehler. Denke mal da fehlt noch eine Klammer.

Re: Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 9. Jan 2021 11:34
von LCN-User
Statt

Code: Alles auswählen

L_Light.sendCommand(L_Light.state != ON) ON else OFF)
sollte es möglicherweise

Code: Alles auswählen

L_Light.sendCommand(if(L_Light.state != ON) ON else OFF)
heißen.

Wie udo1toni schon schrieb, wäre es hilfreich das Item L_Switch_Wall im Log zu sehen. Bitte einfach mal den Taster drücken und schauen was dann im Log steht. Das würde uns wahrscheinlich weiterhelfen.

Re: Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 9. Jan 2021 13:25
von LutzTH
Vielen Dank für die Antwort. Einmal Drücken ergibt im Log drei oder 4 Einträge. So wie ich vermutet habe benötige ich eine Änderung im Script, dass die Rule nur auf das Drücken (ON) reagiert und nicht auf das Loslassen (OFF) des Tasters.
"received update" reagiert ja nun auf alle beide Schaltzustände. (Drücken und Loslassen ON/OFF)
2021-01-09 13:18:36.129 [INFO ] [se.smarthome.model.script.wallswitch] - L_Switch_Wall mit Wert 2 getriggert

==> /var/log/openhab2/events.log <==

2021-01-09 13:18:36.144 [ome.event.ItemCommandEvent] - Item 'L_Light' received command OFF

2021-01-09 13:18:36.183 [nt.ItemStatePredictedEvent] - L_Light predicted to become OFF

2021-01-09 13:18:36.213 [GroupItemStateChangedEvent] - gLight changed from ON to OFF through L_Light

2021-01-09 13:18:36.216 [vent.ItemStateChangedEvent] - L_Light changed from ON to OFF

==> /var/log/openhab2/openhab.log <==

2021-01-09 13:18:36.282 [INFO ] [se.smarthome.model.script.wallswitch] - L_Switch_Wall mit Wert 2 getriggert

==> /var/log/openhab2/events.log <==

2021-01-09 13:18:36.291 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON

2021-01-09 13:18:36.305 [nt.ItemStatePredictedEvent] - L_Light predicted to become ON

2021-01-09 13:18:36.339 [GroupItemStateChangedEvent] - gLight changed from OFF to ON through L_Light

2021-01-09 13:18:36.341 [vent.ItemStateChangedEvent] - L_Light changed from OFF to ON

==> /var/log/openhab2/openhab.log <==

2021-01-09 13:18:36.442 [INFO ] [se.smarthome.model.script.wallswitch] - L_Switch_Wall mit Wert 2 getriggert

==> /var/log/openhab2/events.log <==

2021-01-09 13:18:36.452 [ome.event.ItemCommandEvent] - Item 'L_Light' received command OFF

2021-01-09 13:18:36.472 [nt.ItemStatePredictedEvent] - L_Light predicted to become OFF

2021-01-09 13:18:36.498 [GroupItemStateChangedEvent] - gLight changed from ON to OFF through L_Light

2021-01-09 13:18:36.500 [vent.ItemStateChangedEvent] - L_Light changed from ON to OFF

==> /var/log/openhab2/openhab.log <==

2021-01-09 13:18:36.712 [INFO ] [se.smarthome.model.script.wallswitch] - L_Switch_Wall mit Wert 2 getriggert

==> /var/log/openhab2/events.log <==

2021-01-09 13:18:36.722 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON

2021-01-09 13:18:36.737 [nt.ItemStatePredictedEvent] - L_Light predicted to become ON

2021-01-09 13:18:36.764 [GroupItemStateChangedEvent] - gLight changed from OFF to ON through L_Light

2021-01-09 13:18:36.766 [vent.ItemStateChangedEvent] - L_Light changed from OFF to ON

Re: Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 9. Jan 2021 20:06
von udo1toni
LCN-User hat geschrieben: 9. Jan 2021 11:34 Statt

Code: Alles auswählen

L_Light.sendCommand(L_Light.state != ON) ON else OFF)
sollte es möglicherweise

Code: Alles auswählen

L_Light.sendCommand(if(L_Light.state != ON) ON else OFF)
heißen.
So ist es. Ich bin eigentlich der Überzeugung, das if( getippt zu haben... Egal... ich hab es oben ergänzt. :)

Re: Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 9. Jan 2021 20:26
von udo1toni
Warum ist denn da überhaupt kein Trigger von L_Switch_Wall zu sehen? Gewöhnlich sollte sowohl ein Change als auch ein Update als eigene Zeile in events.log auftauchen. Kann es sein, dass Du diesen Part des Logs unterschlagen hast? Spätestens wenn Du zwischendurch eine andere Taste drückst (womit dann L_Switch_Wall einen amderen Wert annähme) muss es eine entsprechende Zeile geben.
Wie erwähnt wäre es vermutlich sinnvoller, die 8 Rules in einer Rule zusammenzufassen. Wir sollten aber auch klären, warum die Rule mehrfach getriggert wird, das sollte eigentlich nicht passieren.
Um dieses Symptom zu beseitigen (Rule triggert mehrfach), hier mal ein Ansatz mit einer Totzeit (die Rule kümmert sich um alle Kanäle, da musst Du natürlich die passenden Befehle einsetzen):

Code: Alles auswählen

var Timer tSRC90 = null

rule "Wall Switch SRC90"
when
    Item L_Switch_Wall received update
then
    if(tSRC90 !== null)                                         // Rule läuft schon, Abbruch
        return;
    tSRC90 = createTimer(now.plusMillis(500), [ |               // Sperre der Rule
        tSRC90 = null                                           // Sperre aufheben
    ])
    if(!(L_Switch_Wall.state instanceof Number)) {              // keine Zahl im Status
        logWarn("src90","Rule mit ungültigem Code getriggert!")
        return;
    }
    logInfo("src90","Taste {} gedrückt",L_Switch_Wall.state)
    switch((L_Switch_Wall.state as Number).intValue) {
        case 1: {
            // Befehle für Taste 1
        }
        case 2: {
            L_Light.sendCommand(if(L_Light.state != ON) ON else OFF)
        }
        case 3: {
            // Befehle für Taste 3
        }
        case 4: {
            // Befehle für Taste 4
        }
        case 5: {
            // Befehle für Taste 5
        }
        case 6: {
            // Befehle für Taste 6
        }
        case 7: {
            // Befehle für Taste 7
        }
        case 8: {
            // Befehle für Taste 8
        }
        default: {
            // Da stimmt was nicht...
            logWarn("src90","Diese Taste gibt es nicht!")
        }
    }
end
Die Rule prüft unmittelbar, ob der Timer existiert. Ist das der Fall, bricht die Verarbeitung sofort ab.
Läuft die Rule weiter, wird sofort der Timer gestartet. Jede weitere Instanz der Rule bricht nun die Verarbeitung ab.
Nun wird der Wert vom Trigger Item auf Gültigkeit geprüft. Sollte das Item keine Zahl enthalten, gibt es sonst im nächsten Schritt eine Exception.
Ist alles in Ordnung, geht es weiter mit switch case. In Abhängigkeit des Zahlenwertes wird hier verzweigt. Somit gibt es für jede der 8 Tasten einen eigenen Zweig (das ist besser, als zigmal per if() auf einen konkreten Wert zu testen).
Sollte eine andere Zahl als 1 bis 8 gesendet werden, so kommt der default Bereich zum Zug.
Der Timer läuft nahc eine halben Sekunde ab und tut nichts anderes, als den Zeiger auf sich selbst zu löschen, so dass die Rule wieder ausgeführt wird.

Re: Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 9. Jan 2021 20:56
von LutzTH
Hallo Udo, vielen Dank für deine Antwort. Nein ich habe nichts vom log unterschlagen. Das zusammenfassen in einer Rule werde ich machen, vielen Dank. :-)
Jetzt kommts aber. Ich habe seit ein paar Tagen immer wieder z-wave ITEMs die plötzlich offline für eine kurze Zeit waren. Ein reboot hat nicht geholfen. Habe jetzt meinen Razberry einen shutdown gegeben und stromlos gemacht. Und jetzt ist der Fehler mit den offline Items weg und auch das triggern ist jetzt wieder ok. Komisch.
Was ich aber trotzdem nicht begreife. Mit dem Script "Item L_Switch_Wall received update 2" ist doch eigentlich auch zu erwarten das zwei commands ausgeführt werden. Wäre nicht ein Script angebracht, was nur auf den push (ON) Befehl reagieren.
PS: An eine Verzögerung habe ich auch schon gedacht.
2021-01-09 20:50:26.833 [INFO ] [se.smarthome.model.script.wallswitch] - L_Switch_Wall mit Wert 2 getriggert

==> /var/log/openhab2/events.log <==

2021-01-09 20:50:26.900 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON

2021-01-09 20:50:27.002 [nt.ItemStatePredictedEvent] - L_Light predicted to become ON

2021-01-09 20:50:27.018 [vent.ItemStateChangedEvent] - L_Light changed from OFF to ON

Re: Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 9. Jan 2021 23:15
von udo1toni
LutzTH hat geschrieben: 9. Jan 2021 20:56 Hallo Udo, vielen Dank für deine Antwort. Nein ich habe nichts vom log unterschlagen.
Das kann nicht sein... Ein Item, welches ein Update erhält, wird auch in der events.log geloggt. Spätestens, wenn Du zwischendrin eine andere Taste drückst, gibt es ein changed Event, welches absolut sicher geloggt wird, es sei denn, Du hast das Logging verändert.
Jetzt kommts aber. Ich habe seit ein paar Tagen immer wieder z-wave ITEMs die plötzlich offline für eine kurze Zeit waren. Ein reboot hat nicht geholfen. Habe jetzt meinen Razberry einen shutdown gegeben und stromlos gemacht. Und jetzt ist der Fehler mit den offline Items weg und auch das triggern ist jetzt wieder ok. Komisch.
Nun ja, es besteht ja schon ein erheblicher Unterschied zwischen einem reboot und einem shutdown mit power off. Bei ersterem machen angeschlossene Devices lediglich einen warm boot, das kann sogar Teile der Hardware des Raspberry betreffen.
Was ich aber trotzdem nicht begreife. Mit dem Script "Item L_Switch_Wall received update 2" ist doch eigentlich auch zu erwarten das zwei commands ausgeführt werden. Wäre nicht ein Script angebracht, was nur auf den push (ON) Befehl reagieren.
Wie kommst Du darauf? Du hast ein Item, welches auf 2 upgedatet wird. da ist weder ein ON noch ein OFF im Spiel. Sollte beim Loslassen ein anderer Wert gesendet werden (das wäre ja nett, dann könnte man einfach zwischen langem und kurzem Tastendruck unterscheiden) so wäre das ja zumindest nicht der Wert 2, womit dann die vorliegende Rule nicht triggern würde. Für die von mir vorgeschlagene Rule gilt das natürlich nicht, da sie ja allgemein auf received update triggert. Umso wichtiger wäre es, zu erfahren, was denn tatsächlich für ein Trigger in openHAB ankommt.

Re: Fehler Schalten mit 8 fach Switch zrc-90eu

Verfasst: 10. Jan 2021 12:50
von LutzTH
Ich habe wirklich alles hier gepostet was ich über https einsehen konnten
ail -f /var/log/openhab2/openhab.log /var/log/openhab2/events.log

folgendes kann ich sehen wenn ich über smb das openhap log abrufe, wenn ich die Taste einmal kurz drücke.
2021-01-10 12:25:09.802 [INFO ] [se.smarthome.model.script.wallswitch] - L_Switch_Wall mit Wert 2 getriggert
im event.log kann ich folgendes einsehen
2021-01-10 12:25:09.830 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON
2021-01-10 12:25:09.843 [nt.ItemStatePredictedEvent] - L_Light predicted to become ON
2021-01-10 12:25:09.866 [GroupItemStateChangedEvent] - gLight changed from OFF to ON through L_Light
2021-01-10 12:25:09.869 [vent.ItemStateChangedEvent] - L_Light changed from OFF to ON
bei http sehe ich
2021-01-10 12:25:09.802 [INFO ] [se.smarthome.model.script.wallswitch] - L_Switch_Wall mit Wert 2 getriggert

==> /var/log/openhab2/events.log <==

2021-01-10 12:25:09.830 [ome.event.ItemCommandEvent] - Item 'L_Light' received command ON

2021-01-10 12:25:09.843 [nt.ItemStatePredictedEvent] - L_Light predicted to become ON

2021-01-10 12:25:09.866 [GroupItemStateChangedEvent] - gLight changed from OFF to ON through L_Light

2021-01-10 12:25:09.869 [vent.ItemStateChangedEvent] - L_Light changed from OFF to ON
Beim Drücken und halten und nach drei Sekunden loslassen kann ich über https folgendes einsehen.

Der Schaltzustand der Lampe ändert sich nicht.
2021-01-10 12:31:24.491 [INFO ] [se.smarthome.model.script.wallswitch] - L_Switch_Wall mit Wert 2 getriggert

==> /var/log/openhab2/events.log <==

2021-01-10 12:31:24.536 [ome.event.ItemCommandEvent] - Item 'L_Light' received command OFF

2021-01-10 12:31:24.542 [nt.ItemStatePredictedEvent] - L_Light predicted to become OFF

2021-01-10 12:31:24.566 [vent.ItemStateChangedEvent] - L_Light changed from ON to OFF

2021-01-10 12:31:24.569 [GroupItemStateChangedEvent] - gLight changed from ON to OFF through L_Light

2021-01-10 12:31:25.823 [vent.ItemStateChangedEvent] - P_Light changed from 11.9 to 0

2021-01-10 12:31:26.525 [vent.ItemStateChangedEvent] - E_Fan changed from 0.46 to 0.47

2021-01-10 12:31:26.536 [GroupItemStateChangedEvent] - gEnergy changed from 21059.011 to 21059.012 through E_Fan

2021-01-10 12:31:26.541 [vent.ItemStateChangedEvent] - E_Light changed from 0.46 to 0.47

2021-01-10 12:31:26.546 [GroupItemStateChangedEvent] - gEnergy changed from 21059.012 to 21059.013 through E_Light

2021-01-10 12:31:34.393 [vent.ItemStateChangedEvent] - L_Switch_Wall changed from 2.0 to 2.2

2021-01-10 12:31:38.076 [vent.ItemStateChangedEvent] - L_Switch_Wall changed from 2.2 to 2.1
Es ist ersichtlich wenn man die Taste länger drückt der Wert 2.0 to 2.2 zurückgeben wird und beim loslassen 2.2 to 2.1


Deine Begründung mit dem "update" ist für mich jetzt nachvollziehbar.

Ich werde jetzt die Rules zusammenfassen nach deiner Vorstellung.

Vielen Dank für alles. :-)
Das Nächste was jetzt ansteht ist ein update auf OH 3.0. Denke aber es wird bestimmt besser sein, 3.0 neu zu installieren und meine Einstellungen zu importieren.
Da werde ich aber im Vorfeld noch einlesen müssen.