Domoticz #5 – obsługa termometrów Xiaomi Mijia LYWSD03MMC Bluetooth

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.

Czujniki okrągłe LYWSDCGQ kontra kwadratowe 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:

  • bateria AAA / CR2032
  • zakres temperatur 0 – 60ºC / -9,9ºC – 60ºC
  • ekran 1,69″ kwadrat / 1,78″ okrągły

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:

Skrypt do odczytu danych z sensorów Xiaomi Mijia LYWSD03MMC

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:

I instalujemy bluepy

Przechodzimy do folderu scripts/python w domoticzu (cd domoticz/scripts/python/) i klonujemy skrypt do obsługi termometrów Xiaomi:

Potrzebny nam będzie MAC Address naszego termometru, który odczytamy za pomocą znanego już polecenia:

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:

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:

Użyte parametry to kolejno:

  • -d –device – mac adres urządzenia;
  • -r –round – zaokrąglanie pomiaru do jednego miejsca po przecinku
  • -deb –debaunce – pobieranie dokładniejszego wyniku, wymaga parametru -r
  • -b –battery – pobieranie napięcia baterii
  • -c N –count N – gdzie N to liczba naturalna – ilość pomiarów

Wszystkie powyższe parametry są dokładnie opisane na stronie projektu na githubie https://github.com/JsBergbau/MiTemperature2.

Obsługa Xiaomi Mijia LYWSD03MMC przez Domoticza

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:

Jeśli zadziała jak wyżej (dane zostaną przekazane do czujnika w domoticzu), to można linijkę wkleić do crona. Czyli

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.

Podsumowanie

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.

Wpis “Domoticz #5 – obsługa termometrów Xiaomi Mijia LYWSD03MMC Bluetooth” komentowano 10 razy

  1. 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…

  2. Ok zrobiłem:
    pip install requests
    i poszło bez błędu ale nadal nie mam danych w domoticzu?

  3. Dzięki – zadziałało zgodnie z oczekiwaniami, dokładnie tak, jak pisałeś 🙂

  4. 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 🙂

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

  6. 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ć ?

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

Leave a Reply

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.