Добавление Xiaomi Mijia Air Detector в Home Assistant

Добавление Xiaomi Mijia Air Detector в Home Assistant

@configit

На днях купил Xiaomi Mijia Air Detector aka Xiaomi Mijia Air Quality Tester и он никак не хотел работать у меня на самой последней версии Home Assistant.

Пришлось немного погуглить, найти пару issues на гитхабе (#419 #420), которые показали, что мой девайс всё таки отдает данные при запросе: "method":"get_air_data","params":[], имея самую свежую прошивку 3.4.4_0087.

Я не использую miio либо miio-cli, а использую компонент php-miio от SkySilver (за что ему огромный респект) написанный для Majordomo на php, работает в разы быстрее и понятнее, есть debug.

Далее я увидел, что нельзя делать запрос с одним и тем же id чаще 1 минуты, отсюда вывод, нам понадобится сгенерировать произвольный id.

Итак приступи к делу:

  1. Ставим php, если ещё нет:

apt-get install php

Проверяем версию:

php -v

2. Ставим php-miio

git clone https://github.com/skysilver-lab/php-miio.git

3. Проверяем, что работает php-miio и делаем запрос к устройству с выдачей инфо о нем:

php miio-cli.php --ip IP_УСТРОЙСТВА --token ТОКЕН --info

В ответ мы должны получить, что-то вроде:

{"partner_id":"","id":2,"code":0,"message":"ok","result":{"hw_ver":"Linux","fw_ver":"3.4.4_0087","ap":{"ssid":"xxx","bssid":""},"netif":{"localIp":, итд...

Создаем bash скрипт, который будет дергать нужные нам данные через miio-cli.php, для последующего парсинга с рандомным id в HA:

#!/bin/bash

id=$(echo $RANDOM % 1000 + 1 | bc)

php miio-cli.php --ip IP_УСТРОЙСТВА --token ТОКЕН --sendcmd '{"id":'"$id"',"method":"get_air_data","params":[]}' | tail -1 | sed 's/{"result"://g' | sed 's/\,"id.*//g'

Называем его например air_tester.sh и даем ему права на выполнение chmod +x air_tester.sh

4. Выполняем скрипт ./air_tester.sh и получаем что-то вроде:

{"co2e":401,"humidity":51.5,"pm25":11.600000381469727,"temperature":23.600000381469727,"temperature_unit":"c","tvoc":1.3310984373092651,"tvoc_unit":"mg_m3"}

Ура! Данные получены, теперь осталось совсем немного создать через command_line выполнение нашего скрипта в HA, темплейты на все 5 сенсоров и округлить наши значения после точек:

sensor:

- platform: command_line

  name: Air Tester

   command: '/home/your_user/scripts/air_tester.sh'

   value_template: "{{ value_json['co2e']['pm25']['humidity']['temperature']['tvoc'] }}"

   json_attributes:

    - co2e

    - pm25

    - humidity

    - temperature

    - tvoc

   scan_interval: 30


  - platform: template

   sensors:

    air_tester_co2:

     friendly_name: "CO2a"

     unit_of_measurement: "ppm"

     value_template: "{{ states.sensor.air_tester.attributes.co2e }}"

  - platform: template

   sensors:

    air_tester_tvoc:

     friendly_name: "TVOC"

     unit_of_measurement: "mg/m3"

     value_template: "{{ ( states.sensor.air_tester.attributes.tvoc | round(2)) }}"

  - platform: template

   sensors:

    air_tester_pm25:

     friendly_name: "PM 2.5"

     unit_of_measurement: "ppm"

     value_template: "{{ ( states.sensor.air_tester.attributes.pm25 | round(1))}}"

  - platform: template

   sensors:

    air_tester_humidity:

     friendly_name: "Humidity"

     unit_of_measurement: "%"

     value_template: "{{ ( states.sensor.air_tester.attributes.humidity | round(1))}}"

- platform: template

   sensors:

    air_tester_temperature:

     friendly_name: "Temp"

     unit_of_measurement: "°C"

     value_template: "{{ ( states.sensor.air_tester.attributes.temperature | round(1))}}"

Ну а sensor.air_tester можно просто скрыть через custmoize.yaml, также можно нагуглить красивые иконки для сенсоров, в итоге получаем что-то вроде:

Вот и всё! Теперь можно получать каждые 30 секунд данные с нашего устройства, можно чаще, можно реже, как хотите!

Enjoy!


TODO List: Выяснить как прокинуть заряд батареи, управление яркостью экрана, автоотключение экрана итд.


Данная статья была написана и создана специально для канала @configit

При репосте либо копировании статьи просьба указывать ссылку на статью и канал!