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.