Najnowsza biblioteka MySensors wersja 1.5 -> Link używa dwóch głównych klas:
MySensor i MyMessage
Inicjalizacja danych - MyMessage
MyMessage tworzy kontener do przechowywania danych, aby można było je wysłać do bramki MySensors, wpisujemy je zawsze na początku programu.
Polecenie MyMessage wygląda tak: MyMessage msg(child-sensor-id, rodzaj-zmiennej);
W nawiasie child-sensor-id identyfikuje podłączony czujnik, definiujemy go na początku programu poleceniem:
#define nazwa kolejny numer czujnika
Czyli, gdy mamy np. kilka czujników np. temperatury i wilgotności, to na początku programu definiujemy:
#define child_id_temp 1
#define child_id_wilg 2
Na stronie MySensors napisali -> Link, że gdy mamy tylko jeden czujnik, to przy definicji ilości czujników wpisujemy 0, czyli np. #define child-id 0.
Druga wartość podana w nawiasie określa rodzaj zmiennych, jakie będą przesyłane do bramki MySensors, mamy je określone na stronie -> Link w czwartej kolumnie
Przykładowo dla czujnika temperatury i wilgotności, będzie to wyglądać tak:
MyMessage msgtemp(child_id_temp, V_TEMP);
MyMessage msgwilg(child_id_wilg, V_HUM);
Po MyMessage nadajemy sobie dowolną nazwę, czyli jak wyżej, dla temperatury: msgtemp, a dla wilgotności: msgwilg
Te dane wpisujemy zawsze na początku programu, przed void setup()
UWAGA!!!
Przed wpisem MyMessage należy umieścić wpis:
MySensor gw;
Prezentacja - gw.present
Czujniki podłączane do nadajnika MySensors muszą najpierw przedstawić (zaprezentować) dane do kontrolera, odbywa się, to poleceniem:
gw.present(child-sensor-id, typ-czujnika);
Typy czujników są określone na stronie -> Link w pierwszej kolumnie, czyli dla powyższego przykładu, dla czujnika temperatury i wilgotności, polecenie będzie wyglądać tak:
gw.present(child_id_temp, S_TEMP);
gw.present(child_id_wilg, S_HUM);
Prezentację wpisujemy w void setup() czyli instrukcjach, które wykonywane są tylko raz na początku programu.
Dane jakie należy wpisać dla różnych rodzajów czujników podane są w poniższej tabeli
Inicjowanie gw.begin ()
Polecenie:
gw.begin();
uruchamia bibliotekę MySensors, odbiera dane z kontrolera i zapisuje w statycznej pamięci eproom Arduino, dane te są kasowane, po restarcie Arduino.
Polecenie gw.begin; umieszczamy przed prezentacją gw.preset w void setup().
Import bibliotek MySensors
Aby nasz program działał poprawnie na samym początku kodu programu należy umieścić wpis importujący biblioteki MySensors, czyli:
Przesyłanie danych - gw.send(msg.set(dane));
Polecenie to przesyła dane do bramki MySensors i dalej do Domoticz, umieszczamy je w pętli void loop()
W tym przykładzie będzie, to wyglądać tak:
gw.send(msgtemp.set(temp, 1));
gw.send(msgwilg.set(wilg, 1));
Kod programu dla nadajnika MySensors, w którym wykorzystałem typowy program do odczytu z czujnika DHT11 będzie wyglądał tak:
Kod do pobrania stąd -> Link
Myślę, że teraz każdy będzie mógł sobie napisać sam program, do odczytu dowolnych czujników z nadajnika MySensors
Mam pytanko - piszesz tu o podłączeniu do Ardino, a czy na Rpi też będzie to działać? Swoją przygodę z maliną dopiero zaczynam i nie wiem zbyt wiele :)
OdpowiedzUsuńTo jest do czujników MySensors, czyli połączeniu Arduino z NRF24L01. Czujnik MySEnsors łączy się bezprzewodowo z bramką MySensors podłączoną do Rasberry Pi.
OdpowiedzUsuńNie moge się dopatrzeć jak to jest z bezpieczeństwem przesyłanych danych? czy jest to jakoś szyfrowane czy sąsiad też bedzie mógł mi zgasić światło w pokoju? Jeszcze jedno pytanie, jeżeli wyśle polecenie do włącznika, to dostaję jakieś potwierdzenie, że faktycznie zmienił stan czy tylko polecenie leci ślepo w eter?
OdpowiedzUsuńJeżeli łączysz się lokalnie po sieci lan lub wifi, to Ci sąsiad nie wejdzie na Domoticz, bo nie ma dostępu do sieci lokalnej i wifi. Łącząc się zdalnie należy podać login i hasło, aby wejść do Domoticz. Hasła i loginu do Domoticz nie zna więc nikt Ci nie wejdzie.
UsuńChodziło mi o bezpieczeństwo komunikacji na poziomie MySensors, między czujnikami a bramką. A co z potwierdzeniem odebrania polecenia?
UsuńMożna włączyć szyfrowanie połączenia, jest o tym gdzieś napisane na MySensors. Potwierdzenie odebrania nie jest potrzebne przy włącznikach, bo włączamy albo stan niski albo wysoki na pinie i jest to widoczne w Domoticz.
UsuńJeśli chodzi o szyfrowanie, to poszukaj pliku MyConfig.h w skopiowanej bibliotece MySensors w katalogu Arduino. W tym pliku jest coś napisane o szyfrowaniu, cytat:
Usuń// Enable this for encryption of packets
//#define RFM69_ENABLE_ENCRYPTION
#define RFM69_ENCRYPTKEY "sampleEncryptKey" //exactly the same 16 characters/bytes on all nodes!
Świetnie, że szyfrowanie jest dostępne, bo to według mnie podstawa przy poważnym zastosowaniu komunikacji radiowej. A propo potwierdzenia odebranej wiadomości, co się stanie, gdy np. moduł włącznika zostanie odłączony od zasilania a będziemy chcieli zapalić lampę? Czy w jakikolwiek sposób dowiemy się, że coś jest nie tak, czy w domoticzu komenda zostanie wysłana i stan lampy zmieni się na włączony?
UsuńTen komentarz został usunięty przez autora.
OdpowiedzUsuńDomoticz oczywiście posiada taką funkcjonalność, która poinformuje Cię o braku komunikacji z urządzeniami.
OdpowiedzUsuń