Blog (30)
Komentarze (1.1k)
Recenzje (0)
@KaworuHack na HR20, czyli ulepszanie domowych termostatów

Hack na HR20, czyli ulepszanie domowych termostatów

Jakiś czas temu wpadłem na genialny pomysł sprawienia sobie elektronicznych termostatów, sterujących zaworami centralnego ogrzewania. Bo można je ustawić, aby same wyłączały ogrzewanie na noc albo na okres czasu, który normalnie spędzamy w pracy. Zdejmują z nas czynność, o której i tak nie bardzo się pamięta, a przy okazji pozwalają zaoszczędzić trochę funduszy (a poza tym są fajne). Padło na model HR20 (albo HR20E, albo HR20 Style, to samo urządzenie) od Honeywell. Tym bardziej, że jakimś cudem, udało mi się je dostać kilka lat temu nówki za 64 zł. W robieniu tego, co powinny robić, sprawiają się bardzo dobrze. No ok, raz na jakiś czas (raz czy dwa w sezonie) zdarza im się zgubić kalibrację i odkręcić zawory tak, że nie są wcale odkręcone. A że już dawno są po gwarancji, a domowa stacja meteo podaje jedną interesującą je informację... Po rozebraniu okazało się, że pracują na ATmega169PV. Czyli w sumie, coś w czym grzebaniu mam trochę doświadczenia. Tym bardziej, że program daje się wgrywać na nie, nawet kiedy włączona jest ochrona pamięci. Co prawda, jest to wtedy operacja nieodwracalna, bo wgranie nowego software kasuje istniejący, ale oj tam. Google poszły w ruch i okazało się, że nie jestem pierwszy, który wpadł na ten pomysł. Ba, istnieje nawet coś zwanego OpenHR20, czyli alternatywny soft napisany przez niemieckiego programistę. Do dzieła zatem.

634561

W najprostszej opcji, wystarczy wyjąć baterię, wypchnąć jakimś płaskim narzędziem zaślepkę z lewej strony urządzenia, podłączyć JTAG, skasować pamięć i umieścić w niej nowy wsad, którego gotowe wersje dostępne są w repozytorium.

147205
147206

Po tej operacji trzeba tylko ponownie skonfigurować strefy grzania w ciągu doby i temperatury docelowe. Prawda jakie to proste? Haha, nie. To by było za proste - znaczy, to może być tak proste - ale nie jak się jest mną. Raz, że nie mam nic, co by potrafiło w JTAG (SWD, TPI, PDI, ISP, owszem, ale nie JTAG). A dwa, w związku z tym, że jakiś geniusz wpadł na pomysł opisania tych wsadów jakoś tak "original_* - honeywell HW without modification" - więc... oryginalny firmware bez modyfikacji, tak? No jak tak i to nie jest wersja z modułem radiowym RFM12, zostaje firmware "thermotronic". Iiiii nie. Thermotronic to, w ogóle nie wiem do czego jest, ale akurat nie do HR20. Na ekranie są śmieci, nic nie działa, a czujnik zdjęcia głowicy działa jako przycisk "menu". Po krótkim "reserczu" okazało się, że ten "original" to właśnie to o co  mi chodziło, bo oznacza to, w tym wypadku, "wersja bez RFM". No ale ok, wgrałem ten, mogę wgrać inny. I jakby mi się programator nie odłączył, to pewnie nawet by się to udało i wszyscy żyli by długo i szczęśliwie. Niestety programator odłączył się w trakcie programowania i skończyło się to na tym, że MCU przestał odpowiadać na cokolwiek. Najpewniej przy odłączaniu się, zdołał przeprogramować fuse-bity i odłączyć pin reset. =_= No nic, trzeba wymienić CPU, szczęśliwie jest w jakiejś rozsądnej cenie, 25 zł.

A gdyby kogoś interesowało, jak to cudo zaprogramować używając ISP (czyli na przykład usbasp), to trzeba teraz wypchnąć te dwa zatrzaski:

634568

To uwolni ekran, piny ISP dostępne są pod przyciskami. I mamy w zasadzie dwie opcje, albo coś przylutujemy do nich i te kabelki podłączymy do programatora, albo znajdziemy inną, mniej inwazyjną metodę, taką jak ta:

634570

Czyli potrzeba trzech rezystorów 0,125 W o rozsądnej wartości. W moim wypadku rozsądne 10k. Wpychamy je w trzy przelotki prowadzące na drugą stronę płytki, o te:

634572

I podłączamy do programatora. A skoro już mamy podpięty programator, a nie mamy JTAGa, to może by sobie ułatwić życie bootloaderem. W odmętach oryginalnego repozytorium znajduje się universal avr bootloader, pozwalający na wgranie programu przez port szeregowy (wyprowadzony na złączu z boku). Trzeba tylko skasować pamięć, zaprogramować fuse bity i wgrać bootloader, można jednym poleceniem, wydanym z folderu z bootloaderem:


avrdude -c usbasp -p m169 -e -U flash:w:bootldr.hex -U lfuse:w:0xe2:m -U hfuse:w:0x90:m -U efuse:w:0xfd:m 

Po tej operacji trzeba zaprogramować jeszcze eeprom. Sam główny flash można albo z bootloadera, albo programatorem, ale eeprom niestety tylko z programatora. Jeśli nie zaprogramujemy nowego eepromu, to program główny podczas uruchamiania zasygnalizuje błąd i nie da się uruchomić. Zatem przechodzimy do folderu "original_sww", wydajemy polecenie:


avrdude -c usbasp -p m169 -D -U flash:w:hr20.hex -U eeprom:w:hr20.eep

Przy programowaniu pamięci flash, avrdude będzie chciał ją skasować, włącznie z bootladerem, który właśnie został zaprogramowany, a chcielibyśmy tego uniknąć, stąd "‑D".

I zakładając, że nic nie umarło po tej operacji, odłączeniu programatora, ponownym przymocowaniu wyświetlacza i włączeniu, powinien zadziałać po paru sekundach od przywrócenia zasilania. Od teraz mamy dodatkowe strefy włączenia/wyłączenia, detekcję otwartego okna i możliwość komunikowania się z termostatem przez port szeregowy, co może być przydatne. W moim wypadku jest, bo samo zaprogramowanie alternatywnego firmware to stanowczo za mało.Gdyż niedaleko termostatu bytuje sobie taki oto wyświetlacz, który przypadkiem używa kompatybilnych poziomów napięcia:

634579

Mierzy kilka parametrów wnętrza, a poza tym rozmawia sobie z innymi czujnikami, podaje zewnętrzną temperaturę, ciśnienie, zapylenie, temperaturę wnętrza i aktualny pobór pradu w całym mieszkaniu (czy tam cokolwiek co jest dostepne na czujnikach, a jest ustawione aby się pokazywało). A skoro już rozmawia ze stacją meteo, to ma dostępną jedną dlań przydatną informację - temperaturę jaka panuje na zewnątrz. Otoż w tej lokalizacji jest tak, że nie opłaca się włączać ogrzewania jeśli temperatura za dnia oscyluje w okolicy 5 stopni lub więcej. Ot, magicznie w mieszkaniu jest wtedy >= 21 stopni. Okna na zachód czy coś. Termostat jest umieszczony blisko kaloryfera, czyli całkowicie klasycznie dla tego typu urządzeń. A to się łaczy z tym, że gdy kaloryfery są włączone, to jest mu nieco cieplej, z uwagi na bliskość źródła ciepła, niż faktycznie w pomieszczeniu jest. Dlatego jest ustawiony na utrzymywanie 24 stopni. No ale przy ustawionych 24 włączałby się nawet, gdy w pomieszczeniu są całkiem przyjemne, "naturalne" 22 stopnie. Stąd pomysł aby podłaczyć go do tego wyświetlacza przez port szeregowy, co by po pierwsze monitorować co robi i czy działa poprawnie. A po drugie, aby automatycznie przełączał głowicę na "auto", kiedy na zewnątrz jest odpowiednio chłodno, a gdy nie jest, trzymał termostat w trybie "manual"/"off". I to działa. Zawsze jedna operacja mniej do zapamiętania. I co prawda, nie ma to większego znaczenia przy tym, że się zaczyna robić zimno, bo zimno to ja szybko zauważę, ale ma kiedy zrobi się ciepło, a kaloryfer jest dalej włączony niepotrzebnie, bo zapomniałem wyłączyć. I tak oto termostat robi to co umie najlepiej - reguluje temperaturę wnętrza i w sensowności podejmowania decyzji pomaga mu stacja meteo. A gdyby jeszcze zastąpic te dwa paluszki co zasilają głowicę, czterema superkondensatorami ~22F, to można by zrezygnować z wymiany (raz na dwa lata :D) baterii i zasilać z "nadzorcy".

Są też inne skutki uboczne. Aplikacja do monitorowania tego wszystkiego, dostała opcję zdalnego sterowania termostatami. Co oznacza, że można nimi sterowac zdalnie, przez WiFi (a gdyby się uprzeć, nawet przez internet, ale jakoś wcale nie chcę się upierać). Znaczy, kiedy trzeba rano wstać, a już się obudziliśmy (mamy parę minut do wstania), to można właczyć sobie ogrzewanie, nie ruszając się spod kołdry. ;)

147211
147212

A gdyby kogoś to interesowało, to repozytorium z firmware, które jest mniej zaśmiecone niż oryginalne: OpenHR20. A na koniec, zdjęcia "w trakcie", jakby kogoś interesowało jak to w środku wygląda:

147213
147214

[join][image=IMG_0359][join][image=IMG_0361]

Wybrane dla Ciebie
Komentarze (21)