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

User avatar
lesny8
Posts: 2912
Joined: Mon Dec 11, 2017 9:43 pm

Post

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

Image


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
Image Image


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

Image Image

Image Image

Image Image

Image

Image Image

Image

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

Code: Select all

sudo apt update
sudo apt upgrade -y
Instalujemy git i przydatne mc

Code: Select all

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

Code: Select all

sudo apt install python3 bluez python3-pip libbluetooth-dev -y
pip3 install bluepy requests
Dla trybu pasywnego instalujemy jeszcze

Code: Select all

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

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

Code: Select all

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

Code: Select all

chmod +x start-listening.sh 

Tworzymy plik save-to-file.sh

Code: Select all

nano save-to-file.sh
kopiujemy i wklejamy

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

sudo apt install supervisor
Dodajemy plik konfiguracyjny z zadaniem dla supervisora

Code: Select all

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

Code: Select all

[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

Code: Select all

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ń

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

Code: Select all

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

Code: Select all

sudo apt install git libssl-dev build-essential libyaml-cpp-dev cmake -y
Klonujemy repozytorium

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

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

Code: Select all

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

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
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 ;)

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
Last edited by lesny8 on Wed Jan 25, 2023 11:01 pm, edited 1 time in total.
SOP 2023 :heavy_check_mark:
SOP 2024 :heavy_check_mark:
Czekam na kolejne Supla Offline Party :upside_down_face:
User avatar
shimano73
Posts: 2014
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze

Post

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 :)
User avatar
lesny8
Posts: 2912
Joined: Mon Dec 11, 2017 9:43 pm

Post

Sprawdź, powinno zadziałać ;)
SOP 2023 :heavy_check_mark:
SOP 2024 :heavy_check_mark:
Czekam na kolejne Supla Offline Party :upside_down_face:
User avatar
Lector
Posts: 1620
Joined: Fri Nov 17, 2017 2:26 pm
Location: Poznań

Post

No i super, będę musiał w wolnej chwili zmienić u siebie.
Niespełniony automatyk. :mrgreen:
https://www.youtube.com/@3D_Lamp.Photos
User avatar
Robert Błaszczak
Posts: 4259
Joined: Sat Dec 22, 2018 8:55 pm
Location: Zielona Góra

Post

Ś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
User avatar
kris.sg
Posts: 422
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie

Post

@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":

Code: Select all

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.

Code: Select all

  - 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
User avatar
lesny8
Posts: 2912
Joined: Mon Dec 11, 2017 9:43 pm

Post

Lector wrote: Fri Jan 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 wrote: Fri Jan 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.
SOP 2023 :heavy_check_mark:
SOP 2024 :heavy_check_mark:
Czekam na kolejne Supla Offline Party :upside_down_face:
User avatar
Robert Błaszczak
Posts: 4259
Joined: Sat Dec 22, 2018 8:55 pm
Location: Zielona Góra

Post

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
Posts: 376
Joined: Thu Apr 28, 2016 4:24 pm
Location: Katowice

Post

Dzięki za poradnik, jakoś poszło ;) :D
tomekk87
Posts: 191
Joined: Fri Aug 02, 2019 12:19 pm

Post

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

Pozdrawiam
Tomek

Return to “FAQ / Jak to zrobić”