Podłączenie kontaktronu do Raspberry Pi w systemie Domoticz

wpis w: Domoticz | 20

W dzisiejszym wpisie opiszę jak podłączyć do Raspberyr Pi czujnik otwarcia drzwi i okien (kontaktron).

Kontaktron HO-03B
Kontaktron HO-03B

 

W swoim przypadku użyłem kontaktronu HO-03B.

Moim zdaniem jest to jeden z ciekawszych modeli. Jest bardzo mały. Posiada wbudowane dwa kable przyłączeniowe. Ma możliwość montażu na śruby jak i taśmę, która jest dołączona do zestawu a cena nie przekracza 6 zł. Dostępny również w kolorze białym.

Dane techniczne:

  • Napięcie pracy: do 40V
  • Prąd (maksymalny): 100mA
  • Szczelina: do 25mm
  • Rodzaj styku: NC (brak magnesu – styki rozwarte)
  • Kolor : brązowy
  • Długość przewodów: 30cm
  • Wytrzymałe na warunki atmosferyczne (IP65)
  • Wymiary:
    • Czujnik: 27x13x7mm
    • Magnes: 27x13x7mm
  • W zestawie:
    • 4 śruby mocujące
    • Czujnik
    • Magnes
    • Taśma dwustronna

 

Poniżej schemat podłączenia kontaktronu do Raspberry:

 

Schemat podłączenia kontaktronu do Raspberry Pi
Schemat podłączenia kontaktronu do Raspberry Pi

 

Aby Nasz kontaktron odczytywał stan niski i wysoki (styki zwarte/rozwarte) należy utworzyć poniższy skrypt za pomocą polecania:

  • sudo nano kontaktron.py

Następnie w nowo utworzonym pliku wklejamy poniższy kod:

Jeżeli nie macie zainstalowanego modułu urllib i urllib2 należy go zainstalować poprzez komendę:

  • sudo pip install urllib urllib2

Następnie dodajemy plikowi uprawnienia poprzez komendę:

  • sudo chmod +x kontaktron.py

W tym momencie możemy sprawdzić czy Nasz skrypt działa poprzez uruchomienie go za pomocą polecenia:

  • sudo python kontaktron.py

Jeżeli wszystko jest w porządku po połączeniu ze sobą magnesów kontaktronu powinien pojawić się napis „DRZWI ZAKMNIĘTE” a po rozwarciu „DRZWI OTWARTE”

Aby Nasz kontaktron był widoczny w systemie Domoticz – tworzymy wirtualny czujnik (jak to zrobić opisałem TU). Przy tworzeniu czujnika – ustawiamy jego typ na – Przełącznik.

Gdy już wszystko utworzyliśmy zapamiętujemy idx Naszego nowo utworzonego Przełącznika (Zakładka Konfiguracja/Urządzenia).

W skrypcie zamiast xxx.xxx.xxx.xxx – wpisujecie IP do swojego systemu Domoticz oraz odpowiedni port – w moim przypadku 8080.

W skrypcie zamiast XX – wpisujecie idx swojego nowo utworzonego Przełącznika.

Wychodzimy z edytora poprzez komendę:

  • CTRL + x

Zapisujemy zmiany poprzez komendę ENTER.

Jeżeli wszystko zrobiliśmy poprawnie Nasz przełącznik powinien zmieniać swój status w zależności od tego czy połączymy ze sobą magnesy kontaktronu czy też będą one rozwarte.

Metoda druga:

Istnieje druga (myślę, że może nawet łatwiejsza) metoda na zainstalowanie kontaktronu w systemie Domoticz.

Podłączamy wszystko tak samo jak w poradniku powyżej.

Następnie w konsoli instalujemy biblioteki wiringPi (jak to zrobić opisałem na przykładzie instalacji Gniazdek 433Mhz w TYM artykule).

Następnie w konsoli wpisujemy:

  • sudo nano /etc/init.d/domoticz.sh

Na końcu pliku wpisujemy:

/usr/local/bin/gpio export 23 in
/usr/local/bin/gpio edge 23 both

Jeżeli podłączyliście wasz kontaktron do innego pinu niż w tym poradniku (a był to PIN 23 – wtedy wpisujecie nie gpio export 23 i gpio edge 23 tylko Piny zgodnie z wartościami z tabeli po wpisaniu komendy): gpio readall

 

kont

 

Naciskamy Ctr+x i zapisujemy zmiany.

Następnie restartujemy Domoticz za pomocą komendy:

  • sudo service domoticz.sh restart

Teraz zostaje już tylko dodanie przełącznika do Domoticz i odpowiednia konfiguracja.

Logujemy się do Domoticz przez WWW.

Tworzymy wirtualny przycisk wchodząc do Konfiguracja–>Sprzęt i wybieramy parametry jak na poniższym zdjęciu.

 

gpio-kont

 

Następnie wchodzimy w zakładkę Przełączniki i w górnym lewym rogu wybieramy „Ręczne świat./przeł.”

 

kontaktronprzelacznik1

 

W nowo otwartej tabelce wypełniamy odpowiednio:

  • Sprzęt – wybieramy nasz wirtualny czujnik GPIO, który utworzyliśmy wcześniej
  • Nazwa – dowolna nazwa
  • Typ przełącznika – Contact
  • Typ: GPIO
  • GPIO: Wasze Gpio 23 (powinno być jako IN)

 

kont1

 

Naciskamy przycisk „Dodaj urządzenie”

Od tego momentu wszystko powinno już działać poprawnie.

Gdyby coś nie działało pod tym adresem znajdziecie gotowy plik.

20 Odpowiedzi

  1. Błąd w komendzie jest: sudo pip urllib urllib2 powinno być: sudo pip install urllib urllib2
    Pozdrawiam

    • Agnieszka Kostrzewa

      Witam Serdecznie
      Bardzo dziękuję za informacje.
      Zaraz zmienię na poprawną komendę.
      Pozdrawiam

  2. Wpisując kod:

    #!/usr/bin/python

    import RPi.GPIO as GPIO
    import time
    import urllib
    import urllib2

    sensor = 5

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(sensor, GPIO.IN, pull_up_down=GPIO.PUD_UP)

    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:
    if current_state:
    httpresponse = urllib.urlopen(‚http://10.229.0.15:8081/json.htm?type=command&param=switchlight&idx=19&switchcmd=On’)
    else:
    httpresponse = urllib.urlopen(‚http://10.229.0.15:8081/json.htm?type=command&param=switchlight&idx=19&switchcmd=Off’)

    Otrzymuję następujący błąd:
    httpresponse = urllib.urlopen(‚http://10.229.0.15:8081/json.htm?type=command&param=switchlight&idx=19&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 213, in open
    return getattr(self, name)(url)
    File „/usr/lib/python2.7/urllib.py”, line 364, in open_http
    return self.http_error(url, fp, errcode, errmsg, headers)
    File „/usr/lib/python2.7/urllib.py”, line 377, in http_error
    result = method(url, fp, errcode, errmsg, headers)
    File „/usr/lib/python2.7/urllib.py”, line 689, in http_error_401
    errcode, errmsg, headers)
    File „/usr/lib/python2.7/urllib.py”, line 386, in http_error_default
    raise IOError, (‚http error’, errcode, errmsg, headers)
    IOError: (‚http error’, 401, ‚Unauthorized’, )

    Oczywiście gdy wprowadzam samo:

    http://10.34.0.200:8081/json.htm?type=command&param=switchlight&idx=19&switchcmd=On

    I

    http://10.34.0.200:8081/json.htm?type=command&param=switchlight&idx=19&switchcmd=Off

    Stan przełącznika w domoticzu się zmienia.

    Co robię nie tak?

    Pozdrawiam!

    • Łukasz Kostrzewa

      Witam Serdecznie

      W przykładzie używa Pan adresu: http://10.229.0.15:8081 a później w opisie http://10.34.0.200:8081. Może ten pierwszy adres IP jest niepoprawny?
      ewentualnie czy zainstalował Pan: sudo pip install urllib urllib2 ?
      Ewentualnie można spróbować drugiej metody, którą opisałem na dole posta.

      Pozdrawiam i czekam na info

  3. Oczywiści przeoczyłem adres powinien być http://10.34.0.200:8081 – jednak dalej ten sam problem. Malinka jest wystawiona na dwóch adresach w sieci LAN i WLAN – dlatego próbowałem również pod innym adresem.

    Właśnie jeśli chodzi o instalację biblioteki to jest mały problem. Dostaję następujący komunikat: sudo pip install urllib urllib2
    Downloading/unpacking urllib
    Could not find any downloads that satisfy the requirement urllib
    Cleaning up…
    No distributions at all found for urllib
    Storing debug log for failure in /root/.pip/pip.log

    Moja wersja pythona to:

    Python 2.7.9 (default, Sep 17 2016, 20:26:04)
    [GCC 4.9.2] on linux2

    Gdy dam:
    apt-cache search urllib
    python-m2crypto – a crypto and SSL toolkit for Python
    python-multipartposthandler – handler for urllib2 to enable multipart form uploading
    python-ndg-httpsclient – enhanced HTTPS support for httplib and urllib2 using PyOpenSSL
    python-pysocks – socket-like interface for tunneling through SOCKS – Python 2.x
    python-requests – elegant and simple HTTP library for Python2, built for human beings
    python-requests-whl – elegant and simple HTTP library for Python, built for human beings
    python-urllib3 – HTTP library with thread-safe connection pooling for Python
    python-urllib3-whl – HTTP library with thread-safe connection pooling
    python3-pysocks – socket-like interface for tunneling through SOCKS – Python 3.x
    python3-requests – elegant and simple HTTP library for Python3, built for human beings
    python3-urllib3 – HTTP library with thread-safe connection pooling for Python3

    Czy te biblioteki nie są już dostępne? Za bardzo nie rozumiem o co chodzi.

    Być może trzeba to przebudować na bibliotekę urllib3?

  4. Gdy wejdę w /usr/lib/python2.7

    Wydaje się, że biblioteki są!

    -rw-r–r– 1 root root 52407 Sep 18 03:44 urllib2.py
    -rw-r–r– 1 root root 46992 Feb 13 15:56 urllib2.pyc
    -rw-r–r– 1 root root 20480 Mar 2 14:01 .urllib2.py.swp
    -rw-r–r– 1 root root 58498 Mar 2 13:57 _urllib.py
    -rw-r–r– 1 root root 58498 Mar 2 14:19 urllib.py
    -rw-r–r– 1 root root 50208 Feb 13 15:56 urllib.pyc
    -rw——- 1 root root 60404 Mar 2 14:08 urllib.py.save
    -rw-r–r– 1 root root 15164 Sep 18 03:44 urlparse.py

  5. Ok – po wielu godzinach szukania i kombinowania wszystko się wyjaśniło…. Sprawa dosyć głupia i prosta.

    Chodziło o nieautoryzowany dostęp. Do panelu domoticza miałem ustawione login i hasło. Dopóki nie dodałem swojej sieci do zaufanych – nie wymagających loginu i hasła – program nie miał prawa działać (zapewne można było to gdzieś zapisać w bibliotece ). Na chwilę obecną problem uznaje za rozwiązany.

    • Łukasz Kostrzewa

      Witam Serdecznie
      Bardzo dziękuję, że opisał Pan na czym polegał problem oraz jego rozwiązanie, na które na pewno bym nie wpadł 🙂
      W przypadku budowania inteligentnego mieszkania na systemie Domoticz i raspberry pi najważniejsze jest żeby kombinować 🙂 Bo zawsze coś nie działa tak jak trzeba mimo, że robi się krok po kroku jak z poradnika. Każdy ma trochę inny system i mogą występować różne problemy.
      Pozdrawiam i życzę miłego dnia

  6. Witam,
    sposób podany przez Pana generalnie działa – aktualny stan pokazuje mi dobry, ale mam problem z logami – nie wsyztstko się w nich znajduje. Wiem że dziś drzwi były otwierane, niestety nie ma tego w logu. Czy ma Pan może pomysł co może być nie tak?

    • Okazuje się że otwarcie lub zamknięcie drzwi nie zmienia statusu. Problem pojawia się gdy zabraknie prądu i RPi zostanie nagle wyłączona. Po ponownym uruchomieniu kontakton już nie reaguje, aż do momemntu ponownego rozłączenia i podłączenia samego urządzenia. Można to jakoś obejść?

      • Łukasz Kostrzewa

        Witam
        Niestety też mam ten problem, że jak nie ma prądu to nie zawsze odpali się skrypt (nie wiem od czego to zależy bo przeważnie się odpala) przez crontab i nie jest wykonywany. Muszę często raz jeszcze zrestartować malinę żeby wszystko wróciło do normy. Nie do końca to rozumiem 🙁 Na szczęście prądu brakuje bardzo rzadko 🙂
        Pozdrawiam

  7. Dzień dobry.
    Wszystkie polecenia odnośnie wprowadzenia kodu i podłączeniu kontaktronu wykonałem. Kiedy próbuję wykonać polecenie sudo python kontaktron.py otrzymuję komunikat:
    File „kontaktron.py”, line 17
        time.sleep (0.1)
    ^
    SyntaxError: invalid syntax

    Jak to ugryźć.
    Proszę o pomoc. Pozdrawiam

    • Łukasz Kostrzewa

      Witam
      A ściągał Pan cały plik z kodem ze strony czy wklejał z opisu?
      Jak z opisu to mogą występować błędy kodowania. Najlepiej użyć pliku, który udostępniłem na końcu wpisu.
      Proszę ewentualnie usunąć wszystkie spacje przed nazwą time.sleep i wstawić je od nowa (miejsce strzałki pokazuje gdzie jest błąd).
      Pozdrawiam i proszę dać znać czy pomogło

  8. Niestety żadna metoda nie działa.
    Robię wszystko jak w opisach ale lipa.
    Proszę o pomoc, jakie informacje podesłać żeby ktoś mógł sprawdzić co jest nie tak?

  9. Po wpisaniu komendy, otrzymuje taki wynik:
    [email protected]:~ $ sudo python kontaktron.py
    File „kontaktron.py”, line 17
    SyntaxError: Non-ASCII character ‚\xc2’ in file kontaktron.py on line 17, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    • Agnieszka Kostrzewa

      Witam. Zamiast wklejac tekst ze strony prosze pobrac plik ktory umiescilem na dole. Wrzucic go na raspberry prze, np. Filezilla i tam go edytowac. To jest prawdopodobie blad kodowania znakow.
      Ewentualnie prosze dodac na poczatku pliku ktorego Pan uzywa linijke:
      # -*- coding: utf-8 -*-

      Pozdrawiam i prosze o info czy pomoglo

  10. Witam, po kolejnych testach dostaje taką odpowiedz po uruchomieniu skrypty kontaktron.py
    [email protected]:~ $ sudo python kontaktron.py
    Traceback (most recent call last):
    File „kontaktron.py”, line 24, in
    httpresponse = urllib.urlopen („http://192.168.8.145:8080/json.htm?type=command&param=switchlight&idx=15&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 213, in open
    return getattr(self, name)(url)
    File „/usr/lib/python2.7/urllib.py”, line 364, in open_http
    return self.http_error(url, fp, errcode, errmsg, headers)
    File „/usr/lib/python2.7/urllib.py”, line 377, in http_error
    result = method(url, fp, errcode, errmsg, headers)
    File „/usr/lib/python2.7/urllib.py”, line 689, in http_error_401
    errcode, errmsg, headers)
    File „/usr/lib/python2.7/urllib.py”, line 386, in http_error_default
    raise IOError, (‚http error’, errcode, errmsg, headers)
    IOError: (‚http error’, 401, ‚Unauthorized’, )

    • Agnieszka Kostrzewa

      Skrypt Pan kopiowal ze strony czy sciagal Pan plik? Jak byl kopiowany to moga wystepowac błędy. Bibliiteki urllib sa zainstalowane?

      • Witam, skopiowalem z dropboxa.
        biblioteki sa zainstalowane.
        Dlaczego kiedy stosuje sposób srugi tez nie działa, mam poinstalowane szystko co trzeba gdyż mam zainstalowany i działający projekt gniazdek 433mhz

Zostaw Komentarz

*