Na wstępie należy przyznać – sterowanie urządzeniami za pomocą komend tekstowych to obecnie archaizm, który w komercyjnych rozwiązaniach konsumenckich raczej nigdy nie będzie miał już zastosowania. Natomiast używanie komunikatora internetowego w aplikacji przemysłowej to pomyłka (z zastrzeżeniem, o którym piszemy później). Ale dla majsterkowicza, który zna się na elektronice i programowaniu, ale nie ma serca ani talentu (ani czasu) do opracowywania GUI, wykorzystanie komunikatora może być zbawieniem.
Który komunikator wybrać?
Na wstępie warto zdecydować się na któryś z dostępnych komunikatorów internetowych. Wybór nie jest mały, ale jeśli skoncentrować się na jego uniwersalności, niezawodności lub otwartości oraz dostępności narzędzi dla Raspberry Pi, można go szybko ograniczyć.
Ostateczna decyzja zależy od tego, kto i za pomocą jakiego urządzenia będzie łączył się z Raspberry Pi. Dobrym wyborem wydaje się użycie bardzo popularnej usługi WhatsApp, które nie tylko dostępna jest prawie na całym świecie, ale także oprogramowanie klienckie zostało przygotowane na różne systemy operacyjne, a nawet można z niego korzystać przez przeglądarkę internetową. Zaletą jest też szyfrowanie komunikacji w trybie „end-to-end”, co oznacza – jeśli wierzyć usługodawcy, że przesyłane wiadomości są czytelne tylko dla nadawcy i adresata, a potencjalni włamywacze musieliby zastosować silne maszyny deszyfrujące lub niezłą socjotechnikę. Pewnym problemem jest natomiast to, że WhatsApp wymaga aktywnego numeru telefonu do rejestracji urządzenia klienckiego oraz że jeden numer może być wykorzystywany przez maksymalnie jedno urządzenie w danej chwili. To uproszczenie może sprawiać pewne trudności, ale w obecnych czasach całkiem łatwo jest choćby na chwilę zdobyć numer telefonu, za pomocą którego można zarejestrować się w WhatsApp.
Alternatywnym sposobem będzie użycie własnego (lub gotowego, bezpłatnego) serwera XMPP, a więc standardu bazującego na dawniej popularnym Jabberze. Aktualnie XMPP też wspiera szyfrowanie, a możliwość postawienia własnego serwera sprawia, że da się w pełni panować nad stanem komunikacji. Co więcej, XMPP jest otwartym standardem, opartym na XML-u i sformalizowanym przez organizację Internet Engineering Task Force. Lata doświadczeń dużych firm sprawiły, że XMPP uważa się za sprawdzony protokół, który można wykorzystać w przemyśle i świetnie nadaje się on do zastosowań w aplikacjach Internetu Rzeczy. Biblioteki XMPP są dostępne m.in. w Pythonie, JavaScripcie, C++, PHP i w Javie, przy czym w wielu przypadkach istnieje więcej niż jedno rozwiązanie dla danego języka. Wybór serwerów też jest bardzo duży, nie mówiąc już o liście gotowych aplikacji klienckich.
WhatsApp przez Yowsup
W niniejszym przykładzie pokażemy, jak najszybciej podłączyć Raspberry Pi do popularnego komunikatora, a więc do WhatsAppa. W dalszej części artykułu pokażemy, jak skorzystać z czystego XMPP.
By obsłużyć WhatsApp, użyjemy otwartej biblioteki Yowsup w wersji 2.5.0, której szczegóły można poznać na GitHubie, pod adresem https://github.com/tgalal/yowsup. Biblioteka Yowsup została napisana w Pythonie – i jak chwalą się jej autorzy – posłużyła m.in. do utworzenia nieoficjalnej aplikacji klienckiej Wazapp na telefon Nokia N9 a także na system operacyjny Blackberry 10. Yowsup teoretycznie wymaga Pythona 2.6 lub 3.0 albo ich nowszych wersji, przy czym w trakcie naszych testów okazało się, że działa dopiero z Pythonem 3. Ponadto, konieczne jest zainstalowanie dodatkowych pakietów. Będzie to przede wszystkim python3-dateutil, a w przypadku chęci zapewnienia szyfrowania: protobuf, pycrypto i python3-axolotl-curve25519. Jeśli biblioteka ma być obsługiwana z linii komend, należy też doinstalować argparse, readline i ew. pillow, który pozwala przesyłać obrazy.
Teoretycznie, po pobraniu obrazu pełnego Raspbiana instalacja Yowsupa powinna być prosta. Powinno wystarczyć polecenie pip install yowsup2, ale już w wypadku obrazu Raspbiana w wersji lite, programu python-pip nie ma domyślnie zainstalowanego. Można go doinstalować poleceniem sudo apt-get install python-pip lub gdy chcemy korzystać z Pythona 3 (u nas dopiero tak działało) sudo apt-get install python3-pip. Wraz z programem python-pip doinstaluje się szereg narzędzi dla Pythona, które też mogą się przydać.
Ponadto instalator programu Yowsup2 kończy działanie poleceniem setup.py install, które wymaga uprawnień roota, by móc zmodyfikować wszystkie potrzebne pliki. Stąd instalację najlepiej wywołać za pomocą sudo pip3 install yowsup2. Gdyby instalacja nie powiodła się z jakiegoś powodu, można pobrać źródła programu yowsup i samodzielnie go skompilować. W tym celu należy:
- utworzyć podkatalog na program yowsup, wejść do niego a następnie pobrać spakowane źródła z githuba wget https://github.com/tgalal/yowsup/archive/master.zip,
- rozpakować je unzip master.zip,
- przejść do powstałego katalogu yowsup.