Jak wiecie lub nie odczyt danych z sensorów LYWSD03MMC może odbywać się na dwa sposoby, przez klasyczne połączenie BT (Bluetooth) lub poprzez BLE (Bluetooth Low Energy).
Do tej pory wszystkie poradniki zawierały opis łączenia się do tych czujników klasycznie przez BT i po odczytaniu danych przekazywanie ich do Supli poprzez SVD (Supla Virtual Device).
SVD nie jest już rozwijane dlatego w tym poradniku w celu przekazania danych do Supli wykorzystam rozwijaną przez @klew, aktualną bibliotekę Supla-Device.
W poradniku tym, znajdziecie także opis jak odczytywać dane z sensorów poprzez BLE, oszczędzając przy tym baterie w urządzeniach. Klasyczne podłączanie czujników do bramki przez BT drenuje baterie, a po stronie bramki obciąża procesor, jak się jakiś proces zawiesi.
Pacjentem robiącym za bramkę będzie RpiZeroW, które to ma ponoć najlepsze radio Bluetooth. Może to być również każdy inny sprzęt wyposażony w BT, ważne by zainstalować na nim linuxa
Poniżej kroki do osiągnięcia zamierzonego celu, czyli czytania przez bramkę tego co emitowane będzie w eter przez sensory przy użyciu BLE i przekazywania tych danych do Supli:
- #1. Zmieniamy firmware w kostkach, można go nie zmieniać, pobrać klucz deszyfrujący i przekazywać go poprzez podanie w pliku konfiguracyjnym, ale zmiana firmware jest tak prosta, że aż szkoda tego nie robić. Polecam ten wariant, innego nie testowałem
- #2. Instalujemy system Pi OS na naszej malince i aktualizujemy wszystkie pakiety
- #3. Instalujemy niezbędne składniki w systemie i pobieramy repozytorium ze skryptem odczytujący dane z sensorów i uruchamiamy go w trybie pasywnym nasłuchującym transmisję BLE
- #4. Instalujemy niezbędne składniki potrzebne do kompilacji biblioteki, pobieramy repozytorium Supla-Device i kompilujemy
- #5. Konfigurujemy Supla-Device
#1.
Zmiana firmware w czujnikach odbywa się poprzez serwis www uruchomiony przez twórców alternatywnego firmware dla LYWSD03MMC.
Są dwie strony za pomocą których możemy go zmienić. Linki do flashar-ów
https://atc1441.github.io/TelinkFlasher.html
https://pvvx.github.io/ATC_MiThermomete ... asher.html
Aktualnie na swoich kostkach mam mix kilka działa na tym od @atc1441, a kilka na tym od @pvvx.
Obie strony działają na pewno w przeglądarce internetowej Chrome.
Aby pozbawić Was lęku przed nieznanym
i ułatwić Wam zmianę softu, nagrałem filmy jak to zrobić. Filmy nagrałem z wykorzystaniem obu stron. Dodam jeszcze, że zawsze możecie wrócić do oryginalnego softu, ale nie ma po co
Odnośniki do filmów
#2.
Instalacja Pi OS
Instalacja jest trywialna, ale załączam mimo to kilka słów i screenów, ku dopełnieniu całości
Przygotowanie karty z systemem Pi OS
Pobieramy i instalujemy Imager ze strony https://www.raspberrypi.com/software/
a potem ...
Umieszczamy kartę w slocie Pi i zasilamy. Czekami kilka chwil.
Logujemy się przez SSH na nasze Pi, np. programem Putty, lub terminalem z linuxa przy użyciu nazwy użytkownika i nazwy hosta, którą podaliśmy podczas przygotowywania karty z systemem.
W moim przypadku
Code: Select all
ssh lesny8@rpi.local
Skrypt będzie na końcu posta poniżej
Jeśli chcesz możesz dalej nie czytać. Przeskocz na koniec, pobierz skrypt, uruchom i idź napij się kawy, albo co tam lubisz
Jeśli chcesz przebrnąć przez wszystko samemu czytaj dalej.
Aktualizujemy pakiety w naszym systemie
Code: Select all
sudo apt update
sudo apt upgrade -y
Code: Select all
sudo apt install git mc -y
Instalujemy wszystko co niezbędne do czytania danych z sensorów LYWSD03MMC
Zapoznajcie się z readme.md
https://github.com/JsBergbau/MiTemperature2
a dla leniuszków będzie, w skrócie
Klonujemy repozytorium
git clone https://github.com/JsBergbau/MiTemperature2.git
Instalujemy składniki w systemie niezbędne do prawidłowego działania odczytu z sensorów
Code: Select all
sudo apt install python3 bluez python3-pip libbluetooth-dev -y
pip3 install bluepy requests
Code: Select all
sudo apt install bluetooth -y
pip3 install pybluez pycryptodomex
Code: Select all
sudo setcap cap_net_raw,cap_net_admin+eip $(eval readlink -f `which python3`)
Tworzymy skrypt uruchamiający LYWSD03MMC.ph w trybie pasywnym
Code: Select all
cd MiTemperature2/
nano start-listening.sh
Code: Select all
#!/bin/bash
./LYWSD03MMC.py -p --atc --battery --round --debounce --callback save-to-file.sh
Code: Select all
chmod +x start-listening.sh
Tworzymy plik save-to-file.sh
Code: Select all
nano save-to-file.sh
Code: Select all
#!/bin/bash
echo $3 > $2.txt
echo $4 >> $2.txt
echo $6 >> $2.txt
Code: Select all
chmod +x save-to-file.sh
Code: Select all
./start-listening.sh
Jeśli wszystko przebiegło gładko, to w katalogu ~/MiTemperature2 mamy utworzone pliki z mac adresami XX:XX:XX:XX:XX:XX.txt odpowiadające naszym czujnikom.
W środku każdego trzy linijki:
temperatura
wilgotność
i poziom baterii.
Instalujemy supervisora, żeby uruchamiał nam startowy skrypt start-listening.sh
Code: Select all
sudo apt install supervisor
Code: Select all
sudo nano /etc/supervisor/conf.d/mi-listener.conf
Code: Select all
[program:mi-listener]
command=/home/lesny8/MiTemperature2/start-listening.sh
directory=/home/lesny8/MiTemperature2
autostart=true
autorestart=true
user=lesny8
Dodajemy ekstra uprawnienia dla naszego użytkownika w configu supervisora
Code: Select all
sudo nano /etc/supervisor/supervisord.conf
Code: Select all
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0770 ; sockef file mode (default 0700)
chown=root:lesny8
Code: Select all
sudo service supervisor restart
Instalujemy Supla-device
Zapoznajcie się z opisem na githubie
https://github.com/SUPLA/supla-device/t ... ples/linux
Instalujemy co trzeba, niektóre pakiety już mamy, jak czegoś brakuje to się doinstaluje
Code: Select all
sudo apt install git libssl-dev build-essential libyaml-cpp-dev cmake -y
Code: Select all
git clone https://github.com/SUPLA/supla-device.git
Code: Select all
export SUPLA_DEVICE_PATH=~/supla-device
cd supla-device/extras/examples/linux
mkdir build
cd build
cmake ..
make
Code: Select all
[100%] Linking CXX executable supla-device-linux
[100%] Built target supla-device-linux
Code: Select all
./supla-device-linux -v
Code: Select all
./supla-device-linux version: 23.01
Konfigurujemy supla-device
Tworzymy plik i wypełniamy odpowiednio
Code: Select all
sudo nano /etc/supla-device.yaml
Code: Select all
name: SuplaDevice RPi
log_level: debug
state_files_path: "/home/lesny8"
security_level: 2 # disable certyficate verification
supla:
server: svrXX.supla.org
mail: email@supla.org
channels:
- type: ThermHygroMeterParsed
source:
type: File
file: "/home/lesny8/MiTemperature2/A4:C1:38:09:BE:58.txt"
expiration_time_sec: 120
parser:
type: Simple
refresh_time_ms: 5000
temperature: 0
humidity: 1
multiplier_temp: 1
multiplier_humi: 1
battery_level: 2
Code: Select all
sudo nano /etc/systemd/system/supla-device.service
Code: Select all
[Unit]
Description=Supla Device
After=network-online.target
[Service]
User=lesny8
ExecStart=/home/lesny8/supla-device/extras/examples/linux/build/supla-device-linux -s
[Install]
WantedBy=multi-user.target
Na końcu pozostało nam włączyć serwis i go uruchomić
Code: Select all
sudo systemctl enable supla-device.service
sudo systemctl start supla-device.service
Wspomniany wcześniej skrypt w bashu, który napisałem w celu gładkiej instalacji, zrobi za Was całą robotę, polecam
Po uruchomieniu RPi logujemy się na Pi OS poprzez SSH, pobieramy skrypt i dodajemy uprawnienia do wykonywania.
Na końcu go uruchamiamy i postępujemy zgodnie ze wskazówkami
Code: Select all
wget https://gist.githubusercontent.com/lesny8/24dcc52abfc797cbfafb191286165d4f/raw/install_and_config.sh
chmod +x install_and_config.sh
./install_and_config.sh