Domoticz on PI with relay

Przekaźniki, kontaktrony, Wake-on-LAN oraz Z-Wave – czyli Domoticz oraz Imperi Home w służbie domu – część pierwsza

Domoticz on PI with relay
Domoticz on PI with relay

Ten wpis początkowo miał służyć tylko jednemu prostemu celowi – jak stworzyć stosunkowo szybko rozwiązanie, które może otworzyć bramę, furtę czy inne urządzenie – symulując naciśnięcie guzika pilota, albo przycisku – przez Internet, z smartfonu, tabletu, przeglądarki albo własnej aplikacji na działającej w Androidzie. Ponieważ jednak zastosowany Domoticz oraz inne rozwiązania dają znacznie większe możliwości – będziemy mieli oryginalną część pierwszą oraz kolejne mniej lub bardziej rozbudowane.
Dość ciekawą inspiracją był kolega z grupy MalinowePi na Facebook – Roman Kubat, który przedstawił ImperiHome, co z kolei spowodowało zmianę w podejściu do prostego problemu.

Co będzie potrzebne?

Sprzęt:

  • Rapberry Pi (wersja A lub B, B+, 2 albo nawet wersja Zero)
  • przekaźnik – najlepiej wersja z dwoma przekaźnikami
  • karta micro SD – 4GB lub większa
  • przewody – tzw. jumper cables – posłużą do podłączenia przekaźników

Oprogramowanie:

Do dzieła!

Ponieważ zwykle czynimy założenia – to już mamy, to umiemy – tym razem zabierzemy się do tego od absolutnego początku. Instalujemy Rasbiana!
Pobieramy ze strony https://www.raspberrypi.org/downloads/raspbian/ aktualny ZIP instalacja_rasbiana z obrazem dystrybucji dla Raspberry Pi. Po rozpakowaniu w zależności od używanego przez nas systemu operacyjne na desktopie – dla Windows: wkładamy kartę micro SD do czytnika i lokalizujemy dysk z jej zawartością: dysk_h. Następnie uruchamiamy Win32disimager, otwieramy nasz rozpakowany obraz dystrybucji Rasbian i wybieramy Zapisz: win32imager. Po kilku minutach obraz zostanie poprawnie nagrany na kartę micro SD. Pozostaje ją bezpiecznie usunąć i włożyć do Raspberry Pi. Po podłączeniu klawiatury oraz monitora – podłączamy zasilanie i obserwujemy komunikaty uruchamiania systemu. Logujemy się za pomocą klawiatury używając monitora podłączonego przez HDMI, albo zdalnie przez za pomocą ssh – użytkownik pi, hasło raspberry. System wyświetla kilka opcji – z których praktycznie konieczna jest opcja rozszerzenia pojemności karty do jej całkowitej wielkości – ponieważ obraz ma tylko 2GB. Koniecznie więc wybieramy tą opcję i czekamy trochę po ponownym uruchomieniu na wykonanie. Tak więc 1. Expand Filesystem, a przy wyjściu potwierdzamy ponowne uruchomienie!

Instalacja Domoticz w Raspbian

Domoticz ? To nasze główne oprogramowanie do sterowania – bardzo rozbudowane, ale o prostej funkcji – zarządzanie przez WWW lub aplikacje dedykowane przełącznikami, włącznikami, czujnikami i… jeszcze wiele innych. A więc, aby poprawnie zainstalować domoticz, aktualizujemy naszą dystrybucje – Raspbiana uruchomionego na Raspberry Pi:

Ostatnia komenda uruchomi ponownie Pi, a pierwsza poprosi o potwierdzenie atualizacji. Po uruchomieniu, jeszcze jedna aktualizacja -tym razem jądra – obecnie z gałęzi 4.x:

Tym razem po kolejnym reboocie, instalujemy potrzebne pakiety – które są częścią dystrybucji, ale standardowo celem oszczędzenia miejsca nie są instalowane:

Po potwierdzeniu pobierania pakietów – zauważmy, że będzie ich znacznie więcej, ponieważ wybór podstawowych niesie ze sobą pewne zależności – wreszcie po ich instalacji – przystępujemy do zainstalowania właściwego domoticza – paczki binarnej:

Wykonujemy serię komend:

Powinny dać taki efekt:

Udało się? Świetnie, teraz nakazujemy domoticzowi uruchamiać się przy starcie systemu (a więc i po restarcie)

Teraz odpowiednio skonfigurujmy domoticza – niech uruchamia się z prawami domyślnego użytkownika pi, oraz na porcie 8080 (ponieważ na standardowym porcie 80 może uruchomimy coś innego):

Uruchamiamy edytor:

Plik po edycji powinien wyglądać tak – chodzi o właściwe linie, wyjście z edytora CTRL+x, a następnie potwierdzamy y albo t:

Teraz testujemy poprawność ustawień i praw dostępu, jesteśmy nadal w katalogu /home/pi/domoticz:

Wynik jakiego się spodziewamy:

OK, działa! Zakładając że adres IP naszego Pi to 10.20.30.40- w przeglądarce wpisujemy :http://10.20.30.40:8080 i powinniśmy zobaczyć taki ekran:

Czysty Domoticz
Czysty Domoticz

A więc ostatni test – prosimy domoticza o zamknięcie procesu – wciskamy CTRL+c i otrzymujemy:

Wreszcie uruchamiamy Pi ponownie (sudo reboot) i weryfikujemy czy domoticz nadal działa po reboocie

Instalacji WiringPi

WiringPi to ważna bilbioteka, która pozwoli na komfortową obsługę przekaźnika przez piny GPIO, o czym za chwilę. Najpierw instalacja:
WiringPi należy zbudować, co oznacza, że instalacja zaczyna się od pobrania repozytorium z tzw. git (jeśli nie zainstalowałeś z jamkegoś powodu domoticza albo trafiłeś do tego akapitu – upewnij się, że masz git: sudo apt-get install git-core):

W efekcie dostaniemy taki wynik:

Upewnijmy się, że mamy najnowszą wersję:

Budujemy:

Proces przebiega następująco:

Skrypt zbuduje i zainstaluje, pozostaje przetestować:

Instalacja przekaźnika

Czas wyjaśnić po co nam przekaźnik ? Otóż będziemy symulować naciśnięcie przycisku – na około 1 sekundę. Tak jak działa Twój przycisk do otwierania bramy, lub tak jak działa pilot radiowy – który najczęściej także powoduje krótkie włączenie przycisku. My użyjemy więc PI, poprzez GPIO do sterowania zwieraniem obwodu (a więc wciśnieciem przycisku) na sekundę – a następnie jego zwolnieniem. Przekaźnik ma na celu zabeczenie naszego systemu przed przepięciami i obecnością zasilania w obwodzie przycisku. Jak zauważyłeś Pi posiada wyprowadzenia w postaci pin (małych bolców). Różne wersje Pi mają ich więcej lub mniej – wybieramy więc arbitralnie – czyli numer 4.
Wracamy do domoticz i tworzymy wirtualny przycisk – taki który rzekomo nic nie robi. Wybieramy z menu Setup a następnie Hardware i dodajemy (Add):

Domoticz - dodaj port dummy
Domoticz – dodaj port dummy

Dlaczego właśnie tak ? Ponieważ chcemy mieć kontrolę nad działaniem przycisku w taki sposób:

  • Przycisk działa zawsze po kliknięciu/wybraniu (nie jest typu On/Off), nawet jeśli jest typem przełącznika
  • Do czasu naciśniecia – ma otwarty obwód wirtualnego przycisku, następnie po naciśnięciu a sekundę zamyka obwód przekaźnika, a następnie znowu rozłącza obwód

Teraz stworzymy właściwy przycisk do głównego Menu i podłączymy pod niego skrypt w języku LUA, który wykona powyższe zadanie:
Mamy już dummy switch – wybieramy Create Virtual Sensors, ponieważ – dummy służy do zrobienia praktycznie wszystkiego – wybierzemy więc „Switch”:
add-dummy-switch
Teraz z menu Setup a następnie Devices – zaznaczymy naszego Dummy i klikamy zieloną strzałkę po prawej stronie tworząc przycisk, który pojawi się w menu Switches:

Adding switch
Adding switch

Pozostaje nam dodać przełącznik, ale nadajmy mu po prostu nazwę „Garaz” bez polskich liter (w przykładzie jest trochę inaczej):

Switch and new Icon
Switch and new Icon

Pozostaje umieścić poniższy skrypt w katalogu: ~/domoticz/scripts/lua, koniecznie pod nazwą: script_device_Garaz.lua
Garaz powinien tez nazywać się nasz przycisk inaczej domoticz nie zechce wykonać skryptu.
Kod skryptu otwierającego bramę:

Podłaczyć zasilanie i sterowanie do przekaźnika i… przetestować!
+5V, GND oraz GPIO4 – podłączamy – po kliknięciu przekaźnik na jedną sekundę powinien zamknąć z trzaskiem obwód (zwykle także zaświeci LED), a następnie rozłączyć:

Pi B+ and relay - connected
Pi B+ and relay – connected

Jeśli zastanawiasz się teraz po co jadłeś tą żabę – cóż – program który później będzie sterować naszym rozwiązaniem – ImperiHome nie obsługuje przycisków tylko przełączniki. Stąd cała maskarada. Czy można to było zrobić prościej? Ba! Ale – postanowiłem to zostawić, bo być może przyda się komuś jako podejście trochę niestandardowe.




  • Mariusz Skibiński

    Krótko,zwięźle i na temat. Like it

    • Łukasz C. Jokiel

      Dzięki, ciekawe jak u mnie będzie z ‚regeneratorami pull-upu’ 😉

  • Piotr

    A wie ktoś jak ustawić czas zwarcia przekażnika ? Bo potrzebuję bardzo krótki poniżej jednej sekundy może 0.1 sekundy. Musze taki czas miec do sterowania za pomoca pilota SOMFY do rolet zewnętrznych. Za pomoca przekanika mam imitacje jakbym ja wciskał guzik na pilocie bo dolutowałem styki do nóżek przycisku pilota.

    • Łukasz C. Jokiel

      W przykładzie powyżej – dzięki temu, że masz proste wywoływanie komend powłoki (domyślnie bash) – wystarczy, że zmienisz parametr sekundowy w komendzie sleep na 0.1 (w przykładzie masz 1s) – a więc sleep 0.1. Spróbuj.

  • Piotr

    Ok działa. A czy jest szansa przerobienia tego skryptu na LUA lub PY (python) aby był osobny skrypt dla ON i osobny dla OFF. Bo w tym wypadku nie można w nazwie urządzenia stosować polskich znaków i chciałem zrobić dwa oddzielne i podpiąć je do wirtualnego przełącznika pod WŁĄCZ AKCJE i WYŁĄCZ AKCJĘ. Ale nie wiem jak ten skypt przerobić proszę o pomoc.
    Ogólnie to chce to zastosować do sterowania żaluzjami zewnętrznymi. I żaluzje te maja opcje ustawiania takiej pozycji ochrony przed słońcem. I chciałem użyć wirtualnego przełącznika VENETIAN BLINDS EU
    Tam pojawia się ikona zamykania, ikona otwierania i ikona STOP. I pod STOP chciałbym przypisać działanie własnie jednego z przekażnika. Ale nie wiem jaką komendę wysyła naciśnięcie tego przycisku. Bo otwieranie to OPEN, zamykanie CLOSED a nie wiem co daje ten stop. Tylko ten skrypt z tego tematu przerobiłem że działa mi jak mam wirtualny przełacznik jako zwykłe BLIND a już nie działa jak mam te VENETIAN BLINDS EU a przeciez dają takie same komendy zamykania i otwirania i powinno to działać a nie działa… jedyne tylko wtedy nie powinien działać przycisk STOP. Proszę o pomoc.

    • Łukasz C. Jokiel

      Tu masz wszystko czego potrzeba – skrypt jest TAKI SAM dla ON i dla OFF tylko dlatego, że potrzebuję go do zadziałania w ImperiHome, który nie obsługuje przełączników typu „dzwonek”.
      Zmień sekcję ‚On’, ‚Off’ – zapewne na ‚Open’, ‚Close’ i dodaj ‚Stop’. W każdej sekcji odpowiednio wydaj komendy dla GPIO i to wszystko. Jak zadziała, to możesz przerobić na LUA/Python

      • Piotr

        Problem w tym ze jak zmieniam typ przełacznika w Domoticz na ten VENETIAN BLINDS EU to skrypt już nie chce działać. Nawet jak nie ma dodanej opcji STOP. Tylko samo OPEN i CLOSED. Jak zmieniam tym na zwykły BLINDS to działa.

        • Łukasz C. Jokiel

          Zobacz co jest w logach – trzeba odnaleźć na jakie zmienne to reaguje. Nie mam takowych, więc nie wiem jak to działa – ale warto zobaczyć do definicji XML tego przełacznika w katalogu domoticza

          • Piotr

            Możesz dodać jako wirtualny przełacznik i wtedy zobaczyć… Nie wiem gdzie tego pliku XML szukać bo wtedy bym napisał…

          • Łukasz C. Jokiel

            Nie mam teraz wolnych przekaźników – dopiero idą. Poszukaj ciągu znaków w domoticz/Config – tam są definicje urządzeń.
            Natomiast – jeśli Ci działa – to już nie kwestia skryptu tylko pytania – jeśli zwarcie na 0.02 sek otwiera i zamyka – to co trzeba zrobić/zewrzeć aby była komenda STOP ? Sprawdź co masz na sterowniku do rolet!

          • Piotr

            Ale w domoticz/config sa pliki od OPENZWAVE. Zrobiłem ze działa. Jak dodawałem urzadzenie wirtualne wybrałem teraz jako TYP : ASA i teraz działa opcja stop ze skryptu.

          • Łukasz C. Jokiel

            No! To gratulacje, zabieram się za wpis EASY ESP.

          • Piotr

            Tylko powiedz mi jeszcze na temat mojego wyższego pytania…z tymi apisami w skrypcie…

            Jesli takie opisy robisz moze lepiej na facebooku na polskiej grupie Domoticz 🙂

          • Łukasz C. Jokiel

            To zapis upewniający że przekaźnik jest wyłączony, potem załączony, 0.02 trwa i jest wyłączany. Pewność impulsu 🙂
            Kończę nowy wpis – wrzucę info na grupę!

          • Piotr

            Super dzięki wielkie za pomoc 🙂

          • Piotr

            Powiedz mi tylko jeszcze po co w skrypcie przed każdą komendą sleep są takie dwa zapisy

            os.execute („/usr/local/bin/gpio export 27 in”)

            os.execute („/usr/local/bin/gpio export 27 out”)

            os.execute („sleep 3.02”)

            Tzn czy tej pierwszej linijki z IN nie można usunąć ?

      • Wojtek

        Witam,
        Wielkie dzięki za włożoną pracę naprawdę dużo cennych informacji.
        Nie wiem czy tylko u mnie jest taka sytuacja, że nie działa komenda gpio export 17 out dopiero wpisanie w skrypt gpio export 17 high uaktywnia przekaźnik a gpio export 17 low go wyłącza.

        • Łukasz C. Jokiel

          Dość spotykana – część przekaźników ma tzw. odwrotną logikę działania – a więc uaktywnia się dokładnie na odwrót. Na szczęście – ponieważ masz skrypt – wystarczy zamienić komendy miejscami aby uzyskać poprawne działanie.

          • Wojtek

            Przekaźnik nie działał na odwrót on w ogóle nie działał.
            Jak wpisałem out nie było reakcji działa dopiero po wpisaniu High a wyłącza się po Low. Może coś zostało zmienione w aktualnej wersji WiringPi.

          • Łukasz C. Jokiel

            To raczej jednak wersja przekaźnika – pomyśl co by to oznaczało, gdyby zmiana była w WiringPi…

  • Piotr

    Problem w tym ze jak zmieniam typ przełacznika w Domoticz na ten VENETIAN BLINDS EU to skrypt już nie chce działać. Nawet jak nie ma dodanej opcji STOP. Tylko samo OPEN i CLOSED. Jak zmieniam tym na zwykły BLINDS to działa.

  • andera

    Witam
    A jak ogarnac skrypt przycisku w przypadku używania Esp Easy z podłączonym przekaźnikiem?
    Pozdrawiam

    • Łukasz C. Jokiel

      Temat na oddzielny wpis – zanotowane!

  • Zbigniew Huszcza

    Witam wszystkich
    Ja też coś takiego zrobiłem tylko bez tego skrypu. Zastosowane to mam do sterowania rolet a raczej pilota od rolety. Jest taka funkcja zdarzenia w której to ustawiłem żeby przekaźnik wyłączał się po 2 sekundach. I tak to działało nawet w imperihome. Problem w imperihom był taki że nie miałem ikony rolety tylko przycisk. Ja już mnie olśniło to dodałem włącznik rolet do którego to też zrobiłem osobne „zdarzenie” i tak po naciśnięciu np podnoszenia poprzez „zdarzenie” załącza przucisk odpowidzialny za przekaźnik podłączony do przycisku pilota, a po 2 sek jestprzekaźnik rozłączany poprzez inne zdarzenie. już to funkcjonuje poprawnie przez rok.
    https://uploads.disquscdn.com/images/697ef8bccfd79d1cf84b6adfef11789afe789b9a45d9cd49435843cc5f2b3054.jpg