Einrichtung des Sonoff Dongles als Thread Border Router

Hallo liebe Community,

ich bin recht neu in der Smart Home-Welt. Kurz zum Hintergrund: Seit einigen Jahren hatte ich einige Smart Plugs und Temperatur/Luftfeuchtigkeitssensoren mit der Smart Life-App (Tuya) in Gebrauch – vor allem zur Verbrauchsmessung und zum zeitgesteuerten Schalten von Beleuchtung aber auch Lüftungen.

Seit ein paar Wochen habe ich einen Server mit Linux (Ubuntu auf einem x64-System) ausgestattet. Darauf läuft Home Assistant im Docker (das ist wichtig für die weitere Betrachtung, denke ich). Da ich HA im Docker-Container betreibe, ist es kein HA-OS und ich kann nicht mit Apps in HA arbeiten.

Die alten Geräte habe ich über LocalTuya eingebunden und die Automationen, die ich bisher über Smart Life hatte, sind eingerichtet. Die Temperatursensoren können wohl nicht mit HA betrieben werden, da würde ich gerne auf IKEAS Timmerflotte umsteigen, wenn die denn mal wieder zu kaufen sind. Ich möchte nun direkt zu Matter over Thread gehen und habe mir dazu einen SONOFF Zigbee 3.0 USB Dongle Plus MG24 mit dem EFR32MG24 Chip gekauft, den ich als Thread Border Router konfigurieren möchte.

Da ich keine Linux Vorerfahrung habe, habe ich mich von KI (Microsofts Copilot) durch die Einrichtung meines Ubuntu-Servers leiten lassen. Das hat auch gut geklappt. Beim Einrichten des Sonoff Dongles kommen Copilot und ich aber an unsere Grenzen.

Und damit wende ich mich nun an die Community und hoffe auf eure Erfahrungen und freue mich über Ratschläge: Ich erhalte keinen Zugriff auf den Dongle. Was ich bisher gemacht habe:

Erst nur den Dongle am Linux-Server angeschlossen. Da wurde er in HA als ZigBee-Dongle erkannt. Daraufhin habe ich auf der offiziellen Sonoff-Seite die Firmware auf Open Thread geflashed.

Copilot hat mir bei der Einrichtung der Netzwerkverbindung und Erstellen des Docker-Containers für Open Thread Border Router geholfen.

Copilot meint nun, dass der Dongle von Linux lokal deswegen nicht funktioniert, weil die Firmware von der Sonoff-Seite kein RCP wäre, sondern den Dongle nur wie ein Thread-Gerät einrichtet. Es müsste eine andere Firmware geflashed werden, die das ermöglicht. Diese Firmware müsste aber auch im Docker funktionieren.

Hier die Ausgabe aus dem Linux-Server:

/ot-br-posix$ docker logs otbr s6-rc: info: service s6rc-oneshot-runner: starting s6-rc: info: service s6rc-oneshot-runner successfully started s6-rc: info: service fix-attrs: starting s6-rc: info: service fix-attrs successfully started s6-rc: info: service legacy-cont-init: starting s6-rc: info: service legacy-cont-init successfully started s6-rc: info: service otbr-agent: starting Configuring OpenThread firewall... ip6tables: Chain already exists. Configuring OpenThread NAT64... Starting otbr-agent... [NOTE]-AGENT---: Running 0.3.0-ca15c52 [NOTE]-AGENT---: Thread version: 1.4.0 [NOTE]-AGENT---: Thread interface: wpan0 [NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyUSB0?uart-baudrate=1000000 [NOTE]-AGENT---: Radio URL: trel://enp0s31f6 [NOTE]-ILS-----: Infra link selected: enp0s31f6 [INFO]-RCP_HOS-: OpenThread log level changed to 5 50d.02:17:47.579 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:0, cmd:RESET 50d.02:17:47.579 [D] P-SpinelDrive-: Waiting response: key=0 50d.02:17:49.582 [W] P-SpinelDrive-: Wait for response timeout 50d.02:17:49.582 [I] P-SpinelDrive-: co-processor self reset successfully 50d.02:17:49.582 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:PROTOCOL_VERSION 50d.02:17:49.582 [D] P-SpinelDrive-: Waiting response: key=1

Wenn ich über Open Thread Border Router in HA auf den Dongle zugreifen möchte (REST-API), erhalte ich unter der Server-IP und dem Port 8081 keine Verbindung.

Hat jemand einen Tipp für mich? Ich freue mich riesig über Antworten.

Also grundsätzlich funktioniert das Setup wie du es vorhast schon. Die Aussage von Copilot ist auf jeden Fall falsch, aber LLMs halluzinieren ja auch gerne herum. Wenn du dem Englischen mächtig bist kannst du dir mal den Thread hier im HomeAssistant Forum ansehen, dort wurde das Thema ausführlich behandelt:

(Hier noch der Link auf den konkreten Beitrag in dem ein funktionierendes Setup genannt wird: HA Docker with OTBR docker - #16 by D34DC3N73R - Matter/Thread - Home Assistant Community)

Insgesamt ist das ganze aber nicht trivial und bedarf einiger zusätzlicher Einstellungen, damit der OTBR in dem Docker-Container auch in der Lage ist sich sein IPv6-Präfix zu erstellen. Könntest du deine Logs bitte untereinander darstellen, so kann man dir nur sehr mühselig durchsehen und nach Auffälligkeiten suchen. Was mir aber auf jeden Fall hier schon einmal auffällt ist die Baud-Rate, wie bist du zu diesem Wert gekommen?

Und könntest du noch dein Docker-Compose File hier posten, vielleicht findet man da auch etwas.

Hallo Felix,

ganz vielen herzlichen Dank für deine Tipps. Der Link hat mich auf die richtige Spur gebracht und ich habe meinen Sonoff-Dongle als Thread Border Router im Docker-Compose einrichten können.

Es war noch ein weiter Weg mit vielen Stolpersteinen – aber nun läuft es korrekt und ich kann mit Thread starten.

Zu dem KI-Thema: Ja, Copilot hat da fantasiert und in dem ganzen Prozess manches Mal seltsame Wege genommen. Andererseits habe ich bis ich hiermit angefangen habe nicht einen Linux-Befehl gekannt. Ohne die KI-Unterstützung wäre ich gar nicht dorthin gekommen. Da geht es mir dann nicht allein um das Ergebnis, sondern auch um das Lernen auf dem Weg dahin.

Entschuldige bitte die fehlenden Zeilenumbrüche; ich hoffe diesmal ist die yml besser lesbar

Ein paar Feststellungen, die ich hier für andere machen kann:

  • Der Sonoff Dongle Plus (EFR32MG24) funktioniert mit der Firmware aus dem offiziellen Sonoff Web Flasher als RCP Thread Border Router mit OpenThreadBorderRouter im Ubuntu docker-compose.
  • Die Baudrate muss die 460800 sein.
  • Flow Control sollte disabled sein
  • IPv6 machte bei mir kein Problem, ich glaube dafür ist “NAT64=0” zuständig

Hier noch meine aktuelle docker-compose.yml – so funktioniert es bei mir:

version: "3.9"

services:
  homeassistant:
    container_name: homeassistant
    image: ghcr.io/home-assistant/home-assistant:stable
    restart: unless-stopped
    privileged: true
    network_mode: host
    environment:
      - TZ=Europe/Berlin
    volumes:
      - ./config:/config

  otbr:
    container_name: otbr
    image: openthread/otbr:latest
    restart: unless-stopped
    network_mode: host
    privileged: true
    environment:
      - OTBR_AGENT_OPTS=spinel+hdlc+uart:///dev/ttyUSB0?uart-baudrate=460800
      - NAT64=0
      - FIREWALL=0
      - WEB_GUI=1
      - BACKBONE_INTERFACE=enp0s31f6
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
      - /dev/net/tun:/dev/net/tun
    volumes:
      - /dev/net/tun:/dev/net/tun
  matter-server:
    container_name: matter-server
    image: ghcr.io/home-assistant-libs/python-matter-server:stable
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./matter:/data

Nochmals vielen Dank und beste Grüße!

3 „Gefällt mir“