A oto wpis autorstwa mojego męża:
Po mniej więcej dwóch miesiącach pracy mojego najnowszego dziecka postanowiłem popełnić małą aktualizację. Zacznijmy od najważniejszego – od strony elektromechanicznej nic jak do tej pory się nie wysypało i nie było podstaw do przeróbek. No w zasadzie poza jedną…
Odbywało się to mniej więcej tak – miałem pewne drobne problemy z szyną I2C – podłączone były doń dwa urządzenia – wyświetlacz i czujnik 10DoF (do pomiaru wysokości używał temperatury i ciśnienia atmosferycznego i chciałem to wykorzystać). Oba urządzenia zasilane były z szyny 3,3 V chcąc więc upewnić się, że nie obciążają jej zbytnio sprawdziłem na początek czy czujnik może pracować z napięciem 5V (wg dokumentacji mógł). Wszystko ładnie podłączyłem i… nigdy wcześniej nie widziałem, żeby urządzenie elektroniczne tak bardzo dymiło. Czujnik dosłownie “przeminął z wiatrem” (i koszmarnym smrodem). Pisząc te słowa uświadamiam sobie, że to 5V mogło dotyczyć same chipa z czujnikiem, ale pewnie nie dotyczyło któregoś z pomocniczych komponentów na płytce PCB (jak np. dioda LED). Może więc czujnik jest do uratowania (nie wyrzuciłem go bo przykleiłem go do obudowy i trzyma się dość mocno, a mi się nie chce z nim siłować)? W każdym razie nie ma tego złego (co by nie mogło wyjść na jeszcze gorsze) – nabyłem drogą kupna czujnik temperatury i wilgoci (za kilkanaście złociszy) również na I2C. Pierwsze podłączenie okazało się porażką, ale tym razem niczego już pod 5V nie podłączałem – sprawdziłem moją breadbordową magistralę I2C i okazało się, że błąd był w jej podłączeniu. No cóż – smuteczek i żenada. W każdym razie na dzień dzisiejszy była to ostania zmiana hardware’owa. Za to panie, co tam się działo w sofcie…
Nie wiem czy jest sens przytaczać tutaj cały proces, który doprowadził do projekt do obecnego miejsca – całość przybierała różne formy, ale przejścia między nimi były dość płynne. Po każdej nasiadówce miałem inną, działającą wersję programu, aż trochę ponad miesiąc temu prace w zasadzie się zatrzymały, ponieważ na tamten dzień byłem stosunkowo zadowolony z projektu. Dość powiedzieć, że całością da się zarządzać ze strony WWW hostowanej bezpośrednio na RPi sterującym automatyką (do postawienia serwera użyłem Flask). Odpowiednie linki są odpowiedzialne za uruchamianie przypisanych im skryptów w Pythonie, przy pomocy tej samej strony można też zmienić kluczowe parametry tak jak godziny otwarcia i zamknięcia okna (inne w weekendy i inne w dni powszednie), minimalna temperatura poniżej której okno zamknie się na minimum pół godziny, czy maksymalna wilgotność powyżej której okno się otworzy na 30 minut (w przypadku konfliktu temperatura ma priorytet). Ogólnie całość jest sobie na githubie i jeśli kiedyś pojawią się komentarze z prośbą o udostępnienie kodu rozważę jego upublicznienie.
Z innych ciekawszych rzeczy – nie udało mi się dobrać do protokołu obsługującego mój pilot WiFi do klimatyzacji, więc oszukiwałem. Zainstalowałem na telefonie z aplikacją sniffer pakietów – w wyniku jego działania dostałem serię komunikatów krążących pomiędzy moim telefonem a pilotem – niestety były one zaszyfrowane. Zrobiłem więc najgłupszą rzecz jak można – wziąłem taki zaszyfrowany pakiet i wysłałem ponownie – tym razem z mojego PC. Okazało się, że to do pewnego stopnia wystarczy – można w ten sposób włączyć klimatyzację, ale potem – z nieznanych mi przyczyn – przy próbie transmisji drugiego pakietu (który jak podejrzewam wyłączał klimę) pilot zrywał komunikację wysypując aplikację. Łapanie wyjątków i próba zresetowania połączenia nie przynosiła spodziewanych skutków, więc ta część projektu póki co wybrała się na półkę. Krótko mówiąc – jako dowód, że się da – OK, ale daleko jeszcze do pełnoprawnego rozwiązania. Na dworzu robiło się co raz zimniej więc straciłem trochę motywację do rozwijania tej gałęzi projektu.
Inną ciekawą historią, była awaria prądu. Przyczyna była (na szczęście) całkowicie poza projektem, ale miała pewne skutki (dające się zresztą przewidzieć). Otóż miały miejsce trzy w ostatnim czasie po pierwszej nie zrobiłem zbyt wiele – ot kilka godzin później odpaliłem skrypt sterujący serwerem WWW (i oknem). Za drugim – dodałem ten skrypt do “autostartu” – aby w razie co odpalał się razem z systemem. I oczywiście odpaliłem go na nowo. Za trzecim – nie zrobiłem absolutnie nic (poza sprawdzeniem czy wszystko samo wstało – owszem tak).
Ostatnia rzecz, jaką chciałbym poruszyć to uptime – skrypt ani razu się nie zawiesił, czy nie sypnął niespodziewanym wyjątkiem. Przerwy w jego działaniu wynikają tylko z faktu, że sam go wyłączyłem (lub miała miejsce awaria prądu). Najdłużej bez przerw działał chyba przez dwa tygodnie.
Do czego w ogóle nie podszedłem – obsługa klaskacza. Przyznaję się bez bicia, że jakoś mi się nie chciało. Zastanawiam się też nad sensem implementacji czujnika deszczu – okno jest tak głęboko osadzone w ścianie, że w zasadzie nie ma szans aby deszcz wpadł do środka. Na szczęście gdybym zmienił zdanie nie będzie dużego problemu z dodaniem tej funkcjonalności. Nie dorobiłem też (jeszcze) obsługi pozostałych przycisków.
TODO:
- obsługa klimy
- obsługa termostatu grzejnikowego (ale wcześniej jego zakup)
- podłączenie i oprogramowanie pozostałych przycisków
Wonderful site. Lots of useful info here. I’m sending it to several pals ans additionally sharing in delicious. And obviously, thanks to your sweat!