WebHMI wyśle Tobie SMSa gdy pojawi się alarm – poradnik konfiguracji

Jeśli zapoznałeś się już z funkcjonalnością WebHMI to zapewne słyszałeś o chmurze Level2, która pozwala między innymi na wysyłanie wiadomości SMS. Koszt takiej wiadomości to 0,25 zł. Jeśli chcemy wysyłać na przykład raz dziennie wiadomość SMS z danymi o produkcji do kierownika produkcji, to taki koszt nie powinien stanowić problemu. Jednak jeśli chcielibyśmy wprowadzić system alarmowania pracowników działu utrzymania ruchu o problemach z naszymi maszynami to liczba takich wiadomości, a tym samym całkowity koszt może znacznie wzrosnąć.

Żyjemy w czasach, kiedy nawet najtańsze oferty abonamentów posiadają nielimitowane wiadomości SMS. WebHMI posiada port USB, a modemy GSM również są stosunkowo tanie. Czy można więc to wszystko połączyć? Tak! W tym artykule pokażę Tobie w jaki sposób skonfigurować WebHMI tak, aby informował nas i naszych współpracowników o błędach, nieprawidłowościach w działaniach maszyn lub po prostu przesyłał okresowo raport z najważniejszymi danymi i parametrami.

Przygotowania – czego potrzebujemy, aby zacząć

Kluczowym elementem takiego systemu będzie WebHMI – w dowolnej wersji firmware. Dodatkowo potrzebujemy karty SIM. Zwykła karta SIM z pakietem SMSów lub nielimitowanymi SMSami. Karta bez kodu PIN będzie wygodniejsza przy testowaniu, jednak kod PIN nie jest żadną przeszkodą. Ja na potrzeby tego artykułu wykorzystałem swoją kartę SIM z prywatnego telefonu 🙂

Kwestia modemu GSM jest bardzo ważna. Nie wszystkie modemy są prawidłowo wykrywane przez WebHMI. Na potrzeby przygotowania tego artykułu wykorzystałem modem Huawei E3131s-1. W dalszej części artykułu wytłumaczę, jak sprawdzić czy WebHMI widzi nasz modem GSM. Jest jeszcze jedna kwestia, ceny modemów mogą mocno się różnić. Wynika to z obsługi różnych technologii przesyłu danych: 3G, 4G, LTE itd. oraz z różnych prędkości działania tych modemów. Jeśli nie interesuje nas podłączenie WebHMI do Internetu poprzez ten moduł GSM to nie potrzebujemy modemu z setkami megabitów prędkości i te tańsze modemy GSM również sprawdzą się w naszej aplikacji.

Konfiguracja modemu GSM do wysyłania wiadomości SMS

Gdy już wyposażyliśmy się w kartę SIM i modem GSM to wkładamy kartę SIM do modemu i modem do portu USB. To wszystko od strony manualno-podłączeniowej 🙂 Dalej będziemy korzystać tylko z interfejsu WebHMI.  Zatem siadamy wygodnie przed naszymi komputerami i logujemy się do interfejsu urządzenia.

1. Sprawdzenie portów szeregowych

Przechodzimy do zakładki Wiadomości Kernel, i tam odszukujemy linijki związane z wykryciem nowego urządzenia na porcie USB. Sprawdzamy i zapamiętujemy wartości portów. W poniższym przykładzie są to ttyUSB1, ttyUSB2 oraz ttyUSB4. W Twoim przypadku może być inaczej. Jeśli zamiast ttyUSB widzisz ttyACM, to niestety na chwilę obecną WebHMI nie obsłuży takiego urządzenia. Problem został zgłoszony producentowi, zatem jest szansa, że niedługo WebHMI również będzie obsługiwać urządzenia wykrywane jako ttyACM.

2. Dodanie protokołu niestandardowego

Do obsługi komunikacji z modemem GSM wykorzystamy protokół niestandardowy. Będzie to jednak niestandardowe wykorzystanie protokołu niestandardowego, gdyż ta funkcja w założeniu pozwala na zaimplementowanie pełnego protokołu komunikacyjnego z takimi funkcjonalnościami jak odczyt zmiennych, zapis zmiennych, kodowanie ramek danych, rozkodowywanie ramek danych, odczytywanie statusów i informowanie o błędach w komunikacji. My natomiast ograniczymy się jedynie do przesłania kilku komend AT do modemu GSM, co wystarczy do wysłania wiadomości SMS.

Zatem do dzieła! Przechodzimy do zakładki zmienne, wybieramy Narzędzia → Niestandardowe protokoły i dodajemy nowy protokół:

Kluczowe jest wybranie typu jako Serial port. Pozostałe opcje są dowolne. Sprawdzanie adresu przyda się jednak, gdybyśmy popełnili błąd przy wprowadzaniu nowych adresatów. Poniżej kopiujemy kod naszego protokołu niestandardowego:

Jeśli wykorzystywana karta SIM posiada blokadę PIN to musimy wpisać ten PIN w linijce 14 oraz odkomentować linijki 14 oraz 15. Jeśli karta SIM nie ma PINu to nie ruszamy tych linijek lub ewentualnie możemy je skasować, gdyż nie są nam potrzebne. Zapisujemy protokół niestandardowy.

3. Dodanie nowego połączenia i zmiennych

Pozostając w zakładce Zmienne możemy dodać teraz nowe połączenie. Nadajmy mu nazwę i z listy dostępnych modeli urządzenia wybierzmy nasz dodany protokół niestandardowy. Adres urządzenia nie ma znaczenia. W zakładce komunikacja musimy wybrać jeszcze port do którego podłączony jest modem GSM. Wykorzystamy do tego informacje z pierwszego punktu tej instrukcji, gdzie sprawdzaliśmy nazwy portów. Jeśli dostępnych jest kilka opcji to wybieramy jeden z dostępnych. Nie ma możliwości określenia, który z dostępnych portów będzie prawidłowy i metodą prób i błędów musimy znaleźć właściwy.

Do nowego połączenia dodajemy zmienną typu String o adresie zapisanym jako SMSxxx, gdzie xxx to numer telefonu z kierunkowym bez spacji oraz bez +. Każda zmienna to nowy numer telefonu, na który WebHMI będzie mógł wysyłać wiadomości SMS. Do zmiennych dodajmy jeszcze aliasy Lua, które będą bardzo pomocne w dalszej części tego poradnika. Przykładowa lista zmiennych prezentuje się następująco:

Jak widać, dodałem trzy numery telefonów, a każda zmienna/numer ma przypisany indywidualny alias Lua. Nazwałem je kolejno ‚SMS_1’, ‚SMS_2’ i ‚SMS_3’, ale nic nie szkodzi na przeszkodzie, abyś nazwał je dowolnie, na przykład ‚Grzesiek’, ‚Andrzej’ i ‚Zbychu’.

4. Test wysyłania wiadomości SMS

Możemy już przetestować, czy poprawnie skonfigurowaliśmy modem GSM. Klikamy na Wartość ‚Ok’ i wpisujemy treść wiadomości. Wartość nie zmieni się, ale wiadomość została wysłana. Jeśli WebHMI nie wysłało nam wiadomości to zmieniamy urządzenie ttyUSB w zakładce komunikacja oraz możemy zmienić linjkę 18 na: sendString(„AT+CSMP=17,167,0,0\r”);. Metodą prób i błędów, kombinując z tymi ustawieniami powinno udać się wysłać wiadomość SMS.

5. Przygotowanie projektu

Mój przykład zakłada, że alarmy są sygnalizowane przez zmienne bitowe i wartość 1 oznacza pojawienie się alarmu. Dodałem więc trzy zmienne typu bit, które będą moimi alarmami. W skryptach, które przedstawię w kolejnym punkcie wykorzystuję jeszcze zmienną String kolejkaWiadomosci oraz zmienne Czas oraz Czas_temp. Ich zastosowanie wytłumaczę później. Lista ze zmiennymi wewnętrznymi WebHMI prezentuje się następująco:

6. Skrypty LUA

Przyszedł czas na najważniejszą część naszej aplikacji, czyli skrypty, które realizują dwa główne zadania:

  • zareagowanie na pojawienie się alarmu,
  • wysłanie wiadomości SMS do zdefiniowanych osób.

Skrypty zostały przygotowane tak, aby łatwo można było edytować i rozbudowywać całą aplikację. Liczba skryptów jest równa liczbie alarmów, plus jeden skrypt odpowiedzialny za kolejkę wysyłania wiadomości. Zacznijmy od skryptów powiązanych z alarmami:


Skrypt jest bardzo prosty. Wykonuje się, gdy zmieni się wartość bitu zmiennej Alarm1. Mamy kolejno treść wiadomości SMS oraz zakodowanych adresatów naszej wiadomości. Tutaj właśnie wykorzystane są aliasy LUA, które były dodawane w punkcie 3.  Operator ‚..’ pozwala na sklejanie zmiennych string, w wyniku czego otrzymujemy jednego długiego stringa, który ma zapisane na zmianę adresata i treść wiadomości. Dodajemy tego stringa do zmiennej kolejkaWiadomosci. Warunek GetReg(2) == 1 wynika z faktu, że skrypt wykonuje się przy każdej zmianie wartości zmiennej Alarm1, czyli także przy zmianie z 1 na 0, a przecież wtedy nie chcemy wysyłać wiadomości o alarmie.

Analogicznie wyglądają skrypty podpięte pod inne bity alarmów. Zmienia się jedynie treść wiadomości oraz zmienna podpięta pod skrypt i w warunku if.

Dalej mamy funkcję, która co dwie sekundy będzie wysyłać wiadomość i zdejmować ją z kolejki. Czemu co dwie sekundy? W czasie testów tej funkcjonalności pojawiły się problemy, gdy w jednej chwili chciałem wysłać więcej niż jedną wiadomość. Dochodziła tylko pierwsza wiadomość. Przygotowałem więc skrypty tak, aby WebHMI wysyłało tylko jedną wiadomość w danym momencie, nawet jeśli jednocześnie pojawiłoby się kilka alarmów. Skrypt o nazwie Wysyłanie wiadomości wykonywany w każdym cyklu pracy urządzenia wygląda następująco:

To wszystko! Pojawienie się alarmu spowoduje dodanie do kolejki kilku poleceń wysłania wiadomości, a wtedy powyższy skrypt po kolei wyśle te wiadomości, kolejno zdejmując z kolejki polecenia, aż do wyczyszczenia jej.

7. Dostosowanie działania funkcji do swoich potrzeb

Wyżej przedstawione rozwiązanie jest całkiem elastyczne i pozwala na łatwą rozbudowę. Przedstawiłem przykład wykorzystania 3 numerów oraz 3 alarmów. Ale bardzo łatwo można to wszystko modyfikować:

  • Dodanie nowego alarmu? Wystarczy skopiować skrypt, podmienić treść wiadomości oraz zmienną alarmu.
  • Dodanie nowego adresata wiadomości? Wystarczy dodać nową zmienną do połączenia modemu GSM, a następnie dopisać adresata do klejonego stringa w skryptach alarmów.
  • Dostosowanie, kto ma dostawać wybrane alarmy? Wystarczy edytować skrypty alarmów i usunąć danego adresata ze sklejanego stringa.
  • Wysłanie wartości zmiennych wraz z alarmem? Wystarczy edytować treść wiadomości i połączyć ją (‚..’) z odczytaną z WebHMI zmienną.

Potrzebujesz oferty?

Zapraszamy do kontaktu. Wystarczy podać dane firmy a my dostarczymy ofertę na WebHMI najszybciej jak to możliwe.