Jest to nowa wersja poradnika uruchomienia bramki dla czujników Xiaomi LYWSD03MMC w oparciu o oficjalne repozytorium Supla Device for Linux na Raspberry Pi Zero 2 W z zainstalowanym Raspberry Pi OS 64-bit. Oczywiście możliwości SD4Linux daleko wykraczają poza odczyt termometrów Xiaomi. Więcej zastosowań opisanych jest w przykładach na GitHub.
Procesu instalacji samego Raspberry Pi OS na karcie microSD oraz konfiguracji klienta SSH (np. PuTTY) nie będę tutaj omawiał. Można znaleźć poradniki w sieci Internet, lub w moich poprzednich wpisach. W niniejszym poradniku skupię się na procesie instalacji Supla Device for Linux (SD4Linux), skryptu MiTemperature2 autorstwa JsBergbau, niezbędnych pakietów dodatkowych oraz konfiguracji całego środowiska.
Zaczynamy od zaktualizowania Raspbian OS do najnowszej wersji:
sudo apt update sudo apt full-upgrade -y
Następnie instalujemy niezbędne pakiety:
sudo apt install mc git libssl-dev libyaml-cpp-dev cmake supervisor libglib2.0-dev python3-pip libbluetooth-dev python3-smbus -y
Po zainstalowaniu wszystkich pakietów robimy restart RPi:
sudo reboot now
Następnie instalujemy pakiety wymagane przez skrypt MiTemperature2 do odczytu termometrów Xiaomi po bezprzewodowej komunikacji Bluetooth:
mkdir -p ~/.config/pip echo "[global]" >> ~/.config/pip/pip.conf echo "break-system-packages = true" >> ~/.config/pip/pip.conf pip install bluepy requests pip install git+https://github.com/pybluez/pybluez.git#egg=pybluez pip install pycryptodomex sudo setcap cap_net_raw,cap_net_admin+eip $(eval readlink -f `which python3`)
Instalujemy i konfigurujemy skrypt MiTemperature2:
git clone https://github.com/JsBergbau/MiTemperature2.git cd MiTemperature2/
Tworzymy i edytujemy pliki:
nano start-listening.sh nano save-to-file.sh
Zawartość pliku start-listening.sh:
#!/bin/bash ./LYWSD03MMC.py -p --atc --battery --round --debounce --callback save-to-file.sh
Zawartość pliku save-to-file.sh:
#!/bin/bash echo $3 > $2.txt echo $4 >> $2.txt echo $6 >> $2.txt
Nadajemy odpowiednie uprawnienia do plików:
chmod +x start-listening.sh chmod +x save-to-file.sh
Na tym etapie konfiguracji możemy uruchomić skrypt odczytujący wartości temperatury i wilgotności z urządzeń Xiaomi poleceniem:
./start-listening.sh
Po około 1 – 2 minutach przerywamy działanie skryptu klawiszami ctrl+c. W katalogu /home/pi/MiTemperature2 powinny utworzyć się pliki tekstowe z nazwą w formacie xx:xx:xx:xx:xx:xx.txt, gdzie xx:xx:xx:xx:xx:xx to adres MAC naszych urządzeń Xiaomi (po jednym pliku na termometr). Każdy plik zawiera trzy wiersze, gdzie pierwszy wiersz to wartość temperatury, drugi to wartość wilgotności, a trzeci to stan baterii.
Kolejnym etapem jest konfiguracja procesu Supervisor pozwalającego na odczytywanie naszych czujników w tle. W tym celu wykonujemy następujące polecenia:
cd sudo nano /etc/supervisor/supervisord.conf
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
sudo nano /etc/supervisor/conf.d/mi-listener.conf
[program:mi-listener] command=/home/pi/MiTemperature2/start-listening.sh directory=/home/pi/MiTemperature2 autostart=true autorestart=true user=pi
I restartujemy proces:
sudo service supervisor restart
Testowo restartujemy nasze Raspberry Pi, a po ponownym zalogowaniu przez SSH sprawdzamy, czy nasze pliki z danymi z czujników Xiaomi aktualizują się automatycznie.
Kolejny etap to instalacja i konfiguracja SD4Linux.
git clone https://github.com/SUPLA/supla-device.git export SUPLA_DEVICE_PATH=~/supla-device cd supla-device/extras/examples/linux mkdir build cd build cmake .. && make
Kompilacja programu trochę trwa, więc jest to dobry moment na zaparzenie i wypicie kawy lub herbaty.
Po zakończeniu procesu kompilacji możemy sprawdzić wersję SD4Linux poleceniem:
./supla-device-linux --version
Na dzień pisania niniejszego poradnika SD4Linux dostępny był w wersji 25.01.
Kolejne czynności to utworzenie pliku konfiguracyjnego dla SD4Linux:
sudo nano /etc/supla-device.yaml
Przykładowa zawartość takiego pliku konfiguracyjnego dla 5 szt. LYWSD03MMC, który należy wyedytować zgodnie z własnymi danymi:
name: Bramka Xiaomi log_level: debug state_files_path: "/var/local/supla-device" security_level: 2 supla: server: svr123.supla.org mail: mail@server.pl channels: - type: ThermHygroMeterParsed name: T/H - salon initial_caption: "TEMPERATURA I WILGOTNOŚĆ" parser: type: Simple refresh_time_ms: 5000 temperature: 0 humidity: 1 battery_level: 2 multiplier_temp: 1 multiplier_humi: 1 multiplier_battery_level: 1 source: type: File file: "/home/pi/MiTemperature2/A4:C1:38:B0:71:51.txt" expiration_time_sec: 120 - type: ThermHygroMeterParsed name: T/H - sypialnia initial_caption: "TEMPERATURA I WILGOTNOŚĆ" parser: type: Simple refresh_time_ms: 5000 temperature: 0 humidity: 1 battery_level: 2 multiplier_temp: 1 multiplier_humi: 1 multiplier_battery_level: 1 source: type: File file: "/home/pi/MiTemperature2/A4:C1:38:39:51:4E.txt" expiration_time_sec: 120 - type: ThermHygroMeterParsed name: T/H - pokój Kuby initial_caption: "TEMPERATURA I WILGOTNOŚĆ" parser: type: Simple refresh_time_ms: 5000 temperature: 0 humidity: 1 battery_level: 2 multiplier_temp: 1 multiplier_humi: 1 multiplier_battery_level: 1 source: type: File file: "/home/pi/MiTemperature2/A4:C1:38:3F:3F:D0.txt" expiration_time_sec: 120 - type: ThermHygroMeterParsed name: T/H - kuchnia initial_caption: "TEMPERATURA I WILGOTNOŚĆ" parser: type: Simple refresh_time_ms: 5000 temperature: 0 humidity: 1 battery_level: 2 multiplier_temp: 1 multiplier_humi: 1 multiplier_battery_level: 1 source: type: File file: "/home/pi/MiTemperature2/A4:C1:38:BE:BB:B9.txt" expiration_time_sec: 120 - type: ThermHygroMeterParsed name: T/H - łazienka initial_caption: "TEMPERATURA I WILGOTNOŚĆ" parser: type: Simple refresh_time_ms: 5000 temperature: 0 humidity: 1 battery_level: 2 multiplier_temp: 1 multiplier_humi: 1 multiplier_battery_level: 1 source: type: File file: "/home/pi/MiTemperature2/A4:C1:38:D6:EF:EE.txt" expiration_time_sec: 120
sudo mkdir -p /var/lib/supla-device sudo chown supla_user_name /var/lib/supla-device
Teraz możemy włączyć w Supla Cloud rejestrację urządzeń i testowo uruchomić SD4Linux poleceniem:
./supla-device-linux -c /etc/supla-device.yaml
Po kilkunastu sekundach w Supla Cloud zarejestruje się nam Bramka Xiaomi z kanałami zdefiniowanymi w pliku konfiguracyjnym. Przerywamy działanie programu ctrl+c i konfigurujemy SD4Linux aby uruchamiał się automatycznie jako serwis.
cd sudo nano /etc/systemd/system/supla-device.service
[Unit] Description=Supla Device After=network-online.target [Service] User=pi ExecStart=/home/pi/supla-device/extras/examples/linux/build/supla-device-linux -s [Install] WantedBy=multi-user.target
Następnie:
sudo systemctl enable supla-device.service sudo systemctl start supla-device.service
Polecenie:
sudo systemctl status supla-device.service
Powinno dać wynik podobny do poniższego:
● supla-device.service - Supla Device Loaded: loaded (/etc/systemd/system/supla-device.service; enabled; preset: enabled) Active: active (running) since Sat 2025-01-18 20:49:28 CET; 2h 16min ago Main PID: 498 (supla-device-li) Tasks: 3 (limit: 179) CPU: 6min 59.719s CGroup: /system.slice/supla-device.service └─498 /home/pi/supla-device/extras/examples/linux/build/supla-device-linux -s Jan 18 23:01:16 rpi supla-device-linux[498]: Channel(4) value changed to temp(19.10), humi(42.00) Jan 18 23:01:56 rpi supla-device-linux[498]: Channel(6) value changed to temp(23.30), humi(51.00) Jan 18 23:02:07 rpi supla-device-linux[498]: Channel(7) value changed to 39.70 Jan 18 23:02:16 rpi supla-device-linux[498]: Channel(4) value changed to temp(19.10), humi(43.00) Jan 18 23:02:46 rpi supla-device-linux[498]: Channel(6) value changed to temp(23.20), humi(51.00) Jan 18 23:03:03 rpi supla-device-linux[498]: Channel(1) value changed to temp(21.70), humi(48.30) Jan 18 23:03:07 rpi supla-device-linux[498]: Channel(7) value changed to 39.20 Jan 18 23:04:03 rpi supla-device-linux[498]: Channel(1) value changed to temp(21.70), humi(47.80) Jan 18 23:05:03 rpi supla-device-linux[498]: Channel(1) value changed to temp(21.60), humi(47.80) Jan 18 23:06:03 rpi supla-device-linux[498]: Channel(1) value changed to temp(21.70), humi(47.80)
Możemy ponownie zrestartować naszą malinkę. Wszystkie niezbędne procesy powinny uruchomić się automatycznie w tle, a w aplikacji Supla powinniśmy widzieć 5 kanałów z danymi z naszych termometrów Xiaomi.