Pokazywanie postów oznaczonych etykietą halogen. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą halogen. Pokaż wszystkie posty

niedziela, 26 października 2014

OpenHab, arduino i mqtt binding

Klon arduino możesz zakupić tanio  na aliexpres. Poniższy link to link afiliacyjny. Skorzystanie z niego Ciebie nic dodatkowo nie kosztuje a ja otrzymam niewielką prowizję która wspomoże rozwój tego bloga. Dzięki!

http://ali.pub/2hk8rp

Jak już pisałem wcześniej komunikacja arduino z OpenHab za pomocą TCP nie sprawdziła się w praktyce. Za to z czystym sumieniem mogę stwierdzić że komunikacja za pomocą MQTT działa znakomicie.

Przy takim rozwiązaniu dochodzi jednak dodatkowa warstwa pośrednia - broker.
W uproszczeniu można powiedzieć że broker zajmuje się rozprowadzaniem komunikatów do zainteresowanych klientów.

Rozwiązanie to działa na zasadzie mechanizmu Publish - subscribe.
Odpowiednie urządzenia mogą publikować (Publish) komunikaty w danym temacie (TOPIC). Klienci podłączają się do brokera informując go że są zainteresowani (subscribe) komunikatami z danego tematu.

Przenosząc to na płaszczyznę automatyki domowej ja zastosowałem następującą architekturę:

Na Raspberry PI zainstalowałem broker MQTT. Najpopularniejszym brokerem obecnie jest chyba Mosquitto.

Aby zainstalować mosquitto należy wykonać następujące polecenie:

sudo apt-get install mosquitto mosquitto-clients

Po instalacji pojawi się katalog:

/etc/mosquitto

w którym znajduje się plik konfiguracyjny brokera

mosquitto.conf

Wystarczy bardzo prosta konfiguracja:

Jak widać z powodu bezpieczeństwa wyłączyłem anonimowy dostęp do brokera. W tym przypadku należy utworzyć plik

 /etc/mosquitto/password_file

,w którym zapiszemy login i hasło do brokera z którego  będą korzystać Arduino i OpenHab.
Plik powinien zawierać wpis w postaci:

login:hasło

Teraz należy zrestartować broker poleceniem:

/etc/init.d/mosquitto restart

Następnie można przetestować działanie brokera. Dostępne są dwa programy:

mosquitto_sub 

do obsługi subskrypcji oraz

mosquitto_pub 

do obsługi publikowania.

Na początku należy uruchomić polecenie:


mosquitto_sub -h localhost -u login -P hasło -t /house

co oznacza że utworzyliśmy klienta który podłączył się do brokera na serwerze localhost przy użyciu loginu "login" i hasła "hasło" (zdefiniowanych w pliku password_file). Klient subskrybował wszystkie wiadomości w temacie (TOPIC) /house.

Po wykonaniu polecenia klient oczekuje na komunikaty.

W drugiej konsoli należy uruchomić polecenie:

mosquitto_pub -h localhost -u login -P hasło -t /house -m test

Oznacza to że na brokerze pod adresem localhost opublikowaliśmy wiadomość o treści "test" w temacie /house

Jeśli wszystko wykonaliśmy poprawnie na konsoli na której uruchomiliśmy mosquitto_sub powinna pojawić się zawartość wiadomości, czyli "test"

Dla eksperymentu można uruchomić kilka klientów mosquitto_sub nasłuchujących dany "topic". Na wszystkich jednocześnie powinna pojawić się treść opublikowanego komunikatu


Mając działający broker można przystąpić do konfiguracji OpenHab.

W tym celu należy przekopiować plik jar o nazwie

org.openhab.bindings.mqtt-1.5.0.jar (numer wersji może być inny)

 do katalogu addons serwera openhab.
W pliku konfiguracyjnym

configuration/openhab_default.cfg

należy dopisać następujące linie:


Załóżmy że chcemy sterować halogenem. W tym przypadku plik

configurations/items/house.items

powinien wyglądać następująco:

Oznacza to że w naszej konfiguracji mamy jeden przełącznik odpowiadający za załączanie halogena.
Załączenie przełącznika OPUBLIKUJE wiadomość o treści "halogen#1" na brokerze mqtt w topic'u "/house". Wyłączenie przełącznika OPUBLIKUJE wiadomość o treści "halogen#0" na brokerze mqtt również w topic'u "/house"
Dodatkowo obsługa tego przełącznika SUBSKRYBUJE topic /houseIn na tym samym brokerze.
W pliku

transform/halogen.map 

powinno znaleźć się mapowanie treści otrzymanej wiadomości na stan przełącznika.
Plik powinien mieć następującą zawartość:

halogen#1=ON
halogen#0=OFF

Nasłuchiwanie służy do aktualizacji stanu przełącznika. Pamiętajmy że halogen można zapalić również zwykłym przełącznikiem na ścianie. Wówczas OpenHab powinien się o tym dowiedzieć aby wyświetlić odpowiedni stan przełącznika.

To cała konfiguracja po stronie OpenHab. Należy tylko zrestartować usługę.

Pozostaje jeszcze obsługa po stronie mikrokontrolera.
Bibliotek do obsługi mqtt na arduino jest kilka. Ja wykorzystałem bibliotekę PubSubClient którą znalazłem pod adresem:
http://knolleary.net/arduino-client-for-mqtt/

Poniżej przedstawiam fragmenty kodu które obrazują zasadę działania:
Nie jest to kompletny kod, ponieważ całość wraz z obsługą wszystkich przekaźników które mam obecnie jest zbyt duża żeby wklejać je na bloga. Większe fragmenty publikowane były już w poprzednich wpisach. Myślę że osoby obeznane z tematem bez problemu powinny poradzić sobie z wykorzystaniem podanych fragmentów. W przypadku pytań  piszcie w komentarzach.

Jedyny fragment który sprawiał problemy to okolice wiersza 45. Po  pewnym czasie od momentu restartu arduino przy wciskaniu przełączników sprzętowych przestawały dochodzić potwierdzenia do OpenHab. Okazało się że z jakichś nieokreślonych powodów było zrywane połączenie między Arduino a MQTT. Dodanie sprawdzania stanu i ponownego połączenia w przypadku gdy połączenie nie było aktywne rozwiązało problem.

Po tych zmianach cały układ działa bardzo stabilnie i myślę że można stwierdzić że można go z powodzeniem wykorzystywać w warunkach produkcyjnych



wtorek, 29 października 2013

Przeróbka lampki halogenowej na lampkę LED

Ostatnio nasza Córcia zaczęła bać się ciemności. Zdecydowanie woli zasypiać przy świetle lampki. Gdy czasami budzi się w nocy jest spokojniejsza, kiedy ma zapalone światło. Żona twierdzi że mam węża w kieszeni i być może coś w tym jest, ponieważ zacząłem się zastanawiać co zrobić, żeby całonocne świecenie lampki nie miało zbyt dużego odzwierciedlenia w rachunkach za energię :). Oczywiście można pójść na łatwiznę, iść do sklepu i kupić lampkę diodową, ale jako że po projekcie sterownika oświetlenia schodów zostało mi trochę taśmy LED zacząłem kombinować w jaki sposób można byłoby ją wykorzystać. Miałem taśmę, miałem stary, nieużywany zasilacz 12V od jakiegoś urządzenia, które już dawno wyzionęło ducha. Pozostała jedynie kwestia obudowy. Nijak nie mogłem wymyślić dobrego rozwiązania. W końcu nasunęło mi się rozwiązanie chyba najbardziej oczywiste - przeróbka  lampki z której dotychczas korzystaliśmy. Jest to chyba dość popularna lampka SKOJIG z Ikei:


Lampka co prawda standardowo pobiera stosunkowo niewiele energii - ma 20-watową żarówkę halogenową, ale skoro można jeszcze to ograniczyć, to dlaczego nie... :)

Na początku rozkręciłem lampkę, żeby zobaczyć jak to wszystko wygląda od środka. Lampka po rozkręceniu prezentuje się tak:


Miałem również zrobić zdjęcie klosza, ale Córcia go zwinęła i jak widać bawiła się przy przeróbce równie dobrze jak ja:

Po rozebraniu lampki odmierzyłem kawałek taśmy LED, który jak najlepiej wpasowałby się w dolny obwód klosza lampki. Oczywiście należy pamiętać,  że taśmę LED można ciąć tylko w miejscach oznaczonych. Moją taśmę dało się ciąć co trzy diody. Szczęśliwie po docięciu taśmy okazało się że pasuje ona prawie idealnie. Znalazłem kawałek białego przewodu (aby nie był zbyt widoczny na tle białych wykończeń lampki) i przylutowałem do taśmy. Taśma na zewnętrznej stronie ma warstwę samoprzylepną przy pomocy której przymocowałem ją do obwodu klosza. Po podłączeniu do zasilacza 12V klosz prezentował się następująco:


Pozostała jeszcze kwestia wyprowadzenia przewodu zasilającego. Wstępny plan zakładał że gniazdo zasilania będzie umieszczone w kloszu, ale byłoby to mało estetyczne. Zdecydowanie lepszym pomysłem było gniazdo w podstawie lampki. W tym celu wywierciłem otwór w stojaku lampy i przeciągnąłem przez niego przewód zasilający:


Na tym etapie można było już skręcić klosz. wcześniej przykleiłem przewód do klosza klejem na gorąco aby przy przypadkowym pociągnięciu nie oderwać taśmy LED:


W podstawie wyciąłem otwór:


W którym umieściłem przylutowane wcześniej do przewodu gniazdo zasilające:


Gniazdo od wewnątrz również zalałem klejem na gorąco. Podstawa po skręceniu wygląda następująco:


Nadszedł czas próby generalnej:


Lampka świeci całkiem fajnie. Delikatnie słabiej niż oryginalna żarówka, ale mamy teraz model hybrydowy, więc jeśli jest zbyt ciemno (np do czytania dziecku bajek) można podłączyć dodatkowe oryginalne zasilanie. Wtedy jest moc... :). Efekt uboczny rozwiązania to ciemny pasek wokół klosza, ale załóżmy że jak to mawiają programiści "to nie bug tylko feature" :)

Od spodu świecąca lampka wygląda tak:

Podsumowując:

po przeróbce otrzymałem lampkę hybrydową, która w trybie oszczędnym pobiera poniżej 3W energii dając moc świetlną wystarczającą dla spokojniejszego snu naszej Córki. Koszt całej przeróbki wyniósł mnie dokładnie zero złotych, ponieważ wszystkie części miałem pod ręką. Zdaję sobie sprawę że przeróbka jest prosta i nie wymaga zbyt dużych umiejętności, ale akurat w moim przypadku okazała się bardzo użyteczna.