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:

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:

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

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

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.

Możesz również polubić…

62 komentarze

  1. typer08 pisze:

    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. typer08 pisze:

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

  3. PięknyRoman pisze:

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

  4. Piotr/eK pisze:

    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. Adam pisze:

    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. Karol pisze:

    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. Karol pisze:

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

  8. Piotrek pisze:

    zielony jestem,
    jak to zrobiles w cronie bo mam ten sam problem co Ty, przy 4 czujnikach

  9. Grzegorz pisze:

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

  10. Aleksander Stefani pisze:

    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.

  11. anton pisze:

    Witam, A msz gotową linijkę do crona ?

  12. Grzegorz pisze:

    Utworzyc plik ze skryptem
    Zmienic prawa do wykonywania pliku

    chmod + x kill.sh

    ja mam w cronie tak
    4-59/20 * * * * /home/pi/domoticz/scripts/python/MiTemperature2/kill.sh
    odzczytuje 3 czujniki co 20 minut z minutowa przerwa pomiedzy czujnikami wiec kill.sh dziala w 4 minucie i co kolejne 20 minut ( polecam stronke https://crontab.guru/ )

    Oczywiście ścieżka w cronie tam gdzie jest skrypt

  13. Aleksander Stefani pisze:

    Dziękuję za wskazówki.

    Prawa do wykonywania przydzielone.
    Wzorowałem się na tych wpisach z crona, które już były i dotyczyły odpytywania czujników.
    Zmieniłem teraz jak kolega Grzegorz podpowiada tylko ze ścieżką gdzie mam plik skryptu:
    4-59/20 * * * * /home/pi/killblu.sh

    Zobaczymy czy zadziała.

    • Wojtek pisze:

      U mnie jednak też występował problem z zawieszaniem się usługi. Ja odpalam skrypt raz na dobę i to wystarcza. Odpytuję 2 czujniki.

  14. Grzegorz Najder pisze:

    Jestem zielony w temacie programowania, jedynie tutoriale krok po kroku mi wchodza przewaznie. Udało mi się to zrobić z jednym termometrem ale więcej to nie za bardzo wiem jak. Piotr/ek pisał żeby zrobić następne pliki sendToDomoticz.py ale co dalej to już nie kumam . Mógłby ktoś coś bliżej podpowiedzieć?

  15. Grzegorz pisze:

    w cronie tyle polecen ile chcesz czujników odpytać
    Tak u mnie wyglądaja polecenia w cronie

    /usr/bin/python3 /home/pi/domoticz/scripts/python/MiTemperature2/LYWSD03MMC.py -d A4:C1:38:0C:F5:90 -r -deb -b -c 1 -call ./sendToDomoticz1.py

    /usr/bin/python3 /home/pi/domoticz/scripts/python/MiTemperature2/LYWSD03MMC.py -d A4:C1:38:66:72:74 -r -deb -b -c 1 -call ./sendToDomoticz2.py

    itd…..

    Każdy czujnik ma swój plik sendToDomoticz(1,2, itd.. ).py bo wysyłasz dane z konkretnego czujnika do konkretnego idx nadanego w domoticzu

  16. Artur pisze:

    Witam
    /home/pi/domoticz/scripts/python/MiTemperature2/./sendToDomoticz2.py sensorname,temperature,humidity,voltage,batteryLevel,timestamp A4:C1:38:FA:9B:94 24.6 44 3.037 94 1609017262
    sh: 1: /home/pi/domoticz/scripts/python/MiTemperature2/./sendToDomoticz2.py: Permission denied
    Data couln’t be send to Callback, retrying…
    może ktoś pomóc w temacie? mam stworzony drugi plik w nim inny idx jak w domoticzu, w cronie dodatkowa linijka z nowym MAC i niestety coś takiego

  17. Wojtas pisze:

    Artur, musisz plik “sendToDomoticz2.py” ustawić na wykonywalny:
    komenda:
    chmod +x sendToDomoticz2.py

  18. Łukasz Zieliński pisze:

    Hej,

    Próbuję z ta instrukcją i utknąłem na wysyłaniu danych do domoticza.

    Po komendzie:
    /usr/bin/python3 /home/pi/domoticz/scripts/python/MiTemperature2/LYWSD03MMC.py -d -r -deb -b -c 1 -call ./sendToDomoticz.py

    Dostaje odpowiedź jak na Screenie ale dane ne są odbierane w Domoticzu.Tam czujnik nie jest zasilany danymi.

    pi@DOMOTICZ:~/domoticz/scripts/python/MiTemperature2 $ /usr/bin/python3 /home/pi/domoticz/sc ripts/python/MiTemperature2/LYWSD03MMC.py -d A4:C1:38:C5:69:34 -r -deb -b -c 1 -call ./sendT oDomoticz.py
    Trying to connect to A4:C1:38:C5:69:34
    Temperature: 20.5
    Humidity: 42
    Battery voltage: 3.111 V
    Battery level: 100
    1 measurements collected. Exiting in a moment.
    /home/pi/domoticz/scripts/python/MiTemperature2/./sendToDomoticz.py sensorname,temperature,h umidity,voltage,batteryLevel,timestamp A4:C1:38:C5:69:34 20.5 42 3.111 100 1611483064

    Wiecie o co może chodzić? W sendToDomoticz.py ustawiłem adres domoticza razem z portem, tak jak któryś z kolegów tu pisał.

    IDX mam podane

  19. Łukasz Zieliński pisze:

    Wyraziłem się trochę nieprecyzyjnie, Domoticz “widzi czujnik” ale tempeartura jest cały czas 0 i wiligotność 50%

    • Wojtek pisze:

      Plik sendToDomoticz.py ma prawa do wykonywania? Próbować jako adres podać po prostu 127.0.0.1 tak jak jest to u mnie?

  20. Łukasz Zieliński pisze:

    Wprowadziłem komendę chmod +x sendToDomoticz.py nie dostałem, żadnego komunikatu, więc zakładam, że prawa do wykonywania powinny być przyznane

    Niestety z samym adresem Domoticza bez portu, też nie działa.

  21. Łukasz Zieliński pisze:

    Teraz wprowadzam /usr/bin/python3 /home/pi/domoticz/scripts/python/MiTemperature2/LYWSD03MMC.py -d -r -deb -b -c 1 -call ./sendToDomoticz.py ale czujnik w domoticzu jest na czerwono i ostatnia aktywność jest z przed dwóch dni. Czyli jakby Domoticz nie dostaje danych z czujnika. Macie pomysł, co to może być?

  22. Łukasz Zieliński pisze:

    Trying to connect to A4:C1:38:C5:69:34
    Temperature: 20.5
    Humidity: 38
    Battery voltage: 2.929 V
    Battery level: 83
    1 measurements collected. Exiting in a moment.
    /home/pi/domoticz/scripts/python/MiTemperature2/./sendToDomoticz.py sensorname,temperature,humidity,voltage,batteryLevel,timestamp A4:C1:38:C5:69:34 20.5 38 2.929 83 1611699862
    Traceback (most recent call last):
    File “/usr/lib/python3/dist-packages/urllib3/connection.py”, line 159, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw)
    File “/usr/lib/python3/dist-packages/urllib3/util/connection.py”, line 80, in create_connection
    raise err
    File “/usr/lib/python3/dist-packages/urllib3/util/connection.py”, line 70, in create_connection
    sock.connect(sa)
    ConnectionRefusedError: [Errno 111] Connection refused

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 600, in urlopen
    chunked=chunked)
    File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 354, in _make_request
    conn.request(method, url, **httplib_request_kw)
    File “/usr/lib/python3.7/http/client.py”, line 1244, in request
    self._send_request(method, url, body, headers, encode_chunked)
    File “/usr/lib/python3.7/http/client.py”, line 1290, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
    File “/usr/lib/python3.7/http/client.py”, line 1239, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
    File “/usr/lib/python3.7/http/client.py”, line 1026, in _send_output
    self.send(msg)
    File “/usr/lib/python3.7/http/client.py”, line 966, in send
    self.connect()
    File “/usr/lib/python3/dist-packages/urllib3/connection.py”, line 181, in connect
    conn = self._new_conn()
    File “/usr/lib/python3/dist-packages/urllib3/connection.py”, line 168, in _new_conn
    self, “Failed to establish a new connection: %s” % e)
    urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x75ff1650>: Failed to establish a new connection: [Errno 111] Connection refused

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “/usr/lib/python3/dist-packages/requests/adapters.py”, line 449, in send
    timeout=timeout
    File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 638, in urlopen
    _stacktrace=sys.exc_info()[2])
    File “/usr/lib/python3/dist-packages/urllib3/util/retry.py”, line 398, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
    urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=’192.168.1.19′, port=80): Max retries exceeded with url: /json.htm?type=command&param=udevice&idx=67&nvalue=0&svalue=20.5;38;2&battery=83 (Caused by NewConnectionError(‘<urllib3.connection.HTTPConnection object at 0x75ff1650>: Failed to establish a new connection: [Errno 111] Connection refused’))

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “/home/pi/domoticz/scripts/python/MiTemperature2/./sendToDomoticz.py”, line 37, in
    + val_bat
    File “/usr/lib/python3/dist-packages/requests/api.py”, line 75, in get
    return request(‘get’, url, params=params, **kwargs)
    File “/usr/lib/python3/dist-packages/requests/api.py”, line 60, in request
    return session.request(method=method, url=url, **kwargs)
    File “/usr/lib/python3/dist-packages/requests/sessions.py”, line 533, in request
    resp = self.send(prep, **send_kwargs)
    File “/usr/lib/python3/dist-packages/requests/sessions.py”, line 646, in send
    r = adapter.send(request, **kwargs)
    File “/usr/lib/python3/dist-packages/requests/adapters.py”, line 516, in send
    raise ConnectionError(e, request=request)
    requests.exceptions.ConnectionError: HTTPConnectionPool(host=’192.168.1.19′, port=80): Max retries exceeded with url: /json.htm?type=command&param=udevice&idx=67&nvalue=0&svalue=20.5;38;2&battery=83 (Caused by NewConnectionError(‘<urllib3.connection.HTTPConnection object at 0x75ff1650>: Failed to establish a new connection: [Errno 111] Connection refused’))
    Data couln’t be send to Callback, retrying…

    Taki komunikat dostaje jak nie mam wskazanego portu przy adresie Domoticza.

  23. Kamil pisze:

    Wszystko działa jak należy do momentu aż włącze zabezpeczenie WWW w opcjach
    wtedy domoticz nie przyjmuje wysyłanych danych co można z tym zrobić?

  24. Łukasz Zieliński pisze:

    Hej, walczyłem trochę ale nie mogę tego ogarnąć. Domoticz przez przeglądarkę działa , 127.0.0.1 nie działa, dostaje komunikaty podobne do takich gdy nie podam portu po adresie Doomoticza. Zastanawiam się nad zakupem bramki BLE aby mieć odczyty z tych termometrów.

  25. Łukasz Zieliński pisze:

    Wojtek, dzięki za podpowiedź. Zadziałało! Wywaliłem hasło i jest! Ciekawe czemu z hasłem nie działa???

    • Wojtek pisze:

      Moduł przesyłający dane łączy się tak samo jak Ty do przeglądarki. Ty wpisujesz hasło i masz dostęp, moduł nie i dane nie są wysłane. Masz w ustawienia system coś takiego jak “Sieci lokalne (bez hasła/loginu)” tam możesz dopisać zaufane sieci, które będą miały dostęp do domoticza bez loginu i hasła

  26. Paweł Kruszewski pisze:

    Jeśli macie pozabezpieczane dostępy to nie dziwcie się, że bez podawania haseł Wam nie działa 🙂

    Zamienicie:
    domoticzserver = “192.168.1.36”

    Na:
    domoticzserver = “login:hasł[email protected]” i wszystko będzie śmigać.

  27. Macias pisze:

    Witam, mam podobny problem. Przy zaciągnięciu miji do domoticzna wychodzi mi coś takiego:
    Traceback (most recent call last):
    File “/usr/lib/python3/dist-packages/urllib3/connection.py”, line 159, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw)
    File “/usr/lib/python3/dist-packages/urllib3/util/connection.py”, line 80, in create_connection
    raise err
    File “/usr/lib/python3/dist-packages/urllib3/util/connection.py”, line 70, in create_connection
    sock.connect(sa)
    TimeoutError: [Errno 110] Connection timed out

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 600, in urlopen
    chunked=chunked)
    File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 354, in _make_request
    conn.request(method, url, **httplib_request_kw)
    File “/usr/lib/python3.7/http/client.py”, line 1244, in request
    self._send_request(method, url, body, headers, encode_chunked)
    File “/usr/lib/python3.7/http/client.py”, line 1290, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
    File “/usr/lib/python3.7/http/client.py”, line 1239, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
    File “/usr/lib/python3.7/http/client.py”, line 1026, in _send_output
    self.send(msg)
    File “/usr/lib/python3.7/http/client.py”, line 966, in send
    self.connect()
    File “/usr/lib/python3/dist-packages/urllib3/connection.py”, line 181, in connect
    conn = self._new_conn()
    File “/usr/lib/python3/dist-packages/urllib3/connection.py”, line 168, in _new_conn
    self, “Failed to establish a new connection: %s” % e)
    urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0xb6195bf0>: Failed to establish a new connection: [Errno 110] Connection timed out

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “/usr/lib/python3/dist-packages/requests/adapters.py”, line 449, in send
    timeout=timeout
    File “/usr/lib/python3/dist-packages/urllib3/connectionpool.py”, line 638, in urlopen
    _stacktrace=sys.exc_info()[2])
    File “/usr/lib/python3/dist-packages/urllib3/util/retry.py”, line 398, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
    urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=’192.168.1.36′, port=80): Max retries exceeded with url: /json.htm?type=command&param=udevice&idx=2&nvalue=0&svalue=24.3;37;2&battery=78 (Caused by NewConnectionError(‘<urllib3.connection.HTTPConnection object at 0xb6195bf0>: Failed to establish a new connection: [Errno 110] Connection timed out’))

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “/home/pi/domoticz/scripts/python/MiTemperature2/./sendToDomoticz.py”, line 37, in
    + val_bat
    File “/usr/lib/python3/dist-packages/requests/api.py”, line 75, in get
    return request(‘get’, url, params=params, **kwargs)
    File “/usr/lib/python3/dist-packages/requests/api.py”, line 60, in request
    return session.request(method=method, url=url, **kwargs)
    File “/usr/lib/python3/dist-packages/requests/sessions.py”, line 533, in request
    resp = self.send(prep, **send_kwargs)
    File “/usr/lib/python3/dist-packages/requests/sessions.py”, line 646, in send
    r = adapter.send(request, **kwargs)
    File “/usr/lib/python3/dist-packages/requests/adapters.py”, line 516, in send
    raise ConnectionError(e, request=request)
    requests.exceptions.ConnectionError: HTTPConnectionPool(host=’192.168.1.36′, port=80): Max retries exceeded with url: /json.htm?type=command&param=udevice&idx=2&nvalue=0&svalue=24.3;37;2&battery=78 (Caused by NewConnectionError(‘<urllib3.connection.HTTPConnection object at 0xb6195bf0>: Failed to establish a new connection: [Errno 110] Connection timed out’))

    Co to może być?

  28. Tomasz pisze:

    Dzień dobry.
    Mam jedno pytanie jak dodać więcej niż jeden taki czujnik do domoticza?

    • Wojtek pisze:

      Każdy czujnik to plik sendToDomoticz.py z inną nazwą. W domoticzu dodajesz kolejne wirtualne czujniki z innym idx, cronem odpalasz każdy z tych plików sendToDomoticz.py

  29. Tomasz pisze:

    dzięki za podpowiedz. przyczyna problemu zlokalizowana. problem stanowiły uprawnienia do pliku prawo do uruchamiania muszą mieć wszyscy

  30. Dudi pisze:

    Witam Serdecznie
    Potrzebuje porady. W domu posiadam centralne ogrzewanie i za pomocą głowic grzejnikowych sterowanych po przez termostaty Domoticza steruje temperaturą w pokojach. Problem w tym, że nie do wszystkich pokoi mogę dojść kabelkami aby czytać temperatury we wszystkich pokojach. Opisywane w tym artykule czujniczki bezprzewodowe są idealne do zamontowania w pokojach, ale posiadają zintegowany czujnik wilgotności i widzę, że nie nadają się do sterowania termostatami. Kupiłem czujnik zigbee Xiaomi i znów ten sam problem zintegrowany czujnik wilgotności. Czy nie ma jakiegoś skryptu/sposobu który umożliwiałby działanie termostatu z tymi zintegrowanymi czujnikami?.

  31. Tomasz Kosmalski pisze:

    Witam
    Dziękuje serdecznie za poradnik. Wszystko odpaliło praktycznie od “strzała” poza jednym małym problemem, z którym nie umiem sobie poradzić. Mianowicie mam problem z pracą w harmonogramie cron. Nie chce mi to poprawnie działać. Skrypt uruchomiony z wiersza poleceń aktualizuje na panelu domoticza, lecz z crona nic się nie zmienia. Pomocy 🙁

  32. Tomasz pisze:

    */20 * * * * /usr/bin/python3 /home/pi/domoticz/scripts/python/mijia-sensors-domoticz_mijia.py >/dev/null 2>&1
    */5 * * * * /usr/bin/python3 /home/pi/domoticz/scripts/python/MiTemperature2/LYWSD03MMC.py -d A4:C1:38:8A:29:DF -r -deb -b -c 1 -call ./sendToDomoticz.py >/dev/null 2>&1 SD03MMC.py -d A4:C1:38:8A:29:DF -r -deb -b -c 1 -call ./sendToDomoticz.py >/dev/ null 2>&1
    */5 * * * * /usr/bin/python3 /home/pi/domoticz/scripts/python/MiTemperature2/LYWSD03MMC1.py -d A4:C1:38:74:D8:A5 -r -deb -b -c 1 -call ./sendToDomoticz1.py >/dev/null 2>&1

    z takimi wpisami działają oba czujniki. Jak się okazało problem stanowiły uprawnienia do pliku LYWSD03MMC1. Trzeba nadać im uprawnienia chmod 777 inaczej nie zadziała.

  33. RuncoR pisze:

    Czy spotkał się ktoś ktoś z namnażaniem się procesu “python” a nie “bluepy-helper” ?
    Oczywiście chodzi o wzrost użycia procesora do 100%.
    Aktualnie dla testów zakończyłem wszystkie procesy “phyton3” ale mam obawy, że ta operacja może mieć negatywne skutki.
    Jeśli się mylę i nie ma problemu w “kill’owaniu” pythona to nie było tematy 🙂 W cronie ustawię sobie skrypt i tyle w temacie 🙂

  34. Maciej pisze:

    A czy ktoś dodawał ten czujnik w domoticzu postawionym na win10? Cos się zmieni?

  35. Baltrek pisze:

    U mnie coś nie chce działać praktycznie od początku

    pi@raspberrypi:~/domoticz/scripts/python/MiTemperature2 $ python3 ./LYWSD03MMC.py -d A4:C1:38:75:99:AA

    MiTemperature2 / ATC Thermometer version 3.1

    Trying to connect to A4:C1:38:75:99:AA
    Connection lost
    Waiting…
    Trying to connect to A4:C1:38:75:99:AA
    Connection lost
    Waiting…

    I tak cały czas. Pythona sprawdzałem jest 3.7.3. Oczywiście trzy Mac adres trzech termometrów się pojawiają. Jakieś pomysły

  36. baltrek pisze:

    dobra, w sumie nie wiem czemu się nie łączyło więc za bardzo nikomu nie pomogę ale pokombinowałem z chmodem na plikach ja wyżej pisane było i możliwe że to to

  37. KK pisze:

    Co do wzrostu obciążenia procesora na 100%, to w mojej opinii jest to spowodowane nieudanymi próbami połączenia z czujnikami.

    Kiedy puści się na konsoli linijkę którą wpisujemy do crona, żeby pobrało jeden odczyt z czujnika, skrypt działa aż do momentu gdy taki odczyt uzyska, z racji że wyjście programu jest przekierowane na dev/null to program działa w pętli aż uzyska odczyt. A co jak nie uzyska? Działa w “nieskończoność”.

    Mam problem z zasięgiem BT w swoim mieszkaniu (grube ściany) i często gubi mi odczyty, kill-owanie bluepy-helper zamykało te procesy tylko na chwilę, po kilku sekundach się “odradzały”

    Rozwiązanie to killować procesy “python3”, zaraz po odczytach z termometrów.

    Aktualnie w cronie skrypty odczytujące temp wywołuje przez ( */10 * * * *) a skrypt który ubija phyton3 przez (3-59/10 * * * *)

    Odczytuje Tep. co 10 minut i 3 min później ubija pozostałe procesy phytona (które nie mogą odczytać statusu).
    Daje 3 minuty na odczyt, bo czasami złapie po kilkunastu próbach.

    Strasznie słaby zasięg ma malinka i te termometry od xiaomi, nie chce mi złapać odczytu na odległości 6m i dwie ścianki działowe jak i również na odległości 3m i jedna nośna.

    W laptopie HP 450 G2 jak włączę BT, to łapie mi zasięg z samochodów które przejeżdżają pod blokiem (pod samym blokiem mam światła, więc samochody zatrzymują się na dłuższą chwilę)

  38. kpfds pisze:

    Też z tym walczyłem…
    I zrobiłem coś zupełnie innego.
    Zaprzagłem w to układ ESP32, na którym stworzyłem bramkę BLE -> WiFi w esphome.

    Postawiłem sobie takie 3 bramki, w rożnych miejscach domu i czyta wszystkie czujniki BLE(14 szt).
    Mam 8 okrągłych i 6 kwadratowych 😉
    Te bramki melduja dane do systemu przez MQTT (co prawda aktualnie HomeAssistant ale to bez znaczenia, domoticzem tez czytałem)

    Co stało za taka ideą ?
    Decentralizacja systemu !

  39. zoltar pisze:

    Bardzo przydatne, wszystko działa bez zarzutu.
    Super artykuł,
    dziękuje 🙂

  40. Paweł pisze:

    Witam Panie Wojtku usiłuje uruchomić LYWSD03MMC z rasberry pi2 + moduł bluetooth USB, niestety napotkałem na problem z komendą lescan, wyrzuca mi błąd “Set scan parameters failed: Input/output error’, dużo osób o tym pisze ale nie znalazłem konkretnego rozwiązania. Komenda hcitool scan działa, lsusb widzi moduł, /etc/init.d/bluetooth status wyświetla status aktywny, proszę o jakąś wskazówkę.

  41. Paweł pisze:

    Witam chyba znalazłem przyczynę, może komuś zaoszczędzi to parę godzin, używałem adaptera esperanza EA159 obsługuje on standard tylko 2.0, do Bluetooth Low Energy (BLE) niezbędny jest co najmniej 4.0. Po zmianie adaptera komenda lescan działa.

  42. Janusz pisze:

    Czy zapis “domoticzserver = “login:hasł[email protected]” i wszystko będzie śmigać.” jest właściwy? Bez hasła na WWW działa, z hasłem nie ma szans.

  43. Piotrek pisze:

    Cześć. Proszę, pomóżcie zlokalizować problem.
    Domoticz nie odbiera wskazań termometrów. Wszystko działało jeszcze tydzień temu. Restart malinki nie pomógł.
    Domoticz ma wklepane urządzenia. Gdy ręcznie uruchamiam komendę pobrania wskazań termometrów, to widzę aktualne odczyty, ale domoticz ich nie pobiera.
    Wiecie może, w czym tkwi problem?

  44. Kiso pisze:

    To efekt aktualizacji Domoticza do wersji 2023.1 – też szukam rozwiązania…

  45. Kiso pisze:

    OK, ja znalazłem rozwiązanie. W sumie nic nowego. W ustawieniach Domoticza, zakładce Security, w sekcji Trusted Networks wycieło mi loopbacka. Dałbym sobie paznokcie na krótko obciąć, że wpisany był… Wpis “127.0.0.1;192.168.0.*” załatwił sprawę…

  46. Mariusz pisze:

    Jeżeli macie ponowny problem z odczytem danych z czujnika, winę ponosi sendToDomoticz.py
    Zamienicie:
    domoticzserver = “login:hasł[email protected]

    Na:
    domoticzserver = “192.168.1.36”

    U mnie śmiga

  47. Marcin pisze:

    Mam taki problem, że dane są niby wysyłane ale domoticz ich nie odbiera. Link bezpośrednio w przeglądarce odbiera ale po wylogowaniu już nie. Nawet z hasłem i loginem w linku nie odbiera a skrypty zwraca to: Trying to connect to A4:C1:38:7F:85:E0
    Temperature: 25.1
    Humidity: 58
    Battery voltage: 2.615 V
    Battery level: 52
    1 measurements collected. Exiting in a moment.
    /home/Pi/domoticz/scripts/python/MiTemperature2/./sendToDomoticz2.py sensorname,temperature,humidity,voltage,batteryLevel,timestamp A4:C1:38:7F:85:E0 25.1 58 2.615 52 1722644206
    Sending to Domoticz:
    http://192.178.1.56:8080/json.htm?type=command&param=udevice&idx=1&nvalue=0&svalue=25.1;58;1&battery=52
    Response from Domoticz: 401 Unauthorized

    401 Unauthorized

    Error: Received non-200 HTTP status code.

  48. Marcin pisze:

    Już rozgromiłem problem… jak zwykle sam 🙁 dobrze ,że przyświeciliście mi lampką :).
    wystarczy podać akceptowane bez portu samo IP w Ustawienia/sekurity i wlewym dolnym rogu wpisać IP i zapisać.

    Trusted Networks (no username/password):
    Sieci:
    127.0.0.1

    (Oddzielone średnikami. Na przykład: 127.0.0.;192.168.0.)
    Visit this Wiki page for more information about how to setup Security.

  1. 20.06.2020

    […] Osobom zainteresowanym uruchomieniem czujników Xiaomi Mijia LYWSD03MMC polecam artykuł na blogu Wojciecha Grylewicza: https://grylewicz.pl/domoticz-5-obsluga-termometrow-xiaomi-mijia-lywsd03mmc-bluetooth/ […]

Leave a Reply

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