W dniu dzisiejszym dowiemy się jak podłączyć do raspberry p i skonfigurować w systemie Domoticz jeden z najbardziej przydatnych czujników – Moduł czujnika ruchu PIR HC-SR501.

Podłączenie:
- VCC czujnika podłączamy do zasilania 5V Raspberry Pi (może być także 3.3V)
- OUT czujnika podłączamy do jakiegoś wolnego pinu (w moim przypadku GPIO 8 – PIN 24)
- GND czujnika podłączamy do GND Raspberry (np. w zależności od wersji Raspberry – PIN 25)

Poniżej przedstawiam schemat podłączenia do Raspberry Pi B

Po prawidłowym podłączeniu sensora ruchu podłączamy nasze Raspberry do zasilania i logujemy się do systemu Domoticz poprzez wpisanie w polu adresu przeglądarki odpowiedniego IP.
Następnie przechodzimy do Konfiguracja/Sprzęt i dodajemy Nasze nowe urządzenie (będzie to wirtualny przycisk).
Robimy to poprzez wybranie opcji Dummy (Does nothing, use for virtual switches only) w Polu TYP.
W polu nazwa wpisujemy np. PIR (może być cokolwiek) i dodajemy Nasz nowy przycisk
Nasz przycisk powinien pojawić się w tabeli powyżej gdzie naciskamy (Utwórz wirtualne czujniki).

W polu Nazwa wpisujemy odpowiadającą Nam nazwę, np. PIR a w polu Typ czujnika wybieramy – Przełącznik.

Następnie przechodzimy do zakładki Konfiguracja/Urządzenia i zapamiętujemy IDX Naszego nowo utworzonego przełącznika.

Kolejnym krokiem jest wybranie zakładki PRZEŁĄCZNIKI z górnej belki i naciśnięcie przycisku EDYCJA znajdującego się pod wizerunkiem Naszego nowo utworzonego przełącznika a tam już tylko w polu TYP PRZEŁĄCZNIKA wybieramy „Motion Sensor” i zatwierdzamy przyciskiem „Zapisz”

W ten oto sposób utworzyliśmy wirtualny przycisk w systemie Domoticz. Będzie to najczęściej tworzony przez Nas przycisk w procesie dodawania wszelkich urządzeń.
Aby Nasz czujnik działał w systemie Domoticz należy jeszcze napisać krótki program w Pythonie.
Aby to zrobić logujemy się do Naszej Maliny przez SSH.
Po zalogowaniu przechodzimy najlepiej do katalogu Domoticz/Scripts przez komendę:
cd domoticz/scripts
Następnie tworzymy nowy plik o nazwie np. PIR.py poprzez komendę:
sudo nano PIR.py
W naszym nowo otwartym pliku wklejamy poniższy kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/usr/bin/python import RPi.GPIO as GPIO import time import urllib sensor = 8 GPIO.setmode(GPIO.BCM) GPIO.setup(sensor, GPIO.IN, GPIO.PUD_DOWN) previous_state = False current_state = False while True: time.sleep(0.1) previous_state = current_state current_state = GPIO.input(sensor) if current_state != previous_state: new_state = "HIGH" if current_state else "LOW" print("GPIO pin %s is %s" % (sensor, new_state)) httpresponse = urllib.urlopen ("http://xxx.xxx.xxx.xxx:8080/json.htm?type=command¶m=switchlight&idx=XX&switchcmd=On") |
Zmieniamy również switchlight&idx=XX gdzie w miejsce XX wpisujemy idx Waszego nowo utworzonego urządzenia w systemie Domoticz – w tym przykładnie będzie to liczba 19.
Nadajemy uprawnienia przez:
sudo chmod +x PIR.py
Na końcu w zakładce Przełączniki w systemie Domoticz w linii – „Opóźnienie wył.” wpisujemy wartość, po której chcemy aby Nasz czujnik się wyłączał (np. 20s).
Teraz musimy sprawić by Nasz skrypt odpalał się automatycznie po starcie systemu.
W tym celu tworzymy nowy plik poprzez znaną nam już komendę:
sudo nano PIR.sh
W nowo otwartym liku wpisujemy poniższy kod:
1 2 3 4 5 6 |
#!/bin/sh cd / cd home/pi/domoticz/scripts sudo python PIR.py cd / |
Aby zakończyć naciskamy ctrl+x i zapisujemy Nasz plik.
Następnie dodajemy mu uprawnienia poprzez komendę:
sudo chmod +x PIR.sh
Następnie edytujemy plik rc.local poprzez komendę:
sudo nano /etc/rc.local
I na końcu pliku wpisujemy:
/home/pi/domoticz/scripts/PIR.sh &
Naciskamy ctrl+x i nadpisujemy Nasz plik.
Od tej chwili Nasz czujnik ruchu powinien uruchamiać się wraz ze startem systemu.
55 Odpowiedzi
Darek
Witam, dziękuję za opis – jestem zielony z tematu, ale czy nie brakuje w kodzie poleceń wyłączających? w domoticz nie zmienia sie na off – jak z przeglądarki wyślę http://192.168.0.145:40081/json.htm?type=command¶m=switchlight&idx=XX&switchcmd=Off to dopiero zmienia status
Agnieszka Kostrzewa
Witam Serdecznie
Faktycznie…zapomniałem dopisać, że aby czujnik ruchu się wyłączył należy w Domoticz w ustawieniach Przełącznika w linii – „Opóźnienie wyłączenia” wpisać np. 20 sekund. Wtedy czujnik powinien wyłączać się po 20s.
Pozdrawiam i mam nadzieję, że to pomogło
Rafał
Lub dodać jeszcze jedne warunek:
if current_state == 1:
httpresponse = urllib.urlopen („http://xxx.xxx.xxx.xxx:xxxx/json.htm?type=command¶m=switchlight&idx=XX&switchcmd=On”😉
else:
httpresponse = urllib.urlopen („http://xxx.xxx.xxx.xxx:xxxx/json.htm?type=command¶m=switchlight&idx=XX&switchcmd=Off”😉
Wojtek
Witam, chciałbym mieć dwie czujki PIR. To ten kod muszę powielić czy jest to zupełnie inny kod?
Krzysztof
Witam serdecznie.
Nie wiem czy tylko u mnie tak jest, ale przy starcie Maliny nie jest automatycznie wykonywany rc.local
Dopiero ręczne jego wywołanie, lub sudo reboot now rozwiązuje problem.
Jak znajdę rozwiązanie to się z nim podzielę na forum, a dla osób którym skrypt nie uruchamia się sam automatycznie wraz ze startem Maliny polecam po starcie zrobić reboot.
Pozdrawiam
Łukasz Kostrzewa
Witam
Powiem szczerze, że nie mam pojęcia dlaczego tak się dzieje. Bardzo proszę o info jak dojdzie Pan do tego co z tym zrobić.
Pozdrawiam
Wiktor
i co dalej? Już mogę w domoticz ustawić, np żeby lampka się włączała jak wykryje ruch? Nie wiem jak to zrobić 🙁
Agnieszka Kostrzewa
Jak ma Pan jakas sterowana lampke i jest juz dodana w Domoticz to oczywiście ze tak. Mozna to zrobic za pomocą Zdarzeń. W wolnej chwili postaram sie rozwinac to zagadnienie.
Wiktor
Dziękuję. Poradziłem sobie ze zdarzeniami. Lampka się zapala jak czujnik wykryje ruch. Jak poruszam ręką to mi w konsoli pokazuje:
GPIO pin 8 is HIGH
GPIO pin 8 is LOW
Potem dostaje podwójne powiadomienia na telefonie „Wykryto ruch”, które sobie ustawiłem na domoticz. Rozumiem, że to przez ten HIGH oraz LOW. Co zrobić, żeby dostać tylko jedno powiadomienie o wykrytym ruchu?
Będzie trzeba zupełnie zmienić strukturę kodu, prawda? Za bardzo się nie znam na programowaniu. Uczę się jeszcze.
Wiktor
Poradziłem sobie usuwając powiadomienie z przełącznika i dałem powiadomienie w innym miejscu – zdarzeniu swoim. Super poradnik. Dziękuję!
Agnieszka Kostrzewa
Witam. Nie zdazylem odpisac:) Lubie Domoticza za to ze zmusza do kombinowania 🙂 Ciesze sie ze sie udalo. Pozdrawiam i dziekuje za mile slowa
Łukasz
Witam jaki trzeba zmienic kod by dodac jeszcz 2 czujniki?
Łukasz Kostrzewa
Witam Serdecznie
Należy utworzyć jeszcze dwa dodatkowe Wirtualne Przełączniki w Domoticz. Zapisać sobie ich numery IDX.
Utworzyć dwa dodatkowe skrypty, w których zmieniamy Sensor na numer Pinu GPIO gdzie podłączyliśmy nowy czujnik oraz zmieniamy IDX na nowo utworzony.
Można by to też zrobić w jednym pliku ale tak będzie bardziej czytelnie i mniej tłumaczenia 🙂
Pozdrawiam
Rafał
Gdyby ktoś miał problemy z OrangePI to zmodyfikowałem troszkę kod:
#!/usr/bin/python
from pyA20.gpio import gpio
from pyA20.gpio import port
import time
import urllib
# initialize GPIO
sensor = port.PA8
gpio.init()
previous_state = False
current_state = False
while True:
previous_state = current_state
current_state = sensor
if current_state != previous_state:
new_state = „HIGH” if current_state else „LOW”
print(„GPIO pin %s is %s” % (sensor, new_state))
httpresponse = urllib.urlopen („http://xxx.xxx.xxx.xxx:xxxx/json.htm?type=command¶m=switchlight&idx=xxx&switchcmd=On”😉
Rafał
Kolego na jakim Orange Pi działa Ci ten kod ?
Próbuje go uruchomić na Pi One i jest problem:(
Jarek
Witam, proszę o pomoc ewentualnie sugestię, jak w ten sposób skonfigurowany PIR (z tym opisem poszło gładko) mógłby w domoticz załączać przekaźnik sterujący np. oswietleniem led na schodach.
Chciałby wykorzystać to rozwiązanie.
Agnieszka Kostrzewa
Witam. Wystarczy w Events (Zdarzenia) w ustawieniach dosac prosty schenat blokowy. IF PIR ON then Led Schody On. Zapisac i ustawic jako aktywny. Pozdrawiam
Jarek
Witam, Bardzo dziękuję zadziało od ręki, może komuś sie przyda kiedy stanie przed ścianą jak ja, poniżej próbka
skryptu LUA, mój przekaźnik załączany jest GPIO27 przez 10s,
————————————–
— script_device_PIR.lua
local sensor = ‚PIR’
commandArray = {}
if (devicechanged[sensor] == ‚On’) then
print („Wlaczam sterowanie oswietleniem przez pin 17”)
os.execute („/usr/local/bin/gpio export 27 in”)
os.execute („/usr/local/bin/gpio export 27 out”)
os.execute („sleep 10”)
os.execute („/usr/local/bin/gpio export 27 in”)
end
return commandArray
Jarek
Witam ponownie, Panie Łukaszu od momentu właczenia hasła w domoticzu przestało działać, proszę o podpowiedź gdzie dopisać użytkownika i hasło, pozdrawiam.
Łukasz Kostrzewa
Witam Serdecznie
Dziwne bo ja mam hasło i działa tak jak jest w skrypcie. A ma Pan wpisane w ustawieniach Domoticza w polu „Sieci lokalne (bez hasła/loginu)” – 192.168.0.*;127.0.0.*
Jeżeli nie to proszę to wpisać i dać znać czy pomogło.
Pozdrawiam
Jarek
Witam, dziękuję miałem dodane tle tylko, że z ustawieniami dla mojej sieci. Kiedy zasugerował Pan, iż powinno działać, sprawdziłem logi pojawiał się komunikat ( Error: User: Admin initiated a switch command (Wrong code!) i nic więcej dlatego nie mogłem tego z skojarzyć z pir-em.
Przeanalizowałem wszystko od początku i okazało się, że mam zabezpieczony przycisk, odznaczyłem i śmiga.
Pozdrawiam!
Agnieszka Kostrzewa
Ciesze sie ze sie udalo:) Lubie Domoticza za to ze trzeba kombinowac i mimo ze w sieci jest wiele gotowych „przepisow” to zawsze cos dziala lub nie inaczej:) Ale poswiecajac troche czasu mozna samemu dojsc do wielu rzeczy i sporo sie nauczyc. Pozdrawiam
Gregory
Walczę z tym kodem na orange pi pc i nie bangla…. Jakiś pomysł?
Agnieszka Kostrzewa
Niestety nie miałem do czynienia z tym sprzętem… Nie pomoge:(
Darek P.
Witam
ja borykam się z „fałszywymi” wyzwoleniami-nawet w logach pojawia się losowe zadziałanie czujnika, próbowałem rezystora podciągajacego – bez zmian. Dodatkowo kable pomiędzy czujnikiem a centralą będą ok 10-20m (skrętka kat.5), z przekaźnikami i czuj. temp DS nie mam problemów.
Pozdrawiam Darek
[email protected]
Agnieszka Kostrzewa
Witam Serdecznie. Proszę kupić inny PIR. Mam w domu 5 sztuk i 4 działly ok. Z 5 od czasu do czasu cos się dzialo i potrafil się wyzwalac bez podstaw. Po zmianie na nowy jest ok. Moze to jest powód. Pozdrawiam
Darek P.
Witam
czujek mam kilka, sprawdzilem z ESP i zachowują sie poprawnie, jedynie z rasperry dziala niestabilnie-losowo (nawet jak calkowicie zaslonieta), nawet na krótkich kablach. Pytanie czy zastosować jakiegoś rezystora podciagającego?
Agnieszka Kostrzewa
Witam. Jest to jakieś rozwiązanie. Niektórzy stosują i możliwe że w tym przypadku pomoże. Ja nie musialem ale jak widać każdy przypadek jest inny:)
Darek
Dziękuję za odpowiedź i ostatnie pytanie jaka wartość rezystora i do + czy –
Agnieszka Kostrzewa
Kurcze nie wiem. Może tak jak w przypadku czujnika temperatury 4.7? Myślę że miedzy VCC a DATA. Pozdrawiam
Darek P.
Chyba się udało-czas pokaże. Zmieniłem GPIO w ESP na takie, które NIE MA rezystora podciągającego (w dokumentacji konkretnej płytki esp są opisane-ja mam WEMOS D1 r2) i jak na razie jest ok. Po „przemyśleniu” ewentualny rezystor chyba powinien być do masy, ponieważ czujka ma stan wysoki na wyjściu po detekcji. Ale mam inny problem-opisze poniżej.
Darek P.
Kolejny problem 🙂 – wyłączenie przekaźnika. Schemat blokowy „if PIR1=on set OKAP=on for 1 min” nie sprawdza się-czas liczony jest tylko od pierwszego wykrycia niezależnie czy czujka jest ciągle wzbudzana. Skutkuje to wyłączeniem się po 1 min i ponownym włączeniu co jest denerwujące. Czy ktoś wie jak napisać (podejrzewam że w LUA jest szybciej), żeby czas był resetowany przy każdym ponownym stanie ON na czujce? Potencjometry nie wchodzą w grę bo czasy będą różne dla różnych elementów wykonawczych. Z góry dzięki za pomoc. Aha i nie chciałbym też skryptów na malince bo różnie bywa z ich wykonywaniem (przerabiałem z UPSem)
Darek P.
Sam sobie odpowiem 🙂 może się komuś przyda. Trafiłem na https://www.domoticz.com/wiki/Event_script_examples#Motion_detector_30_minute_time-out_.28presence_detection.29
oraz artykuł poniżej o włączeniu
Utworzyłem dwa zdarzenia i działa. Jedyna różnica to czas 30 to nie minuty tylko sekundy. Ale wygląda, że jest ok.
Agnieszka Kostrzewa
Dzieki za info
Maciej
Witam,
Pytanie odnosnie ostatniego kroku a mianowicie edycji sudo nano /etc/rc.local,
przed nadpisaniem skryptu wyglada to tak:
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ „$_IP” ]; then
printf „My IP address is %s\n” „$_IP”
fi
/home/pi/domoticz/scripts/Temp.sh &
exit 0
Ostatnia linika kodu ktora trzeba wkleic powinna byc przed exit 0 czy pod?
Z gory dziekuje za odpowiedz
Agnieszka Kostrzewa
Witam. Pod. Pozdrawiam
Maciej
Witam
Kolejny problemik, brak jakichkolwiek sygnałów życia czujnika w Domoticzu.
Sprawdziłem logi, jest jakiś error ale nie mogę tego ogarnąć. Czujnik temp śmiga a czujka nie:
Error: Scheduler thread seems to have ended unexpectedly
Jakies pomysly??
Agnieszka Kostrzewa
Niestety żadnych 🙁
Maciej
Witam,
Nie ma potrzeby dodania w crontabie podobnego schematu jak w przypadku czujnika temperatury?
Agnieszka Kostrzewa
Witam. Nie ma ale zauważyłem że jak coś przestanie działać to trzeba zrestartowac raspberry by skrypt zaczął działać poprawnie bo w sumie uruchamia się przy starcie. Można spróbować dopisać do crontaba w razie czego
Maciej
…przy probie uruchomienia skryptu dostaje :
GPIO pin 9 is HIGH
Maciej
…i nie wiem czy to jest prawidłowa reakcja??
Maciej
…sam sobie odpowiem 🙂
Na poziomie Pi wszystko działa jak należy, pytanie czemu informacje z czujnika nie docierają do Domoticza :(…sorrki za ten monolog. Ale może ktoś wpadnie na jakieś rozwiązanie..
Łukasz
Witam
Moze ktos mi podpowie co robie źle choc kiedys uzywałem tej metody i wszystko smigało a wiec tak:
wpisuje w konsoli
sudo nano /etc/init.d/domoticz.sh
dodaje sobie obsługe pinów
/usr/bin/gpio export 16 out
/usr/bin/gpio export 20 out
i wszystko jest ok do tego momentu gdy chce dodac np:
/usr/bin/gpio export 21 in
domoticz sie wykrzacza wyskakuje domoticz browser cache failed domoticz offline
mam w tym skrypcoe tez poodwracane piny komenda
sudo sh -c „echo ‚1’ >> /sys/class/gpio/gpio20/active_low”
kiedys tak robiłem i wszystko było ok teraz jak dopisze linijke na piny wejsciowe domoticz sie wykerzacza skasuje ta liniejke z powrotem sie uruchamia… rasbiana stawiałem od nowa na karcie i dalej to samo.
Agnieszka Kostrzewa
Miałem taką samą sytuację na którymś z Pinów. Nie pamiętam niestety jak ta sprawę rozwiązałem. Ale miałem to samo… Łącze się w bólu 🙂
Łukasz
Wydaje mi sie ze udało mi sie rozwiazac problem postawilem wszystko jeszcze raz i na czystym rasbianie zainstalowałem tylko domoticz i wszystko działa jak nalezy … I jeszcze jedno wczesniej działo sie tak na domoticzu w wersji beta teraz zainstalowałem jakąs starsza wersje
Agnieszka Kostrzewa
Dzieki za info i sposób rozwiązania. Pozdrawiam
Łukasz
Wydaje mi sie ze udało mi sie rozwiazac problem postawilem wszystko jeszcze raz i na czystym rasbianie zainstalowałem tylko domoticz i wszystko działa jak nalezy … I jeszcze jedno wczesniej działo sie tak na domoticzu w wersji beta teraz zainstalowałem jakąs starsza wersje
Piotrek
Witam
Mam problem. Po wykonaniu wszystkich czynności czujnik w domoticzu w ogóle nie reaguje. Cały czas ma stan wyłączony. Czujniki mam dwa więc wątpię, że mam takie szczęście żeby dwa były ferelne. Jakieś pomysły ?
Pozdrawiam
Wojtek
Hej,
Jeśli nie jesteś pewien czy czujki działają sprawdź je woltomierzem (czy dają 3,3V na wyjściu po wyczuciu ruchu.
Tommy
I co uadlo Ci sie rozwiazac problem? Bo mam to samo…
Rafal
Jakieś postępy z tym ? Mam to samo
Rafal
Witam
Podobnie jak kolega Piotrek w poscie wyżej mam ten sam problem. Po wykonaniu wszystkich czynności czujnik w ogóle nie reaguje w domoticzu. Cały czas ma stan wyłączony.
Moze ktoś z tym mi pomóc 🙂
Agnieszka Kostrzewa
Witam. Ja od ponad 2 lat nie aktualizował em Domoticza. Nie mam pojęcia czemu tak się dzieje:( Wesołych Świat
Antoni
Witam
Po wykryciu przez czujnik ruchu, skrypt wywołuje następujący błąd:
GPIO pin 18 is HIGH
Traceback (most recent call last):
File „PIR.py”, line 20, in
httpresponse = urllib.urlopen(„http://192.168.1.100:8080/json.htm?type=command¶m=switchlight&idx=6&switchcmd=On”😉
File „/usr/lib/python2.7/urllib.py”, line 87, in urlopen
return opener.open(url)
File „/usr/lib/python2.7/urllib.py”, line 216, in open
return getattr(self, name)(url)
File „/usr/lib/python2.7/urllib.py”, line 367, in open_http
return self.http_error(url, fp, errcode, errmsg, headers)
File „/usr/lib/python2.7/urllib.py”, line 380, in http_error
result = method(url, fp, errcode, errmsg, headers)
File „/usr/lib/python2.7/urllib.py”, line 694, in http_error_401
errcode, errmsg, headers)
File „/usr/lib/python2.7/urllib.py”, line 389, in http_error_default
raise IOError, (‚http error’, errcode, errmsg, headers)
IOError: (‚http error’, 401, ‚Unauthorized’, )
Morze ktoś mi pomóc w wyjaśnieni problemu?