Xiaomi Air Purifier Pro в Умном Доме

Domoticz

Очиститель воздуха гаджет в доме нужный. Работа очистителей в наших домах на глаз не видна, но это не значит что они не эффективны. Показатель частиц PM 2.5 (мелкодисперсная пыль) в большинстве регионов нашей страны не превышает допустимых значений. Согласно замеров очистителя у меня дома этот показатель стремится к нулю, но это не значит что очиститель не работает. Достаточно через пару месяцев взглянуть на грязный, пыльный фильтр внутри устройства, чтобы сделать выводы о эффективности его работы.

На фото чистая и забитая фильтрующие вставки. Чем больше воздуха очиститель прогонит через фильтр за единицу времени, тем чище будет воздух в помещении где он установлен. Время до смены фильтра можно увеличить если дома поддерживать чистоту и порядок.

Чистый и грязный фильтры очистителей воздуха Xiaomi

Ценники на очистители часто находятся за гранью разумного понимания среднестатистического потребителя. Тут вне конкурентов очистители воздуха от Xiaomi. По цене/качеству ему нет аналогов. Его и будем сегодня подключать, а именно версию Pro, как наиболее производительную.

Подключение очистителей воздуха Xiaomi в MiHome

  • В правом верхнем углу приложения MiHome тыкаем в плюсик.
  • На вкладке поиска устройств вводим название своего очистителя или выбираем его из перечня «Очистка воздуха».
  • Следуем инструкциям приложения по дальнейшему сопряжению белого друга.

Подключение очистителя воздуха Xiaomi в MiHome

После успешного сопряжения приложение MiHome скачает плагин для работы очистителя. На очистителе индикатор Wi-Fi перестает мигать и горит постоянно, что свидетельствует о успешном подключении и его наличии. Все легко и просто.

Теперь о плохом: работать в MiHome с очистителем никаких нервов не хватит. Когда у меня был очиститель Xiaomi Air Purifier 2s задержка между тыком в приложение и исполнением команды очистителем была на уровне 2-4 секунды, что принципе со скрипом меня устраивало. Версия Pro лагает по страшному от тыка до смена режима работы проходит 6-8 секунд. После первой установки я потыкав кнопки плагина подумал что приложение совсем зависло, но после подлага увидел «цветомузыку» в виде смены режимов работы. Если не открывать плагин и тыкать на иконку питания устройства пурифер иногда позволяет себе вообще не запуститься. На Андроид устройствах приложение лагает меньше, но сбои тоже есть.

Меня такие лаги дико бесят, поэтому был найден вариант его прокинуть в Domoticz.

Подключаем очиститель в Domoticz

Изначально я хотел посадить работу очистителя на нажатия двухкнопочного Zigbee выключателя Xiaomi Aqara. Но позже идея была переосмыслена и выработана следующая концепция:

  1. По приходу меня домой (при снятии помещений с охраны) очиститель воздуха включается на 80% своей мощи (ну не сторонник я гонять технику на максимум) и гоняет воздух 20 минут, далее ставится на режим авто. Этого времени для «Прошки» более чем достаточно чтобы прогнать воздух на мой метраж. На гул двух моторов не обращаешь внимания пока раздеваешься, моешь руки, раскладываешь пакеты из магазина и.т.д.
  2. При постановке на охрану (никого нет дома) очиститель воздуха идет в режим off. Так как даже на режиме авто при суперчистом воздухе мотор все равно работает, а значит идет его износ.
  3. Выключатель Aqara все же был задействован. На двойной клик я поставил работу на 20 минут на 80% мощности. Далее режим авто. Включаю перед сном, если тяжко дышится.

При работе очистителя на «ночном режиме» можно спокойно спать с ним в одной комнате, если он не стоит прямо перед лицом. Шума нет, переживать не стоит.

Требуется предварительная установка необходимых компонентов, если они не установлены. Подключаемся к малине и последовательно вводим команды в терминал:

Node.js

  • sudo apt-get install nodejs

Питон

  1. sudo apt-get update
  2. sudo apt-get upgrade
  3. sudo apt-get install -y curl python3 j

Питон-miio

  • sudo pip3 install python-miio

Наша задача получить токен, который будет нужен для управления. Выдаем пуриферу статический IP и ищем его в локальной сети командой.

  • miio discover

Поиск токена очистителя через библиотеку miio

Я выдал IP 192.168.1.49. При вводе команды устройство увидел, но токен не получил. Это нормально, не все устройства его просто так отдают. Ребята с GitHub советуют для получения поставить MiHome версии 5.4.49 для Андроид. Эта версия пишет дебаг лог, там и будем искать. Вам решать либо делать даунгрейд, потом обновляться назад, либо ставить приложение на другое устройство, что я и сделал. После установки просто заходим в свой аккаунт даем пару команд на очиститель. Этого будет достаточно. Токен после захода искать на телефоне в файле, который будет последним в папке SmartHome/logs/plug_DeviceManager

Поиск токена очистителя через MiHome

Записываем. Теперь все данные для управления очистителем воздуха получены. Список всех возможных команд на управление доступен вводом в консоль строки (не забываем менять IP и token на свои значения):

  • miiocli airpurifier —ip 192.168.1.49 —token c6fc060fbe8f03ffa02d23fd19d2af —help

Список команд очистителя воздуха Xiaomi при работе через библиотеку miio

У себя использую самое основное:

  • off — вырубить.
  • set_mode (auto/silent/favorite) — смена режимов Авто/Ночной/Ручной.
  • set_favorite_level 15 — регулировка ручного режима, принимает значения от 0 до 15.

Очень хотелось вытащить значения степени загрязненности воздуха (AQI) для написания скрипта автоматической смены режимов. Вывод показаний доступен с командой status, но пока не сообразил как. У кого получится реализовать напишите в комменты.

Вывод статистики работы Xiaomi Purifier

Работа в Domoticz реализована через виртуальный переключатель и скрипты dzVents.

Xiaomi Air Purifier Pro в Domoticz через виртуальный переключатель

Скрипты dzVents для работы очистителя.


return {
on = {
devices = {101} -- id виртуального переключателя
},
execute = function(dz, devices)

local switch = dz.devices(101).state -- собстна выключатель
local Connect = 'miiocli airpurifier --ip 192.168.1.49 --token c6fc060fbe8f03ffa02d23fd19d2af' -- IP+Token

if (switch == 'Off') then
dz.utils.osExecute(''..Connect..' off')
end

if (switch == 'Авто') then
dz.utils.osExecute(''..Connect..' set_mode auto')
end

if (switch == 'Ночной') then
dz.utils.osExecute(''..Connect..' set_mode silent')
end

if (switch == 'Тотальная очистка') then
dz.utils.osExecute(''..Connect..' set_favorite_level 13') -- max 15
dz.utils.osExecute(''..Connect..' set_mode favorite')
end
end
}

Добавлено в скрипт переключателя Aqara

if (switch.state == 'Switch 1 Double Click' and domoticz.devices(101).level < 30) then
-- двойной клик о чистка воздуха не работает
domoticz.devices(101).switchSelector(30)
-- поставить на очистку
domoticz.devices(101).switchSelector(10).afterMin(20)
-- через 20 минут поставить режим авто
switch.switchSelector(0).afterSec(1)
-- вернуть переключатель в состояние off

Добавлено в скрипт снятия с охраны

domoticz.devices(101).switchSelector(30)
-- включить очистку
domoticz.devices(101).switchSelector(10).afterMin(20)
-- поставить режим авто через 20 минут.

Всем удачной установки. Если есть желание доработать эту схему поделитесь своей реализацией.
Возможен косяк с установкой miio. Знаю что есть несколько способов ее поставить и она управляет многими Wi-Fi устройствами Xiaomi (не только очистителем). У меня заработал именно этот вариант.

Кто найдет ошибку поправляйте 💁‍♂️

Денис Лунин

Радиоинженер с высшим образованием. Общаюсь на «ты» с любой техникой. Есть опыт разработчика. Везде нужно разобраться. Принцип работает - не лезь явно не для меня))

Оцените автора
( Пока оценок нет )
Добавить комментарий

  1. MajkiIT

    When it extracts commands from SSH, everything works fine, but as I add the switch and dzVents script nothing happens. In the logs I see:

    2020-04-13 14: 39: 50.571 (Purifier) Light / Switch (Purifier button)
    2020-04-13 14: 39: 50.562 Status: User: Admin initiated a switch command (288 / Oczyszczacz button / Set Level)
    2020-04-13 14: 39: 50.826 Status: dzVents: Info: Handling events for: «Button purifier», value: «Auto»
    2020-04-13 14: 39: 50.826 Status: dzVents: Info: —— Start internal script: test: Device: «Button cleaner (Button cleaner)», Index: 288
    2020-04-13 14: 39: 51.172 Status: dzVents: Info: —— Finished test

    I’m doing something wrong?

    Ответить
    1. Денис Лунин автор

      If the commands are running from the console, check the dzVents scripts for errors. Please note that the script for the aqara switch is not complete and contains only a part of the script for the double click action

      Ответить
      1. MajkiIT

        I mean the first script that should be responsible for this button ==> https://domoticzfaq.ru/wp-content/webp-express/webp-images/doc-root/wp-content/uploads/2020/03/ochistitel-vozdukha-xiaomi-mi-air-purifier-pro-domoticz.png.webp . When I click the appropriate buttons, nothing happens.

        Ответить
        1. Денис Лунин автор

          Check how python-miio works by entering commands in the console. Without Domoticz, do they work out commands for managing the cleaner?

          Ответить
  2. Pablo

    I created 2 dummy sensors and now can see in Domoticz the AQI and Temp+Hum with the controller….
    You need a bash script in the /home/pi/scripts/ , or wherever you prefer… mine is purifier.sh
    #!/bin/bash
    PATH=’/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin’

    #nuevaposicion=`curl -s ‘http://172.28.2.200:8080/json.htm?type=devices&rid=’$5 | jq ‘.result[0].Level’`
    currentPosition=`curl -s ‘http://172.28.2.200:8080/json.htm?rid=139&type=devices’ | jq ‘.result[0].Level’`
    status=`sudo /home/pi/scripts/miiocli -o json airpurifiermiot —ip 172.28.2.181 —token 279b89f39765ea56c9b7a37bee80ed7d status`
    temperature=`jq ‘.temperature’ <<< "$status"`
    mode=`jq '.mode' <<< "$status"`
    filter_hours_used=`jq '.filter_hours_used' <<< "$status"`
    average_aqi=`jq '.average_aqi' <<< "$status"`
    humidity=`jq '.humidity' <<< "$status"`
    fan_level=`jq '.fan_level' <<< "$status"`
    aqi=`jq '.aqi' <<< "$status"`
    power=`jq '.power' <<< "$status"`
    filter_life_remaining=`jq '.filter_life_remaining' <<< "$status"`

    nivel=50
    #power true
    echo $fan_level $mode $currentPosition
    if [ $power == "true" ] && [ $fan_level -eq "1" ] && [ $mode -eq "0" ]
    then
    nivel=20 #auto
    elif [ $power == "true" ] && [ $fan_level -eq "1" ] && [ $mode -eq "1" ]
    then
    nivel=40 #silent
    elif [ $power == "true" ] && [ $fan_level -eq "2" ] && [ $mode -eq "3" ]
    then
    nivel=30 #Manual
    elif [ $power == "false" ]
    then
    nivel=10
    else
    nivel= 50
    fi

    #fan_level 1 mode 0 AUTO
    #http://172.28.2.200:8080/json.htm?type=command&param=switchlight&idx=139&switchcmd=Set%20Level&level=20&passcode=
    #fan_level 1 mode 1 Silent
    #http://172.28.2.200:8080/json.htm?type=command&param=switchlight&idx=139&switchcmd=Set%20Level&level=40&passcode=
    #fan_level 2 mode 3 Manual 2
    #http://172.28.2.200:8080/json.htm?type=command&param=switchlight&idx=139&switchcmd=Set%20Level&level=30&passcode=
    #off
    #http://172.28.2.200:8080/json.htm?type=command&param=switchlight&idx=139&switchcmd=Set%20Level&level=10&passcode=
    #on
    #http://172.28.2.200:8080/json.htm?type=command&param=switchlight&idx=139&switchcmd=Set%20Level&level=50&passcode=

    echo $temperature $nivel $currentPosition
    result1=`curl -s -i -H 'Accept: application/json' 'http://172.28.2.200:8080/json.htm?type=command&param=udevice&idx=140&svalue='$aqi`
    result2=`curl -s -i -H 'Accept: application/json' 'http://172.28.2.200:8080/json.htm?type=command&param=udevice&idx=141&nvalue=0&svalue='$temperature&#039;;'$humidity';0'`

    if [ $currentPosition != $nivel ]
    then
    echo 'actualizo el estado '
    result3=`curl -s -i -H 'Accept: application/json' 'http://172.28.2.200:8080/json.htm?type=command&param=switchlight&idx=139&switchcmd=Set%20Level&level='$nivel'&passcode=&#039;`
    else
    echo 'No hace falta actualizar'
    fi

    and adding this to the crontab it will update the sensors when needed

    Ответить
    1. Денис Лунин автор

      thx

      Ответить