[tutorial] RPiZeroW + odczyt z LYWSD03MMC przez BLE + Supla-Device

Awatar użytkownika
lesny8
Posty: 2808
Rejestracja: pn gru 11, 2017 9:43 pm

Czołem Suplowicze!!!

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 :D

Obrazek


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 :lol:

Odnośniki do filmów
Obrazek Obrazek


#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 ...

Obrazek Obrazek

Obrazek Obrazek

Obrazek Obrazek

Obrazek

Obrazek Obrazek

Obrazek

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
Aby ułatwić cały proces utworzyłem skrypt w bashu, którym zautomatyzuje dalsze kroki, ale jak to z każdym skryptem bywa, na innym sprzęcie, albo systemie może nie zadziałać właściwie, dlatego zostawiam opis co po kolei wykonać.
Skrypt będzie na końcu posta poniżej :arrow: :arrow: :arrow: :arrow: :arrow:

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
Instalujemy git i przydatne mc

Kod: Zaznacz cały

sudo apt install git mc -y
#3
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 :P

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
Dla trybu pasywnego instalujemy jeszcze

Kod: Zaznacz cały

sudo apt install bluetooth -y
pip3 install pybluez pycryptodomex
Uruchamiamy polecenie aby skanować sensory BLE bez uprawnień roota

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
kopiujemy i wklejamy

Kod: Zaznacz cały

#!/bin/bash
./LYWSD03MMC.py -p --atc --battery --round --debounce --callback save-to-file.sh
Dodajemy uprawnienia do wykonywania dla naszego skryptu

Kod: Zaznacz cały

chmod +x start-listening.sh 

Tworzymy plik save-to-file.sh

Kod: Zaznacz cały

nano save-to-file.sh
kopiujemy i wklejamy

Kod: Zaznacz cały

#!/bin/bash
echo $3 > $2.txt
echo $4 >> $2.txt
echo $6 >> $2.txt
Dodajemy uprawnienia do wykonywania

Kod: Zaznacz cały

chmod +x save-to-file.sh
Możemy przetestować działanie, jeśli mamy już sensory LYWSD03MMC ze zmienionym firmware, powinno być widać z nich odczyty na ekranie

Kod: Zaznacz cały

./start-listening.sh
zatrzymujemy skrypt ctrl+c

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
Dodajemy plik konfiguracyjny z zadaniem dla supervisora

Kod: Zaznacz cały

sudo nano /etc/supervisor/conf.d/mi-listener.conf
kopiujemy i wklejamy

Kod: Zaznacz cały

[program:mi-listener]
command=/home/lesny8/MiTemperature2/start-listening.sh
directory=/home/lesny8/MiTemperature2
autostart=true
autorestart=true
user=lesny8
oczywiście wszędzie gdzie widzicie lesny8 zamieńcie na swoją nazwę użytkownika, żeby ścieżki się zgadzały.

Dodajemy ekstra uprawnienia dla naszego użytkownika w configu supervisora

Kod: Zaznacz cały

sudo nano /etc/supervisor/supervisord.conf
Sekcja unix_http_server ma wyglądać na wzór tego, aby móc uruchamiać supervisora bez podnoszenia uprawnień

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
Restartujemy serwis supervisora

Kod: Zaznacz cały

sudo service supervisor restart
#4
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
Klonujemy repozytorium

Kod: Zaznacz cały

git clone https://github.com/SUPLA/supla-device.git
i je kompilujemy

Kod: Zaznacz cały

export SUPLA_DEVICE_PATH=~/supla-device
cd supla-device/extras/examples/linux
mkdir build
cd build
cmake ..
make
Na końcu kompilacji otrzymamy komunikat

Kod: Zaznacz cały

[100%] Linking CXX executable supla-device-linux
[100%] Built target supla-device-linux
sprawdzamy wersje

Kod: Zaznacz cały

./supla-device-linux -v
aktualnie jest to

Kod: Zaznacz cały

./supla-device-linux version: 23.01
#5
Konfigurujemy supla-device
Tworzymy plik i wypełniamy odpowiednio

Kod: Zaznacz cały

sudo nano /etc/supla-device.yaml
Treść pliku co najmniej taka, tworzymy tyle kanałów ile mamy czujników z odnośnikami do plików XX:XX:XX:XX:XX:XX.txt

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
Przygotowujemy serwis dla Supla-Device

Kod: Zaznacz cały

sudo nano /etc/systemd/system/supla-device.service
kopijemy i wklejamy

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
Gotowe :)

:arrow: :arrow: :arrow: :arrow: :arrow:
Wspomniany wcześniej skrypt w bashu, który napisałem w celu gładkiej instalacji, zrobi za Was całą robotę, polecam :mrgreen:

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
Ostatnio zmieniony śr sty 25, 2023 11:01 pm przez lesny8, łącznie zmieniany 1 raz.
Czekam na kolejne Supla Offline Party 👍
Awatar użytkownika
shimano73
Posty: 1968
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

No i twoje działania pokrywają się z moimi w 99% bo ja nie mam maliny tylko terminal dell'a i debian'a ;)
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
Awatar użytkownika
lesny8
Posty: 2808
Rejestracja: pn gru 11, 2017 9:43 pm

Sprawdź, powinno zadziałać ;)
Czekam na kolejne Supla Offline Party 👍
Awatar użytkownika
Lector
Posty: 1398
Rejestracja: pt lis 17, 2017 2:26 pm
Lokalizacja: Poznań
Kontakt:

No i super, będę musiał w wolnej chwili zmienić u siebie.
Niespełniony automatyk. :mrgreen:
https://3d-lamp.photos/
Awatar użytkownika
Robert Błaszczak
Posty: 3970
Rejestracja: sob gru 22, 2018 8:55 pm
Lokalizacja: Zielona Góra
Kontakt:

Świetny poradnik. Wielkie dzięki i chyba nadchodzi czas na zmianę SVD na SD :)

DZIĘKUJĘ.
Pozdrawiam
Robert Błaszczak


Moja prywatna strona: www.blaszczak.pl
Awatar użytkownika
kris.sg
Posty: 372
Rejestracja: pn sie 07, 2017 8:08 pm
Lokalizacja: Przezchlebie

@lesny8 gratuluję, super poradnik, ja od siebie dodam jak by ktoś chciał mieć odczyt siły sygnału bt z termometrów:
plik "save-to-file.sh":

Kod: Zaznacz cały

echo $3 > sensor_$2.txt
echo $4 >> sensor_$2.txt
echo $5 >> sensor_$2.txt
echo $6 >> sensor_$2.txt
echo  "$((x=$7+100,y=x*2))" >> sensor_$2.txt
$7 - poziom "rssi" bt

Poziom sygnału wyświetlam na razie w info - poziom baterii póki @klew nie doda obsługi.

Kod: Zaznacz cały

  - type: ThermHygroMeterParsed
    name: Sien
    source:
      type: File
  # use file "temp_humi.txt" from current folder
      file: "/home/pi/supla-mi-th/sensor_A4:C1:38:D4:C7:D1.txt"
    parser:
      type: Simple
      refresh_time_ms: 200
  # temperature is read from first line of txt file
    temperature: 0
  # humidity is read from second line of txt file
    humidity: 1
    multiplier_temp: 1
    multiplier_humi: 1
    battery_level: 4		# siła sygnału bt w %
    multiplier_battery_level: 1
Pozdrawiam
■Rpi4(m.2) Supla Cloud, Scripts ■Rpi3(sd) SD: 6x MI ATC, 1x W.S.
ROLETY_V3 x12 ■SWITCH_DUAL x4 ■GATE_MODULE_V3 x1 ■SOCKET_SSR x1 ■SMOKE_MODULE x1
SONOFF_TOUCH x4 ■YUNSCHAN x1 ■STAITCASE_DIMMER x1 ■MEW-01 x2 ■mROW-02 x1 ■LEW-01 x1
POW_R2 x2 ■SP111 x3
Awatar użytkownika
lesny8
Posty: 2808
Rejestracja: pn gru 11, 2017 9:43 pm

Lector pisze: pt sty 20, 2023 5:59 am No i super, będę musiał w wolnej chwili zmienić u siebie.
Najpierw zmień sobie na spokojnie firmware na czujnikach.
Gdzieś pisałeś, że masz dwie maliny, jedna ogarnia 4 czujniki i druga kolejne 4. Coś czuje, że po zmianie Ci się malina zresztuje :D
Robert Błaszczak pisze: pt sty 20, 2023 6:25 am Świetny poradnik. Wielkie dzięki i chyba nadchodzi czas na zmianę SVD na SD :)

DZIĘKUJĘ.
Dzięki.
Z tym przejściem z SVD na SD, bez utraty dotychczasowej historii jest więcej roboty, ale się da, ja tak u siebie zrobiłem.
Możesz na drugiej karcie sobie wszystko uruchomić skryptem w bashu, a potem dostosować kolejność kanałów w .yml i podmienić GUID i AUTH_KEY na te z SVD.
Czekam na kolejne Supla Offline Party 👍
Awatar użytkownika
Robert Błaszczak
Posty: 3970
Rejestracja: sob gru 22, 2018 8:55 pm
Lokalizacja: Zielona Góra
Kontakt:

Dzięki za podpowiedź, ale nie mam potrzeby posiadania ciągłości historii danych z LYWSD03MMC, które mierzą tylko temperaturę i wilgotność w poszczególnych pomieszczeniach w mieszkaniu.
Pozdrawiam
Robert Błaszczak


Moja prywatna strona: www.blaszczak.pl
kris.gie
Posty: 361
Rejestracja: czw kwie 28, 2016 4:24 pm
Lokalizacja: Katowice

Dzięki za poradnik, jakoś poszło ;) :D
tomekk87
Posty: 185
Rejestracja: pt sie 02, 2019 12:19 pm

Super poradnik, zostałem zmotywowany do przejścia z SVD na SD.

Pozdrawiam
Tomek
ODPOWIEDZ

Wróć do „FAQ / Jak to zrobić”