Koordynator Zigbee na RPi

Sprawdzę to:

Ten sposób wyjaśnia, jak uruchomić Zigbee2MQTT z adapterem w odległej lokalizacji. Do tego wykorzystamy ser2net, który pozwala na podłączenie do portu szeregowego nad TCP. W ten sposób można np. skonfigurować Raspberry Pi Zero z adapterem podłączonym podczas uruchamiania Zigbee2MQTT na innym systemie. Poniższe instrukcje muszą być wykonane w systemie, do którego adapter jest podłączony.

Stan zastany:

  1. HA (ethernet, IP 192.168.22.12) uruchomiony NUC’u, koordynator Conbee2 wpięty do portu USB na przedłużaczu USB, zainstalowane Zigbee2MQTT (version 1.41.0) jako dodatek o konfiguracji:

    serial:
       port: /dev/ttyACM0
       adapter: deconz
    
  2. Obok NUCa - RPi3 (Wi-Fi, IP 192.168.22.6) z Raspbian GNU/Linux 12 (bookworm) 32-bit z monitoringiem UPSa po USB.

Stan oczekiwany:

  1. RPi3, koordynator Conbee2 wpięty do portu USB na przedłużaczu USB, uruchomione ser2net
  2. HA, zainstalowane Zigbee2MQTT (version 1.41.0) jako dodatek o konfiguracji:
    serial:
       port: tcp://192.168.22.6:20108
       adapter: deconz
    

Co należy zrobić:
Na RPi3 zainstalować pakiet ser2net:

macek@raspberrypi:~ $sudo apt-get install ser2net

Zainstalowana wersja to:

ser2net/stable,now 4.3.11-1 armhf [installed]

czyli edytować należy plik konfiguracyjny /etc/ser2net.yaml.
Zatrzymać Z2M, przełożyć Conbee do portu RPi, zweryfikować port pod jakim dostępny jest stick:

macek@raspberrypi:~ $ dmesg
...
[5750258.173835] usb 1-1.4: new full-speed USB device number 12 using dwc_otg
[5750258.308213] usb 1-1.4: New USB device found, idVendor=1cf1, idProduct=0030, bcdDevice= 1.00
[5750258.308228] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[5750258.308237] usb 1-1.4: Product: ConBee II
[5750258.308243] usb 1-1.4: Manufacturer: dresden elektronik ingenieurtechnik GmbH
[5750258.308250] usb 1-1.4: SerialNumber: DE2158357
[5750258.309493] cdc_acm 1-1.4:1.0: ttyACM0: USB ACM device
...

Stick dostępny jest pod /dev/ttyACM0.
Edytujemy plik /etc/ser2net.yaml:

macek@raspberrypi:~ $ sudo nano /etc/ser2net.yaml

Nalepiej zakomentować (dodając na początku znak #) wszystkie wpisy i dodać poniższą konfigurację uwzględniając port /dev/ttyACM0:

connection: &con01
  accepter: tcp,20108
  connector: serialdev,/dev/ttyACM0,115200n81,nobreak,local
  options:
    kickolduser: true

Po każdej edycji pliku konfiguracyjnego należy zrestartować usługę ser2net:

macek@raspberrypi:~ $ sudo service ser2net restart

i sprawdź czy uruchomiła poprawnie:

macek@raspberrypi:~ $ sudo service ser2net status
● ser2net.service - Serial port to network proxy
     Loaded: loaded (/lib/systemd/system/ser2net.service; enabled; preset: enabled)
     Active: active (running) since Thu 2024-12-05 22:17:57 CET; 37s ago
       Docs: man:ser2net(8)
   Main PID: 13050 (ser2net)
      Tasks: 1 (limit: 1568)
        CPU: 30ms
     CGroup: /system.slice/ser2net.service
             └─13050 /usr/sbin/ser2net -n -c /etc/ser2net.yaml -P /run/ser2net.pid

Dec 05 22:17:57 raspberrypi systemd[1]: Starting ser2net.service - Serial port to network proxy...
Dec 05 22:17:57 raspberrypi systemd[1]: Started ser2net.service - Serial port to network proxy.

Teraz z dowolnego komputera w sieci należy sprawdzić czy można się podłączyć się do ser2net na RPi3:

C:\Users\macek>telnet 192.168.22.6 20108 

Po prawidłowym połączeniu powinne pojawić się krzaczki lub pusta strona jak poniżej:
image

Jednocześnie na RPi3 można zobaczyć to zestawione połączenie:

macek@raspberrypi:~ $ netstat  | grep 20108
tcp6       0      0 192.168.2.6:20108       192.168.22.40:55509      ESTABLISHED

Widoczny IP 192.168.22.40 to IP komputera, z którego było wykonywane polecenie telnet. Połączenie telnet należy zamknąć naciskając ‘CTRL+]’ a potem ‘q’.
Po takiej weryfikacji można dokonać zmiany w konfiguracji Z2M:

serial:
   port: tcp://192.168.22.6:20108
   adapter: deconz

i ponownie uruchomić Z2M.
Na RPi będzie widoczne tym razem połączenie z HA:

macek@raspberrypi:~ $ netstat  | grep 20108
tcp6       0      0 192.168.2.6:20108       homeassistant.loc:43922 ESTABLISHED
macek@raspberrypi:~ $ ping homeassistant.local
PING homeassistant.local (192.168.22.12) 56(84) bytes of data.
64 bytes from homeassistant.local (192.168.22.12): icmp_seq=1 ttl=64 time=2.08 ms
64 bytes from homeassistant.local (192.168.22.12): icmp_seq=2 ttl=64 time=4.52 ms

Wniosek: wszystko działa prawidłowo tak samo jak wcześniej :slight_smile:.
Do zrobienia:

  • dłuższe testy stabilności rozwiązania
  • wykonanie kilku crash testów aby mieć pewność, że rozwiązanie jest odporne na awarie i może być używane produkcyjnie.

Do weryfikacji pozostaje czy rozwiązanie to umożliwia jednoczesne połączenie kilku klientów do tego samego udostępnionego portu USB w celu zrelizowania Z2M i ZHA na jednym koordynatorze Zigbee :

macek@raspberrypi:~ $ netstat  | grep 20108
tcp6       0      0 192.168.2.6:20108       homeassistant.loc:44114 TIME_WAIT
tcp6       0      0 192.168.2.6:20108       192.168.22.40:55745      ESTABLISHED

ale nie wygląda to obiecująco na podstawie w/w informacji. Chwila zastanowienia i napewno nie będzie działać jednocześnie dla kilku klientów bo to ten sam przypadek co zgłosił @RobinI30 w Mikrotiku:

Pozostaje przetestować jeszcze jedno rozwiązanie, cdn …

1 polubienie

A czy możemy uruchomić usługę ser2net równolegle na dwóch, różnych portach? Jeśli tak, to czy wówczas będzie dostęp do koordynatora USB dla obu klientów?

@angler @macek … to że nie będzie działać w obu przypadkach mam sprawdzone. Z powodu tego, że drugi serwer nie dostanie dostępu do portu USB. MT to też linux i pewnie ma zaimplementowany jeden z w/w.
Plan mam taki aby zrobić proces, który z jednej strony będzie klientem do serwowanego USB, będzie miał bufor FIFO.
Z drugiej strony chcę uruchomić dwa serwery dla Z2M i ZHA. Pomiędzy jedną a drugą stroną ma być “nadzorca”, który będzie klejkował i oznaczał pakiety - kto jest nadawcą i adresatem. Poglądowo, coś takiego

Taki mechanizm prawdopodobnie jest zaszyty w routerach ZB z ETH.

Tyle w fazie idei. Coś podobnego (prawie) robiłem już dla UPS .
Przewidywane problemy to timeout’y.
Z powodu tego, że jest mi to niepotrzebne - jakoś czasu i motywacji nie mam :wink:

…PS chyba pomyliłem tematy - ale tu zostałem wywołany :wink:
Przenosimy, zostaje czy kasować?

Ciekawy wątek na oficjalnym forum HA z użyciem USB/IP, obecnie powstał AddOn dla łączenia zdalnego urządzeń USB do HAOS.

USB/IP Implementation - Installation / Home Assistant OS - Home Assistant Community