'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 132 razy)

krwi

  • Newbie
  • *
  • Wiadomości: 41
    • Zobacz profil
Powiadomienia push
« dnia: Listopad 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: 54
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #1 dnia: Listopad 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: 41
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #2 dnia: Listopad 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: 54
    • Zobacz profil
Odp: Powiadomienia push
« Odpowiedź #3 dnia: Listopad 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