Hallo in die Runde,
ich habe folgendes Problem.
Ich betreibe ein Raspsberry mit OH3. Damit lese ich mit dem Smart Meter Binding meinen Stromzähler über die optische Schnittstelle aus. Die Schnittstelle am Raspberry ist ein USB Eingang(/dev/ttyUSB0), welches wunderbar funktioniert. Nun habe ich (warum auch immer) auf meinem Home-Server eine virtuelle Maschine aufgesetzt mit dem Betriebssystem "Debian 11". Darauf läuft OH3 im Docker . Leider bekome ich dort das Smart Meter Binding über die USB Schnittstelle nicht zum laufen. Der einzige Unterschied (meiner Meinung nach) ist, dass auf dem Raspberry das BS Debian mit root-Rechten läuft. Dort kann ich die Schnittstelle direkt ansprechen (echo "Hello World" > /dev/ttyUSB0 && echo "ok" || echo "NOK"). Auf der virtuellen Maschine geht das nur wenn ich mich zuvor mit Root-Rechten anmelde(su root). Der Standardbenutzer hat diese Rechte nicht. Kann es sein das Openhab die Rechte für den Zugriff auf die serielle Schnittstelle in diesem Fall nicht hat:?:
Viele Grüße
Jan
OH3 Berechtigung serielle Schnittstelle
-
- Beiträge: 13
- Registriert: 23. Feb 2022 18:21
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: OH3 Berechtigung serielle Schnittstelle
Es kommt nur darauf an, wem die Schnittstelle gehört
Aber im Zusammenhang mit openHAB in einem Docker Container musst Du drei Stufen korrekt konfigurieren, damit es funktioniert.
Stufe 1: Host. Hier musst du eine udev Rule anlegen, welche über die Hardware Id den USB-Stick erkennt und genau diesen einem festen Gerätenamen zuweist. Ansonsten kann es passieren, dass der Stick unter unterschiedlichen Namen erreichbar ist, je nachdem, was drum herum so passiert.
In der udev Rule kannst Du auch dafür sorgen, dass der Stick für bestimmte User zur Nutzung freigegeben ist.
Stufe 2: Die Schnittstelle muss in den Container hineingereicht werden,
Stufe 3: innerhalb des Docker Containers muss die Schnittstelle an openHAB weitergereicht werden.

Stufe 1: Host. Hier musst du eine udev Rule anlegen, welche über die Hardware Id den USB-Stick erkennt und genau diesen einem festen Gerätenamen zuweist. Ansonsten kann es passieren, dass der Stick unter unterschiedlichen Namen erreichbar ist, je nachdem, was drum herum so passiert.
In der udev Rule kannst Du auch dafür sorgen, dass der Stick für bestimmte User zur Nutzung freigegeben ist.
Stufe 2: Die Schnittstelle muss in den Container hineingereicht werden,
Stufe 3: innerhalb des Docker Containers muss die Schnittstelle an openHAB weitergereicht werden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 13
- Registriert: 23. Feb 2022 18:21
Re: OH3 Berechtigung serielle Schnittstelle
Hallo Udo, vielen Dank erstmal für deine Antwort. Ich habe nun eine udev rule angelegtmund mit der SerialNr des Sticks einen festen Namen zugewiesen. Dann habe ich in der docker-compose.yaml folgendes hinzugefügt:
volumes:
- /dev/serial/by-id/:/dev/serial/by-id
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
- /dev/ttyUSB1:/dev/ttyUSB1
Nun fehlt mir aber die Stufe 3. Dort komme ich leider nicht weiter.
Hat dort jemand vielleicht ein Beispiel für mich ?
Viele Grüße Jan
volumes:
- /dev/serial/by-id/:/dev/serial/by-id
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
- /dev/ttyUSB1:/dev/ttyUSB1
Nun fehlt mir aber die Stufe 3. Dort komme ich leider nicht weiter.
Hat dort jemand vielleicht ein Beispiel für mich ?
Viele Grüße Jan
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: OH3 Berechtigung serielle Schnittstelle
Erst mal: Das Volume brauchst Du nicht, da sind ohnehin nur symbolische Links auf die Devices drin.
Stattdessen gibt es in der docker-compose.yml für openHAB auch noch die Option, Umgebungsvariablen für den Container zu setzen. der Parameter lautet environment. Dort setzt Du die Umgebungsvariable EXTRA_JAVA_OPTS.
In https://hub.docker.com/r/openhab/openhab ist das eigentlich ganz gut beschrieben (bis auf ein konkretes Beispiel für das serielle Device... untter einem unscheinbaren Link landest Du hier: https://www.openhab.org/docs/administration/serial.html und leider steht selbst da nur innerhqalb des Textes, dass EXTRA_JAVA_OPTS mit dem Parameter -Dgnu.io.rxtx.SerialPorts=/dev/ttyUSB0:/dev/ttyUSB1: ergänzt werden muss. Falls schon ein Parameter angegeben ist, setzt Du zwischen die Parameter ein Leerzeichen. Falls bereits serielle Schnittstellen durchgereicht werden, ergänzt Du Deine hinter den vorhandenden:
Ich hab das jetzt nicht ausprobiert
aber so sollte es passen. Wahlweise kann man die Volumes natürlich auch anders einbinden.
Stattdessen gibt es in der docker-compose.yml für openHAB auch noch die Option, Umgebungsvariablen für den Container zu setzen. der Parameter lautet environment. Dort setzt Du die Umgebungsvariable EXTRA_JAVA_OPTS.
In https://hub.docker.com/r/openhab/openhab ist das eigentlich ganz gut beschrieben (bis auf ein konkretes Beispiel für das serielle Device... untter einem unscheinbaren Link landest Du hier: https://www.openhab.org/docs/administration/serial.html und leider steht selbst da nur innerhqalb des Textes, dass EXTRA_JAVA_OPTS mit dem Parameter -Dgnu.io.rxtx.SerialPorts=/dev/ttyUSB0:/dev/ttyUSB1: ergänzt werden muss. Falls schon ein Parameter angegeben ist, setzt Du zwischen die Parameter ein Leerzeichen. Falls bereits serielle Schnittstellen durchgereicht werden, ergänzt Du Deine hinter den vorhandenden:
Code: Alles auswählen
version: '2.2'
services:
openhab:
image: "openhab/openhab:3.4.2"
restart: always
network_mode: host
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
- "openhab_addons:/openhab/addons"
- "openhab_conf:/openhab/conf"
- "openhab_userdata:/openhab/userdata"
environment:
CRYPTO_POLICY: "unlimited"
EXTRA_JAVA_OPTS: "-Duser.timezone=Europe/Berlin -Dgnu.io.rxtx.SerialPorts=/dev/ttyUSB0:/dev/ttyUSB1:"
OPENHAB_HTTP_PORT: "8080"
OPENHAB_HTTPS_PORT: "8443"
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
- /dev/ttyUSB0:/dev/ttyUSB1
volumes:
openhab_addons:
driver: local
openhab_conf:
driver: local
openhab_userdata:
driver: local

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet