NEWS
[Gelöst] Blockly Trigger Abhängigkeit
-
Hi Zusammen,
komme gerade nicht weiterVielleicht stehe ich auch komplett auf dem Schlauch.
Was ich machen möchte:
In der Visualisierung möchte ich einen Hauptschalter für die Lichter in einen Raum haben (true/false).
Wenn eine oder mehrere dieser Lampe eingeschaltet werden, springt der Schalter auf true (Signalisieren das eine oder mehrere Lampen brennen). Ich kann mit mit diesen Schalter auch alle Lampen gleichzeitig wieder ausschalten.
So weit so gut. Jetzt aber das Problem: Wenn ich jetzt implementiere das wenn der Hauptschalter von Hand auf true gestellt wird, das alle Lichter angehen funktioniert das noch... ABER wenn ich jetzt eine der Einzellampen einschalte wird ja der Wert des Hauptschalters aufgrund der oben genannten Prüfung auf true gesetzt und das triggert an das alle Lichter eingeschaltet werdenIn der Suche bin ich ständig auf den Hinweis mit "Entprellen" gestoßen. Aber das funktioniert nicht bzw. habe ich es auch nicht verstanden wie das mit der Variable funktionieren soll. Oder gibt es es hier tatsächlich einen eigenen Baustein denn ich nur nicht gefunden habe??
-
@draexler Ein Datenpunkt kann bestätigt (ACK=true) oder gesteuert (ACK=false) werden. ACK=false bedeutet, dass die Statusänderung eine Aktion ausführen soll, ACK=false ist quasi eine Rückmeldung.
Du solltest also beim Betätigen des Schalters ACK=false setzen (ist Standard, ggf. musst du hier nichts ändern). Beim Aktualisieren des "Hauptschalters" mit dem Status der Einzellampen muss ACK=true genutzt werden, damit dann nichts passiert.
-
@alcalzone: danke dir für die Schnelle Antwort.
Kannst du mir mit eine Screenshot zeigen wo ich das finde?
Bzw. noch als Ergänzung. Das Problem tritt auf wenn ich nach dem ich den Hauptschalter mit Funktion ergänzt habe bei TRUE alle Lampen einzuschalten. Schalte ich anschließend z.B. über HomeKit eine einzelne Lampe ein wird geprüft und das Datenobjekt des Hauptschalters springt auf TRUE. Aktiviert aber damit auch die Funktion das alle Lampen eingeschaltet werden.
-
@draexler Dafür böte sich auch der Szenen - Adapter (scenes) an. Eine Szene erstellen in der alle Lampen enthalten sind und im VIS dann den Trigger der Szene als zu schaltenden Datenpunkt. Dann kannst Du per VIS die Szene ein - und ausschalten und der Trigger-Datenpunkt wird auch nur true, wenn die Szene aktiv ist, also alle Lampen leuchten.
Gruß, Jürgen
-
@wildbill: danke dir für die Idee
Aber ich möchte das der schalter schon true ist wenn noch nicht alle Lampen des Raumes leuchten. -
@draexler Nachdem in meinen Augen, das Problem bei Dir eher ein logisches ist und keines Deiner Logikmaschine. Ich arbeite mit NodeRed - aber wie gesagt - umsetzen kannst Du das mit allen Maschinen.
Was ich bei Dir verstehe sind folgende Dinge:
- Sobald eine Lampe in einem Raum eingeschaltet wird, dann ist der Status Deines Hauptschalters an. (Bei mir auch).
- Wenn Du möchtest das beim Schalten des Hauptschalters alle Lichter angehen, dann kannst Du das nur mit einem selbst definiertem Datenpunkt machen oder Du arbeitest wie schon angesprochen mit den ACK Flags. VIS schickt immer unbestätigt den Status aus (ACK=False) - wenn Du also den Status aufgrund einer Zustandsänderung einschaltest - könnte man das ggf. hier unterscheiden.
- Wenn Du nun einzelne Lampen zusätzlich einschaltest würde das die anderen Lampen nicht einschalten, weil Du diesen Vorgang bestätigt schaltest, während VIS das unbestätigt macht. (also der Status des Hauptschalters wird nicht aktualisiert (ACK=true) und nicht gesteuert (wie bei VIS - ACK= false).
- Ein sogenanntes Entprellen würde Dir nicht helfen. Das prüft nur, ob der Hauptschalter bereits eingeschaltet ist oder nicht und blockt somit einen weiteren Einschaltvorgang - würde aber ggf. auch verhindern, dass Du über VIS weiterhin alles einschaltest.
Ich hoffe, ich habe mich verständlich ausgedrückt.
Im Prinzip musst Du bei dem Hauptschalter - ich sehe Du machst ja schon steuern bzw. aktualisieren, dass Du nur dann die anderen Lichtschalter einschaltest, wenn der Hauptschalter gesteuert und nicht aktualisiert wird - das unterscheidest Du in dem Du nicht Auslösung egal nimmst:
bestätigt werden die Änderungen des Hauptschalters durch die anderen Lampen.
unbestätigt wird die Änderung durch VIS.Also hast Du letztlich für aktives Schalten nur ein Trigger für Deinen Hauptschalter - nämlich die "unbestätigte Änderung" durch VIS. Alle Statusupdates durch die anderen Lampen haben mit Aktualisierung zu erfolgen (und sind deshalb "bestätigte Änderungen") und triggern deshalb nicht das Einschalten der anderen Lampen. Ich hoffe, ich habs verständlich ausgedrückt.
Also falls der untere Teil der Hauptschalter ist, der alle anderen Lampen einschaltet, stell den mal auf Auslösung - unbestätigte Änderung.
Der obere Teil aktualisiert ja (und steuert) nicht, deshalb sollte die Änderung dort ja bestätigt sein.
-