Подключаем к домотикзу датчик Xiaomi Mijia Temperature and Humidity Sensor
Внешний вид прибора:
Неплохой обзор датчика: тыц1
Купить можно на али-экспресс: тыц2
Подключим его к домотикзу:
1. Получаем мак-адрес устройства (нужен адрес напротив которого имя MJ_HT_V1) выполнив команду:
sudo hcitool lescan
pi@raspberrypi:~ $ sudo hcitool lescan
LE Scan ...
4D:68:A4:D0:45:A7 (unknown)
4D:68:A4:D0:45:A7 MJ_HT_V1
|
На этом этапе есть вероятность получить ошибку "Could not open device: No such device"
Причина: блютуз отключен
Решение: включить на Raspberry блютуз.
2. Создаем Виртуальное (Dummy) устройство с любым названием и типом "Temp+Hum"
3. Запоминаем его IDX !!!
4. С github-а скачиваем domoticz_mijia.py и папку mijia
3. Запоминаем его IDX !!!
4. С github-а скачиваем domoticz_mijia.py и папку mijia
5. Редактируем файл domoticz_mijia.py:
в начале файла в строке domoticzserver = "127.0.0.1:8000" - прописываем адрес и порт вашего домотикза,
если нужно, на следующей строке указываем логин и пароль к домотикзу,
в самом конце файла оставляем только одну команду (если у вас только один датчик) update("4C:65:A8:D0:4C:98","752") , и сюда заносим свой мак-адрес полученный ранее и IDX dummy датчика.
6. Копируем файл domoticz_mijia.py и папку mijia на Raspberry (например, в папку /home/pi/mijia-sensor-domoticz)
7. Устанавливаем на файлы разрешение на запуск
8. Проверяем, запустив файл:
/usr/bin/python3 /home/pi/mijia-sensor-domoticz/domoticz_mijia.py
pi@raspberrypi:~ $ /usr/bin/python3 /home/pi/mijia-sensor-domoticz/domoticz_mijia.py
1: updating
connect: Device or resource busy (16)
Mi Sensor: 4D:68:A4:D0:45:A7
Firmware: 00.00.66
Name: MJ_HT_V1
Temperature: 27.5°C
Humidity: 55.6%
Battery: 84%
http://192.168.0.130:8080/json.htm?type=command¶m=udevice&idx=42&nvalue=0&svalue=27.5;55.6;1&battery=84
|
Если получили ошибку "No module named 'mijia'", проверьте наличие и содержимое папки mijia рядом с файлом domoticz_mijia.py
9. Сенсор сам нам ничего слать не будет, у него нужно периодически запрашивать показания (запуская команду из шага 8). Запускать можно из самого домотикза (позже может сделаю и опишу этот метод), или поручить это всё крону.
Запускаем редактор конфигурации крона:
crontab -e
и в конце файла дописываем строку (запуск раз в минуту):
* * * * * /usr/bin/python3 /home/pi/mijia-sensor-domoticz/domoticz_mijia.py >/dev/null 2>&1
---------------------------
P.S.: Из инструкции следует один вывод: датчик отдает показания любому кто запросит (нет никаких паролей или скрытых токенов как у умных ламп).
----------------------------------------------------------------------
UPD 2020-01-22
Достался нахаляву на алиэкспресс квадратный датчик "Mi Temperature and Humidity Monitor 2" (за 6$ со скидкой в 6$)
Внешний вид:
----------------------------------------------------------------------
Кратко опишу один из способов подключения его к домотикзу.
В выводе команды sudo hcitool lescan
он обозван как LYWSD03MMC
Код для работы с этим чудом вражеской техники можно взять здесь: https://github.com/JsBergbau/MiTemperature2
Качаем всё, распаковываем и копируем на малину (я скопировал в папку /home/pi/mijia-sensor-domoticz)
Для работы скриптов возможно потребуется доустановить компоненты:
pip3 install bluepy
Редактируем файл LYWSD03MMC.py (и не забываем дать права на его выполнение):
в начале файла после всех import-ов (приблизительно 18 строка) добавил код отправки результатов в домотикз:
# DigitALLeZ 2021-01-21 --------------------------------------------
import urllib.request
import base64
domoticzserver = "127.0.0.1:8080"
domoticzusername = ""
domoticzpassword = ""
idx_temp = 31
base64string = base64.encodebytes(('%s:%s' % (domoticzusername, domoticzpassword)).encode()).decode().replace('\n', '')
def domoticzrequest (url):
print(url)
request = urllib.request.Request(url)
request.add_header("Authorization", "Basic %s" % base64string)
response = urllib.request.urlopen(request)
return response.read()
# DigitALLeZ -------------------------------------------------------
Здесь idx_temp - это idx нужного датчика.
Далее, в конце блока def handleNotification(self, cHandle, data).... (приблизительно строка 240), перед обработкой исключений except Exception as e ....... добавил:
val_comfort = "0"
if humidity < 40:
val_comfort = "2"
elif humidity <= 70:
val_comfort = "1"
elif humidity > 70:
val_comfort = "3"
domoticzrequest("http://" + domoticzserver + "/json.htm?type=command¶m=udevice&idx=" + str(idx_temp) + "&nvalue=0&svalue=" + str(temp) + ";" + str(humidity) + ";"+ str(val_comfort) + "&battery=" + str(batteryLevel))
Всё, с файлом больше ничего делать не нужно.
Проверить работу можно командой:
/usr/bin/python3 /home/pi/mijia-sensor-domoticz/MiTemperature2-master/LYWSD03MMC.py -d A4:C1:38:18:8C:A5 -r -b -c 1 -urc 20
pi@raspberrypi:~ $ /home/pi/mijia-sensor-domoticz/MiTemperature2-master/LYWSD03MMC.py -d A4:C1:38:18:8C:A5 -r -b -c 1 -urc 20 Trying to connect to A4:C1:38:18:8C:A5 Temperature: 23.0 Humidity: 45 Battery voltage: 2.861 V Battery level: 76 http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=31&nvalue=0&svalue=23.0;45;1&battery=76 ............................... 1 measurements collected. Exiting in a moment. |
Запускаем редактор конфигурации крона:
crontab -e
и в конце файла дописываем строку (запуск раз в минуту):
* * * * * /usr/bin/python3 /home/pi/mijia-sensor-domoticz/MiTemperature2-master/LYWSD03MMC.py -d A4:C1:38:18:8C:A5 -r -b -c 1 -urc 20 >/dev/null 2>&1
---------------------------
Заметки:
иногда вся эта кухня подвисает с нагрузкой на процессор 100%
точная причина пока не ясна.
один из простых вариантов очистки от них - убивать их всех раз в час:
crontab -e
* * * * * sudo killall -s 9 --older-than 2m /home/pi/.local/lib/python3.7/site-packages/bluepy/bluepy-helper >/dev/null 2>&1
Комментарии
Отправить комментарий