Node-RED und IFTTT

@Markus2806 : Hat es jetzt geklappt mit Node-RED oder ist Deine Nose red? :icon_wink:
Wie ist denn jetzt der Workflow? Ich möchte schliesslich auch was lernen.

Hallo. Leider bin ich bisher noch nicht dazu gekommen mir das ganze weiter anzusehen.
Möchte mir morgen aber wieder etwas Zeit dafür nehmen und dann werde ich natürlich berichten :icon_wink:

Hallo @Instar,

mit dem IFTTT Out Node kontaktiere ich ja den IFTTT-Webhook.
Beim ersten Beispiel z.B löse ich eine Aktion durch das Klicken auf das Inject Node aus, wo dann das IFTTT Webhook
konkaktiert wird (IF THIS) und dann ein Mail verschickt wird (THEN THAT).
Nun bräuchte ich das aber umgekehrt, wenn ich eine Location verlasse (IF THIS),
dann soll ein Web Request ausgelöst werden (THEN THAT), der die jeweilige JSON-Variable (on/off) an das Node-Red übergibt.
Daher bräuchte ich einen IFTTT In Node, der Daten vom IFTTT Webhook entgegen nimmt, oder? Nur wo finde ich diesen Eingangsknoten?

Wenn ich die Seite https://meine.ddns.addresse:1881/mein/webhook über extern aufrufe erhalte ich einen SSL_PROTOCOL_ERROR.
Ohne https - also nur mit http, komme ich die Meldung „Anmelden - für http://meine.ddns.addresse:1881 sind ein Nutzername und ein Passwort erforderlich.“
Die Verbindung zu dieser Webseite ist nicht sicher. Leider funktioniert hier nicht der Benutzer (Admin) mit dem ich mich auch anmelde wenn ich
https://meine.ddns.addresse:1881 aufrufe.
Wo genau müsste ich diese Benutzer Authentifizierung im IFTTT hinterlegen?

@Markus2806 Sollte es überhaupt nicht weitergehen auch gerne den Node-Red Flow exportieren und hier reinstellen (Die Exportfunktion spart den API Key aus - wenn man noch die DDNS Adresse/Login abändert beinhaltet der JSON Export keine persönlichen Daten). Dann können wir da gerne einmal drüber schauen.

NACHTRAG: Ich hatte die letzte Antwort zu spät gesehen. Man braucht auf jeden Fall SSL für den Node-RED Webhook. Wenn die Kamera sich im gleichen Netzwerk befindet wie der Node-RED Server, kann man aber die INSTAR DDNS (und damit das - vorrausgesetzt, dass es sich um eine Full HD Kamera mit HTTPS Support handelt - INSTAR Zertifikat) verwenden, um per HTTPS auf die Node-RED Oberfläche zu kommen.

Wenn man keine Full HD Kamera hat, müsste man sich selbst ein Zertifikat austellen - wir haben z.B. hier beschrieben, wie man unter LINUX an sowas rankommt:

https://wiki.instar.de/Software/Linu…inzuf%C3%BCgen

Den Benutzernamen und Kennwort für Node-RED kann man in der Konfigurationsdatei im Node-RED Installationsverzeichnis hinterlegen:

https://wiki.instar.de/Software/Linu…-konfiguration

Wenn man dann über IFTTT einen Webhook in Node-RED kontaktieren möchte, muß man das Login entsprechend mit angeben. Ich meine man könnte es dort als basicAuth der URL voranstellen:

https://meinname:meinkennwort@instar-ddns.de:1883/mein/webhook

@estimator Wir warten geraden noch, dass das Update freigegeben wird. Aber mit der nächsten Firmware Version wird die Einbindung bei IFTTT - für Full HD Kameramodelle - auch ohne Node-RED möglich sein. Das macht es einfacher es mal kurz auszuprobieren. Wobei Node-RED in der Heimautomatisierung ein extrem mächtiges Tool das sich natürlich lohnt zu lernen. Wenn man es einmal beherrscht gibt es wenig was man damit nicht umsetzen kann.

https://wiki.instar.de/Erweitert/IFT…R_FHD_Kameras/

https://wiki.instar.de/Erweitert/IFTTT_als_Alarmserver/

(Der SSL Support und die Möglichkeit POST Anfragen zu senden fehlen z.Z. - 11.11.2019 - noch in der Firmware. Daher steht die Alarmserver Funktion erst mit dem nächsten Update für die IFTTT Einbindung bereit.)

INSTAR Support

Hallo, hier ist der Flow.
Es fehlt halt der Übergang von IFTTT zum Node-Red. Ersetz ich den IFTTT Trigger mit einem Inject Node funktioniert der Rest ohne Probleme.

[{"id":"25641f1f.b629","type":"tab","label":"IN-8015","disabled":false,"info":""},{"id":"7612d9fe.cb1dc8","type":"http in","z":"25641f1f.b629","name":"IFTTT Trigger","url":"/alarm/md/areas","method":"post","upload":false,"swaggerDoc":"","x":250,"y":300,"wires":[["f07530.ffbc0ad","8efc297d.66e588"]]},{"id":"f07530.ffbc0ad","type":"http response","z":"25641f1f.b629","name":"","statusCode":"","headers":{},"x":494,"y":242,"wires":[]},{"id":"14d778c5.570777","type":"function","z":"25641f1f.b629","name":"Enable Area 1","func":"var ip = \"x.x.x.x\";
var user = \"x\";
var password = \"x\";

// Update the status with current timestamp
var now = new Date();
var yyyy = now.getFullYear();
var mm = now.getMonth() < 9 ? \"0\" + (now.getMonth() + 1) : (now.getMonth() + 1); // getMonth() is zero-based
var dd  = now.getDate() < 10 ? \"0\" + now.getDate() : now.getDate();
var hh = now.getHours() < 10 ? \"0\" + now.getHours() : now.getHours();
var mmm  = now.getMinutes() < 10 ? \"0\" + now.getMinutes() : now.getMinutes();
var ss  = now.getSeconds() < 10 ? \"0\" + now.getSeconds() : now.getSeconds();
var currenttime= hh + \":\" + mmm + \":\" + ss;
var currentdate= dd + \".\" + mm + \".\" + yyyy;

node.status({fill:\"blue\",shape:\"ring\",text:\"Last update: \" + currentdate + \" - \" + currenttime});

msg.topic = \"area 1\";
msg.payload = ip+\"/param.cgi?cmd=setmdattr&-name=1&-enable=1&-usr=\"+user+\"&-pwd=\"+password;
return msg;","outputs":1,"noerr":0,"x":675,"y":130,"wires":[["5cfd8031.25c58"]]},{"id":"ae34e974.79a838","type":"function","z":"25641f1f.b629","name":"Disable Area 1","func":"var ip = \"x.x.x.x\";
var user = \"x\";
var password = \"x\";

// Update the status with current timestamp
var now = new Date();
var yyyy = now.getFullYear();
var mm = now.getMonth() < 9 ? \"0\" + (now.getMonth() + 1) : (now.getMonth() + 1); // getMonth() is zero-based
var dd  = now.getDate() < 10 ? \"0\" + now.getDate() : now.getDate();
var hh = now.getHours() < 10 ? \"0\" + now.getHours() : now.getHours();
var mmm  = now.getMinutes() < 10 ? \"0\" + now.getMinutes() : now.getMinutes();
var ss  = now.getSeconds() < 10 ? \"0\" + now.getSeconds() : now.getSeconds();
var currenttime= hh + \":\" + mmm + \":\" + ss;
var currentdate= dd + \".\" + mm + \".\" + yyyy;

node.status({fill:\"blue\",shape:\"ring\",text:\"Last update: \" + currentdate + \" - \" + currenttime});

msg.topic = \"area 1\";
msg.payload = ip+\"/param.cgi?cmd=setmdattr&-name=1&-enable=0&-usr=\"+user+\"&-pwd=\"+password;
return msg;","outputs":1,"noerr":0,"x":675,"y":310,"wires":[["ea882aa0.ed4468"]]},{"id":"ea882aa0.ed4468","type":"change","z":"25641f1f.b629","name":"Set URL","rules":[{"t":"set","p":"url","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":310,"wires":[["3ccae916.416666"]]},{"id":"5cfd8031.25c58","type":"change","z":"25641f1f.b629","name":"Set URL","rules":[{"t":"set","p":"url","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":130,"wires":[["d1adb163.6422f"]]},{"id":"3ccae916.416666","type":"http request","z":"25641f1f.b629","name":"m1_disable","method":"GET","ret":"txt","url":"","tls":"","x":974,"y":310,"wires":[["a7a2d77c.9fda68"]]},{"id":"d1adb163.6422f","type":"http request","z":"25641f1f.b629","name":"m1_enable","method":"GET","ret":"txt","paytoqs":false,"url":"","tls":"","persist":false,"proxy":"","authType":"","x":974,"y":130,"wires":[["a7a2d77c.9fda68"]]},{"id":"c82cd44a.cfc898","type":"switch","z":"25641f1f.b629","name":"Push","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"{\"val\":\"on\"}","vt":"str"},{"t":"eq","v":"{\"val\":\"off\"}","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":493,"y":280,"wires":[["14d778c5.570777","7e2c1c23.c625d4","346e6961.9a43c6","379e803b.2d0ef"],["ae34e974.79a838","99b85162.d2b4c","31aae64a.0edc6a","345120b3.d0b7b"]]},{"id":"a7a2d77c.9fda68","type":"debug","z":"25641f1f.b629","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1179,"y":278,"wires":[]},{"id":"7e2c1c23.c625d4","type":"function","z":"25641f1f.b629","name":"Enable Area 2","func":"var ip = \"x.x.x.x\";
var user = \"x\";
var password = \"x\";

// Update the status with current timestamp
var now = new Date();
var yyyy = now.getFullYear();
var mm = now.getMonth() < 9 ? \"0\" + (now.getMonth() + 1) : (now.getMonth() + 1); // getMonth() is zero-based
var dd  = now.getDate() < 10 ? \"0\" + now.getDate() : now.getDate();
var hh = now.getHours() < 10 ? \"0\" + now.getHours() : now.getHours();
var mmm  = now.getMinutes() < 10 ? \"0\" + now.getMinutes() : now.getMinutes();
var ss  = now.getSeconds() < 10 ? \"0\" + now.getSeconds() : now.getSeconds();
var currenttime= hh + \":\" + mmm + \":\" + ss;
var currentdate= dd + \".\" + mm + \".\" + yyyy;

node.status({fill:\"blue\",shape:\"ring\",text:\"Last update: \" + currentdate + \" - \" + currenttime});

msg.topic = \"area 2\";
msg.payload = ip+\"/param.cgi?cmd=setmdattr&-name=2&-enable=1&-usr=\"+user+\"&-pwd=\"+password;
return msg;","outputs":1,"noerr":0,"x":675,"y":172,"wires":[["d3453aa.68b3fc8"]]},{"id":"d3453aa.68b3fc8","type":"change","z":"25641f1f.b629","name":"Set URL","rules":[{"t":"set","p":"url","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":172,"wires":[["893d21f4.c172c"]]},{"id":"893d21f4.c172c","type":"http request","z":"25641f1f.b629","name":"m1_enable","method":"GET","ret":"txt","url":"","tls":"","x":974,"y":172,"wires":[["a7a2d77c.9fda68"]]},{"id":"346e6961.9a43c6","type":"function","z":"25641f1f.b629","name":"Enable Area 3","func":"var ip = \"x.x.x.x\";
var user = \"x\";
var password = \"x\";

// Update the status with current timestamp
var now = new Date();
var yyyy = now.getFullYear();
var mm = now.getMonth() < 9 ? \"0\" + (now.getMonth() + 1) : (now.getMonth() + 1); // getMonth() is zero-based
var dd  = now.getDate() < 10 ? \"0\" + now.getDate() : now.getDate();
var hh = now.getHours() < 10 ? \"0\" + now.getHours() : now.getHours();
var mmm  = now.getMinutes() < 10 ? \"0\" + now.getMinutes() : now.getMinutes();
var ss  = now.getSeconds() < 10 ? \"0\" + now.getSeconds() : now.getSeconds();
var currenttime= hh + \":\" + mmm + \":\" + ss;
var currentdate= dd + \".\" + mm + \".\" + yyyy;

node.status({fill:\"blue\",shape:\"ring\",text:\"Last update: \" + currentdate + \" - \" + currenttime});

msg.topic = \"area 3\";
msg.payload = ip+\"/param.cgi?cmd=setmdattr&-name=3&-enable=1&-usr=\"+user+\"&-pwd=\"+password;
return msg;","outputs":1,"noerr":0,"x":675,"y":212,"wires":[["44d399f3.bc4be8"]]},{"id":"44d399f3.bc4be8","type":"change","z":"25641f1f.b629","name":"Set URL","rules":[{"t":"set","p":"url","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":212,"wires":[["6e7f5a3e.16a664"]]},{"id":"6e7f5a3e.16a664","type":"http request","z":"25641f1f.b629","name":"m1_enable","method":"GET","ret":"txt","url":"","tls":"","x":974,"y":212,"wires":[["a7a2d77c.9fda68"]]},{"id":"379e803b.2d0ef","type":"function","z":"25641f1f.b629","name":"Enable Area 4","func":"var ip = \"x.x.x.x\";
var user = \"x\";
var password = \"x\";

// Update the status with current timestamp
var now = new Date();
var yyyy = now.getFullYear();
var mm = now.getMonth() < 9 ? \"0\" + (now.getMonth() + 1) : (now.getMonth() + 1); // getMonth() is zero-based
var dd  = now.getDate() < 10 ? \"0\" + now.getDate() : now.getDate();
var hh = now.getHours() < 10 ? \"0\" + now.getHours() : now.getHours();
var mmm  = now.getMinutes() < 10 ? \"0\" + now.getMinutes() : now.getMinutes();
var ss  = now.getSeconds() < 10 ? \"0\" + now.getSeconds() : now.getSeconds();
var currenttime= hh + \":\" + mmm + \":\" + ss;
var currentdate= dd + \".\" + mm + \".\" + yyyy;

node.status({fill:\"blue\",shape:\"ring\",text:\"Last update: \" + currentdate + \" - \" + currenttime});

msg.topic = \"area 4\";
msg.payload = ip+\"/param.cgi?cmd=setmdattr&-name=4&-enable=1&-usr=\"+user+\"&-pwd=\"+password;
return msg;","outputs":1,"noerr":0,"x":675,"y":252,"wires":[["54d49c1b.160124"]]},{"id":"54d49c1b.160124","type":"change","z":"25641f1f.b629","name":"Set URL","rules":[{"t":"set","p":"url","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":252,"wires":[["43896642.430e38"]]},{"id":"43896642.430e38","type":"http request","z":"25641f1f.b629","name":"m1_enable","method":"GET","ret":"txt","url":"","tls":"","x":974,"y":252,"wires":[["a7a2d77c.9fda68"]]},{"id":"99b85162.d2b4c","type":"function","z":"25641f1f.b629","name":"Disable Area 2","func":"var ip = \"x.x.x.x\";
var user = \"x\";
var password = \"x\";

// Update the status with current timestamp
var now = new Date();
var yyyy = now.getFullYear();
var mm = now.getMonth() < 9 ? \"0\" + (now.getMonth() + 1) : (now.getMonth() + 1); // getMonth() is zero-based
var dd  = now.getDate() < 10 ? \"0\" + now.getDate() : now.getDate();
var hh = now.getHours() < 10 ? \"0\" + now.getHours() : now.getHours();
var mmm  = now.getMinutes() < 10 ? \"0\" + now.getMinutes() : now.getMinutes();
var ss  = now.getSeconds() < 10 ? \"0\" + now.getSeconds() : now.getSeconds();
var currenttime= hh + \":\" + mmm + \":\" + ss;
var currentdate= dd + \".\" + mm + \".\" + yyyy;

node.status({fill:\"blue\",shape:\"ring\",text:\"Last update: \" + currentdate + \" - \" + currenttime});

msg.topic = \"area 2\";
msg.payload = ip+\"/param.cgi?cmd=setmdattr&-name=2&-enable=0&-usr=\"+user+\"&-pwd=\"+password;
return msg;","outputs":1,"noerr":0,"x":675,"y":352,"wires":[["ab481c53.f4cd4"]]},{"id":"ab481c53.f4cd4","type":"change","z":"25641f1f.b629","name":"Set URL","rules":[{"t":"set","p":"url","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":352,"wires":[["be42b319.a78c4"]]},{"id":"be42b319.a78c4","type":"http request","z":"25641f1f.b629","name":"m1_disable","method":"GET","ret":"txt","url":"","tls":"","x":974,"y":352,"wires":[["a7a2d77c.9fda68"]]},{"id":"31aae64a.0edc6a","type":"function","z":"25641f1f.b629","name":"Disable Area 3","func":"var ip = \"x.x.x.x\";
var user = \"x\";
var password = \"x\";

// Update the status with current timestamp
var now = new Date();
var yyyy = now.getFullYear();
var mm = now.getMonth() < 9 ? \"0\" + (now.getMonth() + 1) : (now.getMonth() + 1); // getMonth() is zero-based
var dd  = now.getDate() < 10 ? \"0\" + now.getDate() : now.getDate();
var hh = now.getHours() < 10 ? \"0\" + now.getHours() : now.getHours();
var mmm  = now.getMinutes() < 10 ? \"0\" + now.getMinutes() : now.getMinutes();
var ss  = now.getSeconds() < 10 ? \"0\" + now.getSeconds() : now.getSeconds();
var currenttime= hh + \":\" + mmm + \":\" + ss;
var currentdate= dd + \".\" + mm + \".\" + yyyy;

node.status({fill:\"blue\",shape:\"ring\",text:\"Last update: \" + currentdate + \" - \" + currenttime});

msg.topic = \"area 3\";
msg.payload = ip+\"/param.cgi?cmd=setmdattr&-name=3&-enable=0&-usr=\"+user+\"&-pwd=\"+password;
return msg;","outputs":1,"noerr":0,"x":675,"y":392,"wires":[["de0080a3.f3239"]]},{"id":"de0080a3.f3239","type":"change","z":"25641f1f.b629","name":"Set URL","rules":[{"t":"set","p":"url","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":392,"wires":[["b3d312b9.3e345"]]},{"id":"b3d312b9.3e345","type":"http request","z":"25641f1f.b629","name":"m1_disable","method":"GET","ret":"txt","url":"","tls":"","x":974,"y":392,"wires":[["a7a2d77c.9fda68"]]},{"id":"345120b3.d0b7b","type":"function","z":"25641f1f.b629","name":"Disable Area 4","func":"var ip = \"x.x.x.x\";
var user = \"x\";
var password = \"x\";

// Update the status with current timestamp
var now = new Date();
var yyyy = now.getFullYear();
var mm = now.getMonth() < 9 ? \"0\" + (now.getMonth() + 1) : (now.getMonth() + 1); // getMonth() is zero-based
var dd  = now.getDate() < 10 ? \"0\" + now.getDate() : now.getDate();
var hh = now.getHours() < 10 ? \"0\" + now.getHours() : now.getHours();
var mmm  = now.getMinutes() < 10 ? \"0\" + now.getMinutes() : now.getMinutes();
var ss  = now.getSeconds() < 10 ? \"0\" + now.getSeconds() : now.getSeconds();
var currenttime= hh + \":\" + mmm + \":\" + ss;
var currentdate= dd + \".\" + mm + \".\" + yyyy;

node.status({fill:\"blue\",shape:\"ring\",text:\"Last update: \" + currentdate + \" - \" + currenttime});

msg.topic = \"area 4\";
msg.payload = ip+\"/param.cgi?cmd=setmdattr&-name=4&-enable=0&-usr=\"+user+\"&-pwd=\"+password;
return msg;","outputs":1,"noerr":0,"x":675,"y":432,"wires":[["7adea3fb.3ec5cc"]]},{"id":"7adea3fb.3ec5cc","type":"change","z":"25641f1f.b629","name":"Set URL","rules":[{"t":"set","p":"url","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":432,"wires":[["4a58620a.6533cc"]]},{"id":"4a58620a.6533cc","type":"http request","z":"25641f1f.b629","name":"m1_disable","method":"GET","ret":"txt","url":"","tls":"","x":974,"y":432,"wires":[["a7a2d77c.9fda68"]]},{"id":"8efc297d.66e588","type":"json","z":"25641f1f.b629","name":"","property":"payload","action":"","pretty":false,"x":487,"y":323,"wires":[["c82cd44a.cfc898"]]},{"id":"29b4474a.a01088","type":"inject","z":"25641f1f.b629","name":"","topic":"","payload":"{\"val\":\"off\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":40,"wires":[[]]},{"id":"653e7d1e.d5fe54","type":"ifttt out","z":"25641f1f.b629","eventName":"event1","x":340,"y":140,"wires":[]}]

Bei den Kameras handelt es sich um eine IN-8015 und eine IN-9020.
Zertifikat ist auch vorhanden, nur muss ich das jetzt irgendwo installieren? Wo kann ich das Instar Zertifikat herunterladen, um es in der settings.js einzubinden?

Hallo @Markus2806 ,

Ich habe mir das ganze nochmal - basierend auf deinem Code - angeschaut und zum Laufen gebracht. Damit es etwas übersichtlicher formatiert ist, habe ich es hier in ein FAQ gepackt:

https://wiki.instar.de/Frequently_Asked_Question/Node-RED_and_IFTTT/

Ich hatte ein paar Dinge geändert - z.B. einmal die DDNS einer AVM Fritzbox genommen, anstatt der INSTAR DDNS und auch den Zugriff ohne HTTPS eingerichtet. Aber auch mit dieser Konfiguration funktioniert es.

Als Debug-Schritte ist es wichtig den Hook auf der Node-RED Seite erst einmal über die lokale IP auszuprobieren. Und auch den IFTTT Webhook kann man über den Browser aufrufen und schauen ob man da eventuell eine Fehlermeldung erhält. Ich hatte anfangs ein paar Tip- und Klickfehler in meinem Setup, die man damit schnell ausmerzen konnte.

Hallo @INSTAR

vielen Dank für das FAQ.
Leider musste ich meinen Raspi komplett neu installieren, weil ich mir die Settings.js Datei verhunzt hatte und nicht mehr auf das Node-Red gekommen bin.
Hab dann alles nochmals installiert und bin der FAQ gefolgt. Jetzt funktioniert es auch :smiley_emoticons_2t
Einziger Unterschied ist, dass ich diesmal keine Änderungen in der Settings.js Datei durchgeführt habe.
Hier hatte ich ja die „adminAuth“ aktiviert. Dies wird wahrscheinlich auch der Grund gewesen sein, wieso er nicht weiter gekommen ist.

Jetzt frage ich mich, kann ich die adminAuth trotzdem aktivieren, dann müsste ich aber den Benutzer und Passwort mitgeben?
http://benutzer:passwort@xy.ddns.net:1880/alarm/md/areas :icon_confused:

Wie löse ich das ganze mit einer zweiten Kamera? Ich habe für jede Kamera einen eigenen Flow erstellt.
Kann ich irgendwo mitgeben, dass entweder Flow1 oder Flow2 ausgeführt wird?

Kurz - Ja :icon_smile:

Man muß zwingend die Authentifizierung bei Node-RED aktivieren, wenn man die Oberfläche im Router durchleitet. Es gibt da draußen leider böse Menschen, die einem sonst Crypto-Miner oder schlimmeres auf dem Pi installieren.

Wir haben hier ein Tutorial wie man mit URL Queries des Alarmservers in Node-RED arbeitet:

https://wiki.instar.de/Erweitert/Ala…our_Smarthome/

Genau so kann man auch in IFTTT im Body des Request Informationen mitgeben - z.B.:

{
„val“: on,
„camera“: „front_door“
}

Und dann in Node-RED nicht nur nach on/off sortieren, sondern auch nach der Kamera die man ansprechen möchte - im Beispiel die Kamera an der Eingangstür.

Danke @INSTAR

So offen würde ich das Node-Red sowieso nicht betreiben wollen :icon_ugly:
Muss mir das mit der Authentifizierung nochmals anschauen.

Ich habe jetzt nochmals Node-Red unter folgender Anleitung https://wiki.instar.de/Software/Linux/Node-RED/ neu installiert.
Habe alle Befehle mit dem Nodeadmin ausgeführt. Nur bei dem Befehl

<a href="http://nano%20/home/nodeadmin/.node-red/settings.js">nano /home/nodeadmin/.node-red/settings.js</a>

erhalte ich die Rückmeldung dass das Verzeichnis nicht existiert.

Wenn ich das geschafft habe, kommt dann die Einbindung der zweiten Kamera dran.

Die Anleitungen unter:

https://wiki.instar.de/Software/Linux/

sind mehr ein Step-by-Step um Debian zu einer Smarthome Überwachungstation zu machen und bauen aufeinander auf. Ich denke das einfach der Benutzer nodeadmin auf dem System fehlt. In dem Fall liegt das Node-RED Verzeichnis im home Verzeichnis des Nutzers, den man während der Installation aktiv hatte. Um rauszufinden wo es ist, einfach mal das folgende eingeben:


cd ~
ls -la

Der erste Befehl bringt einen in das home Verzeichnis des aktiven Users, der zweite listet alle Dateien und Ordner in dem Verzeichnis. Wenn .node-red darunter ist:


cd ./.node-red
pwd

Mit dem ersten Befehl betritt man das Verzeichnis und der zweite zeigt einem den Pfad an, wo man sich gerade befinden - z.B. /home/meinnutzer/.node-red. Dann kann man den Befehl entsprechend ändern:

<a href="http://nano%20/home/nodeadmin/.node-red/settings.js">nano /home/</a>[B]meinnutzer[/B]<a href="http://nano%20/home/nodeadmin/.node-red/settings.js">/.node-red/settings.js</a>

Danke hat gekappt :smiley_emoticons_2t Komischerweise war der Pfad aber richtig :icon_confused:
Habe nun ein SSL Zertifikat erstellt und unter Common Name habe ich die lokale IP Adresse angegeben.
Den Pfad habe ich in settings.js angepasst aber leider klappt es nicht mit dem Admin-Panel über https://<IP-Adresse>:1880/admin/ -> ERR_SSL_PROTOCOL_ERROR