Czujnik deszczu w Domoticzu

Od dłuższego czasu jestem posiadaczem Czujnika opadów deszczu YL-83. Urządzenie posiada wyjście analogowe i cyfrowe. Z uwagi na to, że raspberry pi nie posiada wyjścia analogowego ( w przeciwieństwie do Arduino ), nie możemy odczytać dokładnej wartości opadów. Otrzymamy tylko informacje o przejściu urządzenia w stan niski lub wysoki. Jeśli chodzi o opady deszczu w zupełności nam wystarczy informacja czy i jak długo padało.

czujnik deszczu

O ile podłączenie i napisanie prostego skryptu do obsługi czujnika w raspberry nie jest trudne, o tyle podłączenie go do Domoticza stanowiło dla mnie nie lada wyzwanie. Domyślnie Domoticz nie obsługuje urządzeń komunikujących się poprzez zmianę stanu ( np. czujnik ruchu, czujnik wilgotności gleby czy powyższy czujnik opadów ). W sieci jest kilka rozwiązań, ale wydały mi się one delikatnie mówiąc skomplikowane. Można podłączyć czujniki przez MySensors ( trzeba tworzyć bezprzewodowe czujniki ) lub skrypty lua. Jednak niedawno odkryłem sposób komunikacji pomiędzy Raspberry a Domoticzem poprzez JSON (JavaScript Object Notation).

W dużym uproszczeniu JSON pobiera dane z czujników podłączanych do Raspberry i przekazuje je do Domoticza. Składnia komendy wygląda następująco:

http://<username:password@>domoticz-ip/json.htm?api-call

Teraz pozostaje jakoś to opchnąć do Domoticza i czekać na deszcz.

Podłączenie czujnika deszczu do Raspberry.

Podłączenie pinów:

  • VCC podpinamy do 5V RPi
  • DO podłączamy do  GPIO ( u mnie pin 27 )
  • GDN do  GND)
  • AO pozostaje wolny

Prosty skrypt sprawdzający stan na pinie w raspberry:

#!/usr/bin/python

import RPi.GPIO as io
water_sensor = 27
io.setmode(io.BCM)
io.setup(water_sensor, io.IN)
try:
if io.input(water_sensor):
print("Brak opadów")

else:
print("Opady deszczu")

finally:
io.cleanup()

Integracja czujnika deszczu z Domoticzem.

Dodajemy wirtualny czujnik, ustawiamy na Przekaźnik ( Obsługa gniazdek WIFI, czyli jak to zrobić bez kabli. ). W zakładce /Konfiguracja/Urządzenia sprawdzamy idx naszego wirtualnego czujnika. W edycji możemy zmienić sobie ikonę z żarówki na kropelkę.

zrzut ekranu48.png

zrzut ekranu49

Teraz musimy przygotować komendę JSON do odczytania stanu urządzenia na raspberry i przesłania jej do odpowiedniego przełącznika w Domoticzu. U nie wygląda tak:

 http://192.168.X.XXX:8080/json.htm?type=command&param=switchlight&idx=21&switchcmd=Off 

Na początku adres IP i port Domoticza. Dalej komenda ustawiająca parametr czujnika, dla którego w Domoticzu idx wynosi 21 na OFF. Czyli jeśli czujnik deszczu nie wykrywa opadów to ustaw przełącznik na wyłączony. Przy wykryciu deszczu komenda powinna wyglądać jak poniżej:

http://192.168.X.XXX:8080/json.htm?type=command&param=switchlight&idx=21&switchcmd=On

Gotowy skrypt do obsługi czujnika i wysłania danych do Domoticza wygląda tak:

#!/usr/bin/python

import urllib
 import urllib2
 import time
 import RPi.GPIO as io
 water_sensor = 23
 io.setmode(io.BCM)
 io.setup(water_sensor, io.IN)
 try:
 if io.input(water_sensor):
 active_time = time.time()
 print("No Rain Detected")
 url = 'http://192.168.1.105:8080/json.htm?type=command&amp;param=switchlight&amp;idx=2&amp;switchcmd=Off'
 request = urllib2.Request(url)
 response = urllib2.urlopen(request)
 else:
 active_time = time.time()
 print("Rain Detected")
 url2 = 'http://192.168.1.105:8080/json.htm?type=command&amp;param=switchlight&amp;idx=2&amp;switchcmd=On'
 request = urllib2.Request(url2)
 response = urllib2.urlopen(request)

except KeyboardInterrupt:
 print "\nUser Halt!"
 finally:
 io.cleanup()

W water_sensor ustawiamy swój pin,  pod który podpięliśmy czujnik i idx urzadzenia w Domoticzu, nadajemy nazwę skryptu i uprawnienia ( sudo chmod 777 rain.sh – na wszelki wypadek ) .Uruchamiamy skrypt:

./rain.sh

zrzut ekranu50

Po wykryciu wody

zrzut ekranu51

Tak wygląda to w logach.

zrzut ekranu52.png

Pozostaje dodać tylko odpowiedni wpis w cronie aby sprawdzać co 5 minut czy pada deszcz.

pi@raspberrypi:crontab -e

i na końcu pliku wpisujemy :

* 5 * * * /home/pi/domoticz/scripts/rain.sh

I to wszystko.

Jest to w pewnym sensie sposób uniwersalny. Możemy tak zintegrować takie czujniki jak ruchu czy wilgotności gleby ( w zakresie mokro sucho ).

Reklama

11 komentarzy do “Czujnik deszczu w Domoticzu

  1. A czy pierwszy skrypt z posta działa ? Jeżeli jest ok to przejdziemy do skryptu integrującego czujnik z Domoticzem. Skrypt jest prosty. Podpiąć pod określony pin i polać woda czujnik sprawdzając czy zareaguje.
    Daj znać czy działa.

    Polubienie

    • Ani pierwszy , ani drugi nie zaskakuje. W pierwszym mam błąd if, dodałem dwie spacje przed i przeszedł dalej , ale przy print(„Brak opadów” błąd. i tak co, linię… w pierwszym podobne błędy 😦

      Polubienie

  2. Najprawdopodobniej WordPress psuje kodowanie. Miałem już taki problem z innym skryptem opisywanym na blogu. Sukcesywnie poprawiam i sprowadzam prawidłowość kodowania. Zauważyłem, że skrypty w tym poście są wklejone bez znaczników kodu. Wstawię znaczniki, sprawdzę swój skrypt i dam znać. Proszę o cierpliwość.

    Polubienie

  3. Witam
    Nie rozumiem dlaczego „Domyślnie Domoticz nie obsługuje urządzeń komunikujących się poprzez zmianę stanu ( np. czujnik ruchu, czujnik wilgotności gleby czy powyższy czujnik opadów ).” Przecież można taki czujnik podłączyć bezpośrednio do GPIO w raspberry i czytać stan jako GPIO.

    /usr/local/bin/gpio export 20 out
    /usr/local/gpio export 26 in
    /usr/local/gpio edge 26 falling

    Przykład z https://forbot.pl/blog/kurs-raspberry-pi-projekty-domoticz-kamera-gpio-id27448
    Dlaczego potrzebny jest skrypt JSON?

    Polubienie

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s