NEWS
Taster an Shelly Plus 1
-
Hallo,
vorab, ich bin Neuling, hab mich zwar schon etwas eingelesen, hab Adapter konfiguriert (mit S7 verbunden) und etwas mit der Visu gespielt.
Jetzt würde ich gerne einen Shelly Plus 1 einbinden, eine Shelly Instanz (Version 10.1.0) ist angelegt und ich kann auch den Zustand des geschaltenen Relais sehen.
Den Schalteingang des Shellys habe ich auf Taster gestellt. Ich würde jetzt gerne über ein Script mitbekommen wenn der Taster gedrückt wird (steigende Flanke). Dementsprechend würde ich gerne auch andere Lichter (über die S7) ein-/ausschalten.
Bis jetzt weiß ich aber nicht wo dieser Flankenwert steht, bzw. wie ich dieses Event mitbekomme.
Kann mir jemand einen Tip geben?
Danke,
Bengab -
schau dir mal den DP an, sollte der sein den du suchst.
shelly.0.shellyplus1#441793xxxxxxx#1.Input0.Status
on({ id: 'shelly.0.shellyplus1#441793xxxxxxx#1.Input0.Status', change: 'gt' }, async function (obj: any) { try { if (obj.state.val) { setState('alias.0.Licht.Licht_Terasse.SET', true); //Datenpunkt auf true schalten } else { setState('alias.0.Licht.Licht_Terasse.SET', false); //Datenpunkt auf alse schalten } } catch (error) { log(`action trigger switch ${error}`, `error`); } });
hier ein Link zum on-Befehl https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state
-
@tt-tom
herzlichen Dank für die schnelle Antwort - werde ich ausprobieren -
@tt-tom
noch eine kleine Nachfrage, im Script wird ja der Wert true oder false gecheckt. Wie mache ich das mit einem Flankenwechsel, also nur wenn von false auf true gewechselt wird? -
dazu der Link. über
change
kannst du verschiedene Varianten abfragen bzw. reagieren.gt -steht hier für größer als der letzte Wert. Da True größer ist als false reagiert er nur von false nach true.
-
@tt-tom
Ich hab das Script entsprechend übernommen. Zum Test hab ich erstmal mit Merkern aus meiner S7 gearbeitet. Das Script erkennt die Zustandsänderung des Merkers und wird abgearbeitet.
Wenn ich aber die Status Variable des Shelly nutze passiert nichts. Es scheint so als ob diese Status Variable nicht aktualisiert wird. Muss ich noch was am Shelly (oder Iobroker einstellen? -
@bengab dann schau dir mal den Datenpunkt an. Ob der sich ändert/aktualisiert wenn du den Taster betätigst.
Kannst auch in das Logfile schauen um die Änderung zu sehen. Unter Umständen die Instanz auf Debug stellen.
-
@wendy2702
das hab ich schon getan, da ändert sich eben leider nichts. Beim Relais (Relay0) kommt aber die Änderung an. -
@bengab dann zeig doch mal die Adapter und Shelly Konfiguration oder Werte den Relais Datenpunkt aus.
-
Hier ist der Status markiert. Dieser wird nicht aktualisiert.
Es muss irgendwie am Shelly liegen. Als Probe habe ich den Workaround über die Vis gemacht und dieses Flag mit Hilfe eines Buttons mal gesetzt. Dann hat meine Script die Änderung auch erhalten und ist abgelaufen.
(dazu hab ich mir die Werte in der history gespeichert und in einem Flotdiagram mal angesehen) -
@bengab
Der markierte ist auch der falsche, eins tiefer ist der den ich geschrieben hatte.
Ansonsten passen sie.wie sehen den die Einstellungen im Shelly aus. diese hier:
bei mir ist das ein Schalter, nicht wundern.
-
@tt-tom
Sorry, ist natürlich die Zeile unter der Markierung. Dieser Status wird aber auch nicht verändert. Das ist ja das Komische.Meine Definition sieht momentan so aus (hab den Input vom Relais getrennt). Aber auch wenn ich die Definition auf Taster oder Schalter stelle, bleibt "Status" still.
-
@bengab
Welcher INPUT TYP Ist ausgewählt? Switch oder Button?
Siehe Shelly Doku:STATE wird nur beim Typ SWITCH verwendet / gesetzt.
EDIT:
Seh schon - steht auf BUTTON. Dann ist State nicht benutzt. Button Aktionen solltest du unter EVENT finden (z.B. single_push, ...) -
@mcm1957
Ah, alles klar dann muss auf Event getigert werden. Danke für die Info's. Gibt bestimmt mehrere Events davon.on({ id: 'shelly.0.shellyplus1#441793xxxxxxx#1.Input0.Event', change: 'ne' }, async function (obj: any) { try { if (obj.state.val == 'single_push') { log(`EVENT = single_push`, `info`); //setState('alias.0.Licht.Licht_Terasse.SET', true); //Datenpunkt auf true schalten } else { log(`kein single_push, sondern: ${obj.state.val}`, `info`); // setState('alias.0.Licht.Licht_Terasse.SET', false); //Datenpunkt auf alse schalten } } catch (error) { log(`action trigger switch ${error}`, `error`); } });