W drugiej części opisu moich doświadczeń z Domoticzem – Domoticz #2 opisałem obsługę sensorów temperatury i wilgotności Xiaomi Mijia LYWSDCGQ, popularnie zwanych czujnikami okrągłymi, lub v1. Dziś przedstawię sposób integracji z Domoticzem jakby nowszej wersji – czujników kwadratowych v2, Xiaomi Mijia LYWSD03MMC.
Zacznę od tego, że czujniki starsze okrągłe i nowsze kwadratowe komunikują się za pomocą Bluetooth. Jednak są między nimi spore różnice. Najważniejsza to inny format wysyłanych danych. Dlatego metoda obsługi czujników okrągłych opisana przeze mnie we wpisie Domoticz #2 nie działa z czujnikami kwadratowymi. Dostałem sporo informacji, że przedstawiony tam sposób nie działa, a po analizie okazywało się, że próbowano odczytywać nowsze kwadratowe czujniki, stąd problem. Inne różnice to m.in czujnik okrągły / czujnik kwadratowy:
Nowsze, kwadratowe czujniki LYWSD03MMC stały się ostatnio bardzo popularne. Do tego są sporo tańsze od “starszych” okrągłych braci. Można je kupić w pakietach po 2-3 sztuki i cena jest jeszcze bardziej atrakcyjna. Mój sensor kupowałem w promocji na Bangggod za 5,99$ (ale można spotkać taniej), linki poniżej:
Tradycyjnie już, na github, można znaleźć skrypt do obsługi czujników LYWSD03MMC, a dokładniej tutaj: https://github.com/JsBergbau/MiTemperature2
Do zadziałania całości potrzebujemy w systemie python3, bluez, python3-pip oraz bluepy. Na początek instalacja 3 pierwszych:
sudo apt update && sudo apt install python3 bluez python3-pip
I instalujemy bluepy
pip3 install bluepy
Przechodzimy do folderu scripts/python w domoticzu (cd domoticz/scripts/python/) i klonujemy skrypt do obsługi termometrów Xiaomi:
git clone https://github.com/JsBergbau/MiTemperature2
Potrzebny nam będzie MAC Address naszego termometru, który odczytamy za pomocą znanego już polecenia:
sudo hcitool lescan
Trzecie urządzenie od dołu to mój kwadratowy termometr Xiaomi
No to próba odpalenia odczytów w konsoli. Wchodzimy do folderu ze skryptem (cd MiTemperature2) i wpisujemy:
python3 ./LYWSD03MMC.py -d <MAC ADRES termometru>
Odczyty lecą cały czas, by je zatrzymać, trzeba wcisnąć CTRL+C. Spróbujmy uzyskać jeden odczyt, z dokładnością jednego miejsca po przecinku:
python3 ./LYWSD03MMC.py -d <MAC ADRES termometru> -r -deb -b -c 1
Użyte parametry to kolejno:
Wszystkie powyższe parametry są dokładnie opisane na stronie projektu na githubie https://github.com/JsBergbau/MiTemperature2.
Na początek trzeba dodać w Domoticzu wirtualne urządzenie (czujnik). Wchodzimy w Sprzęt i w typie Dummy (a o nazwie nadanej przez nas) wciskamy Utwórz wirtualne czujniki.
W nowo otwartym oknie podajemy nazwę, która pozwoli nam zlokalizować czujnik i jako typ czujnika ustawiamy Temp & Wilg.
Po utworzeniu najważniejsze – odczytujemy sobie Idx nowo utworzonego czujnika. U mnie jest to 20 (trzecia kolumna).
W folderze domoticz/scripts/python/MiTemperature2 otwieramy do edycji plik sendToDomoticz.py
I wpisujemy Idx naszego czujnika w miejscu idx_temp = “xx” oraz zmieniamy inne wartości wg potrzeb.
No to teraz próba – wpiszmy linijkę komend tak, jakbyśmy mieli ją podać w cronie i zobaczmy czy zadziała:
/usr/bin/python3 /home/pi/domoticz/scripts/python/MiTemperature2/LYWSD03MMC.py -d <MAC ADRES termometru> -r -deb -b -c 1 -call ./sendToDomoticz.py
Jeśli zadziała jak wyżej (dane zostaną przekazane do czujnika w domoticzu), to można linijkę wkleić do crona. Czyli
crontab -e
i wysyłanie danych co 10 minut, czyli całość wygląda jak druga linijka na poniższym screenie:
Na koniec tradycyjnie sudo service cron reload.
Cała konfiguracja czujnika Xiaomi Mijia v2 jest bardzo podobna do wcześniej opisywanej obsługi Xiaomi Mijia v1. Całość opiera się na cyklicznie wywoływanych przez crona skryptach, które wysyłają dane do domoticza. Efektem są dane historyczne w postaci znanych już wykresów:
jak i bieżące odczyty
Co dalej można z tym zrobić? Tradycyjnie możliwości jest wiele. Można uzależnić temperaturę czy wilgotność od włączania lub wyłączania urządzeń – grzejnika, klimatyzatora lub wentylatora np. w łazience, by zmniejszyć wilgotność po kąpieli. Obsługa jest dość prosta, a same czujniki są tanie i wygodne w użyciu.
Mega tanie, bezprzewodowe moduły Internet of Things na dobre zadomowiły się w naszych sieciach. Od…
Pewnie nie każdy posiadacz tytułowej stacji lutowniczej wie, że posiada ona możliwość aktualizacji firmware'u. Producent…
Jakiś czas temu, przeglądając Aliexpress natknąłem się na ciekawy shield do Arduino Nano. Według opisu…
W mailach i komentarzach kilka razy przewijała się prośba o ten wpis. Chodzi o aktualizację…
Dziś tematyka audio, a nawet audiofilska. Uznany wzmacniacz słuchawkowy Lehmann Black Cube Linear o dość…
Tradycyjnie w styczniu, publikuję podsumowanie minionego roku na stronie grylewicz.pl. Poniżej trochę liczb, lista najpopularniejszych…
Zobacz komentarze
Witam, mam problem na RPi B3+ Stretch, nie chce wysłać danych:
Traceback (most recent call last):
File "/home/pi/domoticz/scripts/python/MiTemperature2/./sendToDomoticz.py", line 5, in
import requests
ModuleNotFoundError: No module named 'requests'
Data couln't be send to Callback, retrying...
Ok zrobiłem:
pip install requests
i poszło bez błędu ale nadal nie mam danych w domoticzu?
Dzięki - zadziałało zgodnie z oczekiwaniami, dokładnie tak, jak pisałeś :)
Kilka słów uzupełnienia:
python musi być w wersji minimum 3.7 (u mnie aktualizacja nie chciała iść - musiałem ręcznie...)
w pliku sendToDomoticz.py adres IP serwera należy podać wraz z portem...
jeżeli chcesz podłączyć więcej niż jeden termometr, zrób kilka plików sendToDomoticz.py - np. sendToDomoticz1.py, sendToDomoticz2.py
To rzeczy z którymi musiałem "powalczyć" zanim zadziałało :-)
Mogę prosić o nakierowanie gdzie szukać problemu:
próba odpytania czujnika w konsoli jednym razem przechodzi bez problemu, innym razem kilka razy z rzędu "connection lost" i dopiero po kilku następnych próbach zaskakuje, brak zależności.
Wcześniej z poprzedniego wpisu dodałem czujnik okrągły i działa bezbłędnie. Oba czujniki miałem wcześniej dodane do RPIeasy i też działały.
Wydaje mi się że przez te problemy z połączeniem nie mogę też przesłać pobranych danych (gdy już w końcu się uda) do domoticza (wpisywałem też adres domoticza wraz z portem)
Czujnik kwadratowy, resetowałem też sam czujnik, python w wersji 3.7.3
Zadaj pytanie/opisz problem na stronie projektu https://github.com/JsBergbau/MiTemperature2/issues
Zauważyłem problem polegajacy na obciążeniu procesora.
Po restarcie RBPi3b+ z domoticzem obciążenie procesora wynosi do 5%. Odczyt czujników co 20min.
Po następnych 20 już jest ok 10%, następnie rośnie x2 co odczyt (4 czujniki LYWSD03MMC).
Dodam ze czujniki są odczytywane bez problemów, i wartości w domoticzu aktualizowane (odpada problem z zasięgiem).
No i dochodzi prawie do 100%, co powoduje ze muszę zrestartować malinkę.
Tak jakby sie cos zapętlało, wszystko zrobione zgodnie z instrukcja w tym artykule.
Czy są jakieś pomysły co to może być ?
Zobaczę, czy u mnie też tak to wygląda.
No i problem rozwiązany.
Dotyczy błędów w "bluepy" jak to autor projektu opisuje tutaj:
https://github.com/JsBergbau/MiTemperature2
Wystarczy się wczytać (np. użyć translatora :), i jest tam rozwiązanie:
killall bluepy-helper
W skrypcie jest to zahashowane (#) wiec nie ruszałem skryptu tylko dorzuciłem do crontab, że ma 2min po odczycie "skilować" bluepy. Jak na razie 3 dzień odczyty 4 czujników kwadratowych LYWSD03MMC co 15min działają (oprócz tego co 15min są też czytane 6x czujniki okrągłe LYWSDCGQ) bez restartu.
Obciążenie procesora 5 do 7 %.
Dzięki za info, u mnie tego problemu nie ma, mam 2 czujniki.
zielony jestem,
jak to zrobiles w cronie bo mam ten sam problem co Ty, przy 4 czujnikach
Witam
Mi przy 4 czujnikach co kilka godzin pojawiały się kolejne bluepy-helper . Średnio po dobie miałem już cztery procesy i procesor na 100% przy odpytywaniu czujników co 20 minut. Jako , że też jestem zielony w linuxie samo "odhaszowanie" wyrzucało błedy skryptu tak z pomocą google ;) utworzylem plik .sh z zawartosćią :
#!/bin/bash
killall bluepy-helper
W cronie uruchamia się co godzinę i problem znikł .
Witam,
u mnie tak przygotowany skrypt nie działa.
Zwraca tylko komunikat:
SyntaxError: invalid syntax
Czy macie może jakieś sugestie, jak rozwiązać problem?
Malina 100% jak odpytuje 2 czujniki co 10 minut.