W poprzednim artykule ogólnie opisałem softwarową bramkę (Gateway) czytającą dane pomiarowe z czujników temperatury i wilgotności Xiaomi Mijia i przesyłających te dane na serwer Supla. Poniżej przedstawiam opis uruchomienia – krok po kroku – Supla Virtual Device – bramka dla czujników Xiaomi LYWSD03MMC.

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),
  • karta 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 i instalujemy program Rasperry Pi Imager ze strony organizacji RaspberryPi,
  • podłączamy czytnik kart do komputera i wkładamy kartę SD,
  • uruchamiamy program Raspberry Pi Imager (akceptujemy podwyższone uprawnienia) i wybieramy system operacyjny Raspberry Pi (other) >> Raspberry Pi OS Lite (32-bit) następnie wybieramy naszą kartę SD i klikamy przycisk WRITE. 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 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 RASPBERRY PI OS 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=12

[AUTH]
email=twojemaildokontasupla@domena.com

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

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

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

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

Oczywiście nazwę hosta (treść po host=) oraz adres e-mail którym logujemy się do konta Supla Cloud (treść po email=) zmieniamy na zgodne ze swoim kontem Supla Cloud (nazwa hosta dostępna jest 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, w drugim wierszu wilgotność w formacie xx, a w trzecim wierszu poziom baterii 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 oraz Enter i zamykamy edytor klawiszami Ctrl + X.

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
echo 'echo $6 >> 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 (w miejsce xx:xx:xx:xx:xx:xx wpisujemy rzeczywisty adres MAC czujnika):

[program:mi-th-0]
command=python3 ./LYWSD03MMC.py --device xx:xx:xx:xx:xx:xx --battery --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 skrypt 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 znaki #, 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/

 

UWAGA!

Powyższy artykuł został uaktualniony wraz z aktualizacją skryptu Supla Virtual Device z dnia 1 września 2020 r.

Sposób aktualizacji skryptu dla osób mających zainstalowaną wcześniejszą wersję (bez obsługi statusu baterii) opisałem w tym artykule.

 

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

26 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.

    2. Witam. Czy mając termometr bez bramki będę mógł sprawdzić historyczną temperaturę na smartfonie? Czy każdy pomiar zapisywany jest w pamięci termometru, a następnie przesyłany jest do telefonu?

      Nowy
  3. Witam. Od jakiegoś tygodnia próbuje uruchomić te czujniki na supli, wszystko robię zgodnie z instrukcja krok po kroku, w supli pojawiają się pola temp itp ale bez przerwy brak wartości, mam kupione dwa czujniki , czy jest możliwość żeby te oto czujniki nie łączyły się z raspberrym? Brak wyświetlania na nich ikonki połączonego bt, czy mi coś może umykać, i powtarzam ciągle ten sam błąd, jestem początkujący w tych tematach , więc różnie może być 😉 Za wszelkie rady, sugestie byłbym wdzięczny, Pozdrawiam

    Janki
  4. Hmm są te wartości które podałem jako przykladowe, po dwie linie jak w opisie. I jeszcze jedno, jak zrobię tak jak napisano pod koniec artykułu

    (Edytujemy zatem supla-virtual-device.cfg usuwając znak #, zapisujemy plik i restartujemy usługę supla-virtual-device poleceniem) jak znak nie jest usunięty to wyświetla mi te wartości które podałem jako przykladowe, a jak go usunę to dane są wykreskowane

    Janki
    1. To oznacza, że nie są zapisywane dane z czujników do plików tekstowych.
      proszę „wejść” do katalogu supla-mi-th (cd supla-mi-th) i uruchomić komendę
      python3 ./LYWSD03MMC.py –device xx:xx:xx:xx:xx:xx –round –debounce –name th0 –callback save-to-file.sh
      W miejsce xx proszę podstawić adres MAC swojego czujnika.

      1. Nic z tego taki oto komunikat:

        pi@raspberrypi:~/supla-mi-th $ python3 ./LYWSD03MMC.py –device a4:c1:38:5a:00:ba –round –debounce –name th0 –callback save-to-file.sh
        python3: can’t open file ‚./LYWSD03MMC.py’: [Errno 2] No such file or directory
        pi@raspberrypi:~/supla-mi-th $

        Janki
  5. Pingback: Aktualizacja Supla Virtual Device - Robert Błaszczak

  6. Witam.
    Zrobiłem wszystko według pana instrukcji i cały czas mam taki komunikat.
    pi@raspberrypi:~/supla-mi-th $python3 ./LYWSD03MMC.py –device A4:C1:38:38:FB:26 –round –debounce –name th0 –callback save-to-file.sh
    Trying to connect to A4:C1:38:38:FB:26
    Connection lost
    Waiting…
    Trying to connect to A4:C1:38:38:FB:26
    Connection lost

    I tak non stop.
    Bardzo proszę o pomoc.

    Darek
  7. Cześć, zmagam się z dodaniem urządzeń do virtual-device. Otrzymuje taki oto komunikat błędu:

    pi@SUPLA:~ $ supervisorctl status
    mi-th-0 BACKOFF Exited too quickly (process log may have details)

    Mogę liczyć na pomoc?

    Tomek

Dodaj komentarz

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