W dzisiejszym wpisie opisze jak podłączyć bardzo przydatny czujnik (natężenia światła) do sterowania Naszym oświetleniem w systemie Domoticz.
Dzięki temu modułowi będziemy mogli sterować Naszym oświetleniem w zależności od tego ile światła jest w Naszym pomieszczeniu (najlepiej umieścić go w pobliżu okna)
Nie wskazuje on konkretnych wartości LUX tylko wartość 0 lub 1. Ma też możliwość regulacji czułości za pomocą „śruby” widocznej na zdjęciu poniżej.
Możemy go nabyć min. w sklepie Electropark we Wrocławiu.

Dane techniczne czujnika:
- Moduł wyposażony fotorezystor oraz komparator LM393
- Napięcie zasilania: 3,3V/5V
- Czułość regulowana potencjometrem
- Na wyjściu sygnał binarny
- Dioda LED sygnalizująca zasilanie
- Możliwość podłączenia czujnika bezpośrednio do mikrokontrolera (złącze P3)
- Wymiary: 30x15mm
Podłączenie:
- VCC – zasilanie 3,3V/5V
- GND – Ground
- OUT – Nasz pin w Raspberry PI – w przykładzie (kodzie, który znajdziecie poniżej) jest to GPIO 25

Przykładowy kod:
Aby go utworzyć logujemy się na Nasze raspberry i wpisujemy komendę:
sudo nano czujnikzmierzchu.py
Zapisujemy Nasz plik i za pomocą komendy:
sudo chmod +x czujnikzmierzchu.py
nadajemy mu odpowiednie uprawnienia
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(25, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) import urllib2 import urllib try: if GPIO.input(25): print GPIO.input(25) httpresponse = urllib.urlopen ("http://xxx.xxx.xxx.xxx:8080/json.htm?type=command¶m=switchlight&idx=XX&switchcmd=Off") else: print GPIO.input(25) httpresponse = urllib.urlopen ("http://xxx.xxx.xxx.xxx:8080/json.htm?type=command¶m=switchlight&idx=XX&switchcmd=On") sleep(0.1) finally: GPIO.cleanup() |
W miejscu xxx.xxx.xxx.xxx w kodzie – wpisujemy adres ip Naszego systemu Domoticz.
W miejscu xx w kodzie – wpisujemy IDX Naszego Wirtualnego Czujnika (jak go utworzyć opisałem w poprzednich wpisach).
W systemie DOmoticz zmieniamy typ czujnika na – Dusk Sensor.
Tym sposobem powinniśmy otrzymać czujnik, który po zapadnięciu zmierzchu będzie przełączał się pozycje 1.
Możemy to wykorzystać do zarzadzania tzw. Events w systemie Domoticz. Tak by światła zapalały się tylko wtedy gdy czujnik ten będzie włączony (ale o tym i o innych systemach blokowych tam wykorzystywanych napisze w późniejszych wpisach).
Gotowy plik do ściągnięcia znajdziecie TUTAJ
26 Odpowiedzi
Herigo
Nie ma takiego typu czujnika jak Dusk Sensor jaki powinien być wybrany ?
Robert
Nie ma takiego typu czujnika jak Dusk Sensor, jaki wybrać ?
Łukasz Kostrzewa
Witam Serdecznie
Jest taki czujnik. Jak już dodamy przełącznik to wchodzimy w jego ustawienia i tam wybieramy typ przełącznika – Dusk Sensor. Przy tworzeniu wybieramy przełącznik On/OFF.
Pzodrawiam
Herigo
Faktycznie jest ale w dalszym ciągu nie działa po uruchomieniu skryptu w konsoli mam
./czujnikzmierzchu.py: linia 1: import: nie znaleziono polecenia
from: can’t read /var/mail/time
./czujnikzmierzchu.py: linia 3: błąd składni przy nieoczekiwanym znaczniku
GPIO.BCM'
GPIO.setmode(GPIO.BCM)’./czujnikzmierzchu.py: linia 3:
Herigo
Teraz po wielu kombinacjach mam po wykonaniu skryptu
SyntaxError: Non-ASCII character ‚\xc2’ in file czujnikzmierzchu.py on line 9, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Co jest nie tak ?
Łukasz Kostrzewa
Witam
Proszę na początku pliku czujnikzmierzchu.py dodać:
# -*- coding: utf-8 -*-
Proszę dać znać czy pomogło
Andrzej
Dla tych którym nie działa:
Przed całym kodem należy dodać:
#!/usr/bin/python
# -*- coding: -*-
Super poradniki! Pozdrawiam i czekam na kolejne:)
Łukasz Kostrzewa
Witam
Wielkie dzięki za poradę.
Pozdrawiam
bartek
W dalszym ciągu uruchamiając program w konsoli ./czujnikzmierzchu.py są błędy
Łukasz Kostrzewa
Witam Serdecznie
Jakie błędy?
Proszę coś więcej napisać.
Pozdrawiam
Łukasz Kostrzewa
Na samym dole wpisu umieściłem mój plik, który wystarczy ściągnąć i edytować. Musi działać!:)
Pozdrawiam
Borko
Hej
bardzo fajny poradnik, korzystam z wielu przykładów
ale ten….
czy jest jakaś możliwość aby program działał cały czas ?
w moim przypadku po wykonaniu on lub off przestaje działać 🙁
Łukasz Kostrzewa
Witam Serdecznie
Proszę utworzyć plik o nazwie np. czujnik.sh poprzez komendę:
sudo nano czujnik.sh
W pliku proszę wpisać:
#!/bin/sh
cd /
cd home/pi/
sudo python czujnikzmierzchu.py – zamiast nazwy czujnikzmierzchu.py proszę podać nazwę Pana pliku z kodem do czujnika zmierzchu
cd /
Zapisać ten plik i nadać mu uprawnienia za pomocą komendy:
sudo chmod +x czujnik.sh
Następnie proszę odpalić crantab za pomocą komendy:
crontab -e
i na końcu pliku wkleić
*/30 * * * * /home/pi/czujnik.sh
Zamiast liczby 30 można wpisać np.1. 30 oznacza, że czujnik będzie wysyłął swój stan co 30 minut. 1 – co minutę.
Proszę zrestartować malinę za pomocą komendy
sudo restart
Wszystko powinno działać
Pozdrawiam i proszę o info czy pomogło
Damian
Witam.
Jak ustawić crontab aby stan czujnika był sprawdzany co 1 sekundę?
Dziękuję za pomoc.
Agnieszka Kostrzewa
Witam. W crontab się nie da poniżej minuty ale można zrobić skrypt który będzie wykonywał się co sekundę (https://gogomedia.pl/blog/backend/cron-jak-uruchamiac-zadania-co-1-sekunde/) To nie jest skrypt do czujnika tylko przykład jak to mniej więcej zrobić. Pozdrawiam
Borko
Dziękuję za odpowiedź
niestety, nie działa
moje wpisy:
oba w katalogu
home/pi
czujnikzmierzchu.py
#!/bin/sh
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
import urllib2
import urllib
try:
if GPIO.input(22):
print GPIO.input(22)
httpresponse = urllib.urlopen („http://192.168.1.10:8080/json.htm?type=command¶m=switchlight&idx=16&switchcmd=Off”)
else:
print GPIO.input(22)
httpresponse = urllib.urlopen („http://192.168.1.10:8080/json.htm?type=command¶m=switchlight&idx=16&switchcmd=On”)
sleep(0.9)
finally:
GPIO.cleanup()
i czujnik.sh
#!/bin/sh
cd /
cd home/pi/
sudo python czujnikzmierzchu.py
cd /
dziękuję za zainteresowanie i odpowiedź
od niedawna bawię się RPI, Domoticzem i automatyką w domu
wszystko w powijakach ale małymi krokami do przodu
pozdrawiam
Borko
Łukasz Kostrzewa
Witam
A w crontab -e Pan wpisał to co pisałem?
Musi działać.
Rozumiem, że skrypt ogólnie działa tylko, że raz?
Status się nie zmienia co 30 minut? (czy co ile Pan wpisał)
Proszę sprawdzić w logach w Domoticz czy się aktualizuje.
Borko
heh
Tak zmieniłem
oto ostatnie dwie linijki z wpisu
#*/10 * * * * sudo python /etc/domoticz/scripts/check_device_online.py 192.168.1.13 17 99 45
*/1 * * * * /home/pi/czujnikzmierzchu.sh
wiem że dla „LINUXOWCÓW” to pestka
dla mnie to wyzwanie 😉
THX
Agnieszka Kostrzewa
W crontab – e wg. tego co Pan wvzesniej pisal powinien byc odnosnik do pliku czujnik.sh a nie czujnikzmierzchu.sh. No chyba ze zmienil Pan nazwe?
Borko
Tak
w moich obu przypadkach jest to
czujnikzmierzchu.sh
czujnikzmierzchu.py
Agnieszka Kostrzewa
A po komendzie ./czujnikzmierzchu.sh odpala sie skrypt czujnikzmierzchu.py? Jezeli tak to cos musi byc nie tak z cron bo innej opcji nie widze.
Pozdrawiam
Borko
woow
Pani Agnieszko
DZIĘKUJĘ 😉
po odpaleniu ./czujnikzmierzchu.sh skrypt się nie uruchomił
i zacząłem szukać
i znalazłem „literówkę” w czujnikzmierzchu.sh
poprawiłem i wszystko działa jak należy
dziękuję za pomoc
i stawiam wirtualne „fifko”
pozdrawiam
Borko
Agnieszka Kostrzewa
Ciesze sie ze sie udalo! 🙂
Agnieszka = Łukasz:)
Pozdrawiam
Filip
Witam, jestem w trakcie realizacji tego czujnika. Jeżeli chodzi o wywołanie czujnika w malinie to w momencie zmiany natężenia oświetlenia widać stan 0 albo 1. Lecz za pierwszym razem wyskakuje mi błąd ( który teoretycznia można zignorować)
sudo python czujnikzmierzchu.py
czujnikzmierzchu.py:6: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
Dodatkowo po wszelkich ustawieniach domoticz nie reaguje na zmiany stanu.
Typ to : Light/Switch, Switch, Dusk Sensor.
Pozdrawiam Filip
Szymon
Cześć,
Podczas realizacji tego czujnika natrafiłem na pewne problemy, związane z nowszą wersją pythona. Komentarze zostały z pliku źródłowego. Wrzucam kod który działa mi na versji obecnej czyli: 3.5.3
Dzięki za bloga!
#!/bin/sh
import RPi.GPIO as GPIO
from time import sleep # this lets us have a time delay (see line 12)
GPIO.setmode(GPIO.BCM) # set up BCM GPIO numbering
GPIO.setup(25, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # set GPIO25 as input (b$
import urllib.request
import urllib.error
import urllib
from urllib.request import urlopen
try:
# while True: # this will carry on until you hit CTRL+C
if GPIO.input(25): # if port 25 == 1
print(GPIO.input(25))
httpresponse = urlopen(„http://192.168.0.185:8080/json.htm?type=comman$
else:
print(GPIO.input(25))
httpresponse = urlopen(„http://192.168.0.185:8080/json.htm?type=comman$
sleep(0.9) # wait 0.1 seconds
finally: # this block will run no matter how the try block ex$
GPIO.cleanup() # clean up after yourself
Agnieszka Kostrzewa
Wielkie dzięki! Pozdrawiam