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.

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ę.


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¶m=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¶m=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&param=switchlight&idx=2&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&param=switchlight&idx=2&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

Po wykryciu wody

Tak wygląda to w logach.

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 ).