Obsługa zdarzeń w Domoticzu przez SMS

Możliwości komunikacyjnych Domoticz ma bardzo dużo, od maila, poprzez powiadomienia na telefon Pushbullet czy Pushover, kombajn IFTTT czy komunikator Telegram. W takiej ilości możliwości komunikacja SMS wydaje się już trochę archaiczna,  jednakże jak dla mnie warta zastosowania. Mam np. piec centralnego ogrzewania działający na GSM, który ma możliwość obsługi przy użyciu komend SMS. Dzięki temu mogę z głównego Domoticza uruchamiać i wyłączać urządzenie jednym przyciskiem, korzystając z planów czasowych i zdarzeń.

W Domoticzu domyślnie jest dodana usługa SMS Clickatell, która powinna odpowiadać za powyższą komunikację. Jednak jak to często bywa, nie jest tak łatwo. Po długich zmaganiach  i braku sukcesu w uruchomieniu doczytałem, że po zmianie API, od jakiegoś czasu usługa nie jest dostępna dla nowych użytkowników. Pozostawiono ją w systemie, iż podobno cały czas działa ze starymi kluczami. Tak łatwo nie można się jednak poddawać. Z pomocą oczywiście przychodzi LUA.

  1. Zakładanie konta w usłudze SMS Clickatell.

Bez tego się oczywiście nie obejdzie. Przechodzimy na https://www.clickatell.com/. Rejestrujemy się i logujemy.  Po zalogowaniu się w pierwszej kolejności musimy dostać się do API.

Screenshot_2018-07-23 https portal clickatell com.png

2. Uruchomienie usługi

Wchodzimy w zakładkę CONNECT.

Bez tytułu

Otrzymaliśmy API key. To jednak tylko początek. Usługa jest oczywiście płatna. Na szczęście jest też opcja testowa. Pozwala na wysłanie chyba 30 SMS dziennie i jak na razie nie zauważyłem, żeby była ograniczona czasowo. Mam ją już uruchomioną 2 miesiące i nadal działa. Ilość SMS jest dla mnie wystarczająca, więc nie planuję przejścia na wersję płatną. Dodajemy więc nasz telefon testowy.

Bez tytułu1.png

Bez tytułu2

Na podany numer telefonu dostaniemy kod SMS, który wpisujemy w kolejnym oknie, wpisujemy i mamy dodany nasz testowy numer telefonu. Następnie ustawiamy nową integracje.

Bez tytułu3

Przeklikujemy do końca, jeżeli domyślne ustawienia nam pasują. I już możemy przetestować czy wszystko działa.

Bez tytułu12.png

Testujemy naszą integracje.

Bez tytułu6.png

Wybieramy podaną wcześniej integracje, numer testowy telefonu ( doda nam się automatycznie ) i wpisujemy tekst wiadomości. Bez tytułu7.png

I pięknie. Przyszedł SMS o treści TEST, na podany wcześniej numer. Jesteśmy w domu. Teraz przechodzimy do Domoticza.

3. Konfiguracja Domoticza.

Pozostaje mam tylko napisać skrypt LUA, który wyślę nam SMS po zmianie stanu przełącznika. Tworzymy standardowy przełącznik w systemie.

Bez tytułu8

W Zdarzeniach tworzymy skrypt LUA.

 
commandArray = {}
if (devicechanged['SMS'] == 'On') then
os.execute ('curl "https://platform.clickatell.com/messages/http/send?apiKey=xxxxxxxxxxxxxxxxxxx==&to=48xxxxxxxx&content=Przełacznik włączony"')
end
return commandArray 

Pamiętajmy aby nazwa urządzenia była prawidłowa. A skąd wziąć „curl” ? Wygenerował nam się w okienku CURL podczas testowania integracji ( 3 obrazy wyżej ).

Teraz po naciśnięciu przełącznika, zmienia się jego stan na ON i wykonywana jest komenda curl wysyłająca SMS na testowy numer telefonu o treści podanej za &content=. Oczywiście możemy treść modyfikować już ze skrypcie. Nie ma konieczności testowania integracji za każdym razem.

Przełącznik możemy wykorzystać w bardziej złożonych zdarzeniach np. jeżeli temp. w salonie spadnie poniżej 18 st. to włącz przełącznik SMS. Ustawiamy tylko odpowiednią treść „Temperatura w salonie za niska” i mamy powiadomienie SMS o zmianie temperatury w salonie.

Dla mnie bomba.

Reklama

22 komentarze do “Obsługa zdarzeń w Domoticzu przez SMS

  1. Cześć,
    założyłem konto, SMS testowy dotarł. Niestety z domoticza sms nie przychodzi. Mógłbyś rozwinąć szczegółowo punkt trzeci, bo słaby w tym jestem.
    Robię tak:
    Konfiguracja->Sprzęt->Dummy (dodaj, nazwa „SMS”),
    Utwórz wirtualne czujniki (nazwa „SMS”, typ przełącznik),
    Konfiguracja->więcej opcji->zdarzenia
    Tworzę skrypt o nazwie „Wyslij SMS” z mioim nr tel i kluczem, zapisuję.

    Nie działa, jeszcze coś powinienem zrobić?

    Polubienie

  2. Sprawa rozwiązana. Skopiowałem skrypt według opisu, a okazuje się że jest w nim błąd. W skrypcie nie można w sposób bezpośredni używać spacji w treści sms-a, Można użyć „%20” sprawdzone.
    Dobra robota

    Polubienie

  3. Cześć . Dzisiaj testowałem oczywiście wszystko działa , zauważyłem że nie trzeba pisać skryptu wystarczy wkleić link do pola „włącz akcje” w przełączniku i tez dział
    Pozdrawiam

    Polubienie

  4. Witam,
    pytanko takie
    Po uruchomieniu funkcji sms mam taki problem,że gdy odpala się skrypt lua to wysyła mi sms dopóki nie wyłączy się przełącznik który go uruchamia.
    czy jest jakaś metoda na dodanie do skryptu polecenia ,żeby wykonał go np. przez 2 sekundy

    Polubienie

  5. w przelaczniku SMS (edycja) ustawiasz Opóźnienie wył.: 1

    cały skrypt podający temperaturę w wiadomości
    komendy (-s –connect-timeout 2 –max-time 5) maja zapobiegać zapętleniu gdyby nie można było wysłać wiadomości np. brak internetu

    commandArray = {}
    if (devicechanged[‚SmS’] == ‚On’) then
    local temperature = tonumber(otherdevices[‚Piec’])
    command =’curl -s –connect-timeout 2 –max-time 5 „https://platform.clickatell.com/messages/http/send?apiKey=xxxxxxxxx_SPew==&to=48xxxxxxx&content=temperatura%20piec%20″‚..temperature

    os.execute(command)
    end
    return commandArray

    Polubienie

    • zrobiłem coś takiego wg. twojej sugestii , nie działa to.
      Powiem Ci o co chodzi :
      Mam zrobione sterowanie zraszaczami i chcę mieć kontrolę nad stanem przekaźników w czasie kiedy one nie powinny się załączyć.
      zauważyłem że malina czasami z niewiadomych przyczyn załączy przekaźnik sterujący elektrozawór a tego nie chcę więc chcę dostać sms lub e-maila ,ale ani jedno ani drugi e nie działa jak należy,
      Jeżeli ustawię ,żeby po zmianie stanu przełącznika wykonał akcję to owszem wykonuje ale wysyła co 20 sekund co jest nie do przyjęcia.
      Skrypt skopiowałem i co robię źle ,że nie działa
      commandArray = {}
      if (devicechanged[‚alarm’] == ‚On’) then
      command =’curl -s –connect-timeout 2 –max-time 5 „https://platform.clickatell.com/messages/http/send?apiKey=xxxxxxxxxxxxx_4ZApxarA==&to=48501xxxxxx&content=zraszaczon
      os.execute(command)
      end
      return commandArray

      w trzeciej linii jest czerwony krzyżyk

      Polubienie

      • Szczerze powiem ze nie jestem specjalistą do wszystkiego dochodzę metodą prób albo czytając takie blogi jak ten. 🙂
        1.Jaki ty przełącznika masz, ja mam on/of
        2, w zdarzeniach przy skrycie ustaw (Trigger ) na Device mi kiedyś skryp działał losowo i to pomogło

        Polubienie

      • 2019-10-12 12:20:42.472 Error: EventSystem: in Script #2: [string „commandArray = {}…”]:2: unexpected symbol near char(226)
        2019-10-12 12:20:42.616 Error: EventSystem: in Script #2: [string „commandArray = {}…”]:2: unexpected symbol near char(226)
        2019-10-12 12:20:42.687 Error: EventSystem: in Script #2: [string „commandArray = {}…”]:2: unexpected symbol near char(226)
        2019-10-12 12:20:42.730 Error: EventSystem: in Script #2: [string „commandArray = {}…”]:2: unexpected symbol near char(226)
        2019-10-12 12:20:42.774 Error: EventSystem: in Script #2: [string „commandArray = {}…”]:2: unexpected symbol near char(226)
        2019-10-12 12:20:42.911 Error: EventSystem: in Script #2: [string „commandArray = {}…”]:2: unexpected symbol near char(226)
        2019-10-12 12:20:42.992 Error: EventSystem: in Script #2: [string „commandArray = {}…”]:2: unexpected symbol near char(226)

        cześć,witam
        Taki mam błąd
        commandArray = {}
        if (devicechanged[‚PK-1-ESP’] == ‚On’) then
        command =’curl -s –connect-timeout 2 –max-time 5 „https://platform.clickatell.com/messages/http/send?apiKey=QQ0ZKIagQeKuU_xxxxxxx==&to=48501746907&content=zraszacz%20on%20
        os.execute(command)
        end
        return commandArray

        W drugim wierszu (czerowny krzyżyk)

        ten skrypt ,który wkjejasz mógłbyć zrobić zrzut ekranu i wysłać mi e-mailem

        Polubienie

    • Cześć,
      Jeżeli mógłbyś wstawić, to czego brakuje w tym skrypcie ,to bardzo bym prosił
      Nie ogarniam już tego
      Skrypt mimo wszelkich prób nadal się nie kompiluje

      commandArray = {}
      if (devicechanged[‚PK-1-ESP’] == ‚On’) then
      command =’curl -s –connect-timeout 2 –max-time 5 „https://platform.clickatell.com/messages/http/send?apiKey=QQ0ZKIagQeKuU_4ZApxarA==&to=4850xxxxxxx&content=zraszacz%20on
      os.execute(command)
      end
      return commandArray

      Polubienie

  6. commandArray = {}
    if (devicechanged[‚PK-1-ESP’] == ‚On’) then

    command =’curl -s –connect-timeout 2 –max-time 5 „https://platform.clickatell.com/messages/http/send?apiKey=QQ0ZKIagQeKuU_4ZApxarA==&to=4850xxxxxxx&content=zraszacz%20on” ’

    os.execute(command)
    end
    return commandArray

    chodzi o cudzysłów i apostrof na końcu 3 wiersza tu jest to 4 wiersz bo się nie mieści

    Polubienie

    • https://www.lua.org/cgi-bin/demo
      to jest link do programu, który sprawdza poprawność skryptu
      ten :
      commandArray = {}
      if (devicechanged[‚PK-1-ESP’] == ‚On’) then

      command =’curl -s –connect-timeout 2 –max-time 5 „https://platform.clickatell.com/messages/http/send?apiKey=QQ0ZKIagQeKuU_4ZApxarA==&to=4850xxxxxxx&content=zraszacz%20on” ’

      os.execute(command)
      end
      return commandArray

      dalej wywala błąd:(

      Polubienie

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s