Jak wiecie lub nie

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