NEWS
Status anzeigen lassen und Steuerung mit demselben Widget
-
Folgendes beschäftigt mich seit ein paar Wochen. Anbei eine Beispielkonstellation, um es einfach zu halten (hier mit Nuki-Türschloss):
Mit dem Widget "Select ValueList" steuert man den Datenpunkt "Türschloss" mit den Werten "Auf" / "Zu".
Anhand dem ausgewählten Wert wird mit Blockly dann entweder der Datenpunkt "UNLOCK" oder "LOCK" mit true angesprochen, damit z.B. das Türschloss geöffnet/verriegelt wird.
Nun möchte man aber auch sehen, falls das Türschloss aus der Nuki-App oder am Schloss selber geöffnet/geschlossen wurde.
Nun stelle ich mir folgende Frage:
Wenn z.B. das Schloss mit Nuki-App geöffnet wird, dann aktualisiert sich der Datenpunkt "Türschloss" mit "Auf". Dies wiederum steuert aber den Datenpunkt "UNLOCK".
Wie kann man diese "Verkettung" umgehen?Ich habe es mit einer Variable gelöst, welche sich für 2 Sekunden auf "true" ändert, wenn eine Änderung ausserhalb ioBroker vorgenommen wird. Gibt es noch andere Lösungen?
-
@kusi
Es gibt 2 Möglichkeiten:Zum einen kannst du das “Auslösung durch” Feld nutzen.
Wenn die vis steuert sollte sie den datenpunkt mit “steuere” ansprechen.
Wenn das Schloss den datenpunt aktualisiert sollte es den du mit “aktualisiere” ansprechen. Wenn du dementsprechend triggers sollte es zu funktionieren.Damit kannst du unterscheiden ob die Änderung von der Vis oder dem Schloss kommt.
Die 2. Möglichkeit ist den Ursprung der Änderung abzufragen - diesen bekommst du mit dem gleichen Baustein wie das benutzte “wert”.
Wenn das Skript den datenpunkt ändert (vom Schloss getrieben) beinhaltet der Ursprung mit “.javascript.”. Wenn die vis das tut dann beinhaltet er “.vis.”
A.
-
@Asgothian vielen Dank für deine Unterstützung.
Die Logik mit "steuere" und "aktualisiere" scheint mir logisch zu klingen.
Heisst also, wenn z.B. Nuki selber den Datenpunkt "Türschloss" aktualisiert, dass untenstehendes Blockly nicht triggert?Wo findet man das "Auslösung durch" Feld? Weder in Blockly, noch im Widget finde ich diese Einstellung.
Die 2. Möglichkeit hört sich auch spannend an.
-
Schau mal genau auf den Falls Objekt... Block. Da findest Du:
Wichtig ist das du in deinem Skript
nicht den "steuere" Block zum aktualisieren nutzt (wie jetzt) sondern den "aktualisiere" Block nutzt.
-
@asgothian oben genanntes war ein Beispiel und habe ich diese Nacht zusammenstellt. Bitte obenstehende Konstellation vergessen!
Ich zeige dir nun mein korrektes Blockly, welches aber ein wenig umfassender ist:Mit folgendem Blockly wird der Status vom Nuki beobachtet. Hier geht es jetzt vor allem um den Block "aktualisiere Türöffnung mit x" (x = 0, 1 oder 2). Wird der Status geändert, so soll sich der Wert im "Select ValueList"-Widget ändern.
Mit folgendem Blockly werden dann die Funktionen geändert, wenn das "Select ValueList"-Widget über die vis geändert wird.
Probehalber habe ich ein debug output eingefügt (vis-Steuerung).
Dies wird aber IMMER angezeigt, auch wenn "Türöffnung" über das obere Blockly aktualisiert wird.Das Blockly funktioniert ansonsten einwandfrei, da ich die Variable "Änderung über Nuki" benutze. Ohne diese Variable habe ich aber eben die Verkettung, womit es Probleme gab.
-
@asgothian sagte in Status anzeigen lassen und Steuerung mit demselben Widget:
Schau mal genau auf den Falls Objekt... Block. Da findest Du:
-
Bestätigte Änderung = Ergebnis von "Aktualisiere"
Unbestätigte Änderung = Ergebnis von "Steuere" -
@asgothian sagte in Status anzeigen lassen und Steuerung mit demselben Widget:
Bestätigte Änderung = Ergebnis von "Aktualisiere"
Unbestätigte Änderung = Ergebnis von "Steuere"Wollte ich gerade fragen, weil mit "unbestätigte Änderung" funktioniert es.
Meine Logik war umgekehrt.
So brauche ich die Variable nicht mehr.