Rozpoznawanie urządzeń USB - ulepszenia w wersji Hugo
W związku z dodaniem obsługi zWave, pracujemy nad kilkoma usprawnieniami w temacie USB.
Dotychczas było tak, że Jolka obsługiwała automatycznie tylko adapter Zigbee.
To było proste bo zakładaliśmy, że adapter pojawi się zawsze na porcie /dev/ttyACM0 i ten port obsługiwaliśmy “na sztywno”.
Teraz (od wersji Hugo), jest to bardziej skomplikowane, bo jak ktoś włoży równocześnie adapter Zigbee i Zwave to musimy obsłużyć 2 porty i musimy wiedzieć co jest na którym porcie.
To wcale nie jest proste, bo raz urządzenie może być podłączone do portu /dev/ttyACM0 a innym razem do /dev/ttyACM1 itd… w zależności od tego jak sobie to system Linux ponumeruje.
Rozwiązaliśmy ten problem i poniżej wyjaśniamy jak to działa.
Możliwość wyłączenia automatycznego wykrywania oraz głosowych powiadomień o USB
W nowej wersji dodajemy możliwość wyłączenia rozpoznawania adapterów USB i uruchamiania automatycznie domyślnych usług zigbee i zwave.
Opcje te będą dostępne z poziomu konfiguracji bramki AIS dom:
Opcje te mogą się przydać dla osób które z jakiś względów nie chcą żeby usługi się same uruchamiały po włożeniu adaptera do bramki AIS dom.
Bo np. chcą w inny sposób obsługiwać adaptery, nie przez nasze standardowe usługi zgibee2mqtt i zwavejs2mqtt ale np. przez jakąś integracje z Home Assistant, których mamy od koloru do wyboru
Wykrycie urządzenia powiązanego z portem
Żeby to wykryć jakie urządzenie jest przypisane do jakiego portu, robimy taką komendę w kodzie:
find /sys/devices -name 'ttyACM*'
następnie sprawdzamy kod dostawcy urządzenia usb i kod produktu taką komendą
cat /sys/devices/c9000000.dwc3/xhci-hcd.0.auto/usb1/*/*/*/idVendor
cat /sys/devices/c9000000.dwc3/xhci-hcd.0.auto/usb1/*/*/*/idProduct
wynik łączymy i mamy odpowiedz na jakim porcie jest urządzenie.
To łączenie komend (find, cat, echo) robimy za pomocą komendy exec i wygląda to mniej więcej tak:
find /sys/devices -name 'ttyACM*' -exec echo {} \; -exec cat {}/../../../idProduct {}/../../../idVendor \;
Kto jest producentem urządzenia i jaki to produkt można sprawdzić w Internecie po identyfikatorach
Można też sprawdzić w pliku. To w ten sposób Jolka wie co podłączono do bramki:
Podsumowując
Jeżeli ktoś korzysta z naszych standardowych integracji zigbee2mqtt i zwavejs2mqtt to nie zmieni się nic. Wystarczy, że włożysz obsługiwany adapter usb, system go rozpozna, zmieni konfigurację usługi na odpowiedni port i uruchomi stosowną usługę
Jeżeli ktoś nie chce żeby działo się to z automatu i woli sam uruchamiać usługi, sam zarządzać konfigurację, lub korzystać z innych metod na komunikację z adapterem Zwave i Zigbee, to wystarczy zrobić tak:
Jeżeli dodatkowo nie chcemy żeby Jolka mówiła o dodaniu i usunięciu urządzenia USB, to wystarczy zrobić tak:
To wszystko jest oczywiście skomplikowane… ale to naprawdę nic w porównaniu z protokołem USB
Ta strona do USB będzie jeszcze rozwijana - mamy w tym temacie kilka pomysłów i planów.