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
Kod: Zaznacz cały
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
Kod: Zaznacz cały
sudo apt update
sudo apt upgrade -y
Kod: Zaznacz cały
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
Kod: Zaznacz cały
sudo apt install python3 bluez python3-pip libbluetooth-dev -y
pip3 install bluepy requests
Kod: Zaznacz cały
sudo apt install bluetooth -y
pip3 install pybluez pycryptodomex
Kod: Zaznacz cały
sudo setcap cap_net_raw,cap_net_admin+eip $(eval readlink -f `which python3`)
Tworzymy skrypt uruchamiający LYWSD03MMC.ph w trybie pasywnym
Kod: Zaznacz cały
cd MiTemperature2/
nano start-listening.sh
Kod: Zaznacz cały
#!/bin/bash
./LYWSD03MMC.py -p --atc --battery --round --debounce --callback save-to-file.sh
Kod: Zaznacz cały
chmod +x start-listening.sh
Tworzymy plik save-to-file.sh
Kod: Zaznacz cały
nano save-to-file.sh
Kod: Zaznacz cały
#!/bin/bash
echo $3 > $2.txt
echo $4 >> $2.txt
echo $6 >> $2.txt
Kod: Zaznacz cały
chmod +x save-to-file.sh
Kod: Zaznacz cały
./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
Kod: Zaznacz cały
sudo apt install supervisor
Kod: Zaznacz cały
sudo nano /etc/supervisor/conf.d/mi-listener.conf
Kod: Zaznacz cały
[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
Kod: Zaznacz cały
sudo nano /etc/supervisor/supervisord.conf
Kod: Zaznacz cały
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0770 ; sockef file mode (default 0700)
chown=root:lesny8
Kod: Zaznacz cały
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
Kod: Zaznacz cały
sudo apt install git libssl-dev build-essential libyaml-cpp-dev cmake -y
Kod: Zaznacz cały
git clone https://github.com/SUPLA/supla-device.git
Kod: Zaznacz cały
export SUPLA_DEVICE_PATH=~/supla-device
cd supla-device/extras/examples/linux
mkdir build
cd build
cmake ..
make
Kod: Zaznacz cały
[100%] Linking CXX executable supla-device-linux
[100%] Built target supla-device-linux
Kod: Zaznacz cały
./supla-device-linux -v
Kod: Zaznacz cały
./supla-device-linux version: 23.01
Konfigurujemy supla-device
Tworzymy plik i wypełniamy odpowiednio
Kod: Zaznacz cały
sudo nano /etc/supla-device.yaml
Kod: Zaznacz cały
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
Kod: Zaznacz cały
sudo nano /etc/systemd/system/supla-device.service
Kod: Zaznacz cały
[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ć
Kod: Zaznacz cały
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
Kod: Zaznacz cały
wget https://gist.githubusercontent.com/lesny8/24dcc52abfc797cbfafb191286165d4f/raw/install_and_config.sh
chmod +x install_and_config.sh
./install_and_config.sh