Cześć,
jakiś czas temu chwaliłem się na Instagramie swoimi osiągnięciami w temacie inteligentnego domu. Wywiązało się z tego kilkanaście ciekawych rozmów, które pokazały, że nie tylko mnie ten temat interesuje. Obiecałem sobie, że jak już potwierdzę stabilność mojej sieci, to napiszę artykuł o tym, co zrobiłem, jak i po co. Właśnie wywiązuję się z tej obietnicy, aapraszam.
Wszystko zaczęło się od remontu mieszkania. Projekt zakładał zabudowę grzejnika, ale drobna zmiana (pomyłka?) sprawiła, że grzejnik prawie w całości znalazł się za panelami stanowiącymi oparciem łóżka i pod półką na książki. Udało się to nieco poprawić, wykonując otwory umożliwiające oddawanie ciepła udało się. Niestety dostęp do termostatu wciąż był ograniczony. Problemem był głównie fakt, że zabudowany termostat ma cieplej niż jest faktycznie w pokoju, grzeje się, co powoduje złe odczyty temperatury i w efekcie szybsze zakręcanie zaworu przez co w pokoju było zimno. Zacząłem szukać sposobu na rozwiązanie tego problemu. Możliwości jest kilka, najciekawsze wydawało mi się podejście z wymianą termostatu na jego inteligentny odpowiednik. Zakupiłem więc zestaw podobny do tego:
Zainstalowałem głowicę przy kaloryferach, a na telefon ściągnąłem aplikacje Tuya Smart Life. W aplikacji połączyłem się z centralą, połączyłem ją z WiFi i sparowałem z termostatem. To umożliwiło mi przekalibrowanie odczytu. Mogłem cieszyć się zdalnie sterowanym termostatem!
Wraz z biegiem czasu okazało się, że świat IoT posiada naprawdę fajnie urządzenia, jak np. żarówki w których możesz zmienić kolor czy natężenie światła. Uważam, że to super sprawa, np. czytając wolę inna barwę światła od tej, którą mam pracując. Do tego jakieś czujniki temperatury, listwa ledowa czy w końcu robot sprzątający.
Brzmi fajnie, ale nie wszystko jest takie bezproblemowe. Każde urządzenie ma swojego producenta i każdy producent dostarcza aplikację do sterowania tymi urządzeniami. Do tego w aplikacjach można tworzyć automatyzacje typu „gdy telefon znajdzie się poza ustalonym położeniem GPS, to zmniejsz docelową temperaturę na termostacie”. Ale nie można łączyć w ten sposób ze sobą urządzeń różnych producentów. Ponadto, każdy producent zbiera na swoich serwerach dane z tych urządzeń, a trochę to dziwne, że jakaś chińska korporacja wie, kiedy jesteś w domu a kiedy nie.
Postanowiłem więc zrobić rewolucję!
Zacznijmy od tego, jak to wszystko działa. Wcześniej wspomniałem, że zamówiłem centralę i termostat. Termostat łączy się z centralą po protokole o nazwie zigbee. Zigbee to lekki protokół bezprzewodowy, idealnie nadający się do IoT. Z Wifi ma tylko tyle wspólnego, że i jeden i drugi jako medium transmisyjne wykorzystują fale radiowe. Centrala łączy się z telefonem (albo przez WiFi bezpośrednio albo przez API konkretnego producenta, nie badałem zbyt dogłębnie), który przez aplikacje pozwala sterować termostatem, wysyłając i odbierając komunikaty z centrali. Czyli gdy na telefonie kliknąłem „zakręć zawór”, to aplikacja wygenerowała specjalny komunikat, który poszedł do centrali, a ona przesłała go do termostatu. Jak widzisz, jest tu pewna translacja protokołów. Centrala zamienia komunikaty z termostatu (np. „wykryłem otwarcie okna, zakręcam zawór”) które przychodzą do niej po protokole zigbee na dane, które potem możesz odczytać w aplikacji. Odwrotnie zachodzi podobny proces tłumaczenia.
No dobra, ale co daje mi wiedza o tym jak to działa?
Moja mała rewolucja miała przede wszystkim pozwolić mi uniezależnić się od konkretnych producentów, tak by bez przeszkód móc łączyć ze sobą różne urządzenia, a tym samym oszczędzać – bo np. włączniki jednego producenta są tańsze od innego. Jak widać po opisie wyżej, każdy producent wykorzystuje dobrze znane protokoły, opakowując je dodatkowymi zabezpieczeniami i sprzedając pod własną marką. Nic w tym złego. Ale daje nam to pewne pole do popisu. No bo skoro komunikacja pomiędzy termostatem a centralą jest po protokole zigbee, to co by się stało, gdyby centrala nie miała opakowania konkretnego producenta?
Zacząłem zgłębiać temat dalej i okazało się, że jest sposób by zamiast bramek (to znacznie lepsza nazwa niż „centrala”, więc od teraz będę jej używał) producenta stworzyć własną bramkę i z wykorzystaniem rozwiązań opensource móc sterować urządzeniami sparowanymi z tą bramką.
Aby móc to zrobić, kupiłem:
Koszt całości to okolice 800zł.
Kartę SD włożyłem do Rasbberry, kablem podłączyłem go do monitora i zainstalowałem system (jakaś dedykowana dystrybucja Debiana). Skonfigurowałem ssh i VPNa (TailScale), odciąłem dostęp z zewnątrz i na koniec zainstalowałem aplikację HomeAssistant (supervised).
HomeAssistant to wolnoźródłowa aplikacja do zarządzania smarthome’em. Co ciekawe – napisana w Pythonie. Pozwala ona, przy pomocy kilku pluginów i tego sticka CC2531, stworzyć sieć Zigbee. Technologicznie sieć Zigbee obsługuje trzy typy urządzeń:
Sytuacja z samego początku artykułu, ta z termostatem i centralą, to po prostu kooordynator (czyli centrala) i urządzenie końcowe (czyli termostat).
Moja mała rewolucja po prostu (albo aż!) wymieniła koordynatora. Z tego dedykowanego dla urządzeń konkretnego producenta na własnego.
Żeby HomeAssistant mógł zacząć zarządzać siecią Zigbee musi mieć doinstalowane dwa pluginy:
Pierwszy z nich łączy się do tego sticka CC2531 i zczytuje dane, które po protokole zigbee wysyłają do niego urządzenia i zgodnie z nazwą zamienia je na protokół MQTT. MQTT to protokół typu publish-subscribe, gdzie jego klienci subskrybują się na konkretne kanały i odbierają z nich wiadomości albo analogicznie – wysyłają wiadomości na konkretne kanały.
Natomiast Mosquitto broker to po prostu implementacja tego protokołu. Czyli aplikacja, która faktycznie przerzuca te wiadomości.
Całość działa dość prosto, są możliwe dwa scenariusze:
Nie daję tutoriala jak wszystko skonfigurować, bo jest w ich w Internecie mnóstwo.
Sama konfiguracja wszystkiego przeszła bez większych problemów. Niestety sam stick USB CC2531 okazał się po pierwsze bardzo awaryjny, a po drugie nie był w stanie pokryć zasięgiem mojego mieszkania. Tego drugiego problemu się nie spodziewałem, bo mieszkanko jest małe. Uzbrojony w wiedzę o tym, że urządzenia, które są na stałe podłączone do prądu, zwiększają zasięg sieci, kupiłem czujnik jakości powietrza. Po sparowaniu go z centralą sieć faktycznie się przekonfigurowała i było widać, że te urządzenia, które są bliżej routera niż koonrdynatora, łączą się do niego, przez router. Nie udało mi się jednak poprawić stabilności CC2531.
Kolejnym problemem, już po dołączeniu routera była obsługa jednego z termostatów. Nagminnie pojawiały się w logach błędy MAC transaction expired (240) lub No network route (205), a sama manipulacja ustawieniami termostatu nie działała. Odkrycie, gdzie leży problem zajęło mi sporo czasu. Wyszedłem z założenia, że skoro termostat działa z aplikacja od Tuya, to znaczy, że problem nie leży w termostacie, a sam HomeAssistant wskazywał wysoką jakość połączenia. Zacząłem ostry debug. Podglądałem co dokładnie stick wysyła i odbiera z CC2531. Po kilku godzinach, okazało się, że stick wysyła poprawnie żądanie zmiany stanu urządzenia, ale nie otrzymuje potwierdzenia owej zmiany. Czyli wykluczyliśmy też problem ze stickiem. Kolejnym osiągnięciem było udowodnienie, że komunikacja z termostatem szwankuje tylko w jednym kierunku. Tzn. ja nie mogę nic na nim zmienić, ale on mi swoje zmiany (tzn. odczyt temperatury) wysyła bez problemów. To rzuciło cień na router. Wcześniej nie był podejrzany, ze względu na wysoką jakość połączenia i fakt, że poza termostatem również termometr łączył się tym routerem. Przy czym termometr z założenia nie ma komunikacji „do niego”, no bo co niby zmieniać na termometrze? Zacząłem dłubać dalej i odkryłem, że router zachowuje się zupełnie inaczej niż wszystkie inne urządzenia – zmianę swojego stanu wysyła bardzo często – co najmniej kilka razy na sekundę. Usunąłem router z sieci, przeniosłem termostat bliżej CC2531 i bingo – działa bez problemów!
Pozbyłem się więc tego czujnika jakości powietrza, ale pozostał problem z zasięgiem CC2531. Postanowiłem, że wymienię go na nowszy (i trzykrotnie droższy) model czyli na CC2652P. Jest on dokładnie tym samym co CC2531, ale jest znacznie stabilniejszy i ma większy zasięg. To okazało się strzałem w dziesiątkę. Teraz koordynator pokrywa zasięgiem cały dom. Odsunąłem go też przedłużaczem USB od samego Raspberry, co powinno zmniejszyć ewentualnie zakłócenia pomiędzy Zigbee a WiFi. Zasięg to kolumna LQI i im wartość większa, tym lepiej:
Streściłem te problemy w trzech akapitach, ale niech to Cie nie zwiedzie – łatwo nie było.
Podczas pracy nad zwiększeniem inteligencji mojego domu, okazało się, że część moich urządzeń wcale nie wykorzystuje Zigbee. Dotyczy to przede wszystkim oświetlenia i odkurzacza. One działają po WiFi. I to był kolejny ogromny problem. Zacznijmy od żarówek. Skoro nie działają ono po Zigbee, to integracje HomeAssistanta z nimi nie dotyka CC2652P. W teorii Raspberry jest podłączony do tej samej sieci co owe urządzenia, więc powinno udać się je zintegrować. I udało się, ale… To nie było proste. Po pierwsze, protokół Zigbee implementuje tzw. interview, czyli mechanizm w którym urządzenia parując się z koordynatorem, przedstawiają mu się, mówiąc mu jakim są urządzeniem i jakiego elementy można modyfikować. Przy WiFi tego nie mamy.
Pierwsza próba integracji HomeAssistanta z oświetleniem Tuya była przez wtyczkę, która po prostu wysyła żądania do API Tuya, a bliżej nieokreślony serwer Tuya włączał oświetlenie. Żeby absurd sytuacji był jasny: z mojego domu szło żądanie do Chin po to, by Chiny wysłały żądanie do oświetlenia, które jest u mnie w domu, powodujące zapalenie się żarówki. Działa, ale może można szybciej? I bez wysyłania żądania w świat? Można, ale to sprawia więcej trudności.
Trzeba użyć innej wtyczki, a dokładniej wtyczki LocalTuya, która umie wykryć adresy IP urządzeń w sieci. Ale żeby poprawnie skonfigurować całość musisz wiedzieć jaki lokalny adres IP ma Twoja żarówka. Pomijając śmieszność tego zdania, odpowiedź znajdziesz przez… API Chińskiego giganta. Musisz wysłać konkretne żądanie, żeby Tuya Ci odpowiedziała, jakie IP ma Twoja żarówka. Dodatkowo musisz wygrzebać z ich API informacje o kluczach zabezpieczających (nie pamiętam, co to były za klucze ale chyba localKey i deviceKey) i je również wkleić w konfigurację LocalTuya. Ale to nie koniec problemów. Bo o ile możesz po prostu wskazać, że pod tym IP leży żarówka to przecież wtyczka nie wie co ta żarówka potrafi. Tzn, że nie wie czy można ją ściemniać czy można zmienić kolor, czy może migać i tak dalej. Musisz to jej powiedzieć. I tutaj to już totalny rollercoaster. Na szczęście oryginalnych smart urządzeń jest ograniczona liczba, a większość to kopia kopii kopii. Przeszukując internet łatwo znaleźć wpisy ludzi, któryz dzielą się konfiguracją swoich żarówek. Pozostaje więc wyszukiwać, wprowadzać w LocalTuya i sprawdzać czy jest ok. U mnie się udało za chyba 6tym razem. A cierpliwość już traciłem.
Na szczęście odkurzacz od Xioami szybko udało się zintegrować poprzez wtyczkę Xioami Miot. Podobnie trzeba było wyszukać klucze zabezpieczające, ale reszta poszła praktycznie sama.
I znów – nie daję tutoriali, bo jest tego mnóstwo w Internecie.
Teraz mam działającego HomeAssistanta który pozwala w pełni sterować zarówno urządzaniami Zigbee jak i WiFi. W sklepie Play jest aplikacja która po wprowadzeniu adresu HomeAssistanta pozwala nam sterować domem z telefonu. Oczywiście u mnie potrzebna jest jeszcze druga aplikacja, żeby włączyć na telefonie VPNa.
Siłą połączenia wszystkiego w jednym miejscu jest możliwość tworzenia automatyzacji. Np. co 10 minut zczytuję z termometrów temperaturę, następnie zczytuję ją również z termostatów i koryguję odczyt termostatu o wskazania z termometru. Dzięki czemu fakt, że mam zabudowany termostat przestał mieć znacznie – bo efektywna temperaturę i tak ma z termometrów. Super sprawa. Tak samo jak automatyczne zmniejszanie temperatury docelowej na noc i zwiększanie w dzień. Poluję również na sterownik do rolet, co pozwoli mi automatycznie odsłaniać okna. Automatyzacje praktycznie dają nieskończenie wiele możliwości – jedynym ograniczeniem jest wyobraźnia.
Wszystko działa i jestem z efektu bardzo zadowolony. Zrobiłem sobie małe centrum sterowania:
HomeAssistant dostarcza pełną historię zmian jakie wprowadza, a także rysuje ładne wykresiki, które pozwalają na obserwację zachowania urządzeń, np dla temperatury konkretnego termometru:
Było! Pracy i pieniędzy poszło sporo, ale:
Osobiście – polecam!
Jeśli masz jakieś przemyślenia, pytania czy wątpliwości to zostaw komentarz. Odpowiem najlepiej jak będę umiał.
Oj daaawnoo mnie tu nie było. Ale wakacje to był czas dużej liczby intensywnych wyjazdów i tak naprawdę, dopiero jakoś… Read More
Cześć! Zapraszam na krótkie podsumowanie kwietnia. Wyjazd do Niemiec A dokładniej pod granicę z Francją. Chrześnica miała pierwszą komunię. Po… Read More
Ostatnio tygodnie były tak bardzo wypełnione, że nie udało mi się napisać nawet krótkiego podsumowanie. Więc dziś zbiorczo podsumuję luty… Read More
Zapraszam na krótkie podsumowanie miesiąca. Książki W styczniu przeczytałem "Homo Deus: Historia jutra". Książka łudząco podoba do wcześniejszej książki tego… Read More
Cześć! Zapraszam na podsumowanie roku 2023. Książki Zacznijmy od książek. W tym roku cel 35 książek nie został osiągnięty. Niemniej… Read More
Zapraszam na krótkie podsumowanie miesiąca. Książki W grudniu skończyłem czytać Mein Kampf. Nudna książka. Ciekawsze fragmenty można by było streścić… Read More
Pokaż komentarze
Też się przymierzam to postawienia HA. Wszystkie części są, czekają na półce. Tylko czasu brakowało, więc może teraz w czasie przerwy świątecznej uda mi się postawić HA.
Trzymam kciuki :D bo to turbo ciekawe zagadnienia!
Hej, dzięki za wpis :) U siebie planuję niemal dokładnie to samo i też niestety kupiłem CC2531... Chyba sprzedam i zamówię tego lepszego sticka, oszczędzę sobie trochę nerwów.
Koniecznie wymień sticka, naprawdę warto. I baw się dobrze:)
Zamiast RPi4 -> Terminal Dell Wyse + SSD, zamiast CC2531 -> Sonoff ZBDongle-P (CC2652P) i zestaw działa znacznie stabilniej.
Gratuluję! :)
Hej. Jestem pod wrażeniem. Też chciałem u siebie kiedyś coś podobnego zrobić, ale na razie skończyło się na kilku sprzętach ogarnianych przez apkę MiHome.
Czy ta konfiguracja pójdzie na słabszej malince? Trochę szkoda mi inwestować w czwórkę a mam akurat wolną dwójkę. Co do sprzętów na wifi - wiesz może czy malinka musi mieć wifi żeby je obsłużyć? Nie wystarczy podłączenie kablem do routera i wspólna podsieć?
Cześć,
co do Raspberry 2 to szczerze nie wiem, ale wydaje mi się, ze polecana gdzieś była minimum trójka :( HA jest w sumie dość ciężkie. A co do wifi, to szczerze pewny nie jestem, ale wydaje mi się, że wystarczy, żeby malinka była w tej samej sieci a medium połączenia (kabel/fale) nie ma znaczenia. Wydaje mi się, że HA w przypadku urządzeń Wifi wysyła po prostu odpowiednie requesty HTTP na wskazane adresy, ale kurczę, gwarancji nie daję :(
Jak rozwiązałeś problem tego, że smart żarówka nie może tracić zasilania? Zmieniałeś łączniki na ścianie, czy jakoś inaczej rozwiązałeś ten problem?
Miałem ułatwione zadanie :D włączniki są na tyle malutkie i w tak niewygodnym miejscu, że.. Są po prostu włączone cały czas :D
Hej,
I ja zaczynam przygodę z iot:) czekam na bramkę i inteligentne gniazdko na początek. Mam też RPi, które chce potem wykorzystać ale zastanawiam się nad wyborem softu. i tu pytanie do Ciebie, dlaczego wybrałeś akurat HA ? a nie na przykład domoticz ? Widziałem przerobiony obraz (smarticz) ze wszystkimi potrzebnymi pakietami.
Po pierwsze HA jest napisany w Pythonie a nim zajmuję się zawodowo, więc otwierało mi to drogę ewentualnego zejścia znacznie niżej niż pozwala interfejs użytkownika. Drugi powód to taki, że wydaje się być stabilniejszy. A trzeci jest już banalny: jest po prostu ładniejszy od Domoticza :D
Ale czad! Gratuluję pomysłowości i nieustępowania w działaniu
Dziękuję! :D
Dodam taki mały komentarz, że RaspberryPi kompletnie nie nadaje się jako system do HomeAssistant, z tego powodu, że karty microSD są tutaj najsłabszym punktem, wiem, że fajnie zacząć stawianie HA na malince, ale w przyszłości sam żałowałem tej decyzji. Imho leiej kupić jakiś tani terminal (tanszy w sumie od malinki :D) (coś w tym stylu: Terminal HP T620 Thin Client 4GB 16GB M.2 Zasilacz). Znam dużo przypadków jak cały system HA szlag trafił przez karty SD, nie wytrzymują dużej ilości zapisów i są strasznie mało pewne ;) BTW: sam się jeszcze nei przepiąłem na taki terminal ale planuje zrobić taką migracje ;)
Jak coś to polecam reddita o homeassistant https://www.reddit.com/r/homeassistant/, dużo przydatnej i praktycznej wiedzy ;)
Dzięki za komentarz :D masz rację, coś czuję, że ta karta SD, mimo, że kupiłem jakąś naprawdę niezłą, padnie znacznie szybciej niż bym oczekiwał :( ot, błąd początkującego:D a te terminale są ok :D
Jak tam karta SD, padła czy dalej działa? :) Jestem w trakcie przenoszenia się z SD na SSD, ale mam dodatkową zabawę przez konflikt SSD<>Zigbee :)
Jeszcze dobrze działa :D o, czyli się nie nudzisz :D SSD podłączasz przez USB? I co to za konflikt?
Żeby unikać wysyłania danych na obce serwery warto wybierać takie urządzenia końcowe aby była w nich możliwość zmiany firmware na Tasmotę albo ESPHome.
Taaaak! :D
Hej!
Nigdy nie miałem styczności z jakimkolwiek programowaniem ale chciałbym spróbować "zrobić" swojego smarthome.
Tutaj mam dwa pytania:
-czy jako kompletny amator dam rady podołać takiemu zadaniu? Jakie są na to szanse, że przeglądając jakieś internetowe tutoriale, sam dam rady to ogarnąć?
Dalej, czytając Twój artykuł bardzo zastanawiała mnie jedna rzecz, mianowicie:
Jak wygląda sprawa bezpieczeństwa takiego Smart Home?
Mam na myśli zarówno zabezpieczenia przed np. dowcipnymi sąsiadami, którzy dla jaj bawili by się moimi urządzeniami, a także potencjalnymi złodziejami?
Tutaj złodzieji obawiałbym się przy podłączeniu do sterowania już systemów zabezpieczających np. rolet, zamków drzwi, bramy garażowej itp.
Cześć!
Ciężko mi powiedzieć :( ja podczas konfiguracji wszystkiego miałem kilka problemów których raczej nie umiałbym rozwiązać nie programując zawodowo :( nie znaczy jednak, że i Ty będziesz miał takie problemy :D więc naprawdę ciężko mi odpowiedzieć na to pytanie :(
Tu przydałoby Ci się trochę wiedzy z sieci komputerowych. Jeśli całość instalacji zrobisz wewnątrz swojej sieci prywatnej to tylko osoby podłączone do tej sieci będą mogły cokolwiek podziałać. Więc musiałbyś zabezpieczyć sieć:) Z tym, że wtedy nie miałbyś dostępu do swojego smarthome'u np. będąc na wakacjach. Ja z poza domu łączę się do swojej sieci przez VPNa (tailscale) i w ten sposób mogę sobie poklikać to co tam chcę :)
Ja mam vpn na mikrotiku, o wiele lepsze od gotowców typu tailscale.