Tutaj zaprezentujemy zdalny kontroler RF DIY do rolet Dooya wykonany z nadajnika-odbiornika CC1101 i ESP-S3 Super Mini oraz obudowy wydrukowanej w 3D. Kontroler działa z firmware ESPHome i pozwala nam kontrolować rolety Dooya z Home Assistant. Pełne źródło skryptu YAML i model obudowy SKP zostaną załączone na końcu tematu.
Projekt został wykonany przez @DeDaMrAz, ja tylko zajmuję się wsparciem i dokumentacją.
Nasz poprzedni kontroler DIY
Od dłuższego czasu próbowaliśmy dowiedzieć się, jak sterować roletami Dooya za pomocą Home Assistant. Naszą pierwszą próbę przedstawiliśmy tutaj:
https://www.elektroda.com/rtvforum/topic4073400.html
Działało dobrze, ale głównym problemem jest to, że pilot ma 5 kanałów i może sterować 5 roletami, ale @DeDaMrAz ma 6 w mieszkaniu. Musieliśmy więc znaleźć coś innego, co działałoby na wszystkich 6. Wstępne poszukiwania pokazały kilka płytek RF, takich jak FS1000 lub CC1101, które pozwoliłyby nam całkowicie pominąć pilota. Najpierw brane były pod uwagę karty FS1000x:
ale szybko doszliśmy do wniosku, że nie będzie to wykonalne, głównie ze względu na brak kontroli nad transmisją i ogólną niestabilność oraz niezdolność HW do modulacji ASK/OOK.
Pierwsze próby z Tasmota
Wtedy natknęliśmy się na ten projekt - https://github.com/andrew01144/Tasmota-SomfyRTS
Jest to skrypt Berry dla Tasmota umożliwiający sterowanie roletami Somfy.
Stamtąd zdecydowaliśmy się przejść do układu CC1101, który jest transceiverem 315-915MHz. Arkusz danych można znaleźć tutaj - https://www.ti.com/lit/ds/symlink/cc1101.pdf
Ten sam układ jest podstawą Flipper Zero, więc z pewnością może obsługiwać wiele protokołów, a jednocześnie nie wymaga bardzo wydajnego MCU do działania. ESP może go dobrze napędzać.
Moduły CC1101 dotarły, podłączyliśmy wszystko i po zainstalowaniu Tasmota i skonfigurowaniu wszystkiego, wszystko działało dobrze od pierwszego uruchomienia! Wyniki zostały zweryfikowane z Flipper Zero - wszystko wysyła się poprawnie. Ale problem polegał na tym, że nie był przeznaczony dla protokołu, dla którego stworzono rolety Dooya, był przeznaczony dla silników i sterowania opartego na Somfy, a nie Dooya, na którym oparte są rolety docelowe. Ale ogólny pomysł i implementacja były bezbłędne!
Próbowaliśmy dostosować skrypt Berry do potrzeb Dooya i nie byliśmy w stanie sprawić, by obsługiwał wymagany protokół Dooya, ale ogólny pomysł został nadal uznany za przydatny....
ESPHome RF próba i początkowy sukces
Kilka dalszych poszukiwań później natknęliśmy się na to repo - https://github.com/juanboro/esphome-radiolib-cc1101
Jest tam wszystko co potrzebne, CC1101 kontroler z ESP32 oraz link do wersji ESPHome umożliwiającej transmisję - https://github.com/esphome/esphome/pull/6300, więc zdecydowaliśmy się na to rozwiązanie.
Główną przeszkodą była obsługa Berry w ESPHome, która okazała się nie być dobrze udokumentowana i pozornie często zmieniana.
Podstawy, takie jak tworzenie nowego urządzenia i parowanie są łatwe, ale starszy yaml nie wydaje się być kompatybilny z obecnymi kompilacjami. Na przykład to na:
https://github.com/dbuezas/esphome-cc1101
Dlatego zdecydowaliśmy się stworzyć własny yaml od podstaw. Podstawy zostały ustalone na podstawie wszystkich repozytoriów i zagadnień, jak skonfigurować moduł i utworzyć plik yaml itp. Ponadto protokół Dooya jest dobrze znany, a niektóre informacje można znaleźć tutaj:
https://github.com/omerl13/raspberrypi-rf-dooya-controller
Wykorzystuje on częstotliwość 433,92 MHz, stosując zastrzeżony system często wymagający określonych kodów identyfikacyjnych i struktur ładunku, wykorzystuje modulację ASK/OOK do transmisji danych, nagłówków i sum kontrolnych. Ponieważ Flipper Zero jest w stanie przechwycić sygnał, oto oryginalne zdalne przechwytywanie przycisku STOP z flippera.
Ogólnie zdekodowany sygnał wygląda następująco:
KEY:0x61EE37 05 55 - > STOP: id=0x0061EE37, ch=5, btn=5, check=5Po początkowych sukcesach, zdecydowaliśmy się na najmniejsze moduły ESP32 jakie mieliśmy pod ręką - dostępne były ESP32-S3 Super Mini, które podłączyliśmy w następujący sposób:
Oto początkowy yaml, który dał pierwsze udane przechwytywanie RF:
Kod: YAML
To dało pewien początkowy sukces, może faktycznie odczytywać i dekodować sygnały z pilota, zarówno w postaci nieprzetworzonej, jak i zdekodowanej zgodnie z protokołem Dooya:
Pierwszy sukces. Możemy odczytać kody bez Flippera i zintegrować je z naszym "finalnym" buildem ESP. Teraz, aby włączyć transmisję na CC1101 i ESPHome, jest kilka sztuczek, ale także musieliśmy przejść z PR#6300, którego używaliśmy na początku, do Radiolib:
external_components:
- source: github://juanboro/esphome-radiolib-cc1101@main
components: [ radiolib_cc1101 ]Radiolib to potężna biblioteka dla CC1101 i włączyliśmy ją do końcowego yaml, aby nieznacznie poprawić to, co jest wysyłane i uzyskać najlepsze wyniki z urządzenia. Więcej na ten temat można znaleźć tutaj - https://github.com/jgromes/RadioLib
Część TX została następnie przetestowana, otrzymaliśmy kilka zerowych przechwytów Flippera i użyliśmy prawie takiej samej struktury jak w przypadku przycisku odbioru:
Kod: YAML
Niestety, nie zadziałało. Po pewnym czasie czytania kolejnych PR-ów, kolejnych repozytoriów i testowania udało nam się to uruchomić. Powodem, dla którego początkowo nie działało, jest to, że pin GDO0 jest używany zarówno do nadawania, jak i odbierania, czyli półdupleksu, i nie było to włączone, więc uzyskaliśmy więcej informacji i przetestowaliśmy ten kod:
Kod: YAML
Okazało się, że to działa dobrze - rolety się poruszają. Ale straciliśmy zdolność RX, którą mieliśmy wcześniej, musimy zbadać dalej.... Rozwiązanie:
Kod: YAML
Spowoduje to początkowe przełączenie CC1101 w tryb RX, a następnie w tryb TX, gdy zajdzie taka potrzeba.
Podsumowując, to jest to, z czym skończyliśmy, plik yaml, który działa i kontroluje roletę biurową oraz odbiera i dekoduje pakiety protokołu Dooya. Kolejne rolety będą musiały zostać dodane później.
Kod: YAML
Działa zgodnie z przeznaczeniem, potrzeba więcej szlifów, na przykład silniki działają, ale Flipper zero nie może zdekodować przesyłanego sygnału, może go przechwycić, ale nie zdekodować, ale rolety reagują na polecenia. Nie jest to duży problem na obecnym etapie.
Testując nieco więcej na HackRF zorientowaliśmy się w czasach i wzorcach oryginalnych transmisji zdalnych, więc próbowaliśmy naśladować i bawić się konfiguracją z urządzenia, które ostatecznie zintegrowane z HA wygląda mniej więcej tak:
Istnieje teraz możliwość kontrolowania różnych aspektów CC1101, dostosowywania i polerowania czasów i interwałów, ale działa i będziemy go nadal ulepszać.
Obudowa wydrukowana w 3D
Gdy wszystko jest już gotowe, mała obudowa została również zaprojektowana jako model 3D i wydrukowana. Zajęło to kilka prób ze względu na różne tolerancje druku 3D. W załączeniu plik Sketchup - ESP32-S3 and CC1101 enclosure V6.skp.
A to obecny efekt końcowy, nie jest idealny ani ładny, ale działa:
Prezentacja końcowa
Należy więc wspomnieć, że takie rolety trzeba kalibrować - czas otwarcia/zamknięcia zależy od długości rolety , przekładni i silnika.
Po skonfigurowaniu i skalibrowaniu można je otwierać i zamykać oraz przenosić do dowolnej frakcji w Home Assistant:
Można ich również używać w automatyzacjach Home Assistant, dzięki czemu można na przykład automatycznie otwierać je rano.
Oto wideo pokazujące żaluzje w akcji - otwierające się na dany ułamek:
Podsumowanie
To nie ma być kompletny poradnik, to raczej krótka prezentacja pracy, którą wykonał @DeDaMrAz, aby uruchomić swoje rolety, ale wciąż możemy dojść do pewnych ostatecznych wniosków.
To, co zaczęło się od prostego pomysłu - zastąpienia 5-kanałowego pilota Dooya czymś przyjaznym dla Home Assistant - zakończyło się głębszym zanurzeniem się w RF, niż początkowo oczekiwaliśmy. Ale droga była tego warta. Bardzo wcześnie potwierdziliśmy, że CC1101 jest właściwą platformą sprzętową, a każda nieudana próba (FS1000, wczesne testy Tasmota, niekompatybilne skrypty Berry) pomogła nam zdefiniować, co będzie, a co nie będzie działać dla Dooya.
Jedną z największych przeszkód była dokumentacja - wydaje się, że projekty Tasmota/ESPHome mają tendencję do częstych zmian i wiele dostępnych niestandardowych skryptów jest przestarzałych lub nie działa. Niemniej jednak, może to być tylko przypadek tego konkretnego urządzenia - nie przeprowadziliśmy dogłębnych badań na ten temat, więc weź nasze słowo z przymrużeniem oka.
Koniec końców, okazało się, że Flipper Zero w połączeniu z ESP32 i CC1101 jest potężnym narzędziem do sterowania różnymi urządzeniami. Wciąż jest ogromne pole do poprawy, ale podstawowa funkcjonalność działa dobrze i teraz żaluzjami można łatwo sterować z paneli Home Assistant i automatyki.
Czy Ty również próbowałeś wykorzystać CC1101 w projekcie DIY? Daj nam znać w komentarzu!
Fajne? Ranking DIY Pomogłem? Kup mi kawę.