hier hatte ich ja so ein bissel gefrustet berichtet Alexa via NodeRed an den KNX zu bringen.
KNX binde ich über den KNX-Ultimate Node an, der hat ja hier im Forum als auch im KNX-UF einen guten Support.
Den Hinweis von Robert schaue ich mir auch nochmal an.
Nach ein wenig suchen und probieren habe ich dann mal im NR Repository nach einem der aktuellsten (zuletzt aktualisierten Alexa-Nodes gesucht).
Bin dann auf den Node node-red-contrib-virtual-smart-home gestoßen.
der Ist ja wirklich sehr leicht bei Alexa als Skill zu registrieren. Und im NR ergibt das ein einfaches Node-Element.
Auch beim KNX-Ultimate node gibt es in den Anleitungen einen verweis auf einen Alexa node. Aber da scheitere ich dann bei der Aktivierung des Alexa Accounts in dem Node. Der Node den Robert gefunden hat scheint auch eine recht einfache Verbindung zu ermöglichen.
Der von mir verwende war aber wirklich in zwei Klicks und einer Code Eingabe aktiviert.
Das angenehme ist, wenn man ein neues Alexa Element in den Flow einhängt und in den Eigenschaften einen Namen gibt, meldet sich nach ein paar Sekunden nach dem deploy direkt der echo hier im Zimmer und berichtet das ein neues Gerät verfügbar ist.
Um das zu erkennen, habe ich da mal so einen debug-node aus der Standardpalette eingefügt.
Nach gut 2h googeln (wie man was in NR convertieren kann, Grundlagen der Javascript Syntax) habe ich mir dann noch einen Converter aus dem Standard-node "function" gebaut, der mir den JSON vom Alexa node auswertet und an zwei der KNX-nodes verteilt. Dabei wird in einem keinen Codeschnipsel dann auch passend konvertiert (true false bei eingehendem Schaltbefehl und dem Dimmwert bei absoluten Dimmbefehl).
Das schaut dann da gerade so aus.
Code: Alles auswählen
var dimmlevel = {payload: msg.payload.brightness}
if(msg.payload.directive === "TurnOn" && msg.payload.powerState === "ON")
{msg.payload = true; return [msg,null]}
else if(msg.payload.directive === "TurnOff" && msg.payload.powerState === "OFF")
{msg.payload = false; return [msg,null]}
else if(msg.payload.directive === "SetBrightness")
{return [null,dimmlevel]}
else
{return null,null}
So für heute reicht mir das soweit.
PS:
Eine Frage an die Vielnutzer von NR unter euch.
Macht Ihr für jedes solches Element einen Flow (als Reiter in NR) oder zeichnet Ihr mehrere solcher Lampensteuerungen in einen "Flow"?