SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

Up Board bardzo dobrze poradził sobie zarówno pod Windowsem jak i Linuksem, zaskakując ciekawymi wynikami oraz możliwością wszechstronnego zastsowania. Dziś sprawdzimy go na zupełnie innym polu, a mianowicie w tematyce automatyki domowej w tworzeniu inteligentnego domu.

Dzięki uprzejmości firmy CSI otrzymałem również zestaw Smart Home Kit wyprodukowany przez firmę Eltako, wchodzącej w skład grupy EnOcean Alliance. Zestaw ten pozwala na rozpoczęcie przygody z projektowaniem i budowaniem własnej struktury inteligentnego domu.

Wszelkie urządzenia bazujące na technologii EnOcean charakteryzują się bardzo ciekawą cechą, która polega na tym, że moduły zasilają się same, wykorzystując dostępną energię ze swojego otoczenia (Energy Harvesting). W przypadku elementów mechanicznych jest to przyłożona do nich siła, natomiast czujniki pożytkują energię słoneczną lub cieplną.

Podłączenie FAM4PI z Up-Board

Zgromadzona energia pozwala na wygenerowanie odpowiedniego sygnału zawierającego nie tylko numer identyfikacyjny nadajnika, ale również przesyłanie danych (telegramów) zawierających odczyty temperatury, wilgotności czy innych mierzonych parametrów. Zasięg tych urządzeń sięga nawet do 200 - 300 metrów w terenie otwartym i do 20 - 30 metrów wewnątrz budynku. 

W zestaw Smart Home Kit wchodzą:

Adapter FAM4PI z modułem EnOcean TCM310 pracującym na częstotliwości 868 MHz wykorzystujący magistralę UART. Moduł wpinamy bezpośrednio do Up-Board zaczynając od pierwszego pinu gniazda GPIO.

FAM4PI z modułem EnOcean TCM310

PTM 210 jest bezbateryjnym, podwójnym przełącznikiem o wymiarach 40mm x 40mm. Do komunikacji z FAM4PI wykorzystuje tak zwane telegramy, które zostają wysłane w trakcie wciśnięcia jednej z pozycji przełącznika. Wymagana energia elektryczna do wysłania komunikatu, generowana jest za pomocą samych elementów mechanicznych.

PTM 210 - bezbateryjny, podwójny przełącznik

Kolejnymi modułami zestawu są: czujnik magnetyczny STM 329 wyposażony w szklany kontaktron oraz czujnik temperatury STM 330.

Oba moduły wyposażone są w ogniwo słoneczne, które zapewnia energię do działania w dzień oraz 3.3V super kondesator o pojemności 0.25F, który jest automatycznie ładowany. Moduł wysyła wiadomości z odczytami, wybudzając się z głębokiego uśpeinia na czas pomiaru. Wysyłka danych sygnalizowana jest również diodą LED

Producent zapewnia, że moduł może funkcjonować 4 dni w całkowitej ciemności i nie krócej niż 60 godzin (jeśli magazyn energii jest w pełni naładowany).

Mikro przełącznik umieszczony na dolnej warstwie PCB służy do nauki i wykrywania modułów przez adapter FAM4PI.

W razie konieczności możemy wgrać własny firmware do mikrokontrolera 8051 mając do dyspozycji 16MHz zegar, 32kB pamięci FLASH, 2kB pamięci SRAM, dziesięć konfigurowalnych portów I/O, 10-bitowy przetwornik ADC oraz 8-bitowy przetwornik DAC. Układ ten charakteryzuje się bardzo niskim poborem prądu w stanie uśpienia, wynoszącym zaledwie 0.2μA.

Jeśli chodzi o STM330 to może mierzyć temperatury z zakresu 0-40°C. Największą dokładność pomiaru otrzymujemy w zakresie 17-27°C. Moduł ten można rozbudować o dodatkowy czujnik wilgotności HSM 100, montując go na złączu goldpin.

STM 329 / STM 330

STM 329 / STM 330

Ostatnim czujnikiem jest FTKE, pełniący rolę przełącznika krańcowego. Podobnie jak PTM 210 nie wymaga zasilania do wysyłania komunikatów w trakcie zwarcia lub rozwarcia styków. Dodatkowy uchwyt, który można przykleić do wybranej powierzchni pozwala natomiast na bezś rubkowy montaż czujnika.

FTKE - Przełącznik krańcowy

FHEM - instalacja i konfuguracja

Pierwsze co musimy zrobić to instalacja FHEM, który pozwoli nam na zarządzanie wszystkimi czujnikami i tworzenie scenariuszy działania naszego systemu.

  1. # sudo apt-get install perl libio-socket-ssl-perl libwww-perl
  2. # sudo apt-get install libdevice-serialport-perl
  3. # sudo apt-get install -f
  4. # wget http://fhem.de/fhem-5.7.deb
  5. # sudo dpkg -i fhem-5.7.deb

Po zainstalowaniu FHEM, będziemy mogli dostać się do konfiguracji za pomocą przeglądarki internetowej korzystając z portu 8083:

FHEM - ekran powitalny

Jak można zauważyć - nasz moduł został automatycznie wykryty jako TCM_ESP3_0, więc praktycznie nie musimy nic robić z jego instalacją.

Zanim jednak przejdziemy do ustawień czujników, warto umożliwić sobie edycję pliku konfiguracyjnego /etc/fhem/fhem.cfg z poziomu przeglądarki. W tym celu wybieramy z lewego menu Edit Files, a następnie klikamy w fhem.cfg w sekcji config file.

Pojawi nam się okno edycji pliku konfiguracyjnego. Aby móc w nim edytować, w dostępnym polu edycji wydajemy polecenie: attr WEB editConfig 1 i w razie konieczności klikamy Save config (kluczowe zmiany sygnalizowane są czerwonym znakiem zapytania).

attr WEB editConfig 1

Nie zapisane zmiany, sygnalizowane są znakiem zapytania

Następnym krokiem jest nauczenie naszego modułu czujników, które posiadamy. W tym celu wracamy do głównego ekranu i klikamy w link TCM_ESP3_0. Za pomocą opcji set wybieramy z listy rozwijanej atrybut teach i wpisujemy czas w sekundach, który będzie dopuszczalnym limitem na wykrycie dodatkowych modułów. Zatwierdzamy przyciskiem set.

W przypadku przełączników wystarczy tylko je wcisnąć, natomiast dla czujników STM3xx wciskamy mikroprzełącznik znajdujący się od spodu modułów. Mamy na to 10 minut.

Dodatkowo, korzystając z opcji attr dla atrubutu room, możemy przypisać go do swojej grupy - np.: EnOcean.

Przełączenie modułu w tryb nauki

Kiedy wszystko przebiegnie prawidłowo, w lewym menu pokaże się nowy odnośnik EnOcean, który po kliknięciu wyświetli nam przypisane czujniki.

Wykryte czujniki

Zostały wykryte dwa nasze przełączniki EnO_002CF90E, EnO_FEFB8D7B oraz kontaktron EnO_018EF742. Nie udało się jednak rozpoznać czujnika temperatury w secji raw o identyfikatorze EnO_01808EC1. Klikamy w niego - pojawi się okno konfiguracji czujnika:

Konfiguracja nierozpoznanego czujnika

Zmieniamy paramertr subType na tempSensor.05 - zatwierdzamy klikając attr.

Dodajemy nowy parametr eep i wpisujemy A5-02-05 - zatwierdzamy klikając attr.

Finalna konfiguracja powinna wyglądać tak:

 Po tym zabiegu i po powrocie do grupy EnOcean, będziemy widzieli już odczyty z naszego czujnika:

Poprawnie skonfigurowane czujniki

Konfiguracja wykresów

Wszystkie wyniki z podłączonych czyjników możemy również zobrazować na wykresach, w tym celu udajemu się szczegółów wybranego czujnika i klikamy w odnośnik przypisanych do niego logów zdarzeń i odczytów:

Plik logów wybranego czujnika

W kolejnej karcie korzystamy z opcji tworzenia wykresu, klikając w odnośnik Create SVG plot.

Karta dziennika czujnika En0_01808EC1

Następnie możemy skonfigurować nasz wykres, rozpoczynając od tytułu, nazw osi, spodziewanych zakresów pomiarowych i ustawienia serii danych. Bardzo ważny jest tutaj odpowiedni wybór pliku źródłowego danych oraz filtru, który pozwoli wyciągnąć z logów interesującą nas wartość. Dla naszeg czujnika temperatury, może to wyglądać na przykład tak:

Konfiguracja czujnika temperatury - wybór pliku logów

Konfiguracja czujnika temperatury - ustawienia filtra danych

Całość zatwierdzamy przyciskiem Write .gplot file.

Warto również przypisać atrrybut room do interesujących nas sekcji w menu.

Przykładowo, tak mogą wyglądać ustawienia wszystkich naszych czujników:

Konfiguracja wykresu - czujnik temperatury

Konfiguracja wykresu - kontaktron magnetyczny

Konfiguracja wykresu - przełącznik krańcowy

Jeśli nadaliśmy wszystkim wykresom atrubut room z wartością Plots, będą one zgromadzone właśnie w tym miejscu.

Zakładka Plots

Zdarzenia i GPIO

FHEM pozwala również na tworzenie zdarzeń, które wystąpią w określonych przez nas warunkach. Stan przycisku, przekroczenie temperatury o daną wartość, stan wybranego portu GPIO. Możemy zatem dowolnie zaplanować sobie scenariusz działania naszego inteligentnego domu. Sterowanie portami GPIO z poziomu FHEM możemy uzyskać dwoma sposobami.

Pierwsz z nich to utworzenie sobie dodatkowego skryptu, który będzie przyjmował jako parametry numeru GPIO oraz jego wartości:

  1. #!/bin/bash
  2.  
  3. PORT=$1;
  4.  
  5. if ! [ -d /sys/class/gpio/gpio$PORT ]
  6. then
  7.   echo "$PORT" > /sys/class/gpio/export
  8.   echo "out" > /sys/class/gpio/gpio$PORT/direction
  9. fi
  10.  
  11. STATE=$2;
  12.  
  13. if [ $STATE -ge 1 ]
  14. then
  15.   STATE=1
  16. fi
  17.  
  18. echo "$STATE" > /sys/class/gpio/gpio$PORT/value

Tak przygotowany plik, możemy umieścić w katalogu /usr/local/bin/fhem-gpio.sh i nadać mu uprawnienia wykonywania (chmod +x). Fhem po instalacji działa pod kontem użytkownika fhem. Aby mógł on wykonywać operacje na portach GPIO bez konieczności podawania hasła, możemy dodać do pliku /etc/sudoers następujący wpis:

  1. fhem ubilinux = (root) NOPASSWD: /usr/local/bin/fhem-gpio.sh

Teraz wracamy do edycji pliku konfiguracyjnego fhem.cfg i tworzymy nasze zdarzenie.

  1. define moj_alarm notify EnO_FEFB8D7B
  2. {
  3.   if ("$EVENT" ne "closed")
  4.   {
  5.    system("sudo fhem-gpio.sh 26 1 &")
  6.   } else
  7.   {
  8.    system("sudo fhem-gpio.sh 26 0 &")
  9.   }
  10. }

Towrzenie zdarzenia dla czujnika EnO_FEFB8D7B

Definicja jest bardzo prosta - kiedy zdarzenie dla EnO_FEFB8D7B nie będzie zawierać wartości closed, nastąpu wysłanie na port GPIO26 stanu wysokiego. W przeciwny wypadku - stanu niskiego.

Nasze zdarzenie powinno pojawić się na karcie ogólnej

Teraz wystarczy już tylko podłączyć diodę do portu GPIO26 przez rezystor do masy i przetestować działanie. Oczywiście zamiast diody, może być aktywacja alarmu lub wysłania maila, bądź wiadomości SMS.

Przełącznik zamknięty

Przełącznik otwarty

Na prostsze i bardziej kompleksowe zarządzanie portami GPIO pozwoli nam wiringPi. Instalujemy go poprzez wydanie następujących poleceń:

  1. # sudo apt-get install git
  2. # git clone git://git.drogon.net/wiringPi
  3. # cd wiringPi
  4. # sudo ./build
  5. # cd wiringPi
  6. # make static
  7. # sudo make install-static 

Natomiast w edycji pliku fhem.cfg zmieniamy definicję naszego zdarzenia "moj_alarm"

  1. define GPIO26 RPI_GPIO 26
  2. attr GPIO26 direction output
  3. define moj_alarm notify EnO_FEFB8D7B
  4. {
  5.   if ("$EVENT" ne "closed")
  6.   {
  7.     fhem("set GPIO26 on")
  8.   } else
  9.   {
  10.     fhem("set GPIO26 off")
  11.   }
  12. }
  13.  
  14. attr moj_alarm room EnOcean

Dzięki wirinigPi nie tylko zachowamy możliwość sterowania wybranym portem GPIO, ale również badaniem jego aktualnego stanu i ręcznego sterowania.

RPI_GPIO

Dla bardziej dociekliwich pełny plik konfiguracyjny fhem.cfg.

Podsumowanie

Czujniki dla standardu EnOcean do najtańszych nie należą, ponieważ należy się liczyć z wydatkiem ponad 600 złotych za opisywany dziś zestaw - jednak nie sposób odmówić im innowacyjności w zakresie samodzielnego zasilania i sposobu działania. Protokół transmisji posiada także mocny i ustandaryzowany grunt, a EnOcean Allinace skupia wokół siebie dużą grupę producentów wszelakich czujników - począwszy do zastosowań domowych, biurowych, a kończąc na przemysłowych - zobaczcie zresztą sami.

Cenę może nam osłodzić ich wygoda stosowania - są miniaturowe, ładne i solidnie wykonane. Po prostu podłącz, nie chowaj kilometrów kabli i zapomnij.

Następnym razem zapraszam Was na opis współpracy czujników EnOcean z innym programem, jakim jest chyba bardziej popularny Domoticz. Spróbujemy również wykonać jakiś własny czujnik korzystając z ESP8266, na przykład opisywanego już NodeMCU.

A jakie są Wasze pomysły na inteligentny dom?


Sprzęt do testu dostarczył:

CSI B.Marzec, B.Marzec, A.Zasucha Sp. J.
www.up-board.pl