INSTAR Deutschland GmbH

Node-RED und Alexa



Ein Node-RED-Node zur Steuerung von Geräten über Amazon Alexa. Verwenden Sie Sprachbefehle, um Ihre INSTAR IP-Kamera ohne Amazon Alexa Skill zu steuern - keine Cloud erforderlich. Wir werden das Modul node-red-contrib-alexa-local verwenden, um einen Endpunkt für Alexa zu erstellen. Es wurde entwickelt, um eine Philips Hue-Brücke und ein Gerät innerhalb des lokalen Netzwerks zu emulieren. Amazon Echo kann hierüber nur die Befehle on / off / dimming versenden. Jede andere Integration muss über die Alexa Skills-Route (Cloud-basiert) erfolgen.

Beachten Sie bitte:

Zu diesem Zeitpunkt werden nur die Geräte Alexa Echo und Alexa Echo Dot Gen 1 & 2 unterstützt. Die Einbindung eines Echo Gen 2, Echo Dot Gen 3 & Echo Plus ist z.Z. noch nicht möglich. Die Geräte Echo Show, Echo Spot und Sonos One können keine lokalen Geräte erkennen.

Für dieses Tutorial wurde ein Echo Dot der Generation 2 verwendet.

Node-RED

Wir haben Node-RED bereits unter unter Windows installiert und auf einem Raspberry Pi. Gehen Sie auf das Admin-Panel und öffnen Sie das Menü Manage Palette, um das Modul alexa-local zu installieren:


Node-RED and Alexa

Node-RED and Alexa

Sie sollten einen neuen Input Node mit dem Namen alexa local sehen. Ziehen Sie diesen in den Arbeitsbereich und doppelklicken Sie darauf. Geben Sie einen Funktionsnamen ein - z.B. Area One. Dies ist der Name, den Alexa zur Identifizierung des Geräts verwendet. Und den Namen, den Sie aussprechen müssen, um ihn in einem Befehl an Alexa zu verwenden - wählen Sie den Namen daher mit Bedacht aus.


Node-RED and Alexa

Node-RED and Alexa

Verbinden Sie einen Debug Node mit dem Ausgang des Alexa Endpunkts und Deploy den Fluss. Dann fragen Sie "Alexa, discover devices" - Alexa sollte antworten, dass es Area One entdeckt hat.

Sie können es mit den folgenden Befehlen testen (Wenn Sie in Alexa die Deutsche Sprachausgabe aktiviert haben sollte natürlich ein Deutscher Name für den Endpunkt und der Befehl entsprechend in Deutsch verwendet werden.):

  • "Alexa, turn off Area One"
  • "Alexa, switch on Area One"

Node-RED and Alexa

Sie sehen, dass die entsprechenden Payloads - on oder off - vom Alexa Local Node empfangen werden. Um prozentuale Werte senden zu können, müssen wir unserem Flow einen kleinen Funktionsknoten hinzufügen. Es muss mit dem Ausgang des Alexa Local Knotens verbunden sein und darauf wartet, dass mit dem Alexa-Befehl ein Brightness-Wert gesendet wird. Hier zeigt sich, dass wir eine Funktion nutzen, die von lokalen Lichtschaltern in Ihrem Netzwerk verwendet werden soll - die sich jedoch auch wunderbar verwenden läßt um eine IP Kamera zu kontrollieren.


Node-RED and Alexa

Die Funktion lässt den Payload unberührt, wenn der eingehende Befehl ein ON / OFF Befehl ist. Wenn jedoch ein Helligkeitswert gesendet wird, wird dies als Payload der Nachricht festgelegt:

var a = {payload :msg.bri };
var b = { payload:msg.on_off_command };
var c = { payload: msg.payload };
 

if ( msg.on_off_command === true){
 return c;
} else {
 return a ;
}

Sie können jetzt die folgenden Beispielbefehle verwenden:

  • "Alexa, set Red Area Sensitivity to 40%"
  • "Alexa, set Red Area Sensitivity sensitivity to 30"
  • "Alexa, increase Red Area Sensitivity"
  • "Alexa, decrease Red Area Sensitivity"

Node-RED and Alexa

Sie sehen die% -Werte, die im Debug-Knoten übertragen wurden.

Fügen Sie den MQTT-Eingang zu einem vorhandenen Flow hinzu

In der folgenden Sequenz verwenden wir die Eingabe von Alexa, um Alarm Areas auf unseren Kameras zu wechseln - wir haben bereits dieselbe Sequenz für die Zigbee-Integration verwendet (Der vollständige Flow können Sie in unserem Home Assistant Tutorial finden):


Node-RED and Alexa

Sie können den folgenden JSON-Code kopieren und in Node-RED importieren (Wie importiere ich Flows in Node-RED?):

[{"id":"2b897ea7.5d2e42","type":"alexa-local","z":"17b43655.05bd3a","devicename":"Red Test","inputtrigger":false,"x":760,"y":160,"wires":[["150d2a21.1cd336"]]},{"id":"150d2a21.1cd336","type":"function","z":"17b43655.05bd3a","name":"","func":"var a = {payload :msg.bri };\nvar b = { payload:msg.on_off_command };\nvar c = { payload: msg.payload };\n \n\nif ( msg.on_off_command === true){\n return c;\n} else {\n return a ;\n}","outputs":1,"noerr":0,"x":890,"y":160,"wires":[["69e3e027.1310a"]]},{"id":"c6ea8672.c28078","type":"link out","z":"17b43655.05bd3a","name":"","links":["57b22bf7.0e2874","5eb0d369.b3b15c","b5ce97db.b3f4f8","f335d7f4.4bbe18"],"x":1115,"y":160,"wires":[]},{"id":"69e3e027.1310a","type":"string","z":"17b43655.05bd3a","name":"","methods":[{"name":"replaceAll","params":[{"type":"str","value":"on"},{"type":"str","value":"{\"val\" : \"on\"}"}]},{"name":"replaceAll","params":[{"type":"str","value":"off"},{"type":"str","value":"{\"val\" : \"off\"}"}]}],"prop":"payload","propout":"payload","object":"msg","objectout":"msg","x":1033,"y":160,"wires":[["c6ea8672.c28078"]]}]

Alles was wir hinzufügen mussten, ist ein String Node (dieser Knotentyp muss manuell installiert werden - es wird node-red-contrib-string genannt), der nach der Nutzlast on oder off sucht und diese durch etwas ersetzt, das wir benötigen, um den Flow weiter unten auszulösen. In diesem Fall benötigen wir einen JSON-Ausdruck, der entweder auf einen Wert {"val" : "on"} oder {"val" : "off"} gesetzt wird:


Node-RED and Alexa

Dann fügen wir einen Link Node hinzu, um das ganze mit allen 4 Sequenzen für die für die 4 Alarmbereiche zu verbinden und klicken Deploy. Jetzt können wir alle Bereiche mit dem Befehl aktivieren: Alexa, activate Red Test. Und deaktivieren Sie wieder, indem wir Alexa, switch off Red Test sagen:


Node-RED and Alexa

Troubleshooting

Sollten Sie eine Firewall auf dem Rechner installiert haben, auf dem Node-RED läuft, müssen die folgenden Ports für die Alexa Dienste freigegeben werden:

  • Output TCP: *, 80, 8080, 443, 40317, 67, 68
  • Output UDP: *, 53, 123, 40317, 49317, 33434, 1900, 5000, 5353
  • Input TCP: 8080, 443, 40317
  • Input UDP: 53, 67, 68, 1900, 50000, 5353, 33434, 49317, 40317