FHEM beenden und Rechner herunterfahren mit FHEM möglich?

Begonnen von FHEMAN, 23 März 2015, 12:13:35

Vorheriges Thema - Nächstes Thema

FHEMAN

Hallo,

ich möchte automatisiert den Rechner (Cubie) kontrolliert herunterfahren.
Dazu kann ich zwar ein { fhem ("shutdown") } machen. Danach funktioniert aber logischerweise kein "shutdown -s now" aus FHEM heraus mehr.
Wie kann ich das umsetzen?
Oder wird fhem schon kontrolliert heruntergefahren, wenn der Rechner ein ordnungsgemäßes Shutdown durchführt?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

betateilchen

Zitat von: derron am 23 März 2015, 12:13:35
Oder wird fhem schon kontrolliert heruntergefahren, wenn der Rechner ein ordnungsgemäßes Shutdown durchführt?

Ja. Linux Grundlagen...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

Jain ... wie startest Du denn FHEM? Bzw. wird es beim rechnerstat schon automatisch gestartet?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

FHEMAN

Ich habe mich nicht aktiv um den FHEM Start gekümmert. Die Installation erfolgte via
sudo wget http://fhem.de/fhem-5.6.deb && sudo dpkg -i fhem-5.6.deb
Da der Start automatisch erfolgt, kann ich davon ausgehen, dass auch automatisch gestoppt wird?
Ich habe einen Eintrag fhem unter storage\etc\init.d gefunden.
Wie müsste ich denn den Linux Shutdown Befehl in FEHM verpacken? {qx("shutdown -h now")} ?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

betateilchen

Du musst dafür sorgen, dass fhem den Befehl überhaupt ausführen darf, also musst Du den user fhem in /etc/sudoers eintragen und dort den Befehl shutdown (oder halt) für die Ausführung ohne Passwort zulassen. Wie das geht, findest Du in den manpages zu sudoers.

Danach reicht ein `/usr/bin/sudo halt` von fhem aus, um den Rechner runterzufahren. Fhem selbst wird dabei automatisch korrekt beendet.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

"shutdown -h" hätte den Vorteil, das Du anstatt dem "now" auch eine Zeitangabe geben könntest. Ich würde allerdings auch "nur" ein halt versuchen.

Aber mal eine andere Frage:
Warum willst Du Ihn denn so runterfahren?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

FHEMAN

Hallo Wernieman, hallo betateilchen,
danke für euren Input. Damit komme ich bestimmt weiter. Ich werde mein Ergebnis posten. Es geht mir darum, den Cubie bei Akkugebrauch kontrolliert herunterzufahren bei 15%. Und das ohne Cronjobs und Linux Scripte. Alles aus einer Fhem Hand sozusagen.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

FHEMAN

#7
Es klappt wunderbar! Danke nochmal! Hier die Zusammenfassung:

In Telnet:
sudo visudo oder sudo nano /etc/sudoers

In der /etc/sudoers Datei folgendes hinzufügen:
# Cmnd alias specification
Cmnd_Alias SHUTDOWN_HALT_REBOOT = /sbin/shutdown, /sbin/halt, /sbin/reboot

# User privilege specification
fhem ALL = NOPASSWD: SHUTDOWN_HALT_REBOOT


In FHEM funktionieren nun folgende Kommandos:
{system("/usr/bin/sudo shutdown -r now")}
{system("/usr/bin/sudo shutdown -h 1")}
{system("/usr/bin/sudo halt")}
{system("/usr/bin/sudo reboot")}


Wobei die Befehle FHEM scheinbar stilllegen. Also kann man sich die Zeitangabe sparen und muss alles wichtige vorher erledigen (Logs, Alerts..).
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

betateilchen

kaum macht man es richtig, schon klappts  8)

Wobei ich die Aufgabenstellung, einen Rechner bei Stromausfall kontrolliert herunterzufahren, immer auf Betriebssystemebene lösen würde und nicht innerhalb einer "Nutz-Anwendung" auf dem Rechner selbst. Aber das ist Geschmackssache.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

Deshalb war mein Vorschlag:

/usr/bin/sudo shutdown -h 5 &

mit dem & in den Hintergrund schicken

und dann FHEM quitten ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen

Völlig unnötig. Fhem wird bei einem shutdown oder halt automatisch korrekt beendet. Dafür gibt es schließlich init-Skripts.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

FHEMAN

#11
Mit Werniemans Lösung kann ich vermutlich noch ein paar FHEM Aktionen (zu Ende) durchführen, wie Logging, Pushnachricht. Das teste ich noch, denn das wäre noch das i-Tüpfelchen!

Allerdings:
ich wollte gerade weitere Berechtigungen mit sudoers testen und habe mir die Datei und damit sudo zerschossen... shit! Ich kann ja nicht mal mehr eine frische Datei rüberkopieren. pkexec gibt es nicht und mit root am Samba Share anmelden geht auch nicht.
Was kann ich da tun?

Ich konnte meinen Schmutz zum Glück bereinigen mittels:
su -c visudo
Beim Speichern fragt visudo auch noch einmal extra nach, wenn da Müll drin steht. Also für alle anderen Linux Noobs: Genau lesen bzw. OBACHT beim Bearbeiten der sudoers!
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

betateilchen

Zitat von: derron am 25 März 2015, 20:04:10
Mit Werniemans Lösung kann ich vermutlich noch ein paar FHEM Aktionen (zu Ende) durchführen, wie Logging, Pushnachricht. Das teste ich noch, denn das wäre noch das i-Tüpfelchen!

Nein. Ein shutdown sollte immer der letzte Befehl sein, den Du von fhem aus ausführst. Alles andere kannst Du doch problemlos vorher erledigen.


Wieso Du keine neue Datei /etc/sudoers anlegen kannst, verstehe ich nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

FHEMAN

Zitat von: betateilchen am 25 März 2015, 20:15:44
Nein. Ein shutdown sollte immer der letzte Befehl sein, den Du von fhem aus ausführst. Alles andere kannst Du doch problemlos vorher erledigen.
Ich habe eine Funktion SendMessage(... Log,Mail,Pushover) in der myUtils.pm, welche scheinbar nicht zu Ende abgearbeitet wird. Bzw. sieht es so aus, als würde FHEM die Abarbeitung nicht abwarten, denn ich bekomme im Fall des anschließenden Shutdowns keine Nachricht. Ich habe das jetzt aber auch nicht in aller Gründlichkeit getestet!
Zitat von: betateilchen am 25 März 2015, 20:15:44
Wieso Du keine neue Datei /etc/sudoers anlegen kannst, verstehe ich nicht.
Weil mir die Berechtigung dazu fehlte.
derron@cubie:/opt/fhem$ sudo nano /etc/sudoers
sudo: parse error in /etc/sudoers near line 19
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Wernieman

Da FHEM nach sendes shutdown nicht mehr weiter macht, da es auf abarbeitung des Befehles wartet, ist es logisch, das Deine anderen Elemente nicht mehr ausgeführt werden.

Welche Berechtigungen liegen denn eigentlich bei Dir auf der /etc/sudoers?

also
ls -lha /etc/sudoers

Hast Du eventuell für root ein Passwort vergeben? Wenn ja, probiere mal ein
su -

Ansonsten könntest DU nur noch über eine RettungsCD (Linux-Boot-CD) in Dein System kommen und die Datei reparieren....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html