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:
- https://bit.ly/2y2bNcm – Xiaomi Mijia w Banggood;
- https://bit.ly/2W6BjFj – LYWSD03MMC na Gearbest
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.
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.
Witam, A msz gotową linijkę do crona ?
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
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.
U mnie jednak też występował problem z zawieszaniem się usługi. Ja odpalam skrypt raz na dobę i to wystarcza. Odpytuję 2 czujniki.
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ć?
Dodajesz do crona kolejną linijkę z mac adresem drugiego czujnika
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
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
Artur, musisz plik “sendToDomoticz2.py” ustawić na wykonywalny:
komenda:
chmod +x sendToDomoticz2.py
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
Wyraziłem się trochę nieprecyzyjnie, Domoticz “widzi czujnik” ale tempeartura jest cały czas 0 i wiligotność 50%
Plik sendToDomoticz.py ma prawa do wykonywania? Próbować jako adres podać po prostu 127.0.0.1 tak jak jest to u mnie?
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.
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ć?
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¶m=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¶m=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.
Rozumiem, że łączysz się do Domoticza na adresie 192.168.1.19 przez przeglądarkę i wtedy wszystko działa? Panel (strona www się wyświetla?
Zamiast adresu 192.168.1.19 próbowałeś 127.0.0.1 jak pisałem wcześniej?
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ć?
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.
Masz włączone zabezpieczenie www w domoticzu? (podanie hasła by wyświetliła się strona)?
Wojtek, dzięki za podpowiedź. Zadziałało! Wywaliłem hasło i jest! Ciekawe czemu z hasłem nie działa???
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
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ć.
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¶m=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¶m=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ć?
Dzień dobry.
Mam jedno pytanie jak dodać więcej niż jeden taki czujnik do domoticza?
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
dzięki za podpowiedz. przyczyna problemu zlokalizowana. problem stanowiły uprawnienia do pliku prawo do uruchamiania muszą mieć wszyscy
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?.
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 🙁
Skopiuj linijkę z crona tutaj.
*/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.
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 🙂
A czy ktoś dodawał ten czujnik w domoticzu postawionym na win10? Cos się zmieni?
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
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
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ę)
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 !
Bardzo przydatne, wszystko działa bez zarzutu.
Super artykuł,
dziękuje 🙂
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ę.
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.
Dzięki za cenną wskazówkę.
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.
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?
To efekt aktualizacji Domoticza do wersji 2023.1 – też szukam rozwiązania…
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ę…
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
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¶m=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.
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.