Dotyczy tu opisanego modelu: https://www.elektroda.pl/rtvforum/topic3945688.html
Witam, w tym opisie przedstawię mój sposób na podłączenie popularnych na AliExpress termometrów WiFi z czujnikiem SHT30 do Home Assistant oraz zmianę zasilania na akumulator 18650. Główną przyczyną zmiany zasilania jest prądożerność WiFi oraz bardzo nieefektywne oryginalne źródło jakim są baterie AAA. Dodatkowo, aby ładnie ukryć akumulator zaprojektowałem i wydrukowałem na drukarce 3D dodatkową obudowę na koszyk z ogniwem mocowaną do zatrzasków w termometrze.
Tu mała uwaga. W termometrach zastosowany jest układ BK7231N dla którego maksymalne napięcie wynosi 3,6V. Natomiast napięcie w pełni naładowanego ogniwa to 4.2V. U mnie tak zasilone termometry działają poprawnie, jednak przestrzegam osoby chcące zrobić to co ja, że może to się skończyć uszkodzeniem układu.
1. Zmiana firmware
Całość musimy zacząć od przeprogramowania układu. Oryginalnie termometry te działają z ekosystemem Tuya i nie da się ich podłączyć pod Home Assistant nawet wyciągając Local Key.
Trzeba wgrać firmware OpenBK. Można to zrobić na dwa sposoby. Pierwszy to po prostu otworzyć obudowę i podlutować się do układu. Co jest dość proste w tym przypadku, ponieważ obudowa złożona jest tylko na zatrzaski i skręcona jedną śrubką. A opisów w internecie też jest sporo jak to programować.
Drugi sposób to użycie skryptu Tuya Cloudcutter, który wymusza na oryginanym firmware tryb aktualizacji urządzenia podając plik z firmware OpenBK. Ponieważ wcześniej przeprogramowywałem gniazdka, które z racji iż są klejone i ich otwarcie bez rozwalenia obudowy graniczy z cudem ta metoda była najrozsądniejsza. I skoro ją poznałem, opiszę też dla tych termometrów.
Cloudcutter najlepiej uruchomić na czystym systemie Linux, można też użyć komputerka RaspberryPi 3 lub nowszego. Autor zaleca Ubuntu, ja użyłem Debiana. Dodatkowo wymagana jest karta WiFi, gdyż skrypt podczas działania tworzy HotSpot do którego łączy się programowane urządzenie. Można użyć karty wbudowanej jeśli używamy np. laptopa lub karty na USB. I tu mała uwaga, nie każda karta zadziała. Początkowo próbowałem kart opartych o chipset Realteka. Jednak na nich skrypt krzyczał, że nie jest wstanie obsłużyć trybu HotSpot. W końcu użyłem karty opartej na Atheros, ta zadziałała poprawnie.
A więc mając czysty system z zainstalowaną kartą WiFi instalujemy Dockera, którego Cloudcutter wymaga do działania.
Jest to bardzo dobrze opisane krok po kroku na stronie Dockera, więc tylko wrzucę link:
https://docs.docker.com/engine/install/debian/Po poprawnym zainstalowaniu Dockera instalujemy kolejne pakiety. Do obsługi repozytoriów git oraz zarządzania WiFi. W tym celu uruchamiamy konsolę i wpisujemy:
sudo apt install git network-managerW następnym kroku klonujemy repozytorium Cloudcutter z Githuba:
git clone https://github.com/tuya-cloudcutter/tuya-cloudcutterPo sklonowaniu wchodzimy do katalogu ./tuya-cloudcutter/custom-firmware i tam pobieramy firmware OpenBK w odpowiedniej wersji potrzebne do przeprogramowania termometru.
W tym celu wchodzimy na stronę:
https://github.com/openshwprojects/OpenBK7231T_App/releasesNasz termometr jest na chipie BK7231N. Zatem musimy wybrać firmware pod ten układ oraz wersję działającą z Cloudcutter czyli opisaną jako CCtr Flash.
Pobieramy poleceniem wget:
(to przykładowy link, z wersją fw aktualną w momencie pisania, polecam podmienić na aktualną wersję)
wget https://github.com/openshwprojects/OpenBK7231T_App/releases/download/1.17.379/OpenBK7231N_UG_1.17.379.binMając już wszystko pobrane cofamy się katalog wyżej i uruchamiamy skrypt tuya-cloudcutter.sh z odpowiednimi parametrami. Pierwsze uruchomienie może trwać dość długo, gdyż pobierane są dodatkowe elementy potrzebne do działania oraz tworzone kontenery Dockera.
Czyli uruchamiamy skrypt ze zmiennymi, gdzie -p to profil naszego urządzenia. Aktualną listę obsługiwanych urządzeń można znaleźć tutaj:
https://github.com/tuya-cloudcutter/tuya-cloudcutter.github.io/tree/master/devicesNastomiast zmienna -f to nazwa pliku z firmware który wcześniej pobraliśmy. Czyli składnia w całości:
sudo ./tuya-cloudcutter.sh -p tuya-generic-temperature-and-humidity-sensor-v1.1.17 -f OpenBK7231N_UG_1.17.379.binNa samym początku skrypt wyświetli ważną informację, „WARNING: Selected wifi AP support: tak” jeśli na końcu nie jest napisane „tak” lub „yes” przerywamy działanie przyciskami Ctrl+C ponieważ karta WiFi nie obsługuje trybu HotSpot i skrypt nie zadziała poprawnie. Jeśli kontynuujemy najpierw zostaną pobrane potrzebne elementy:
W tej chwili już wszystkie instrukcje będą już opisywane na ekranie. Wkładamy baterie do termometru i musimy wprowadzić go w tryb wolnego migania diody (tryb HotSpot). W tym celu przytrzymujemy przycisk RESET. Najpierw dioda zacznie szybko migać i to nie jest jeszcze ten tryb. Znów naciskamy przycisk i chwilę go trzymamy, dopiero wtedy dioda zacznie wolno migać, a skrypt od razu wykryje termometr i zacznie działać.
W tym momencie skrypt wykona kopię konfiguracji urządzenia, a sam termometr zresetuje się i dioda zgaśnie. Znów musimy powtórzyć procedurę z wciskaniem RESET-u, aż do wolnego migania. Teraz skrypt rozpocznie właściwą pracę. Ponownie zostanie wykryty termometr i rozpocznie się wgrywanie firmware OpenBK.
2. Konfiguracja i podłączenie pod Home Assistant
Jeśli wszystko powyżej przebiegło poprawnie mamy już wgrane OpenBK. A sam termometr pracuje w trybie HotSpot z którym należy się połączyć, aby rozpocząć konfigurację.
Można to zrobić za pomocą smartfona, tabletu lub laptopa. Sieć będzie zaczynać się od nazwy OpenBK… i będzie niezabezpieczona.
Następną czynnością po połączeniu będzie uruchomienie przeglądarki internetowej i wejście na adres
http://192.168.4.1Możemy teraz zacząć konfigurację, proponuję w pierwszej kolejności połączyć się z naszą siecią WiFi. W tym celu wchodzimy w „Config” → „Configure WiFi & Web”. W polach poniżej „Use this to connect to your WiFi” wpisujemy nazwę naszej sieci – SSID oraz klucz – Password i potwierdzamy przyciskiem Submit na dole strony.
Urządzenie uruchomi się ponownie i połączy z naszym WiFi. Domyślnie jest skonfigurowane, aby otrzymało adres IP z serwera DHCP. Zatem musimy sprawdzić jaki adres otrzymało np. w logach routera. Gdy już jest on znany znowu wpisujemy go w przeglądarce i wyświetli się ta sama strona co poprzednio. To już najwygodniej zrobić z poziomu przeglądarki komputera.
Teraz trzeba przypisać konfigurację pinów, tak aby firmware wiedziało co do którego pinu chipu Beken jest podłączone. Można to zrobić ręcznie, jednak w przypadku tego termometru jest dostępna gotowa konfiguracja.
Dlatego klikamy na „Launch Web Application”, na stronie, która otworzy się w kolumnie „Devices:” wybieramy nasz „Chipset” czyli BK7231N, a na liście niżej „Tuya Generic Temperature and Humidity Sensor Battery Powered SHT30”. Zostanie wyświetlone zdjęcie płytki i wylistowana konfiguracja pinów. Klikamy na „Copy device settings”. Konfiguracja pojawi się w kolumnie po prawej, przewijamy na dół strony i klikamy na „Save”. W tym momencie powinna zaświecić się dioda na obudowie termometru. Na razie tę stronę możemy zamknąć i wrócić do głównej.
Klikamy na „Restart”. Po ponownym uruchomieniu na tej stronie wyświetlą się już wskazania czujnika SHT30 oraz napięcie baterii.
Pora na połączenie się z Home Assistant. Musimy mieć w nim (lub osobny) uruchomiony broker MQTT z którym termometr będzie się łączyć. Ale po kolei…
Ponownie należy kliknąć „Config”, a następnie „Configure General/Flag” i zaznaczamy tam flagi 2 oraz 35, po czym klikamy na „Submit” i „Save”. I wracamy do strony głównej konfiguracji.
Polecam wejść w „Configure IP” i wpisać tam na sztywno adres IP z którego ma korzystać termometr. Przyśpieszy to trochę łączenie się po wybudzeniu przez co oszczędzi baterię. Nie jest to jednak konieczne.
Następną opcją którą warto zmienić jest nazwa termometru. To również nie jest konieczne, ale mając ich kilka łatwiej zorientować się który to. W tym celu klikamy na „Configure Names”.
Teraz polecam znów kliknąć na głównej stronie „Restart”, aby termometr uruchomił się z nowymi nastawami. I konfigurujemy dalej, połączymy się z MQTT. Wchodzimy do „Config” → „Configure MQTT” i wpisujemy parametry naszego brokera, adres, port oraz login. Tu też zmieniamy nazwę pod jaką ma zgłaszać się termometr na bardziej nam przyjazną.
Wracamy na stronę główną, jeśli konfiguracja MQTT jest poprawna to pojawi się na niej nowa informacja „MQTT State: connected”.
Zostało już tylko dodać termometr do Home Assistant. Ponownie wchodzimy w konfiguracje następnie „Home Assistant Configuration” i klikamy na „Start Home Assistant Discovery”.
Urządzenie powinno zostać wykryte i wyświetlić się w Home Assistant.
Na tym można by zakończyć ustawianie termometru, jednak cały czas włączony termometr rozładuje baterie nawet w ciągu jednego dnia. Dlatego bardzo ważne jest jego usypianie i wybudzanie tylko co określony czas, aby wysłać dane. Ja swój wybudzam co około 15 minut. Potrzebny do tego jest odpowiedni skrypt, który udostępniam poniżej.
Jeśli zamknęliśmy stronę z termometru, musimy ponownie na nią wejść. I ponownie klikamy „Launch Web Application”.
Przechodzimy na kartę „File System”. Gdzie utworzymy plik startowy autoexec.bat.
Klikamy w „Create file” i w wyświetlonym okienku wpisujemy nazwę „autoexec.bat”. Następnie klikamy na nazwę tego pliku, aby uruchomić edytor. Wklejamy w nim poniższy skrypt i potwierdzamy „Save”. Teraz po restarcie termometru za każdym razem będzie on wykonywany w pętli.
//wlaczenie oszczedzania energii
PowerSave 1
//wlaczenie sterownika do obslugi SHT30
startDriver SHT3X
// przytrzymanie przycisku wymusi tryb serwisowy
addEventHandler OnHold 20 SafeMode
// wlaczenie licznika ktory uspi modul w przypadku braku lacznosci wifi
addRepeatingEventID 60 -1 1337 DeepSleep 600
//kalibracja i pomiar 18650 4.2V, min 2.5V
Battery_Setup 2500 4200 2.29 2400 4096
battery_measure
SHT_cycle 15
mqtt_broadcastInterval 1
mqtt_broadcastItemsPerSec 5
// oczekiwanie na polaczenie z wifi
waitFor WiFiState 4
cancelRepeatingEvent 1337
//to samo co wyzej tylko teraz uspienie przy braku polaczenia mqtt
addRepeatingEventID 30 -1 1337 DeepSleep 600
// oczekiwanie na polaczenie z mqtt
waitFor MQTTState 1
cancelRepeatingEvent 1337
//jesli SHT przeklamuje mozna wprowadzic korekty
//SHT_Calibrate -0.8 2
SHT_Measure
delay_s 1
publishChannels
delay_s 5
//glebokie uspienie na 15min
DeepSleep 8753. Dodatkowa obudowa na ogniwo 18650.
Tak jak pisałem na początku, w swoich termometrach zmieniłem zasilanie na akumulator 18650 o pojemności 3500mAh, który starcza na wiele dłużej niż baterie (bądź akumulatory) AAA.
Obudowę narysowałem w jednym z popularnych programów do projektowania 3D i wydrukowałem z białego filamentu PLA polskiej produkcji. Jeśli chcemy bardziej odporny wydruk można rozważyć wydruk z PET-G.
Do pobrania:
Wydruk wykonałem na drukarce typu delta, którą kiedyś zrobiłem na podstawie projektu z internetu. Więcej o niej można znaleźć na popularnym forum o drukarkach 3D – Forum Reprapy.pl: https://reprapy.pl/viewtopic.php?p=138698#p138698
O tym jak wydrukować obudowę nie będę się zbytnio rozpisywał, ponieważ każda drukarka jest inna i trzeba parametry dobrać pod nią. Dodam tylko, aby drukować z podporami i zwrócić uwagę czy slicer (program przygotowujący plik dla drukarki) utworzył też podpory pod wypustkami do zamocowania termometru.
Więc mamy już wydrukowaną obudowę oczyszczoną z podpór. Oprócz niej potrzebny będzie koszyk na ogniwo oraz cienkie kabelki.
Przed włożeniem koszyka do obudowy wyginamy jego nóżki i lutujemy do nich kabelki. Polecam też ścisnąć sprężynujące blaszki ponieważ w nowych koszykach bardzo ciężko wchodzi akumulator, co dodatkowo sprawia potem problem z wyjęciem go, gdy koszyk jest już w obudowie.
Wkładamy koszyk do obudowy, zwracając uwagę, aby kabelki ułożyły się w rowkach na nie. A koszyk został zablokowany przez blokady.
Musimy jeszcze pobielić blaszki w termometrze i przylutować do nich kabelki z koszyka. W koszykach są oznaczenia polaryzacji + i -, warto zwrócić na nie uwagę lutując. Polecam miejsca lutowania lekko poskrobać i nałożyć topnika w paście, wtedy cyna łatwo złapie.
Teraz całość wystarczy złożyć, włożyć akumulator zwracając uwagę na polaryzację i mamy gotowy termometr!
Termometry z tym zasilaniem testuję od kilku miesięcy, początkowo wysyłałem dane po HTTP, teraz próbuje swoich sił z Home Assistant. Przez ten czas zmiana zasilania nie spowodowała uszkodzenia żadnego z nich.
/uwaga do administracji forum, z racji coraz większej popularności drukarek 3d dobrze byłoby dodać możliwość wgrywania załączników w formacie stl/
Fajne? Ranking DIY
