'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

Powrót do strony głównej: www.edom-plc.pl

Autor Wątek: Powiadomienia push  (Przeczytany 3333 razy)

krwi

  • Newbie
  • *
  • Wiadomości: 47
    • Zobacz profil
Powiadomienia push
« dnia: Listopada 02, 2019, 09:17:10 pm »

Dzisiaj chciałem się podzielić zastosowaną przeze mnie implementacją powiadomień push na sterowniku PLC Wago.
Powiadomienia są wysyłane za pośrednictwem serwisu pushover.net oczywiście takich usług jest wiele ja akurat wybrałem tę.
W Pushover mamy 7 dniowy okres darmowy potem licencja kosztuje $5 i tu uwaga jednorazowo na platformę (android, iOS lub desktop), więc płacąc jednorazowo $5 na androida dożywotnio możemy odbierać powiadomienia na urządzeniach z androidem.

Komunikacja z API Pushover odbywa się za pośrednictwem protokołu HTTPS więc koniczne jest włączenie do projektu biblioteki WagoLibHttps_01.lib, którą można pobrać ze strony Wago. Na wstępie warto sprawdzić wymaganą wersję firmwaru sterownika w dokumentacji biblioteki bo może okazać się konieczna aktualizacja (tak było w moim przypadku).

Zdefiniowałem blok funkcyjny postaci:

FUNCTION_BLOCK PUSHSEND
VAR_INPUT
xDoit : BOOL;
sMessage : STRING;
sPriority : STRING(2) := '0';
END_VAR
VAR
wState : WORD;
oHttpsPost : HTTPS_POST;
xHttpsSend : BOOL;
diError : DINT;
sStatus : STRING;
sReqData : STRING(200);
sHeaderData : STRING(105) := 'token=TOKEN&user=USER_KEY&retry=300&expire=3600&message=';
abResponse : ARRAY [0..gcHTTPS_dwRxBufferSize] OF BYTE;
END_VAR

sReqData := CONCAT (sHeaderData, sMessage);
sReqData := CONCAT (sReqData, '&priority=');
sReqData := CONCAT (sReqData, sPriority);

oHttpsPost(sServerName:='api.pushover.net',
sMethod:='/1/messages.json',
sContentType:='application/x-www-form-urlencoded',
pabReqData:=ADR(sReqData),
uiReqDataCount:=LEN(sReqData),
xSend:=xHttpsSend,
diError=> diError,
sStatus=> sStatus,
tTimeOut:= t#5s,
abContentData:=abResponse);

CASE wState OF
0: (* IDLE - wait for something to do *)
IF xDoIt THEN
xHttpsSend := TRUE; (* Send HTTPS-POST request *)
wState := 10;
END_IF

10: (* Wait for HTTPS-POST response data *)
IF NOT xHttpsSend THEN
wState := 999;
END_IF

999: (* *)
xDoIt := FALSE;
wState := 0;

END_CASE

Wartości dla TOKEN i USER_KEY należy wprowadzić zgodne z podanymi na koncie Pushover.
Blok przyjmuje 3 zmienne wejściowe, xDoit aktywuje wysłanie powiadomienia, sMessage to string z wiadomością, którą zobaczymy w powiadomieniu oraz sPriority opcjonalny priorytet jaki będzie nadany powiadomieniu push (dostępne wartości to -2, -1, 0, 1, 2 , uwaga wartości przekazujemy jako string).
Powyższy blok dopinam do każdego zdarzenia, które ma wysłać powiadomienie push, np. otwarcie bramy garażowej, włączenie alarmu, jakieś zdarzenie ze stacji pogodowej itp.

Działa to naprawdę wyśmienicie, powiadomienia dochodzą niemal natychmiast. Oprócz treści wiadomości i priorytetu można także opcjonalnie przekazać tytuł wiadomości, określony dźwięk jaki ma zostać odtworzony na urządzeniu, określić urządzenie lub grupę urządzeń na które ma zostać wysłane powiadomienie i inne rzeczy opisane w dokumentacji API Pushover.

Do powyższego bloku funkcyjnego warto dodać jeszcze funkcje ograniczającą ilość wysyłanych powiadomień w jednostce czasu aby po pierwsze nie zostać zaspamowanym powtarzającymi się powiadomieniami a po drugie żeby nie dostać bana z pushover.net.

Mam nadzieję, że ten opis będzie pomocny dla każdego szukającego sposobu implementacji powiadomień push na sterowniku Wago. Uwagi mile widziane.
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #1 dnia: Listopada 04, 2019, 08:17:41 am »

Dzięki za ten opis. Od dłuższego czasu myślałem nad tym, żeby wdrożyć mechanizm powiadomień i nawet jakiś czas temu wykupiłem już licencję do opisanej przez Ciebie apki, jednak zawsze brakowało czasu/chęci/zapału (wybierz jedno;) do napisania odpowiedniego kodu.

Skoro jednak wrzuciłeś gotowca to zabrałem się za odpalenie nowej funkcji systemu i trafiłem na pierwszy problem. Mianowicie widzę w aplikacji pod sekcją Settings klucz UserKey, jednak nie mogę znaleźć Tokena. Możesz podpowiedzieć gdzie go szukać?

Zapisane

krwi

  • Newbie
  • *
  • Wiadomości: 47
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #2 dnia: Listopada 04, 2019, 09:54:58 am »

USER KEY wyświetla się na koncie Pushover wystarczy się zalogować. Natomiast TOKEN jest generowany gdy zarejestrujemy naszą aplikację, trzeba kliknąć na Create an Application/API Token i nadać jakąś nazwę naszej aplikacji.
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #3 dnia: Listopada 07, 2019, 08:26:36 am »

Dzięki za wskazówki i za wrzucenie gotowego FunctionBlock-a

Uruchomiłem i wszystko działa jak należy.

Polecam każdemu :D
Zapisane

Mariusz_S

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #4 dnia: Lipca 02, 2020, 10:47:21 am »

Czy ktoś z kolegów próbował zaadoptować powyższą funkcję wysyłania powiadomień na sterowniku PFC200 pracującym pod e!COCKPIT?  Jak już zauważyłem w e!COCKPIT nie ma tej funkcji WagoLibHttps_01.lib, która była w CODESYS.
Czy została ono zastąpiona inną funkcją, czy należy ja doinstalować?
Czy ktoś może się podzielić swoim doświadczeniem/kodem dla sterownika PFC200?
Pozdrawiam.
Zapisane

blackbox

  • Newbie
  • *
  • Wiadomości: 27
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #5 dnia: Września 13, 2022, 08:51:14 pm »

Po kilku latach bezproblemowego działania, dzisiaj pojawił się u mnie problem z Pushover, dostaję błąd z biblioteki WagoLibSSL.lib:

HTTPS-ERROR: function "Hndshk_Connect()" fails with system error code: -1 SSL_get_error() returns 0

Zaktualizowałem Codesys do wer. 2.3.9.66 bo w tej wersji doszła obsługa TLS 1.3 w WagoLibSSL.lib ale dalej jest ten sam błąd. Czy możecie potwierdzić, że u was dalej działa bez problemu i na jakiej wersji biblioteki WagoLibSSL.lib?
Zapisane

blackbox

  • Newbie
  • *
  • Wiadomości: 27
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #6 dnia: Września 13, 2022, 09:44:21 pm »

Znalazłem informację, że obsługa SSL/TLS zaszyta jest w firmware sterownika:
750-88x: TLS 1.1
750-8xxx: TLS 1.2
750-89x: TLS 1.3

Pushover działa na TLS 1.2 i 1.3 więc chyba to jest przyczyna mojego problemu (mam 750-881).
Zapisane

krwi

  • Newbie
  • *
  • Wiadomości: 47
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #7 dnia: Października 13, 2022, 09:26:43 pm »

Niestety dotknął mnie ten sam problem. Mam 750-881 z firmware w wersji 01.09.21 (14), ale widzę, że jest dostępna nowsza wersja. Trzeba będzie zaktualizować, może pomoże.
Zapisane

krwi

  • Newbie
  • *
  • Wiadomości: 47
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #8 dnia: Października 14, 2022, 03:48:30 pm »

Niestety aktualizacja firmwaru i biblioteki WagoLibHttps nie pomogła, chyba pozostaje zrobić pośrednika.
Zapisane

krwi

  • Newbie
  • *
  • Wiadomości: 47
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #9 dnia: Października 18, 2022, 04:28:41 pm »

Sprawdziłem, że api.pushover ciągle obsługuje TLS od wersji 1.0 więc przyczyna musi być inna.
Zapisane

krwi

  • Newbie
  • *
  • Wiadomości: 47
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #10 dnia: Października 26, 2022, 07:22:58 pm »

Nie miałem już siły tego dłużej debugować, więc zrobiłem prostego pośrednika. Akurat mam wykupiony hosting PHP więc wrzuciłem tam prosty skrypt w php, który odbiera wiadomość od PLC i wysyła dalej do Pushover. Połączenie z PLC do skryptu PHP idzie po zwykłym HTTP (WagoLibHttp) więc token i user key zaszyłem w skrypcie PHP, także z PLC otrzymuję tylko treść powiadomienia a resztę robi skrypt. Oczywiście takiego pośrednika można zrobić na wiele sposobów, zależy do czego mamy dostęp.
W każdym razie teraz powiadomienia znowu działają tak samo sprawnie jak wcześniej przy połączeniu bezpośrednim.
Zapisane

blackbox

  • Newbie
  • *
  • Wiadomości: 27
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #11 dnia: Listopada 09, 2022, 09:43:31 pm »

Ja powiadomienia Pushover wysyłam z Openhaba. Openhab służy u mnie jako główny interfejs do sterowania, wizualizacji i automatyzacji w oparciu m.in. o wejścia, wyjścia i zmienne pomocnicze odczytywane/zapisywane do PLC poprzez modbus. PLC ustawia tylko kody zdarzeń dla powiadomień, które odczytywane są przez modbus w OH. Ustawienie kodu zdarzenia (z poziomu PLC lub OH) powoduje wysłanie powiadomienia (w regule OH) zgodnie z parametrami zdefiniowanymi w pliku transformacji *.map:

kod_zdarzenia=title|message|sound|device
Zapisane

tasior

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #12 dnia: Grudnia 06, 2022, 04:52:02 pm »

Rozumiem, że nikomu nie udało się tego rozkminić? Ja właśnie zauważyłem, że to padło :(
Większość push'y wysyłam z node-red ale bezpośrednio z wago wyło wygodniej... Ehh..
Zapisane