OpenHab 3 in Docker Container Neustarten

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
rexxxx
Beiträge: 24
Registriert: 12. Dez 2019 05:44
Answers: 3

OpenHab 3 in Docker Container Neustarten

Beitrag von rexxxx »

OpenHab läuft bei mir in einem Docker Container.
Ich suche aktuell eine Möglichkeit, mithilfe eines Exec Scripts den Container in dem OpenHab läuft, neu starten zu lassen.
Die gesamte Periphere ist mir klar, ich suche aber noch nach einem Befehl, mit dem ich den Container von innerhalb des Containers neu starten bzw. beenden kann.

Oder ich müsste es anstellen, dass der Exec Befehl den Docker Container verlassen kann und so von außen einen Restart des Containers triggert.
Ich habe dazu aber noch nichts gefunden, weil ich mich noch auf einen Weg von innerhalb des Containers fokussiere.

Über die Konsole im Container habe ich schon die üblichen Befehle versucht (reboot, restart, shutdown, etc.) leider immer mit der Info, dass es den Befehl nicht gibt.

Hat da jemand eine Idee?

Benutzeravatar
udo1toni
Beiträge: 13986
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: OpenHab 3 in Docker Container Neustarten

Beitrag von udo1toni »

Du müsstest dazu den Docker Client installieren, und zwar im Docker Image.
Das Problem dabei: Du musst dann das Image jedes Mal selbst neu bauen, wenn es ein Update gibt.
Deshalb wäre meine bevorzugte Variante, den Reboot von außen zu initiieren, das kann dann von openHAB aus getriggert werden (z.B. per ssh-Zugriff aus dem Container heraus).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

rexxxx
Beiträge: 24
Registriert: 12. Dez 2019 05:44
Answers: 3

Re: OpenHab 3 in Docker Container Neustarten

Beitrag von rexxxx »

Danke für die Info, etwas in der Richtung hatte ich befürchtet. Heißt wieder ein neues Thema, womit ich mich befassen muss.
Bei SSH ist, wenn ich es manuell bediene, weniger ein Problem, aber das log in per Script aus dem Container heraus dürfte problematisch werden.
Und den Container Umbauen, muss ich erstmal schauen, wie das geht.

Danke

rexxxx
Beiträge: 24
Registriert: 12. Dez 2019 05:44
Answers: 3

Re: OpenHab 3 in Docker Container Neustarten

Beitrag von rexxxx »

Der Container hat kein ssh. Und in der openhab Konsole gibt es zwar ssh, da erhalte ich aber immer
"Error executing command: Error executing command ssh: too many arguments specified"
Befehl ist: ssh -p 22 xxx@yyyy

Benutzeravatar
udo1toni
Beiträge: 13986
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: OpenHab 3 in Docker Container Neustarten

Beitrag von udo1toni »

rexxxx hat geschrieben: 17. Feb 2024 08:52Der Container hat kein ssh.
Das ist... ungünstig...

Dann läuft es darauf hinaus, einen Service auf dem Docker Host laufen zu lassen, der von openHAB aus erreichbar ist.
Für mich wäre vermutlich ein Python Script mit mqtt Kommunikation das "einfachste" ;) allerdings habe ich mehrere solche Scripte eh im Einsatz, weiß also ganz gut, wie ich so etwas aufbaue, und mqtt läuft halt auch "sowieso".
Als grobes Gerüst eine mqttclient.py:

Code: Alles auswählen

#!/usr/bin/python

# mqtt Bibliothek einbinden
import paho.mqtt.client as mqtt

# mqtt broker definieren
MQTT_SERVER = 'localhost'
# mqtt port setzen
MQTT_PORT = 1883
# mqtt reconnection Zeit setzen
MQTT_RECONNECT = 60
# übergreordnetes topic setzen
MQTT_PATH = 'docker/'
# command topic setzen
MQTT_COMMAND = 'cmnd'
# state topic setzen
MQTT_STATE = 'state'
# LWT topic setzen
MQTT_LWT = 'LWT'
# full command topic generieren
MY_COMMAND = MQTT_PATH+MQTT_COMMAND
# full state topic generieren
MY_STATE = MQTT_PATH+MQTT_STATE
# full LWT topic generieren
MY_LWT = MQTT_PATH+MQTT_LWT

# Funktion wenn CONNACK empfangen wird
def on_connect(client, userdata, flags, rc):
    # on_connect() bedeuet, dass die funktion auch bei reconnect ausgeführt wird
    client.subscribe(MY_COMMAND)
    # LWT auf 'Online' setzen
    client.publish(MY_LWT,payload="Online",qos=0,retain=True)

# Funktion wenn eine Nachricht empfangen wird
def on_message(client, userdata, msg):
    if str(msg.payload) == 'RESTART':
        # mach was
        # und berichte darüber
        client.publish(MY_STATE, payload='restarting', qos=0, retain=False)

# Hauptprogramm
# Handle setzen
client = mqtt.Client()
# welche Funktion soll beim Verbinden aufgerufen werden
client.on_connect = on_connect
# Welche Funktion soll beim Empfangen einer Nachricht aufgerufen werden
client.on_message = on_message

# LWT setzen (der Broker wird bei Verbindungsverlust das Veröffentlichen übernehmen)
client.will_set(MY_LWT,payload='Offline',qos=0,retain=True)
# Verbindung zum Broker herstellen
client.connect(MQTT_SERVER, MQTT_PORT, MQTT_RECONNECT)

# Auf Nachrichten warten
client.loop_forever()
Es fehlt hier natürlich noch der Befehl, um den Container neu zu starten, aber da dieses Programm auf dem Docker Host läuft, steht der Docker Client zur Verfügung. Eventuell gibt es auch eine Library für den komfortablen Zugriff auf Docker, vergleichbar mit paho.mqtt. Im Zweifel muss man nur ein Socket etablieren und den Restart-Befehl mit dem Namen des Containers an Docker senden.

Das Programm muss natürlich als Service laufen, damit wir uns nicht weiter darum kümmern müssen, wir brauchen also eine mqttclient.service Datei:

Code: Alles auswählen

[Install]
WantedBy=multi-user.target
Type=simple

[Service]
ExecStart=/usr/bin/python /usr/local/sbin/mqttclient.py
User=meinuser
Restart=always
RestartSec=10
Der User meinuser muss die Berechtigung haben, Docker Befehle zu erteilen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

rexxxx
Beiträge: 24
Registriert: 12. Dez 2019 05:44
Answers: 3

Re: OpenHab 3 in Docker Container Neustarten

Beitrag von rexxxx »

@udo1toni
Entschuldige, dass ich mich nicht mehr gemeldet hatte.
Heute erstmal wieder einen Tag gehabt, um mich der Thematik OpenHab wieder mal anzunehmen.

Bislang habe ich mich noch nicht wieder um das Restartproblem gekümmert, da ich aktuell alles auf OH4 hochziehe.


Vielen Dank aber für deine Hilfe.

Grüße
rexxxx

Antworten