„Czy bateria w czujniku smart home może się rozładować po cichu? Nie w moim domu” – tak Tomasz, jeden z naszych kursantów, opisał punkt wyjścia swojego projektu.
W jego domu Home Assistant zarządza siecią czujników Zigbee – temperatury, otwarcia drzwi. Każdy z nich działa na baterii, a bateria w czujniku smart home ma to do siebie, że rozładowuje się bez ostrzeżenia. Sam Home Assistant udostępnia stan baterii przez lokalne API. Problem w tym, że nikt nie sprawdza tego API codziennie, dopóki jakiś czujnik nie przestanie odpowiadać.
Zamiast poprzestać na prostym odpytaniu API o stany urządzeń, Tomasz połączył lokalną automatykę z modelem AI – tak powstał HA Battery Monitor.

Jak działa aplikacja
Integracja z Home Assistant
Odpytuje lokalne API o stany baterii, jakość sygnału Zigbee (LQI) oraz RSSI dla wszystkich czujników w domu.
Architektura SQLite
Zapisuje zebrane odczyty do lokalnej bazy danych przez SQLAlchemy ORM – pełna historia, bez zbędnego ruchu sieciowego.
Agregacja i optymalizacja promptu
Generuje lekkie zapytanie zredukowane z milionów do około 3 tys. tokenów – tylko najnowsze snapshoty odczytów.
Analiza przez Gemini API
Model AI przetwarza dane i przygotowuje zwięzły, interaktywny raport HTML z przewidywaniami zużycia energii i alertami.
Natywna obsługa w Windows
System pokazuje powiadomienia (Toasts) i otwiera raport w natywnym oknie WebView2 (pywebview).
Krok trzeci jest tu kluczowy. Surowa historia odczytów z bazy SQLite potrafi urosnąć do milionów wpisów – gdyby trafiały do modelu w całości, każde zapytanie kosztowałoby fortunę i czekałoby wieczność. Aplikacja agreguje je do najnowszych snapshotów per czujnik, zanim cokolwiek wyśle do Gemini. Stąd ~3 tys. tokenów zamiast milionów.
Diagnoza, nie tylko liczba
Surowe API Home Assistant zwróciłoby samą liczbę: 22% baterii. HA Battery Monitor idzie dalej – łączy poziom baterii z jakością połączenia radiowego i pyta, dlaczego bateria spada tak szybko.

Dla termometru w sypialni raport wygląda tak: 22% baterii przy LQI 96 i RSSI -76 dBm. Sam poziom baterii teoretycznie wystarczyłby na kilka tygodni pracy, ale słaby sygnał wymusza częste retransmisje z maksymalną mocą nadawczą – a to przyspiesza rozładowanie do szacowanych 1,5–2 tygodni. Model proponuje konkretne działania: rozbudować sieć mesh o routery Zigbee (urządzenia bateryjne same sygnału dalej nie przekazują), dołożyć router w połowie drogi między koordynatorem a sypialnią, i sprawdzić, czy kanał Zigbee (15, 20 albo 25) nie koliduje z pasmem 2,4 GHz własnego Wi-Fi.
Na tym samym przebiegu inne cztery czujniki wypadły gorzej niż w prognozie – trzy z nich były już rozładowane w chwili sprawdzenia:
| Urządzenie | Bateria | LQI (0–255) | RSSI [dBm] | Diagnoza |
|---|---|---|---|---|
| Termometr w salonie | 0% | 252 | -37 | Krytyczny – bateria całkowicie wyczerpana |
| Termometr od podwórka | unavailable | unavailable | unavailable | Krytyczny – brak połączenia (prawdopodobnie rozładowana bateria) |
| Termometr od drogi | unavailable | unavailable | unavailable | Krytyczny – brak połączenia (prawdopodobnie rozładowana bateria) |
| Termometr w sypialni | 22% | 96 | -76 | Ostrzeżenie – słaby zasięg przyspiesza rozładowanie |

Warto zwrócić uwagę na termometr w salonie: LQI 252 (najlepsze możliwe w tej skali) i RSSI -37 dBm (silny sygnał), a mimo to bateria na zerze. To pokazuje, że model nie zgaduje jednej przyczyny dla wszystkich – dobre połączenie po prostu oznacza zwykłe zużycie baterii, a nie problem z siecią, w przeciwieństwie do sypialni.
Zanim jeszcze otworzysz raport
Aplikacja nie czeka, aż ktoś sam ją uruchomi. Dodana do autostartu Windows, wysyła systemowe powiadomienia, gdy tylko wykryje rozładowany czujnik:

Pełny, interaktywny raport otwiera się dopiero na żądanie – w natywnym oknie WebView2, bez przeglądarki.
Konfiguracja na start, potem cisza
Pierwsze uruchomienie sprowadza się do trzech pól: adresu Home Assistant, długowiecznego tokenu dostępowego i klucza do Gemini API.

Po zapisaniu konfiguracji aplikacja działa w tle. Nie trzeba jej pilnować – to ona pilnuje, żeby żaden czujnik temperatury czy otwarcia drzwi nie wyłączył się w najmniej odpowiednim momencie.
Całość powstała w Pythonie i jest open source na GitHubie.

To kolejny z projektów, jakie kursanci StormIT budują dla siebie w trakcie nauki. Zobacz pozostałe albo sprawdź, jak zacząć swój.
