Sensory BBMagic w zależności od sposobu instalacji mogą informować o wystąpieniu wielu różnych zdarzeń. Np.: otwarcie drzwi, okna czy szafy. Wejście człowieka w określoną strefę. Zmianę temperatury, wilgotności czy poziomu oświetlenia. BBMagic BUTTON wykryje pojedyncze lub podwójne kliknięcie, a także długie wciśnięcie przycisku na PCB lub tego podłączonego zewnętrznie, a moduł FLOOD wykryje obecność wody lub deszcz.
Różne reakcje na te zdarzenia bardzo łatwo zaprogramujemy wykorzystując pakiet BBMagic Home.
Jak działa obsługa zdarzeń?
Ogólna struktura zasobów projektu BBMagic Home jest taka:
Teraz szczególnie będzie nas interesowała zawartość katalogu src_actions. To tu znajdują się pliki źródłowe, które programują wykonywane działania w reakcji na różne zdarzenia.
Programowane działania podzielono na pliki, a każdy z nich odpowiada za reakcje na zdarzenia pochodzące od innego sensora BBMagic. I tak:
- button_action.c – zawiera reakcje na pojedyncze, podwójne naciśnięcie lub przytrzymanie jednego z przycisków modułów BBMagic BUTTON,
- flood_action.c – programuje działania będące odpowiedzią na zdarzenia wykryte przez sensory BBMagic FLOOD,
- meteo_action.c – zawiera kod określający akcje podejmowane w oparciu o informacje dostarczone przez BBMagic METEO,
- motion_action.c – tu programujemy działania podejmowane po wyryciu obecności człowieka w określonej strefie przez sensory BBMagic MOTION,
- magneto_action.c – zawiera kod z reakcjami na zdarzenia wykryte przez zainstalowane sensory BBMagic MAGNETO,
Pobieramy aplikację BBMagic Home
Aby pobrać i rozpakować projekt BBMagic Home zaloguj się do systemu i wpisz w linii poleceń:
wget http://bbmagic.net/download/proj/bbmagic_home_project.tar.gz tar -zxvf bbmagic_home_project.tar.gz cd bbmagic_home_project
Pakiet można pobrać również wprost z działu Download.
Jak zaprogramować reakcje BBMagic Home
Każdą reakcję naszej aplikacji inteligentnego otoczenia programujemy w podobny sposób. Przedstawimy ten proces w kilku poniższych punktach.
1. Odczytaj adres sensora
Aby zaprogramować reakcję na zdarzenie pochodzące od konkretnego sensora BBMagic musimy znać jego adres. Odczytanie adresu jest niezwykle proste przy użyciu aplikacji bbm_scanner_2 znajdującej się w katalogu tools. Jak to zrobić – dokładnie opisano w Jak odczytać adres sensora i klucz aktora BBMagic
2. Otwórz odpowiedni plik źródłowy
W zależności od tego, który sensor zamierzamy oprogramować otwieramy odpowiedni plik z katalogu src_actions.
- button_action.c – programowanie sensora BBMagic BUTTON,
- flood_action.c – programowanie sensora BBMagic FLOOD,
- meteo_action.c – programowanie sensora BBMagic METEO,
- motion_action.c – programowanie sensora BBMagic MOTION,
- magneto_action.c – programowanie sensora BBMagic MAGNETO,
3. Wklej odczytany adres sensora
Po otwarciu odpowiedniego pliku w miejsce jedynek wklejamy odczytany adres sensora.
if( bbm_check_addr("111111111111", bbm_buf) )
I po tej operacji powyższa linia wygląda np tak:
if( bbm_check_addr("E93D8E982282", bbm_buf) )
Mamy teraz gwarancję, że programowane działania zostaną wykonane tylko w reakcji na dane odebrane od sensora BBMagic MOTION o adresie 'E93D8E982282′.
4. Zobacz do pliku bbmagic_lib.h
Dane, które otrzymujemy od sensorów i aktorów zdefiniowane są w pliku bbmagic_lib.h.
Definicje dotyczące np. sensora BBMagic MOTION wyglądają następująco:
//-BBMagic MOTION module //----------------------------------------- #define BBM_MOTION_WORKTIME_0 0 #define BBM_MOTION_WORKTIME_1 1 #define BBM_MOTION_WORKTIME_2 2 #define BBM_MOTION_WORKTIME_3 3 #define BBM_MOTION_V_SUP 5 #define BBM_MOTION_FLAGS 7 #define BBM_MOTION_CHIP_TEMP 8 #define BBM_MOTION_LIGHT 9 #define BBM_MOTION_ADC_1_MSB 10 #define BBM_MOTION_ADC_1_LSB 11 #define BBM_MOTION_ADC_2_MSB 12 #define BBM_MOTION_ADC_2_LSB 13 #define BBM_MOTION_FIRM_1 14 #define BBM_MOTION_FIRM_0 15 #define BBM_MOTION_ALERT_MASK 0x80
5. Zaprogramuj działania
Dla przykładu oprogramujemy akcje związane z wykryciem ruchu przez sensor BBMagic MOTION o adresie 'E93D8E982282′. Otwieramy zatem plik 'motion_action.c’ z katalogu 'src_actions’ (zobacz strukturę na pierwszym obrazku artykułu).
Jeśli chcemy zaprogramować włączenie światła w pokoju po wykryciu ruchu to dopisujemy np.:
//-MOTION pokój if( bbm_check_addr("E93D8E982282", bbm_buf) ) { if( bbm_buf[BBM_MOTION_FLAGS] & BBM_MOTION_ALERT_MASK ) bbm_relay_on("rel_pokoj_1", REL_CH0) ; }
Pierwszy if sprawdza czy odebrane dane pochodzą od sensora o pożądanym adresie, drugi if sprawdza natomiast czy flaga wykrycia ruchu w odebranej wiadomości jest ustawiona. Jeśli obydwa warunki są spełnione to włączamy światło wywołując funkcję 'bbm_relay_on(..)’.
Jeśli chcielibyśmy włączyć światło po wykryciu ruchu, ale tylko wtedy gdy poziom oświetlenia zarejestrowany przez sensor MOTION jest poniżej wartości 125 to piszemy:
if( bbm_check_addr("E93D8E982282", bbm_buf) ) { if( bbm_buf[BBM_MOTION_FLAGS] & BBM_MOTION_ALERT_MASK ) if( bbm_buf[BBM_MOTION_LIGHT] < 125 ) bbm_relay_on("rel_pokoj_1", REL_CH0) ; }
- pierwszy if sprawdza czy odebrane dane pochodzą od sensora o adresie 'E93D8E982282',
- drugi if sprawdza czy flaga wykrycia ruchu w odebranej wiadomości jest ustawiona,
- trzeci if sprawdza czy poziom oświetlenia zarejestrowany przez sensor MOTION jest poniżej 125,
Gdy wszystkie warunki są spełnione to włączamy światło wywołując funkcję 'bbm_relay_on(..)'.
Jeśli użyjemy modułu aktora BBMagic DIMMER to natężenie włączanego oświetlenia możemy uzależnić od pory dnia, np. tak:
if( bbm_check_addr("E93D8E982282", bbm_buf) ) { if( bbm_buf[BBM_MOTION_FLAGS] & BBM_MOTION_ALERT_MASK ) { if( bbm_time_is_between(18.00, 20.00) ) { bbm_dimmer_set("dimm_pokoj_1", 100) ; }else if( bbm_time_is_between(20.00, 22.00) ) { bbm_dimmer_set("dimm_pokoj_1", 50) ; }else if( bbm_time_is_between(22.00, 00.00) ) { bbm_dimmer_set("dimm_pokoj_1", 20) ; } } }
- pierwszy if sprawdza czy odebrane dane pochodzą od sensora o adresie 'E93D8E982282',
- drugi if sprawdza czy flaga wykrycia ruchu w odebranej wiadomości jest ustawiona,
- trzeci if pozwala zdecydować, jakie powinno być natężenie włączanego światła,
Funkcja bbm_dimmer_set("dimm_pokoj_1", 20) włącza światło na 20% mocy całkowitej.
Według powyżej przedstawionego schematu programujemy akcje wszystkich sensorów BBMagic korzystając z zawartości pliku bbmagic_lib.h i dopisując warunki w pliku obsługującym programowany sensor: button_action.c, flood_action.c, meteo_action.c, motion_action.c lub magneto_action.c
6. Skompiluj i uruchom
Po zaprogramowaniu reakcji na zdarzenia projekt bbmagic_home kompilujemy używając polecenia make.
Po skończonej kompilacji utworzony zostanie wykonywalny plik wynikowy o nazwie run_bbm_home.
Uruchamiamy poleceniem sudo ./run_bbm_home.