Integracja czujnikó...
 
Powiadomienia
Wyczyść wszystko

Integracja czujników temperatury XIAOMI MI Temperature & Humidity z Domoticzem przez Bluetooth

11 Wpisów
5 Użytkownicy
2 Reactions
6,616 Wyświetleń
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
Autor tematu
 

Cześć,

Ogólnie na forum krąży kilka wątków związanych z czujnikami temperatury i wilgotności od Xiaomi, ale jako początkujący miałem sporą zagwozdkę by sparować je z Domoticzem. Dopiero po zakupie czujników dowiedziałem się, że potrzebna (jak się okazuje wcale nie) jest bramka BLE (Bluetooth) aby móc je sparować. Oczy na poszukiwania alternatywy otworzył mi @mirmil99 podsyłając opisane poniżej metody, dziękuję. Nie udało mi się z pełnym sukcesem wykonać żadnej z nich(!) Ten wątek uważam za dobre miejsce do podzielenia się opisem jeśli komuś z Was udało się zintegrować to przy pomocy opisanych skryptów.

http://cezarowy.blogspot.com/2017/11/xiaomi-mi-flora-i-ogolnie-ble.html

https://github.com/pFenners/mijia-sensor-domoticz

 

Na szczęście znalazłem jedno bardzo proste rozwiązanie - RPI Easy. Wzorowane na ESP Easy oprogramowanie dedykowane dla Raspberry, dzięki któremu można budować multisensory. Liczba obsługiwanych urządzeń dobija już do setki + można pracować na GPIO. Zainstalowałem to na Raspberry Pi 4B, na tym samym na którym mam postawiony Domoticz.

Źródło tutaj:  https://github.com/enesbcs/rpieasy

Nie wiem czy to jedyne słuszna i dobra droga, ale w skrócie napisze jak to możecie zrobić u siebie. Instalacja sprowadza się do wpisania 5 komend:

sudo apt install python3-pip screen alsa-utils wireless-tools wpasupplicant zip unzip git
git clone  https://github.com/enesbcs/rpieasy.git 
cd rpieasy
sudo pip3 install jsonpickle
sudo ./RPIEasy.py


W Domoticzu tworzymy urządzenie typu Dummy i na jego bazie dodajemy wirtualny czujnik temperatury i wilgotności, lub samej temperatury (z samą wilgotnością jeszcze nie umiałem sobie poradzić).

Po wszystkim wpisujemy adresIP(maliny):80 w przeglądarce i pojawia nam się konfiguracja RPI Easy. Wszystkie ustawienia konfiguracyjne u mnie były już automatycznie wypełnione i jedyne co musiałem wprowadzić to a) urządzenie (czujnik Xiaomi) - oprogramowanie samo wykrywa adres MAC urządzenia bluetooth, oraz b) kontroler (adres i port Domoticza) jak na załączonym screenie. Można wybrać rożne protokoły komunikacji... 

Całość działa, ale z zasięgiem Bluetooth jest słabo. Jakie są Wasze opinie na ten temat? Opłacałoby się stawiać tego typu bramki np. na Raspberry Pi Zero, czy lepiej inwestować w dedykowane bramki od Xiaomi. Czy protokół Zigbee ma lepszy zasięg niż BLE? A może macie jakieś inne ładne tanie i estetyczne czujniki temperatury, które mógłbym wykorzystać w domu bez zmartwienia o zasięg...? Wszelkie komentarze mile widziane.

 

rpieasy
 
Dodane : 31/12/2019 6:35 pm
gothpl reacted
 iot.
(@iot)
Wpisów: 18
Praktykant
 

Mnie się udało modyfikując program C i wynik ogarniać bashem w cronie, w moim przypadku wysyłam dane przez http curlem do OpenHABa ale można pewnie wysłac do Domoticza i HA również.

 
Dodane : 17/03/2020 10:49 pm
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
Autor tematu
 

Cześć,

po kilku dobrych miesiącach użytkowania muszę przyznać, że rozwiązanie z rpiEasy jest mało stabilne do odczytu temperatury. Chciałbym spróbować tej metody z Blogu Cezara z pierwszego postu.

Wykonuję wszystko krok po kroku i próbuje wykonać modyfikacje pliku konfiguracyjnego dla Mi Flora (tak by dopasować go do MI Temperature & Humidyty - na podstawie tego gotowego kodu z https://github.com/pFenners/mijia-sensor-domoticz ).

Uruchamiam skrypt, teoretycznie powinienem dostać jakiś odczyt, niestety wyskakuje mi coś w rodzaju błędu kodowania phytona.

pi@smarticz:~ $ sudo /usr/bin/python3 /home/pi/domoticz/scripts/python/miflora/domoticz.py
/home/pi/domoticz/scripts/python/miflora/domoticz.py:25: DeprecationWarning: encodestring() is a deprecated alias since 3.1, use encodebytes()
base64string = base64.encodestring(('%s:%s' % (domoticzusername, domoticzpassword)).encode()).decode().replace('\n', '')

 

Czy ktoś się orientuje, mógłby pomóc, podpowiedzieć w czym rzecz?

 
Dodane : 25/10/2020 9:20 pm
(@michal_m)
Wpisów: 52
Kontrybutor
 

@bartolomeo Na szybko - wygląda na to że linijka 25 kodu (base64string = base64.encodestring(('%s:%s' % (domoticzusername, domoticzpassword)).encode()).decode().replace('\n', '')) posiada zapis (funkcję) niezgodną z Twoją wersją Pythona (co sugeruje info "use encodebytes() base64string = base64.encodestring(('%s:%s' % (domoticzusername, domoticzpassword)).encode()).decode().replace('\n', ''))

Kwestia albo poprawienia zapisu w tej 25 linijce wg podanego błędu (może już próbowałeś - jaki skutek?)  albo sprawdzenia, która wersja Pythona jest "domyślna" na Twoim R-Pi-4. Niestety Python szybko ewoluuje i kolejne wersje niekoniecznie są wstecznie kompatybilne z poprzednimi. To czasami stwarza konieczność albo wywoływania konkretnego pythona (dostosowanie do kodu) albo dostosowania kodu do wersji pythona na maszynie, z której jest uruchamiany.

 

 
Dodane : 26/10/2020 4:42 pm
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
Autor tematu
 

Dziękuję za zainteresowanie tematem. Zupełnie się na tym nie znam, ale jestem w stanie w miarę szybko złapać jak ktoś podpowie 🙂 Takie działanie na czuja to średnia droga.

python --version

Odpowiada, że korzystam z wersji 2.7.16 (jak właśnie doczytałem domyślny dla Ubuntu), natomiast

python3 --version

mówi, że jest dostępna wersja Python 3.7.3. Zmieniłem domyślną wersję poprzez alias na tę wyższą, ale błąd pozostaje ten sam.

Ciężko mi cokolwiek dalej wnioskować jak nie wiem co się dzieje konkretnie w tym skrypcie... :/.

Tu jest podobny wątek i niby rozwiązany, ale nie umiem tego zastosować w moim przypadku.

 

 

 
Dodane : 26/10/2020 10:46 pm
(@michal_m)
Wpisów: 52
Kontrybutor
 

@bartolomeo - wrzuć proszę skrypt /miflora/domoticz.py - zobaczymy co w nim siedzi, niestety nie używam tego czujnika ani skryptów ale zobaczymy

 

skrypt uruchamiasz, zapewne jak w instrukcji do niego, poprzez crona:

"0 0,12 * * * /usr/bin/python3 /home/pi/domoticz/scripts/python/miflora/domoticz.py" - co oznacza, że dla tego skryptu używana jest  wersja python3

są 2 możliwości:

1) uruchom skrypt w taki sposób (z linijki):

/usr/bin/python /home/pi/domoticz/scripts/python/miflora/domoticz.py - czyli aby uruchomić w wersji 2.x i daj znac czy pójdzie - jak wyrzuci błędy to prześlij

 

2) zmień skrypt zgodnie z sugestią ze "stackoverflow"

otwórz skrypt np. "nano /miflora/domoticz.py" i w linijce 25 zmień zapis tak jak sugeruje wyświetlany błąd lub stackoverflow

 

Podeślij co wyszło

 

 
Dodane : 27/10/2020 12:03 pm
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
Autor tematu
 

Cześć,

Nie uruchamiam jeszcze z crona tylko póki co ręcznie tak jak w punkcie 1). W każdym przypadku jest ten sam błąd. I tak jak pisałem w poprzednim poście nie wiem jak powinienem to poprawić.

Pomyślałem, że może te moje modyfikacje nie są do końca udane, więc użyłem dokładnie tego gotowego zasobu od pFenners w całości. Kod zatem wyglądą tak: https://github.com/pFenners/mijia-sensor-domoticz/blob/master/domoticz_mijia.py

A próby uruchomienia skrypty prezentują dokładnie taki sam błąd w linii 23:

pi@smarticz:~ $ python --version
Python 2.7.16
pi@smarticz:~ $
pi@smarticz:~ $ alias python=python3
pi@smarticz:~ $ python --version
Python 3.7.3
pi@smarticz:~ $ sudo /usr/bin/python3 /home/pi/domoticz/scripts/python//mijia-sensor-domoticz/domoticz_mijia.py
/home/pi/domoticz/scripts/python//mijia-sensor-domoticz/domoticz_mijia.py:23: DeprecationWarning: encodestring() is a deprecated alias since 3.1, use encodebytes()
base64string = base64.encodestring(('%s:%s' % (domoticzusername, domoticzpassword)).encode()).decode().replace('\n', '')

1: lazienka (gorna)
Error reading value retry after 5 seconds...

Error reading value retry after 5 seconds...

Error reading value

pi@smarticz:~ $

 

 
Dodane : 27/10/2020 3:26 pm
(@steel_rat)
Wpisów: 603
Ekspert
 

Uzupełniłeś listę na końcu o mac adresy urządzeń z których czytasz wartości? Podałeś hasło, użytkownika, adres domoticza?

"DeprecationWarning" to jest tylko ostrzeżenie. Funkcja ta powinna normalnie jeszcze działać.

 
Dodane : 27/10/2020 3:48 pm
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
Autor tematu
 

Cześć,

faktycznie miałem zły format w Mac adresie, a z tym błędem to  rozwiązałem chyba temat podmieniając linię 23 z

base64string = base64.encodestring(('%s:%s' % (domoticzusername, domoticzpassword)).encode()).decode().str('\n', '')

na

base64string = base64.encodebytes(('%s:%s' % (domoticzusername, domoticzpassword)).encode()).decode().strip()

Będę to jeszcze sprawdzał i próbował nadzorować działanie. @Michal_M, @steel_rat dzięki za słuszne wskazówki i motywację do grzebania. Oczywiście jestem otwarty na dalsze uwagi, bo nie wiem czy to koniec 😉

 
Dodane : 27/10/2020 4:04 pm
(@edass)
Wpisów: 213
Weteran
 

Cześć

Sorry , że Wam trochę zaśmiecę wątek ale sam miałem podobny dylemat - jak odczytać BLE i przesłać je do OH.

Całość skończyła się na OpenMQTTGateway na ESP32 i MQTT. Działa to szybko, stabilnie i bezproblemowo. Może warto sięgnąć po taki sprzęt.

 
Dodane : 27/10/2020 4:43 pm
bartolomeo reacted
(@michal_m)
Wpisów: 52
Kontrybutor
 

@bartolomeo super, o to mi właśnie chodziło - o podmianę tej  linijki w skrypcie, która powodowała błąd; jak ruszyło to teraz już tylko kwestia ustawień jak pisał  @steel_rat

 
Dodane : 27/10/2020 8:13 pm
Udostępnij: