Domoticz #2 – konfiguracja Xiaomi Mijia Bluetooth Hygrothermograph

Mamy już zainstalowanego domoticza, to teraz czas na skonfigurowanie w nim czujników i urządzeń wykonawczych. Na pierwszy ogień pójdą popularne termometry Xiaomi Mija z bluetooth, wyświetlaczem LCD i funkcją pomiaru wilgotności.

Obecna wersja Domoticza (4.11478) nie posiada wbudowanej obsługi termometrów / higrometrów Xiaomi Mijia (kod produktu LYWSDCGQ), ale wystarczy prosty skrypt, chwila konfiguracji i już działa. Mój Domoticz stoi na Raspberry 3 z wbudowanym Bluetooth, także nie muszę nawet wpinać dodatkowego modułu do portu USB.

Dodajemy czujniki Xiaomi do Domoticza

W Domoticzu przechodzimy do Konfiguracja (Config), dalej Sprzęt (Hardware). Wpisujemy dowolną nazwę (u mnie Mi sensor Temp & Hum disp) a jako Typ wybieramy Dummy (Does nothing, use for virtual switches only), dokładnie wygląda to tak:

Wciskamy Dodaj (Add). Sprzęt pojawi się na górze z przyciskiem Utwórz wirtualne czujniki. Wciskamy go i w nowym okienku w polu Nazwa podajemy nazwę czujnika, oraz jego Typ: Temp+Wilg:

Operację powtarzamy tyle razy ile mamy czujników i spisujemy sobie ich indeksy – kolumna IDX na początku tabeli. Aha, czujniki znajdziesz w Konfiguracja -> Sprzęt oraz w głównej zakładce Temperatura. Teraz czas na resztę konfiguracji.

Instalacja i konfiguracja skryptu mijia-sensor-domoticz

Skrypt do domoticza znajduje się na githubie. A dokładniej tu: https://github.com/pFenners/mijia-sensor-domoticz. Instalacja to poprostu sklonowanie repozytorium. Najlepiej (dla porządku), zrobić to w folderze /domoticz/scripts/python za pomocą polecenia:

W folderze głównym domoticza, dalej scripts/python/ pojawił się nowy katalog mijia_sensor_domoticz:

Teraz fajny bajer – zeskanujemy sobie otoczenie w poszukiwaniu urządzeń bluetooth:

Prócz telewizorów sąsiadów, powinniśmy znaleźć nasze termometry Xiaomi Mijia, ich mac adres zaczyna się od 4C:65 i nazwa MJ_HT_V1:

Jak widać wyżej, moje 2 termometry Xiaomi zostały odnalezione. Niektóre urządzenia zostały wykryte dwukrotnie. To co nas interesuje to adresy mac, które zaraz wpiszemy do skryptu, warto więc je zanotować.

Będąc nadal w katalogu /domoticz/scripts/python, wpisujemy:

Otworzy to nam skrypt z możliwością edycji:

Przechodzimy na koniec pliku i w miejsce 3 przykładowych adresów mac wpisujemy nasze, dalej wpisujemy numer indeksu (IDX) identyczny z wirtualnymi sensorami z zakładki Konfiguracja -> Urządzenia. W moim przypadku są to kolejno 1 i 2:

Po zapisaniu możemy sprawdzić czy wszystko działa., uruchamiając skrypt:

U mnie wszystko zadziałało zgodnie z oczekiwaniami, czyli czujniki zostały odpytane, a domoticz zasilony danymi:

Sprawdźmy jak wygląda zakładka Konfiguracja -> Urządzenia:

Jak widać, prócz temperatury i wilgotności mamy też stan baterii czujnika. To teraz zautomatyzujmy całość.

Automatyczne odpytywanie czujników Xiaomi w Domoticz

Najprostszą metodą automatycznego odczytywania danych z termometrów Xiaomi Mijia będzie użycie cron’a. który co jakiś, zdefiniowany czas będzie uruchamiał skrypt domoticz_mijia.py. W tym celu wpisujemy:

i dopisujemy czas co jaki ma się uruchamiać skrypt, oraz ścieżkę do niego. Ja wybrałem odpytywanie co 20 minut:

W zakładce Temperatura możemy zobaczyć nasze czujniki i ich statusy:

Po wciśnięciu Logi zobaczymy wykresy – dobowy, miesięczny i roczny:

Podsumowanie

Co nam daje pomiar temperatury? Po pierwsze możemy zoptymalizować ogrzewanie w mieszkaniu. Stosując urządzenia wykonawcze, np. głowice termostatyczne w grzejnikach, możemy utrzymywać stabilną temperaturę, bez niedogrzania i przegrzewania mieszkania. W bardziej rozbudowanych systemach można sterować kotłem, pompą ciepła czy wentylacją.

W kolejnej części opiszę jak podpiąć czujniki fizycznie do Raspberry i odczytywać ich wskazania przez Domoticz.

Przypominam też o pierwszym wpisie dotyczącym inteligentnego domu: Domoticz#1 – Instalacja na RPi.

Wpis “Domoticz #2 – konfiguracja Xiaomi Mijia Bluetooth Hygrothermograph” komentowano 3 razy

  1. Witam, mam problem. niestety u mnie nie wszystko poszło dobrze. Mianowicie dane odczytuje prawidłowo, ale jest błąd i nie widzę nic w domoticzu. Poniżej wklejam jak to u mnie wygląda:

    [email protected]:~/domoticz/scripts/python $ /usr/bin/python3 mijia-sensor-domoticz/domoticz_mijia.py
    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: updating
    Mi Sensor: 58:2D:34:31:09:8B
    Firmware: 00.00.66
    Name: MJ_HT_V1
    Temperature: 22.0°C
    Humidity: 49.6%
    Battery: 37%
    http://127.0.0.1:8000/json.htm?type=command&param=udevice&idx=12&nvalue=0&svalue=22.0;49.6;1&battery=37
    Traceback (most recent call last):
    File „/usr/lib/python3.7/urllib/request.py”, line 1317, in do_open
    encode_chunked=req.has_header(‚Transfer-encoding’))
    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.7/http/client.py”, line 938, in connect
    (self.host,self.port), self.timeout, self.source_address)
    File „/usr/lib/python3.7/socket.py”, line 727, in create_connection
    raise err
    File „/usr/lib/python3.7/socket.py”, line 716, 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 „mijia-sensor-domoticz/domoticz_mijia.py”, line 92, in
    update(„58:2D:34:31:09:8B”,”12″)
    File „mijia-sensor-domoticz/domoticz_mijia.py”, line 88, in update
    domoticzrequest(„http://” + domoticzserver + „/json.htm?type=command&param=udevice&idx=” + idx_temp + „&nvalue=0&svalue=” + val_temp + „;” + val_hum + „;”+ val_comfort + „&battery=” + val_bat)
    File „mijia-sensor-domoticz/domoticz_mijia.py”, line 29, in domoticzrequest
    response = urllib.request.urlopen(request)
    File „/usr/lib/python3.7/urllib/request.py”, line 222, in urlopen
    return opener.open(url, data, timeout)
    File „/usr/lib/python3.7/urllib/request.py”, line 525, in open
    response = self._open(req, data)
    File „/usr/lib/python3.7/urllib/request.py”, line 543, in _open
    ‚_open’, req)
    File „/usr/lib/python3.7/urllib/request.py”, line 503, in _call_chain
    result = func(*args)
    File „/usr/lib/python3.7/urllib/request.py”, line 1345, in http_open
    return self.do_open(http.client.HTTPConnection, req)
    File „/usr/lib/python3.7/urllib/request.py”, line 1319, in do_open
    raise URLError(err)
    urllib.error.URLError:

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.