Instalacja bramki SUPLA-VIRTUAL-DEVICE z obsługą termometrów LYWSD03MMC

2022-11-15 5 Przez klimas

Na początek instalujemy niezbędne biblioteki:

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

sudo apt-get install python3-pip libglib2.0-dev

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

sudo pip3 install bluepy

Instalujemy Supla Virtual Device. Tworzymy drzewo katalogów „/home/pi/appdata/” i rozpoczynamy instalację.

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

Po instalacji przechodzimy do wstępnej konfiguracji.

nano supla-virtual-device.cfg

Zawartość naszego pliku konfiguracyjnego powinna wyglądać mniej więcej tak:

[GLOBAL]
device_name=SUPLA-SVD


[SERVER]

host=svrXX.supla.org

protocol_version=12


[AUTH]
[email protected]


[CHANNEL_0]

function=TEMPERATURE_AND_HUMIDITY

file=/home/pi/appdata/supla-virtual-device/supla-mi-th/sensor_th0.txt

battery_powered=1

file_write_check_sec=300

Wartości dla host i email podajemy zgodne z danymi z naszego konta SUPLA.

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

mkdir supla-mi-th

W folderze supla-mi-th tworzymy pliki dla danych z naszych sensorów.

nano supla-mi-th/sensor_th0.txt

W moim przypadku jest to jeden sensor ale jak będzie ich więcej to kolejne pliki powinny się nazywać sensor_th1.txt itp.

Po tych czynnościach jesteśmy gotowi do rejestracji naszej bramki w Cloud. Wchodzimy na nasze konto SUPLA i włączamy możliwość rejestracji nowych urządzeń. Na naszej Malince przechodzimy do folderu:

cd /home/pi/appdata/supla-virtual-device

i uruchamiamy naszą bramkę..

./supla-virtual-device

Powinniśmy uzyskać podobny wynik w naszej konsoli:

pi@rpi-web:~/appdata/supla-virtual-device $ ./supla-virtual-device
SUPLA-VIRTUAL-DEVICE v1.1.2
INFO[1668028459.941093] SSL version: OpenSSL 1.1.1n  15 Mar 2022

Teraz logujemy się na cloud.supla.org i włączamy AKTYWACJĘ urządzeń i czekamy aż pojawi się nam nasz bramka BLE.

Rysunek 1 – Bramka SVD w cloud

Na chwilę przerywany działanie programu kombinacją klawiszy Ctrl + C. Wykonamy teraz konfigurację autostartu programu, abyśmy po ponownym uruchomieniu systemu nie musieli ręcznie uruchamiać SuplaVirtualDevice. Nasz program będzie uruchamiany 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

Zmieniamy wartość chmod=0700 na chmod=0770 oraz po tym wierszu dodajemy nowy wiersz z wpisem chown=root:pi.

Powinno wyglądać to tak:

[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 supla-virtual-device poleceniem:

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

Nasza konfiguracją powinna wyglądać następująco:

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

Zapisujemy konfiguracje używając w kolejności po sobie kombinacji klawiszy CTRL+O, CTRL+X i restartujemy bramkę SVD.

sudo service supervisor restart

Kilka przydatnych poleceń dzięki którym zatrzymamy, uruchomimy lub sprawdzimy status naszej aplikacji. Polecenie supervisorctl status pokazuje aktualny status. Możemy użyć też zmiennej stop, start lub restart a po zmiennej nazwę programu np. supervisorctl start supla-virtual-device

Teraz zajmiemy się konfiguracją oraz instalacją czujników LYWSD03MMC w naszej bramce SVD. W pierwszej kolejności musimy poznać adresy MAC naszych Termometrów. Używamy komendy:

sudo hcitool lescan

Gdy na naszej liście urządzeń znajdzie się nazwa zaczynająca od LYW… to kopiujemy adres MAC.

pi@rpi-web:~/supla-virtual-device $ sudo hcitool lescan
LE Scan ...
A4:C1:38:D4:4D:C4 LYWSD03MMC

Kopiujemy sobie adres MAC do notatnika i możemy jakoś opisać cienkopisem na obudowie lub nakleić jakąś etykietkę aby później łatwo rozpoznać jeżeli takich czujników będziemy posiadali większą ilość. Tworzymy podfolder „supla-mi-th” i przechodzimy do niego i przystępujemy do pobrania skryptu zczytującego wartości z termometra.

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

W kolejnym kroku tworzymy skrypt który będzie pobierał 2 razy wartości i przy 10 nieudanych próbach przerwie odczyt a na koniec wywoła polecenie pkill procesu bluepy. Jest to konieczne gdyż ten proces potrafi się zdublować lub zawiesić co powoduje 100% zużycie rdzenia. Wpisujemy komendę „nano sensor_th0.sh” i wklejamy poniższą zawartość.

#!/bin/bash
# Przejdz do folderu z skryptami odczytu
cd /home/pi/appdata/supla-virtual-device/supla-mi-th/

# Odczyt z czujnika Xiaomi
sudo ./LYWSD03MMC.py --device A4:C1:38:D4:4D:C4 --battery --round --debounce --name th0 --interface 0 --count 2 --unreachable-count 10 --callback save-to-file.sh

# Kill all bluepy proces

sudo pkill bluepy

Nadajemy prawa do wykonywania skryptu „chmod +x sensor_th0.sh” i dodajemy automatyczne wykonywanie skryptu co 5 minut w cronie komendą crontab -e. Dodajemy poniższy wpis:

W razie problemów z uruchomieniem supla-virtual-device należy edytować plik:  Należy dopisać w 36 lini pliku /home/pi//appdata/supla-virtual-device/src/supla-dev/src/pi_2_mmio.h słowo „extern tak ma potem wyglądać ta linia
extern volatile uint32_t* pi_2_mmio_gpio;”

  */5 * * * * /home/pi/appdata/supla-virtual-device/supla-mi-th/sensor_th0.sh

Dzięki temu skryptowi unikniemy ciągłemu drenowaniu bateri naszego termometru. Odczyt odbywa się co 5 minut. Oczywiście ten czas możemy zmienić wedle swojego uznania.

Teraz musimy dodać kanał temperatury i wilgotności w pliku konfiguracyjnym „supla-virtual-device.cfg”

[CHANNEL_0]
function=TEMPERATURE_AND_HUMIDITY
file=/home/pi/appdata/supla-virtual-device/supla-mi-th/sensor_th0.txt
battery_powered=1
file_write_check_sec=840

Restartujemy naszą bramkę SVD komendą sudo service supervisor restart. Przechodzimy do naszego konta w cloud i konfigurujemy nasz kanał.

Rysunek 2 – Konfiguracja kanału temperatury i wilgotności w cloud

Jeżeli masz jakieś pomysły lub widziałeś lepsze sposoby odczytywania danych z tych termometrów podziel się informacją w komentarzu.