Konfiguracja modemu GSM USB w Proxmox i Home Assistant

Mark
Autor
Konfiguracja modemu GSM USB w Proxmox i Home Assistant

Podoba Ci się ten artykuł?

Tworzenie poradników zajmuje dużo czasu, a na stronie nie chce reklam. Jeśli pomogłem i masz na to ochotę — postaw mi kawę . To motywuje do dalszego pisania!

W pierwszej części serii ustaliliśmy, po co w ogóle podłączać stary modem USB do Home Assistant. Dziś bierzemy się za sprzęt. I choć kusi, żeby od razu wpiąć modem do HA i klikać, zrobimy to inaczej. Najpierw modem musi udowodnić, że działa na poziomie systemu.
Ten artykuł jest opcjonalny
Ta część dotyczy wyłącznie sytuacji, w której Home Assistant chodzi w maszynie wirtualnej na Proxmoxie i modem trzeba do niej przekazać. Jeśli masz Home Assistant OS na dedykowanym sprzęcie (np. Raspberry Pi, Home Assistant Green, mini PC) albo Home Assistant Container bezpośrednio na hoście, po prostu wpinasz modem do portu USB i przechodzisz od razu do części trzeciej, czyli instalacji integracji. Nic tu nie jest wymagane, jeśli nie masz Proxmoxa.

Dlaczego zaczynamy od Proxmoxa

Zanim modem trafi do Home Assistant, sprawdzamy go na hoście Proxmox. Powód jest prosty: kiedy coś nie działa, chcesz wiedzieć, które ogniwo zawiodło. A możliwych winowajców jest sporo:
sam modem (wiek robi swoje),
karta SIM (PIN, simlock, nieaktywna karta),
sterownik USB w systemie,
zasilanie portu USB (klasyka na tanich kablach i hubach),
przekazanie USB do maszyny wirtualnej,
i dopiero na końcu integracja w HA.
Zasada tej części
Najpierw udowadniamy, że Linux potrafi wysłać SMS. Dopiero potem przekazujemy modem do Home Assistant. Jeśli SMS nie wychodzi z hosta, żadna integracja tego nie naprawi.

Krok 1: Podłączenie modemu i identyfikacja

Wpinamy modem bezpośrednio do portu USB w serwerze. Bez huba, bez przedłużaczy, przynajmniej na etapie testów. Potem w konsoli hosta:
lsusb
dmesg | tail -n 50
lsusb -t
Zapisz sobie parę Vendor:Device ID, bo przyda się przy przekazywaniu urządzenia do VM. Dla mojego ZTE MF192 to 19d2:1519. W dmesg zobaczysz, czy jądro w ogóle rozpoznało urządzenie i jakie porty mu przypisało.

Krok 2: Tryb pamięci masowej kontra tryb modemu

Tu leży najczęstsza pułapka starych modemów. Spora część z nich po wpięciu udaje płytę CD ze sterownikami dla Windowsa. W tym trybie porty AT nie istnieją albo są bezużyteczne. Objawy poznasz od razu:
lsusb widzi urządzenie, ale jako storage,
brak /dev/ttyACM* i /dev/ttyUSB*,
ModemManager nie widzi żadnego modemu.
Rozwiązaniem jest usb_modeswitch albo automatyczne przełączenie przez ModemManager, który w nowszych wersjach radzi sobie z większością popularnych modeli sam. Po poprawnym przełączeniu w systemie pojawiają się porty szeregowe:
/dev/ttyUSB0, /dev/ttyUSB1
albo
/dev/ttyACM0, /dev/ttyACM1
Uwaga na ZTE
Na wielu modemach ZTE właściwy port AT to nie pierwszy z listy. Modem wystawia kilka portów: jeden do diagnostyki, jeden do transmisji danych, jeden do komend AT. Na MF192 komendom AT odpowiada /dev/ttyACM1, a nie ttyACM0. Jeśli port milczy, zanim uznasz modem za zepsuty, sprawdź pozostałe.

Krok 3: Instalacja ModemManager

ModemManager to najwygodniejsze narzędzie do testu całej ścieżki, od USB po sieć GSM:
apt update
apt install modemmanager
systemctl enable --now ModemManager
mmcli -L
mmcli -m 0
mmcli -L listuje wykryte modemy, a mmcli -m 0 pokazuje szczegóły pierwszego z nich: stan SIM, siłę sygnału, rejestrację w sieci, operatora. Jeśli tu wszystko gra, jesteś w 80% drogi.

Typowe problemy i co sprawdzić

Problem
Co sprawdzić
No modems were found
USB, tryb storage, przekazanie do VM, kabel, zasilanie portu
sim-missing
karta SIM, tacka, PIN, uszkodzona lub źle włożona karta
Karta działa w telefonie, nie w modemie
PIN, simlock operatora, bardzo stary modem bez wsparcia dla nowszych kart
Modem już przekazany do VM
host go nie zobaczy, wtedy testy robisz z poziomu HA, nie Proxmoxa
Zły port
kilka portów ttyACM/ttyUSB, ale tylko jeden odpowiada na AT

Krok 4: Wysłanie testowego SMS z Proxmoxa

Moment prawdy. Dwie komendy i patrzymy na telefon:
mmcli -m 0 --messaging-create-sms="number='+48XXXXXXXXX',text='Test z Proxmox'"
mmcli -s 0 --send
Jeśli SMS dojdzie, masz potwierdzenie całej ścieżki sprzętowej: modem, sterownik, karta SIM, rejestracja w sieci, wysyłka. Od tego momentu każdy problem w HA będzie problemem konfiguracji, a nie sprzętu. To ogromna oszczędność czasu przy debugowaniu.

Test ręczny portu AT (bez ModemManager)

Jeśli wolisz zajrzeć modemowi prosto w port, zainstaluj minicom:
apt install minicom
minicom -D /dev/ttyACM1 -b 115200
W minicom wpisz kolejno:
AT          → test życia, odpowiedź OK
AT+CPIN?    → stan karty SIM (READY = gotowa)
AT+CSQ      → siła sygnału
AT+CREG?    → rejestracja w sieci
AT+COPS?    → operator
Oczekiwane odpowiedzi to OK oraz linie zaczynające się od +CPIN, +CSQ, +CREG i +COPS. Jeśli port milczy całkowicie, spróbuj kolejnego z listy.
Jest też wersja dla niecierpliwych, jednorazowy test w czystym bashu:
PORT=/dev/ttyACM1
stty -F $PORT 115200 raw -echo
echo -e "AT\r" > $PORT
timeout 2 cat $PORT
Widzisz OK? Port żyje i to jest ten port, który podasz później integracji.

Krok 5: Przekazanie modemu do VM z Home Assistant

Kiedy modem działa na hoście, oddajemy go maszynie wirtualnej. W interfejsie Proxmoxa:
Wybierz VM z Home Assistant → zakładka Hardware → Add → USB Device
Wskaż urządzenie po Vendor/Device ID, np. 19d2:1519
Zapisz, urządzenie zostaje przypięte na stałe
Dlaczego po ID, a nie po porcie
Przekazanie po Vendor/Device ID przeżyje przepięcie modemu do innego gniazda USB. Przekazanie po fizycznym porcie już nie. Przy urządzeniu, które ma działać latami bez dotykania, to spora różnica.
Przekazanie modemu GSM do maszyny wirtualnej w Proxmox po Vendor Device ID
Pamiętaj: od momentu przekazania host przestaje widzieć modem. ModemManager na Proxmoxie zgłosi „No modems were found” i to jest prawidłowe zachowanie, nie awaria. Jeśli ModemManager zostawiłeś włączonego tylko do testów, możesz go teraz wyłączyć, żeby przypadkiem nie walczył o port przy kolejnych testach na hoście.

Bonus: automatyzacja testu modemu po restarcie HA

Ten YAML przyda się dopiero po instalacji integracji z części trzeciej, ale zostawiam go tutaj, bo domyka temat testowania. Po każdym restarcie HA modem sam sprawdza, czy żyje, i melduje wynik:
Diagnostyka jest asynchroniczna: usługa gsm_modem.run_diagnostics uruchamia test i po chwili integracja publikuje zdarzenie gsm_modem_diagnostics z wynikiem w polu ok. Zamiast zgadywać opóźnieniem, ile poczekać na wynik, druga automatyzacja po prostu nasłuchuje tego zdarzenia:
alias: "DOM - uruchom test modemu po restarcie HA"
mode: single
trigger:
  - platform: homeassistant
    event: start
action:
  - delay:
      seconds: 180
  - action: gsm_modem.run_diagnostics

---
alias: "DOM - wynik testu modemu po restarcie"
mode: single
trigger:
  - platform: event
    event_type: gsm_modem_diagnostics
action:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ trigger.event.data.ok }}"
        sequence:
          - action: gsm_modem.send_sms
            data:
              number: "+48XXXXXXXXX"
              message: "DOM: Modem GSM OK po restarcie HA."
    default:
      - action: gsm_modem.send_sms
        data:
          number: "+48XXXXXXXXX"
          message: "DOM: UWAGA - problem z modemem po restarcie HA."
To dwie osobne automatyzacje w jednym bloku (rozdzielone linią ---), wklej je do YAML osobno. Druga uruchomi się przy każdej diagnostyce, więc jeśli używasz jej też ręcznie z poziomu przycisku „Uruchom test połączenia”, dostaniesz SMS po każdym kliknięciu, nie tylko po restarcie. To nie zastępuje testów z tego artykułu, to dodatkowa warstwa kontroli już po wdrożeniu integracji, żeby modem nie umarł po cichu na kilka tygodni, zanim będzie naprawdę potrzebny.

Checklist: co oznacza sukces na tym etapie

modem widoczny w systemie z portami szeregowymi,
karta SIM w stanie READY,
rejestracja w sieci operatora,
wysłany i odebrany testowy SMS,
zapisany właściwy port AT (u mnie /dev/ttyACM1),
modem przekazany do VM po Vendor/Device ID.

Podsumowanie

Proxmox to nasz warsztat diagnostyczny, Home Assistant to warstwa inteligencji. Jeśli modem nie wysyła SMS z hosta, integracja HA cudów nie zrobi. Ale jeśli test przeszedł, dalsza część to już czysta przyjemność klikania w interfejsie.
W następnej części
W części trzeciej instalujemy integrację GSM Modem w Home Assistant, przechodzimy przez kreator konfiguracji bez ani jednej linijki YAML i wysyłamy testowy SMS jednym przyciskiem z poziomu UI.

Społeczność MarkLabs

Dyskutuj na forum

Pytania, doświadczenia i rozwiązania do tego artykułu publikujemy teraz na forum MarkLabs.

Otwórz dyskusję na forum

Wymagane jest bezpłatne konto MarkLabs. Dotychczasowe komentarze bloga nie są przenoszone.

buycoffee.to