Hallo zusammen,
als kleines Projekt habe ich einen Flow zum Einschalten, per Wake On LAN (WOL), und zum Herunterfahren eines Servers, per ssh-Verbindung, erstellt.
Vorab möchte ich anmerken, dass sowohl für das Starten, als auch für das Herunterfahren, eines PC´s / Servers einige Voraussetzungen erfüllt werden müssen. Hauptsächlich beziehen sich diese auf den Rechner, der gestartet werden soll. Die Einstellungen sind teilweise betriebssystem- und gerätespezifisch, aber es finden sich viele Anleitungen im Internet. Wenn WOL bspw. per App vom Handy aus funktioniert, dann klappt es auch mit node red. Herunterfahren eines PC´s/Servers aus der Ferne ist relativ aufwändig, trotzdem möchte ich den Flow teilen, weil ich denke, der WOL-Part ist für den ein oder anderen anwendbar und vielleicht trifft der shutdown-Part auf Special-Interest.
Das Wecken sollte bei fast allen Geräten unter Berücksichtigung der individuellen Einstellungen funktionieren.
Das Herunterfahren wird ohne größere Anpassungen nur für Linux-basierende Systeme funktionieren.
Hier habe ich einige Anregungen her. Für diesen Flow gelten die selben Vorrausetzungen (beim Herunterfahren), wie im Link beschrieben:
Passwortlose Anmeldung per ssh -> Stichwort ssh-key
Passwortloses herunterfahren per sudo shutdown -h now
.
[{"id":"ce477773.39eb78","type":"tab","label":"Server01","disabled":false,"info":""},{"id":"c8cf3f03.92101","type":"adv ping","z":"ce477773.39eb78","name":"Ping Server01","host":"192.168.178.101","x":300,"y":260,"wires":[["1dde2d2f.85a18b"]]},{"id":"771a0923.adb148","type":"inject","z":"ce477773.39eb78","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":true,"onceDelay":"0,1","topic":"","payload":"","payloadType":"date","x":110,"y":260,"wires":[["c8cf3f03.92101"]]},{"id":"afb1abe7.ec1fe8","type":"homeeDevice","z":"ce477773.39eb78","virtual-homee":"","name":"Server01","nodeId":"88","showNodeId":true,"profile":"10","icon":"nodeicon_tv","attributes":[{"type":1,"state":1,"instance":0,"minimum":0,"maximum":1,"current_value":0,"target_value":0,"last_value":0,"data":"","name":"","unit":"","step_value":1,"editable":1,"last_changed":1605092483,"changed_by":1,"changed_by_id":0,"based_on":1,"options":[],"id":88,"node_id":88}],"statusTemplate":"","x":660,"y":260,"wires":[["d8693d8b.4fea3"]]},{"id":"1dde2d2f.85a18b","type":"function","z":"ce477773.39eb78","name":"","func":"if (msg.payload === false)\nreturn {payload:{\"attribute\":{\"id\":88,\"value\":0}}}\nelse \nreturn {payload:{\"attribute\":{\"id\":88,\"value\":1}}}\n\npayload","outputs":1,"noerr":0,"initialize":"","finalize":"","x":480,"y":260,"wires":[["afb1abe7.ec1fe8"]]},{"id":"12874a4c.465efe","type":"wake on lan","z":"ce477773.39eb78","mac":"DE:AD:BE:EF:FE:ED","host":"192.168.178.255","udpport":9,"name":"Wecke Server01","x":1070,"y":200,"wires":[]},{"id":"d8693d8b.4fea3","type":"switch","z":"ce477773.39eb78","name":"","property":"payload.targetValue","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":860,"y":260,"wires":[["12874a4c.465efe"],["37be68cc.d0093"]]},{"id":"2ee9019d.fac316","type":"change","z":"ce477773.39eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"'ssh ' & user & '@' & host & \t\" 'sudo shutdown -h now'\"","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1010,"y":400,"wires":[["503eac6c.eb7f0c"]]},{"id":"503eac6c.eb7f0c","type":"exec","z":"ce477773.39eb78","command":"","addpay":true,"append":"","useSpawn":"false","timer":"20","oldrc":false,"name":"Shutdown Server01","x":1240,"y":400,"wires":[[],[],[]]},{"id":"37be68cc.d0093","type":"function","z":"ce477773.39eb78","name":"User und IP","func":"if (msg.payload.targetValue == 0)\nmsg.host = \"192.168.178.101\";\nmsg.user = \"Karate-Tommy\";\nreturn msg\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":830,"y":400,"wires":[["2ee9019d.fac316"]]},{"id":"10d2ddb2.c1483a","type":"comment","z":"ce477773.39eb78","name":"Kommentar zu \"Ping Server01\"","info":"Host = IP des Zielrechners","x":310,"y":200,"wires":[]},{"id":"2866c348.da0694","type":"comment","z":"ce477773.39eb78","name":"Kommentar zu User und IP","info":"Zielrechner IP: msg.host = \"192.168.178.101\";\nZielrechner User: msg.user = \"Karate-Tommy\";","x":820,"y":460,"wires":[]},{"id":"c8359091.f9a6c","type":"comment","z":"ce477773.39eb78","name":"Kommentar zu Wecke Server01","info":"MAC Address = MAC-Adresse des Zielrechners\nTarget Address = Broadcast IP","x":1070,"y":140,"wires":[]}]
Ich habe ein paar Kommentare eingefügt um eine einfache Einbindung zu ermöglichen.
Wenn man den Zielrechner herunterfährt, kommt es in node red zu einer Fehlermeldung, weil die Verbindung zum Zielrechner verloren wird.