Seite 1 von 1
OH3 Berechtigung serielle Schnittstelle
Verfasst: 6. Mär 2023 21:50
von Jimbo
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
Re: OH3 Berechtigung serielle Schnittstelle
Verfasst: 7. Mär 2023 02:43
von udo1toni
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.
Re: OH3 Berechtigung serielle Schnittstelle
Verfasst: 7. Mär 2023 18:50
von Jimbo
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
Re: OH3 Berechtigung serielle Schnittstelle
Verfasst: 8. Mär 2023 07:33
von udo1toni
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:
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
Ich hab das jetzt nicht ausprobiert

aber so sollte es passen. Wahlweise kann man die Volumes natürlich auch anders einbinden.