Hue-Lampe anhand aktuellem State ein/ausschalten [gelöst]

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
ai12
Beiträge: 3
Registriert: 26.05.2021, 08:20
System: CCU
Hat sich bedankt: 2 Mal

Hue-Lampe anhand aktuellem State ein/ausschalten [gelöst]

Beitrag von ai12 » 26.05.2021, 08:26

Guten Tag zusammen,

ich bin noch recht neu mit Redmatic unterwegs, deswegen ist es für euch wahrscheinlich einfach - ich steh aber wie der Ochse vor dem Berg.

Ich möchte gerne folgende Function-Node einbauen:

Wenn: Taster:2 = true
Und: Lampe1.on = true
Und Lampe2.on = true

Leider finde ich nicht so richtig den Anfang. Könnt ihr mir vielleicht einen Tipp geben?

Beste Grüße,
Alexander

Anmerkung: Es geht um Lampen, die per Huemagic angesprochen werden, weswegen der CCU Switch nicht klappt. Und ich hätte es gerne in einer Node, wenn es mal um mehrere Lampen geht :-)
Zuletzt geändert von ai12 am 26.05.2021, 21:38, insgesamt 2-mal geändert.

Garbsen
Beiträge: 295
Registriert: 12.07.2017, 21:08
Hat sich bedankt: 1 Mal
Danksagung erhalten: 14 Mal

Re: Frage zu Funktion mit If

Beitrag von Garbsen » 26.05.2021, 13:11

Schau mal hier:

https://nodered.org/docs/user-guide/writing-functions

Da habe ich gelernt, wie Funktionen mit if else bei Redmatic funktionieren. Eigentlich ganz einfach, wenn man die Syntax kennt
512 Kanäle in 101 Geräten und 145 CUxD-Kanäle in 19 CUxD-Geräten:
--------------------------------------------
http://www.eq-3.de/service/downloads.html
Tips und Tricks für Anfänger: viewtopic.php?t=22801
Programmlogik: viewtopic.php?f=31&t=4251
Webui-Handbuch: https://www.eq-3.de/Downloads/eq3/downl ... h_eQ-3.pdf
Script und Linksammlung: viewtopic.php?f=26&t=27907

Hypnos
Beiträge: 460
Registriert: 06.01.2018, 12:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 57 Mal
Danksagung erhalten: 39 Mal

Re: Frage zu Funktion mit If

Beitrag von Hypnos » 26.05.2021, 15:44

In RedMatic macht man das am Besten mit einem Flow und nicht mit einer Function node:

Trigger: Taster:2 (Beispielsweise über die Value node oder rpc event) --> Switch Node Lampe1.on = true --> Switch Node Lampe2.on = true --> Ergebnis
2021-05-26_154638 Screenshot 001.png
2021-05-26_154638 Screenshot 001.png (6.74 KiB) 1062 mal betrachtet

Für den Function node ist die Syntax einfaches JavaScript. Da die Nachrichten in unterschiedlicher Reihenfolge eintreffen muss man da die einzelnen Stati (Lampe1, lampe2, ...) ablegen. Das kann man über die Contexte (context, flow, global) machen. Für die CCU Geräte/Kanäle kann man einstellen, das automatisch alle in einem Context abgelegt werden.

Beispielsweise kann das wie folgt aussehen:

Code: Alles auswählen

let stateK1 = global.get('ccu-localhost.values["HmIP-RF.001E1AF0815E5A:1.STATE"].value', 'file'); // K1
let stateK2 = global.get('ccu-localhost.values["HmIP-RF.001E1AF0815E5A:2.STATE"].value', 'file'); // K2

if (stateK1 === true && stateK2 === true) {
// mache was
}            
Aber das muss auf den konkreten Fall natürlich angepasst werden.

Gruß

ai12
Beiträge: 3
Registriert: 26.05.2021, 08:20
System: CCU
Hat sich bedankt: 2 Mal

Re: Hue-Lampe anhand aktuellem State ein/ausschalten

Beitrag von ai12 » 26.05.2021, 18:36

Danke für die Antworten! Ich habe auch den Betreff nochmal geändert, damit er aussagekräftiger ist und vielleicht jemand anderem auch hilft.

Eine Abfrage mittels CCU-Switch oder RPC Node hat nicht funktioniert, da ich die Lampen über Huemagic eingebunden habe.
Mit viel probieren, Zeit und Frust habe ich nun eine Lösung gefunden die ich hier kurz vorstellen wollte. Vielleicht fällt jemandem auch noch ein Verbesserungsvorschlag ein:


Bild

Der Payload wird auf "lights" gesetzt, und in der Funktion fetch steht nur:

Code: Alles auswählen

return { payload: { fetch: msg.payload}};
um alle Lampen und deren Status von der Hue-Bridge als Array abzurufen.

Der Zauber passiert dann in der Funktion "Status abfragen"

Code: Alles auswählen

var hinten = msg.lights[0].state.attributes.on;
var mitte = msg.lights[1].state.attributes.on;
var vorne = msg.lights[2].state.attributes.on;
if ((hinten == true ) && (mitte == true) && (vorne == true)) {
msg.payload = false;
} else {
msg.payload = true;
}
return msg;
Wenn alle Lampen an sind (true), dann wird ein false ausgegeben um diese auszuschalten.
Ist mindestens eine Lampe bereits aus wird ein true gesendet um alle einzuschalten.

Wie gesagt, ist vielleicht von hinten durch die Brust ins Auge, klappt aber. Ich arbeite jetzt erst seit wenigen Tagen mit Nore-Red bzw. Redmatic und würde mich über Verbesserungsvorschläge freuen!

Beste Grüße aus NRW,
Alexander
Dateianhänge
1.PNG

ptweety
Beiträge: 522
Registriert: 07.01.2017, 16:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 66 Mal

Re: Hue-Lampe anhand aktuellem State ein/ausschalten

Beitrag von ptweety » 26.05.2021, 20:48

Hm, wirklich recht kompliziert. Warum packst du dir nicht alle Lampen im Flur in eine Gruppe und steuerst darüber?

Wenn du den node Hue Gruppe mit payload: "Status" ansteuerst, dann bekommst du sowas raus:

Code: Alles auswählen

"on":true,
"allOn":true,
"anyOn":true,
...

ai12
Beiträge: 3
Registriert: 26.05.2021, 08:20
System: CCU
Hat sich bedankt: 2 Mal

Re: Hue-Lampe anhand aktuellem State ein/ausschalten [gelöst]

Beitrag von ai12 » 26.05.2021, 21:38

Wow, das ist natürlich noch viel einfacher! Vielen Dank für den Hinweis. Werde ich mir auf jeden Fall anschauen und etwas mit tüfteln :-)

Antworten

Zurück zu „RedMatic“