W poprzednim artykule opisałem ogólnie softwarową bramkę (Gateway) czytającą dane pomiarowe z czujników temperatury i wilgotności Xiaomi Mijia i przesyłających te dane na serwer Supli. W niniejszym opiszę krok po kroku, jak uruchomić taką bramkę.

Co potrzebujemy:

  • Raspberry Pi Zero W (może być również Pi Zero WH – ta wersja ma wlutowane goldpiny i jest parę złoty droższa),
  • zasilacz 5V, 2A ze złączem microUSB (do zasilania Raspberry),
  • kartę pamięci microSD o pojemności minimum 16GB (polecam karty SanDisk Extreme lub Extreme Pro),
  • czytnik kart USB / microSD (lub SD + przejściówka),
  • no i oczywiście czujniki temperatury i wilgotności Xiaomi Mijia LYWSD03MMC.
I. INSTALACJA SYSTEMU OPERACYJNEGO RASPBIAN NA KARCIE PAMIĘCI
  • pobieramy obraz systemu operacyjnego Raspbian Buster Lite ze strony organizacji RaspberryPi,
  • pobieramy program Etcher ze strony Producenta (polecam wersję portable),
  • podłączamy czytnik kart do komputera i wkładamy kartę SD,
  • uruchamiamy program Etcher i przyciskiem Select Image wskazujemy na pobrany plik obrazu Raspbian Buster Lite. Program rozpoznaje automatycznie naszą kartę SD, jednak jeśli mamy zainstalowane kilka kart, wyboru właściwej dokonujemy środkowym przyciskiem Chage (pod symbolem czytnika). Następnie klikamy przycisk Flash! i akceptujemy poświadczenia administratora. Proces przygotowania karty SD trwa około 3 – 4 minuty. W trakcie mogą pojawiać się komunikaty o konieczności formatowania karty SD – ignorujemy te komunikaty.
  • Po zakończeniu działania programu Etcher zamykamy program, odłączamy nasz czytnik z kartą SD i ponownie podłączamy do portu USB. Ignorujemy komunikaty o konieczności formatowania  dysku i otwieramy dysk boot.
  • Na partycji boot musimy utworzyć dwa pliki o nazwach:
    • ssh (plik bez żadnego rozszerzenia, zajmujący 0 KB),
    • wpa_supplicant.conf z danymi dostępowymi do naszej sieci Wi-Fi 2.4 GHz:
      country=PL
      ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
      update_config=1
      network={
              ssid="MyWiFiNetwork"
              psk="VeryStrongPassword"
              key_mgmt=WPA-PSK
      }
      

      Oczywiście w miejsce MyWiFiNetwork oraz VeryStrongPassword wpisujemy swoje dane.

    • Odłączamy kartę microSD od komputera i wkładamy ją do naszego Raspberry Pi Zero W. Następnie podłączamy zasilanie (pierwszy port microUSB od prawej strony mikrokomputera oznaczony PWR IN) i czekamy ok. 5 minut.
II. PODSTAWOWA KONFIGURACJA RASPBIAN BUSTER LITE

Do konfiguracji i zarządzania naszym Rasberry Pi Zero W (RPi) najlepiej nadaje się klient terminalowy Putty. Instalujemy więc program Putty na naszym komputerze. W celu podłączenia się sesją terminalową do naszego RPi musimy poznać adres IP, jaki został przydzielony dla RPi przez nasz router. Najwygodniej zalogować się na router i tam zobaczyć, jaki adres został przydzielony urządzeniu.

W Putty w okienku Host Name (or IP address) wpisujemy przyznany RPi adres IP, wybieramy typ połączenia (Connection type) SSH i klikamy przycisk Open. Potwierdzamy klawiszem OK Putty Security Alert i logujemy się do naszego Raspberry następującymi poświadczeniami:
Użytkownik: pi
Hasło: raspberry

Pierwszą czynnością jaką powinniśmy wykonać jest zmiana domyślnego hasła. W tym celu wpisujemy komendę:

 
passwd

Current password (aktualne hasło): raspberry
New password (nowe hasło): nasze_nowe_hasło
Retype new password (powtórz nowe hasło): nasze_nowe_hasło

Poprawna zmiana hasła zakończona jest komunikatem: passwd: password updated successfully.
Następną czynnością jest aktualizacja naszego RPi. Komenda sudo podnosi nasze uprawnienia do użytkownika root.

Pobieramy najnowszy wykaz paczek aktualizacyjnych z repozytoriów Raspbiana:

sudo apt-get update

Instalujemy aktualizacje (potwierdzamy chęć zainstalowania klawiszem Y):

sudo apt-get dist-upgrade

Możemy (nie jest to konieczne) zaktualizować „bios” naszego RPi:

sudo rpi-update

Czyścimy zawartość karty pamięci (dysku) ze zbędnych „śmieci”:

sudo apt-get autoclean

I uruchamiamy ponownie nasze RPi:

sudo reboot

Zamykamy program Putty i po ok. 2 – 3 minutach ponownie łączymy się sesją terminalową do RPi.

Wydajemy komendę instalacji wymaganych programów i bibliotek i idziemy na kawę – instalacja trwa dobrych kilka minut:

sudo apt-get install -y mc git libssl-dev bc python3-pip supervisor

Instalujemy skrypt bluepy niezbędny do komunikacji BLE z czujnikami Xiaomi:

pip3 install bluepy
III. INSTALACJA I KONFIGURACJA SUPLA VIRTUAL DEVICE

Supla Virtual Device to program, którego zadaniem jest odczyt danych z plików i wysłanie tych danych na serwer Supla Cloud. Oczywiście jest to bardzo potężne uproszczenie zrobione na potrzeby niniejszego poradnika. Osoby zainteresowane innymi funkcjonalnościami Supla Virtual Device odsyłam na GitHub Łukasza. Program jest rozwinięciem pomysłu kolegi Wojtka Supla FileSensors.

Program po konfiguracji i uruchomieniu tworzy wirtualne urządzenie z kanałami określonymi przez nas w konfiguracji Supla Virtual Device. Instalacja polega na wykonaniu poniższych komend (każdej po kolei):

sudo apt-get update
git clone https://github.com/lukbek/supla-virtual-device.git
cd supla-virtual-device
./install.sh

Po zainstalowaniu niezbędnych składników należy skonfigurować Supla Virtual Device. W tym celu edytujemy plik supla-virtual-device.cfg poleceniem:

nano supla-virtual-device.cfg

Plik konfiguracyjny zawiera sporo przykładowych, obsługiwanych przez program kanałów. Zalecam usunięcie całej zawartości tego pliku i wklejenie poniższego przykładu (oczywiście odpowiednio dla ilości posiadanych czujników). Numeracja kanałów [CHANNEL_X] musi zaczynać się od 0, numery kanałów nie mogą się powtarzać. Przykładowa zawartość pliku konfiguracyjnego dla 4 szt. czujników Xiaomi:

[GLOBAL]
device_name=BRAMKA LB-SVD

[SERVER]
host=svrXX.supla.org
protocol_version=10

[LOCATION]
ID=XX
PASSWORD=XXXX

[CHANNEL_0]
function=TEMPERATURE_AND_HUMIDITY
file=/home/pi/supla-mi-th/sensor_th0.txt
#file_write_check_sec=120

[CHANNEL_1]
function=TEMPERATURE_AND_HUMIDITY
file=/home/pi/supla-mi-th/sensor_th1.txt
#file_write_check_sec=120

[CHANNEL_2]
function=TEMPERATURE_AND_HUMIDITY
file=/home/pi/supla-mi-th/sensor_th2.txt
#file_write_check_sec=120

[CHANNEL_3]
function=TEMPERATURE_AND_HUMIDITY
file=/home/pi/supla-mi-th/sensor_th3.txt
#file_write_check_sec=120

Oczywiście nazwę hosta (treść po host=), ID lokalizacji (treść po ID=) oraz hasło lokalizacji (treść po PASSWORD=) zmieniamy na zgodne ze swoim kontem Supla Cloud (dane te są dostępne po zalogowaniu do Cloud na głównym ekranie na żółtej kopercie)  Zmiany zapisujemy klawiszami Ctrl + O i Enter, a z edytora Nano wychodzimy klawiszami Ctrl + X.

Przechodzimy do głównej gałęzi katalogu domowego poleceniem:

cd

Tworzymy katalog, w którym będą zapisywane dane pomiarowe z naszych czujników poleceniem:

mkdir supla-mi-th

W katalogu supla-mi-th tworzymy cztery pliki z przykładowymi danymi pomiarowymi. W pierwszym wierszu podajemy temperaturę w formacie xx.x, a w drugim wierszu wilgotność w formacie xx. Pliki tworzymy poleceniem:

nano supla-mi-th/sensor_th0.txt

Czynność powtarzamy zmieniając nazwę pliku od sensor_th0.txt do sensor_th3.txt.

Jesteśmy już prawie gotowi na uruchomienie Supla Virtual Device. W tym celu musimy zezwolić na rejestrowanie nowych urządzeń na naszym koncie w Supla Cloud. Teraz pozostaje nam przejść do katalogu supla-virtual-device i uruchomić program:

cd supla-virtual-device
./supla-virtual-device

Na ekranie terminala powinniśmy zobaczyć podobną treść:

pi@raspberrypi:~/supla-virtual-device $ ./supla-virtual-device
SUPLA-VIRTUAL-DEVICE v1.0.3
INFO[1583089711.45312] SSL version: OpenSSL 1.1.1d  10 Sep 2019

A na naszym koncie Supla Cloud powinniśmy mieć zarejestrowane urządzenie o nazwie BRAMKA-LB-SVD (lub zgodne z nazwą wprowadzoną w pliku supla-virtual-device.cfg).

 

Na chwilę przerywany działanie programu klawiszami Ctrl + C. Wykonamy teraz konfigurację automatycznego startu programu, abyśmy po ponownym uruchomieniu RPi nie musieli ręcznie uruchamiać Supla Virtual Device. Nasz program będzie działał w tle jako proces.

W tym celu zainstalowaliśmy wcześniej komendą apt-get install program supervisor. Teraz musimy poprawnie go skonfigurować. Edytujemy plik supervisord.conf poleceniem z podniesionymi uprawnieniami:

sudo nano /etc/supervisor/supervisord.conf

Odnajdujemy i zmieniamy wpis chmod=0700 na chmod=0770 oraz po tym wierszu dodajemy nowy wiersz z wpisem chown=root:pi.

Sekcja [unix_http_server] powinna wyglądać następująco:

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0770                       ; sockef file mode (default 0700)
chown=root:pi

Zapisujemy Ctrl + O i Enter i zamykamy edytor klawiszami Ctrl + C.

Tworzymy teraz konfiguracyjny plik dla procesu supla-virtual-device poleceniem:

sudo nano /etc/supervisor/conf.d/supla-virtual-device.conf

Zawartość pliku konfiguracyjnego:

[program:supla-virtual-device]
command=/home/pi/supla-virtual-device/supla-virtual-device
directory=/home/pi/supla-virtual-device
autostart=true
autorestart=true
user=pi

Oczywiście zapisujemy plik i zamykamy edytor Nano.

Teraz pozostaje zrestartować program supervisor poleceniem:

sudo service supervisor restart

Program Supla Virtual Device powinien zostać uruchomiony i pracować w tle jako serwis. Aby sprawdzić działanie programu w tle wpisujemy komendę:

supervisorctl status

Powinniśmy zobaczyć na ekranie terminala podobną treść:

supla-virtual-device             RUNNING   pid 2884, uptime 0:00:14

Pozostałe ważne polecenia dotyczące działających programów w tle:

supervisorctl status
supervisorctl stop nazwa-programu     np.: supervisorctl stop supla-virtual-device
supervisorctl start nazwa-programu    np.: supervisorctl start supla-virtual-device
supervisorctl restart nazwa-programu  np.: supervisorctl restart supla-virtual-device

Myślę, że polecenia są zrozumiałe i nie wymagają tłumaczenia.

IV. INSTALACJA I KONFIGURACJA ODCZYTÓW CZUJNIKÓW BLE XIAOMI

W pierwszej kolejności musimy poznać adresy MAC posiadanych przez nas czujników LYWSD03MMC. Jeśli posiadamy kilka czujników, najlepiej uruchamiać je po kolei. Aby poznać MAC uruchamiamy polecenie:

sudo hcitool lescan

Na ekranie terminala powinniśmy zobaczyć podobną treść:

pi@raspberrypi:~/supla-virtual-device $ sudo hcitool lescan
LE Scan ...
00:C3:F4:F6:C3:15 (unknown)
00:C3:F4:F6:C3:15 [TV] Samsung 7 Series (50)
58:2D:34:36:3A:A8 (unknown)
58:2D:34:36:3A:A8 LYWSD03MMC

Kopiujemy do notatnika MAC Address każdego czujnika najlepiej oznaczając go (np. markerem od spodu), tak aby mieć później pewną wiedzę, gdzie montujemy dany czujnik. Mając adresy MAC wszystkich czujników przechodzimy do katalogu supla-mi-th i uruchamiamy następujące polecenia:

wget https://raw.githubusercontent.com/JsBergbau/MiTemperature2/master/LYWSD03MMC.py
echo '#!/bin/bash' > save-to-file.sh
echo 'echo $3 > sensor_$2.txt' >> save-to-file.sh
echo 'echo $4 >> sensor_$2.txt' >> save-to-file.sh
chmod +x LYWSD03MMC.py save-to-file.sh

Teraz pozostaje utworzyć pliki konfiguracyjne dla czterech procesów odczytujących dane z czterech czujników poleceniem:

sudo nano /etc/supervisor/conf.d/mi-th0.conf

Zawartość pliku:

[program:mi-th-0]
command=python3 ./LYWSD03MMC.py --device xx:xx:xx:xx:xx:xx --round --debounce --name th0 --callback save-to-file.sh
directory=/home/pi/supla-mi-th
autostart=true
autorestart=true
user=pi

Czynności należy powtórzyć dla pozostałych czujników pamiętając o zmianie parametrów [program:mi-th-0] (th-0 do th-3), oraz –name th0 (th0 do th3).

Po zapisaniu wszystkich plików restartujemy supervisor i sprawdzamy działanie w tle programów.

sudo service supervisor restart
supervisorctl status

Powinniśmy mieć uruchomione w tle następujące procesy:

pi@RPi-2:~ $ supervisorctl status
mi-th-1                          RUNNING   pid 3074, uptime 2 days, 0:32:09
mi-th-2                          RUNNING   pid 445, uptime 2 days, 1:06:49
mi-th-3                          RUNNING   pid 442, uptime 2 days, 1:06:49
mi-th-4                          RUNNING   pid 451, uptime 2 days, 1:06:48
supla-virtual-device             RUNNING   pid 16223, uptime 1 day, 6:50:29

 

Uważny czytelnik pewnie zauważył zakomentowane (znak #) linie w pliku konfiguracyjnym supla-virtual-device.cfg. Parametr file_write_check_sec=120 określa, ile czasu w sekundach program Supla Virtual Device ma czekać na nowe dane ze skryptu LYWSD03MMC.py i w przypadku braku tych danych wysłać do Cloud specjalne wartości oznaczające brak odczytu.

Edytujemy zatem supla-virtual-device.cfg usuwając znak #, zapisujemy plik i restartujemy usługę supla-virtual-device poleceniem:

supervisorctl restart supla-virtual-device

 

Osobom zainteresowanym uruchomieniem czujników Xiaomi Mijia LYWSD03MMC w Domoticz’u polecam artykuł na blogu Wojciecha Grylewicza: https://grylewicz.pl/domoticz-5-obsluga-termometrow-xiaomi-mijia-lywsd03mmc-bluetooth/

 

Spodobał Ci się artykuł? Udostępnij go.

5 komentarzy

  1. Pingback: Supla Pushover czyli informacja o nowej korespondencji w tradycyjnej skrzynce pocztowej – Robert Błaszczak

  2. Właśnie przyszły części z dalekiego kraju, przeszły kwarantannę i udało się uruchomić zgodnie instrukcją krok po kroku. Opis zrobiony super. Działa rewelacyjnie. Teraz jestem ciekawy jak długo wytrzymają baterie w termometrach. Bardzo dziękuję za podzielenie się swoim pomysłem i pracą z innymi.

    Michał
    1. Bardzo dziękuję za tak miłą ocenę oraz zwrotną informację, że wszystko działa. U mnie jak do tej pory baterie we wszystkich czujnikach nie były jeszcze wymieniane. Czujniki działają non stop od 1 marca 2020. Jak dla mnie jest to rewelacyjny wynik. Należy pamiętać, że na żywotność baterii mocno wpływa odległość czujników od bramki. Ja mam czujniki rozmieszczone w mieszkaniu jednopoziomowym, a bramka jest praktycznie w centralnym punkcie mieszkania.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *