NEWS
(gelöst)Abfragen Lichter an bzw. aus
-
Hi, ich würde gern nen Status bekommen ob noch ein Licht bzw. Gerät an ist.
Als Beispiel, ich habe 20 Lampen und möchte wissen ob noch eine oder mehrere an sind bzw. alle aus.
Wie löse ich das am einfachsten.
Was mir bis jetzt eingefallen ist, alle Lampen (20 ) als Trigger zu nutzen und dann durch 20 Get Nodes mit allen Lampen zu jagen und mit mit Switches abzufragen, das finde ich allerdings sehr umständlich.
Vielleicht kennt ja jemand ne einfachere Lösung. -
@frankyboy73 Im Prinzip brauchst Du zumindest die Lampen als Trigger um den aktuellen Zustand zu erfahren. Was bei mir zwar nicht ganz geht - aber mit * am Ende gehts, dass Du über die In-Nodes dann alle Zustände subscriben kannst.
Dann schreibe ich alles mit einer Join Node in einen Datenpunkt als JSON String. Den werte ich dann aus und ermittle ein Gesamtergebnis. -
@mickym Sorry, aber ich glaube das verstehe ich nicht.
Ich brauche für jede Lampe eine In Node, ist klar.
Muss ich jetzt bei den In Nodes am Ende des Topics "Stern" dahinter setzen, oder wie soll ich das deuten oder".Stern" oder noch ne zusätzliche Node?
Dann mein zweites Problem, ich weiß überhaupt nicht wie ich mit der Join Node umgehen muss. Ich habe da schon mit mehreren InjektNodes Nachrichten draufgefeuert und verschiedene Einstellungen probiert, aber aus dem Ding werde ich einfach nicht schlau. Ich bekomme es auch nicht hin das mehrere Nachrichten kombiniert werden. Ich wüsste auch nicht wie, ich muss ja nach jeder Statusänderung einer Lampe das Gesamtpaket da raus kriegen, bei meinen Tests kriege ich aber bis jetzt immer nur einzelne Zustände ausgegeben. Gibts da irgendwo ne gute Erklärung oder einen Beispielflow wie man diese Node anwendet. Aus dem Hilfe Text werde ich leider auch nicht richtig schlau.
Edit: Wieso werden in meinem Post die Sterne in Anführungszeichen nicht angezeigt?
Ich habe da als ersatz jetzt mal "Stern" reingeschrieben -
@mickym Oh, es geht voran.
Mit der Einstellung manuell ein Schlüssel Wert Objekt erstellen nach Anzahl von Nachrichten und jede folgende Nachricht, kriege ich jetzt doch kombinierte Nachrichten raus.
Danke, dann probiere ich mal weiter.
Edit:
Habe es hinbekommen, hinter den Join habe ich jetzt nen Switch mit 2 Ausgängen, Abfrage ob im JSon Ausdruck (payload.*) true enthalten ist, dann ist noch mindestens ein Licht an, im Switch Andernfalls, dann ist alles aus. Scheint nach meinen ersten Test zu klappen.
Vielen Dank noch mal an @mickym für den Tipp.
Edit2:
Wow, klappt für meine Fenster auch so, vielen Dank, das macht alles sehr viel einfacher und übersichtlicher. -
@frankyboy73 Ja ich schreib dann das ganze als JSON in einen DP. Oder falls man das Objekt direkt auswerten will, habe ich mir 2 Function Nodes
- als UND und ODER in meine Bibliothek genommen. Ich wandle alles in true oder false um. Damit kann man Fenster, Alarmzustände jeder Art etc. über wachen.
Die Funktion in der Oder- Node sieht dann so aus:
var x; var obj = msg.payload; var bIsBoolean=false; for (x in obj) { bIsBoolean = bIsBoolean || obj[x]; } msg.payload=bIsBoolean; return msg;
in der UND Node so:
var x; var obj = msg.payload; var bIsBoolean=true; for (x in obj) { bIsBoolean = bIsBoolean && obj[x]; } msg.payload=bIsBoolean; return msg;
So sieht dann zum Beispiel Batterieüberprüfung meiner zigbees aus:
{"Präsenz Büro":true,"Präsenz Diele":true,"Präsenz Flur":true,"Präsenz Wohnzimmer":true,"Präsenz Küche":true,"Thermometer Küche":true,"Würfel Schlafzimmer":true,"Präsenz Wohnzimmer Essbereich":true,"Präsenz Bad":true,"Thermometer Bad":true,"Würfel Wohnzimmer":true,"Präsenz Schlafzimmer":true}
Da hängt dann so eine AND Node dahinter - wenn man das mit einer JSON wieder als Objekt wandelt und alles muss "true" sein. Also ist Alarm falsch und umgekehrt. Damit kann man alles super easy überwachen: Ob Licht an, ob Fenster auf, Batterie leer, Bewegung erkannt usw.
Ach und obwohl Du nun ja alles mit der JOIN Node rausbekommen hast, hier mal das Video von Steve: https://www.youtube.com/watch?v=LIEKDOzeEdI
Das ist zwar alles in Englisch - aber ich hab da auch viel gelernt . Diese Videos sind echt gut gemacht, wenn man wirklich die Fähigkeiten von Node Red nutzen will.
EDIT: Hier hatte ich das auch schon mal mit ein paar weiteren Links empfohlen, falls Du interessiert bist.
-
@mickym Hi, danke, das schaue ich mir auf jeden Fall an. Was ich bis jetzt geschafft habe ware eher durch rumprobieren entstanden. Was die Node wirklich kann was ich wohl noch nicht alles.
Bei meiner Lösung bin ich mit nem Switch ausgekommen.
Wenn in einen der Unterobjekte true vorhanden ist gehts auf den einen Ausgang wenn nicht dann auf den anderen Ausgang.
Heißt falls ein oder mehrere Objekte true sind, Ausgang Eins, falls keins true bzw. alle false Ausgang 2. Falls ich das umgekehrt brauche schaue ich im Switch ob false enthalten ist, falls nicht sind alle true. -
@frankyboy73 Ja diese JOIN Node ist wirklich ein essentieller Bestandteil, der am Anfang nicht so ganz klar ist, wofür man ihn brauchen kann. Die Methode hier zum Überwachen ist deshalb so praktisch, da sich die Objekte langsam aufbauen können.
Wenn Du hier bei den Nachrichtenteilen eine 1 nimmst und bei jeder weiteren Nachricht eine neue Nachricht erzeugen lässt, sortiert dieser Node diese nämlich automatisch ein. Gabs den Topic schon mal, wird der Wert in dem gesamten Objekt aktualisiert, anderenfalls eine neue Eigenschaft dem Objekt hinzugefügt.
Praktisch habe ich es auch nochmal hier angewandt:
https://forum.iobroker.net/topic/42585/function-node-erstellen/7?_=1614235928279
Hier ging es darum aus 3 Einzelwerten im iobroker wieder einen JSON String zu erstellen. Hier war es jedoch wichtig, dass erst alle 3 Eigenschaften gefüllt sind, bevor der JSON String rausgeht. Deshalb ist diese Version eleganter als über eine Flowvariable. Die JOIN-Node ist hier tatsächlich so intelligent programmiert worden, dass die Nachricht nicht rausgeschickt wird, wenn 3 mal das gleiche Topic ankommt, sondern wirklich erst wenn alle Eigenschaften vorliegen. Dann wird allerdings jedesmal eine Nachricht erzeugt, sobald ein Wert aktualisiert wird. Hier wird einem ganz schön viel Programmieraufwand abgenommen.
Ergänzung:
Zum Thema Überwachung. Nachdem man via Node Red ja leider nicht mehr die Systemadapter direkt überwachen kann - habe ich nun überall Aliases angelegt und kann somit auch bestimmen welche Eigenschaft ich im Adapter als OK nehme oder nicht (also ist NICHT OK bei gelb oder rot).Im Moment sieht das noch so aus:
aber nachdem zumindest am Ende Wildcards (mit * ) am Ende bei mir zumindest auch bei den In-Nodes funktionieren, werde ich das wohl auch vereinfachen.