Hilfe erbeten: reload Node-Red flows via Admin HTTP API

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

Moderator: Co-Administratoren

Antworten
Damos
Beiträge: 60
Registriert: 01.09.2019, 20:14
Hat sich bedankt: 25 Mal

Hilfe erbeten: reload Node-Red flows via Admin HTTP API

Beitrag von Damos » 20.01.2020, 11:02

Hi,

Kurze Beschreibung der Vorgeschichte (vielleicht sind manche Infos auch für andere hilfreich), Fragen am Ende des Posts:

* Aufgrund eines immer wieder "hängenden" email Nodes, musste ich Redmatic immer wieder neu starten.
* Das funktioniert jetzt mithilfe des Prüfens des Node-Status, eines Timeouts (über node-red-contrib-timeout) und des "CCU script" nodes (siehe viewtopic.php?t=48092#p525589) ganz gut.
* Da mir der Neustart des Node-Red Servers (Redmatic) als ziemliche Brachialmethode erschien, hab ich nach kurzer Recherche herausgefunden, dass man die Flows über die Admin HTTP API (https://nodered.org/docs/api/admin/methods/post/flows/) neu laden kann
* Das wollte ich natürlich zuerst auf meiner lokalen Node-Red Installation (http://localhost:1880/flows) testen:
Anmerkung 2020-01-20 103102.jpg
Anmerkung 2020-01-20 103102.jpg (15.99 KiB) 1918 mal betrachtet

Code: Alles auswählen

[{"id":"b09de99d.05f3f8","type":"inject","z":"f78216a2.29b298","name":"Ignite","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":100,"wires":[["b0e1b29a.b2fb8"]]},{"id":"b0e1b29a.b2fb8","type":"function","z":"f78216a2.29b298","name":"Set HTTP call header","func":"msg.headers = {\n    \"Node-RED-Deployment-Type\":\"reload\"\n}\nreturn msg; \n","outputs":1,"noerr":0,"x":300,"y":100,"wires":[["292fe084.784d8"]]},{"id":"292fe084.784d8","type":"http request","z":"f78216a2.29b298","name":"HTTP POST","method":"POST","ret":"txt","paytoqs":false,"url":"http://localhost:1880/flows","tls":"","persist":false,"proxy":"","authType":"","x":530,"y":100,"wires":[["4ef48033.503a2"]]},{"id":"4ef48033.503a2","type":"debug","z":"f78216a2.29b298","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":730,"y":100,"wires":[]}]
* Beim Starten des Nodes, gab NR folgende Meldung aus:
Your flow credentials file is encrypted using a system-generated key. If the system-generated key is lost for any reason, your credentials file will not be recoverable, you will have to delete it and re-enter your credentials.
You should set your own key using the 'credentialSecret' option in your settings file. Node-RED will then re-encrypt your credentials file using your chosen key the next time you deploy a change.
*Ich setzte daraufhin den 'credentialSecret' in der 'settings.js' Datei und alles funktionierte erwartungsgemäß.
* Bei der Umsetzung auf der Homematic setzte ich die HTTP request node URL auf "http://192.168.0.100/addons/red/#flow" (192...100 ist meine CCU3)
* Außerdem stellte ich fest, dass der 'credentialSecret' bereits gesetzt war und zwar mit einem Verweis auf die 'credentials.key' Datei:

Code: Alles auswählen

// Credentials encryption key
if (fs.existsSync('/usr/local/addons/redmatic/etc/credentials.key')) {
    settings.credentialSecret = fs.readFileSync('/usr/local/addons/redmatic/etc/credentials.key').toString();
die Datei enthält auch tatsächlich einen Key.

* Allerdings meldete Node-Red beim Call 'Cannot POST /addons/red/' - es funktioniert somit nicht.

Nun habe ich zwei Fragen:
1. Wie muss die URL aussehen, damit der HTTP POST funktioniert?
2. Woher kommt der gesetzte 'credentialSecret' Key?


Danke im Voraus,
Damos

Damos
Beiträge: 60
Registriert: 01.09.2019, 20:14
Hat sich bedankt: 25 Mal

Re: Hilfe erbeten: reload Node-Red flows via Admin HTTP API

Beitrag von Damos » 28.01.2020, 18:41

Ich komm da einfach nicht weiter... :(
Kann wer helfen?

Danke!

hobbyquaker
Beiträge: 3978
Registriert: 12.07.2009, 20:01
Hat sich bedankt: 17 Mal
Danksagung erhalten: 176 Mal
Kontaktdaten:

Re: Hilfe erbeten: reload Node-Red flows via Admin HTTP API

Beitrag von hobbyquaker » 30.01.2020, 18:19

Damos hat geschrieben:
20.01.2020, 11:02
* Da mir der Neustart des Node-Red Servers (Redmatic) als ziemliche Brachialmethode erschien, hab ich nach kurzer Recherche herausgefunden, dass man die Flows über die Admin HTTP API (https://nodered.org/docs/api/admin/methods/post/flows/) neu laden kann
Ja - und nein. ;-)
Das Admin HTTP API braucht ein Bearer Token zur Authentifizierung. Es ist eigtl nicht vorgesehen dass von extern zu nutzen, das dient primär der Kommunikation Frontend/Backend innerhalb Node-RED.
Damos hat geschrieben:
20.01.2020, 11:02
2. Woher kommt der gesetzte 'credentialSecret' Key?
Den erzeugt RedMatic beim ersten Start zufällig.



Ich würde Dir empfehlen das mit dem Neustart zu überdenken. Wenn die fehlerhaften Nodes die zum Absturz führen derzeit unverzichtbar/alternativlos sind könntest Du im RedMatic UI auch den automatischen Neustart im Falle eines Crash aktivieren (um das zu konfigurieren gibt es im Tab "Debug" ein Dropdown). Wenn Du es gescriptet neustarten willst würde ich empfehlen über das RedMatic Init Script zu gehen:

Code: Alles auswählen

/etc/config/rc.d/redmatic restart
Siehe auch viewtopic.php?f=77&t=54234&p=542140&

Damos
Beiträge: 60
Registriert: 01.09.2019, 20:14
Hat sich bedankt: 25 Mal

Re: Hilfe erbeten: reload Node-Red flows via Admin HTTP API

Beitrag von Damos » 07.02.2020, 13:25

Sorry für die verspätete Rückmeldung, war unterwegs.
Das Admin HTTP API braucht ein Bearer Token zur Authentifizierung. Es ist eigtl nicht vorgesehen dass von extern zu nutzen, das dient primär der Kommunikation Frontend/Backend innerhalb Node-RED.
Kann ich es trotzdem nutzen? :wink: Wenn ja, wie komme ich zu dem Bearer Token?
Ich würde Dir empfehlen das mit dem Neustart zu überdenken. Wenn die fehlerhaften Nodes die zum Absturz führen derzeit unverzichtbar/alternativlos sind könntest Du im RedMatic UI auch den automatischen Neustart im Falle eines Crash aktivieren (um das zu konfigurieren gibt es im Tab "Debug" ein Dropdown). Wenn Du es gescriptet neustarten willst würde ich empfehlen über das RedMatic Init Script zu gehen:
Es ist tatsächlich so, dass ab und zu Redmatic aus unterschiedlichen Gründen crasht. Der automatische Neustart ist ein Workaround (auch wenn kein eleganter, läuft das zumindest bereits sein zwei Monaten so).

Der Email Node verursacht aber keinen Crash, sondern hängt (ich diskutiere das derzeit auch mit @dceejay (https://discourse.nodered.org/t/node-re ... gs/21115/9). Meine aktuell implementierte Lösung startet nach einem Timeout eben mit einem Homematic-Script den Redmatic-Server neu. Ich dachte, dass das vielleicht die Holzhammer-Methode ist; ein Neustart der Flows wäre möglicherweise die elegantere Lösung?

Gruß, Damos

HenningK
Beiträge: 210
Registriert: 22.09.2012, 20:56
Hat sich bedankt: 5 Mal
Danksagung erhalten: 11 Mal

Re: Hilfe erbeten: reload Node-Red flows via Admin HTTP API

Beitrag von HenningK » 15.02.2020, 20:14

... ich hatte auch mit der Email Node mmer wieder Probleme und nehme jetzt stattdessen Pushover. Das läuft sehr stabil und hat nur einen Nachteil, das die App installiert sein muss.

Das war für mich der einfachere Weg

Grüße Henning

Damos
Beiträge: 60
Registriert: 01.09.2019, 20:14
Hat sich bedankt: 25 Mal

Re: Hilfe erbeten: reload Node-Red flows via Admin HTTP API

Beitrag von Damos » 18.02.2020, 16:52

Das hätte bei dem Volumen, mit dem ich konfrontiert nur bedingt funktioniert.

Ich hab das jetzt anders (ohne Email-Node) gelöst. Hab ich hier beschrieben:
https://discourse.nodered.org/t/node-re ... s/21115/19

Antworten

Zurück zu „RedMatic“