Raspberry aus FHEM neu starten

Hier stelle ich euch meine Lösung vor, wie ich aus FHEM heraus meinen Raspberry Pi (lokal) und meine(n) Raspberry Pi('s) per FHEM2FHEM (remote) neu starte.

 

Grundvorraussetzungen:

FHEM braucht Zugriff auf die Shell des Linux-Systems sowie die Rechte "sudo" benutzen zu dürfen!

Dazu müssen zwei System-Dateien bearbeitet werden.

    1.  /etc/passwd

sudo nano /etc/passwd

Hier wird folgendes geändert:

fhem:x:999:20::/opt/fhem:/bin/none

in:

fhem:x:999:20::/opt/fhem:/bin/bash

information 32 Wichtig ist die Änderung am Ende (none -> bash). Alles andere könnte unterschiedlich sein und ist für uns uninteressant!

Mit "Strg+O" speichern und mit "Strg+X" schließen.

 

    2.  /etc/sudoers

sudo nano /etc/sudoers

Hier wird folgendes ergänzt (irgendwo in der Datei):

Defaults        requiretty
Defaults:%dialout        !requiretty
Defaults:fhem        !requiretty

fhem ALL=(ALL) NOPASSWD: ALL

Mit "Strg+O" speichern und mit "Strg+X" schließen.

Damit sind die Vorraussetzungen erfüllt um aus FHEM heraus dem System Befehle erteilen zu können.

information 32 Meine Systeme basieren alle auf Raspbian Jessie Lite als Betriebssystem. Bei anderen Betriebssystemen und/oder anderer Hardware (oDroid, BeagleBone etc.) können sich Dateien und Einstellungen wo anders befinden!

 

Lokalen Raspberry Pi neustarten:

Hier reicht ein einfacher Befehl über die FHEM-Commandozeile oder z.B. FTUI.

Es handelt sich hierbei um einen in FHEM integrierten Perl-Befehl. Darum muss dieser Befehl in geschwungenen Klammern {} geschrieben werden.

{ system("sudo reboot &") }

 Der Raspberry Pi sollte nun neustarten.

 

Remote Raspberry Pi über FHEM2FHEM neustarten:

Vorrausetzung hierfür ist ein funktionierendes FHEM2FHEM-Device auf dem Remote-System:

define [NAME] FHEM2FHEM [IP:TELNETPORT] LOG: [PASSWORT]

[IP] und [TELNETPORT] stammen vom Haupt-System. [PASSWORT] wird benötigt falls der Telnet-Port des FHEM auf dem Haupt-System mit einem Passwort geschützt ist.
Hierzu schaut aber am Besten in die commandRef!

warning 32 Seit dem neusten FHEM-Update (02.06.2017) ist für Telnet-Verbindungen welche nicht lokal sind immer ein Passwort oder eine explizite Ausnahme für das Remote-Device erforderlich!
Siehe auch im FHEM-Forum: Verbindung von einer nicht-lokalen Adresse ab sofort nur mit Passwort

 

 

Auf dem Haupt-System definieren wir in FHEM einen Dummy, welcher später getriggert wird.

define reboot_remote_pi dummy

 

 

Auf dem Remote-System definieren wir ein notify welches auf den Dummy des Haupt-System's lauscht:

define reboot_pi_per_remote notify reboot_remote_pi.* { system("sudo reboot &") }

Nun muss noch die Definition des FHEM2FHEM-Devices ergänzt werden:
Ich mache diesen Schritt gern über FHEM-WEB, indem ich das FHEM2FHEM-Device öffne und links neben der Device-Definition auf "DEF" klicke.

Die Defnition sollte dann minimal so aussehen:

[IP]:[TELNETPORT] LOG:reboot_remote_pi [PASSWORT]

Mit einem klick auf "modify [NAME]" speichern!

 

 

Um jetzt das Remote-System vom Haupt-System aus neu zu starten reicht auf dem Haupt-System der Befehl:

trigger reboot_remote_pi

Der Dummy im Hauptsystem wird getriggert.

Wer jetzt den EventMonitor verfolgt, sieht, dass auf beiden Systemen ein Event ähnlich

XXXX dummy reboot_remote_pi

erzeugt wird. Dieses wird vom notify "abgefangen" und löst den "System-Befehl" zum neustarten aus.

warning 32 Auch der Befehl: "set reboot_remote_pi neustart" würde einen neustart auslösen, weil das notify auf dem Remote-System auf alles lauscht was der Dummy auf dem Haupt-System an Event's erzeugt.

 

Grüße^^

 

Kommentar schreiben


Sicherheitscode
Aktualisieren