Универсальный пульт Xiaomi Universal IR Remote был один из первых устройств от Xiaomi, которое я приобрел вместе со стартовым комплектом умного дома, однако как-то он у меня не прижился: во-первых плагин в Mi Home для него был на чисто китайском (а я как бы не знаю китайского), во-вторых достаточно быстро я понял, что система управления умным домом Xiaomi достаточно ограничена в плане сценариев и перешел на альтернативные системы управления умным домом. В последствии для управления устройствами с ИК портами из Domoticz я перешел на решения от Broadlink. На прошлой неделе, перебирая вещи в шкафу наткнулся на давно забытый и слегка запыленный универсальный ИК пульт от Xiaomi. Начал искать способы добавления этого зверька в систему управления умным домом Domoticz, тут меня ждало разочарование, нормального способа добавления я не нашел. Ну что-ж (подумал я), почему бы самому тогда не написать нормальный плагин Xiaomi Universal IR Remote для Domoticz. И вот сейчас я хочу поделиться им с вами.
Установка и первоначальная настройка плагина рассмотрена в отдельном разделе плагинов, перейдем сразу к примерам создания команд. Плагин позволяет создать включатель :) (Push On Button), выключатель (Switch), селекторный переключатель (Selector). Рассмотрим подробнее как все добавить.
Как добавить кнопку
Как добавить выключатель
Нажимаем Reset Level -> Learn после того, как индикатор на Xiaomi Universal IR Remote Controller замигал, направляем на него пульт и нажимаем кнопку, которую хотим добавить на включение, после этого нажимаем Test и если все прошло успешно, команда сработала - нажимаем Save Level. Для захвата следующей команды нажимаем Learn после того, как индикатор на Xiaomi Universal IR Remote Controller замигал, нажимаем кнопку, которую хотим добавить на выключение, далее нажимаем Test. Если команда корректно сработала, нажимаем Save Level. Если по каким-то причинам команда не распознана, просто нажимаем Reset Level и повторяем все сначала. После добавления команды и успешного тестирования, нажимаем Create для создания выключателя.
Добавление селекторного выключателя ничем не отличается, кроме того, что процедуру сканирования ИК кода необходимо повторить столько раз, сколько необходимо уровней, нажимая каждый раз после добавления уровня Save Level, по окончании добавления всех команд необходимо нажать Create.
Как добавить сразу несколько ИК команд на включение
Плагин поддерживает отправку сразу несколько ИК команд при включении/выключении/переключении. Это может быть полезно, например, для переключения каналов на ТВ при цифровом наборе (либо для устройств, для включения режима на которых необходимо нажать на несколько кнопок). Рассмотрим добавление на примере кнопки. Допустим, нам необходимо переключить на канал с номером 916.
Аналогичным способом создаются выключатели и селекторные переключатели. Если устройства надоели и больше не хотите далее использовать, можно их удалить. Для этого заходим настройки - устройства. Слева ставим галочку Chuangmi (для отображения только устройств плагина), далее напротив устройства, которое мы хотим удалить нажимаем на синюю стрелочку.
Просто удалять устройства из переключателей бесполезно, они снова будут воссозданы после перезагрузки системы плагинов :)
Ну вот кажется все, добавлю только, что плагин находится еще в разработке, поэтому в дальнейшем возможны изменения, в случае обнаружения некорректной работы оставляйте сообщения на гитхабе. Для стабильной работы необходимо, чтобы IP адрес Xiaomi Universal IR Remote Controller был статический, как это сделать читаем в статье (хм.. скоро статьи на Sprut AI превратятся в сборник ссылок :)). Хотел добавить в плагин автоматическое обнаружение изменения IP адреса устройства по токену, но отказался от этой идеи т.к. опрос сети может занять продолжительное время, в течении которого вся система плагинов наглухо повисает.. это того не стоит, лучше просто добавить статический адрес для устройства.
Немного о планах, задумываюсь о добавлении в плагин проброс созданных устройств в HomeKit (спасибо за наводку Алексею), а пока что созданные устройства пробрасываются в HomeBridge с помощью плагина homebridge-eDomoticz. Также планирую написать точно такой же плагин для ИК Broadlink, существующие решения кривоваты... Еще в планах написать плагины для точеных светильников Xiaomi Philips Zhirui и люстры Xiaomi Philips EyeCare Smart Ceiling LED Lamp, поэтому подписывайтесь, впереди еще много интересного! :)
Жду продолжения!
Уже на подходе, почти дописал плагин для Broadlink RM2 IR, работает быстро!
а Broadlink RM3 Mini будет поддерживаться?
Будет
У меня вываливаются ошибки:
2019-06-13 20:21:44.369 Error: (Chuangmi) failed to load 'plugin.py', Python Path used was '/home/pi/domoticz/plugins/Chuangmi/:/usr/lib/python35.zip:/usr/lib/python3.5:/usr/lib/python3.5/plat-arm-linux-gnueabihf:/usr/lib/python3.5/lib-dynload'.
2019-06-13 20:21:44.369 Error: (Шайба) Module Import failed, exception: 'ImportError'
2019-06-13 20:21:44.369 Error: (Шайба) Module Import failed: ' Name: miio'2019-06-13 20:21:44.369 Error: (Шайба) Error Line details not available.
2019-06-13 20:22:53.630 Error: Шайба hardware (12) thread seems to have ended unexpectedly
До этого я управлял шайбой через python скрипт по методике с 4pda, через файлики irsend.py и codes.txt. Ваш плагин обязательно ставить на чистую систему, или можно совместить эти оба способа?
Устанавливали по инструкции? Во время установки выдавала ошибки? Версия python и domoticz?
Попробуйте с шага, что выдаст в консоль SSH?
Отправлю весь оставшийся лог с putty:
pi@raspberrypi:~/domoticz/plugins $ sudo git clone https://github.com/Whilser/Xiaomi-Universal-IR-Remote-Controller-Domoticz-plugin.git">https://github.com/Whilser/Xia... Chuangmi
Клонирование в «Chuangmi»…
remote: Enumerating objects: 92, done.
remote: Counting objects: 100% (92/92), done.
remote: Compressing objects: 100% (86/86), done.
remote: Total 92 (delta 56), reused 14 (delta 6), pack-reused 0
Распаковка объектов: 100% (92/92), готово.
pi@raspberrypi:~/domoticz/plugins $ cd Chuangmi
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ virtualenv -p python3 .env
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
Traceback (most recent call last):
File "/usr/local/bin/virtualenv", line 11, in
sys.exit(main())
File "/usr/local/lib/python3.5/dist-packages/virtualenv.py", line 712, in main
symlink=options.symlink)
File "/usr/local/lib/python3.5/dist-packages/virtualenv.py", line 927, in create_environment
site_packages=site_packages, clear=clear, symlink=symlink))
File "/usr/local/lib/python3.5/dist-packages/virtualenv.py", line 1112, in install_python
mkdir(lib_dir)
File "/usr/local/lib/python3.5/dist-packages/virtualenv.py", line 324, in mkdir
os.makedirs(path)
File "/usr/lib/python3.5/os.py", line 231, in makedirs
makedirs(head, mode, exist_ok)
File "/usr/lib/python3.5/os.py", line 231, in makedirs
makedirs(head, mode, exist_ok)
File "/usr/lib/python3.5/os.py", line 241, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/home/pi/domoticz/plugins/Chuangmi/.env'
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ sudo apt-get install python3 python3-dev python3-pip git
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Уже установлен пакет git самой новой версии (1:2.11.0-3+deb9u4).
Уже установлен пакет python3 самой новой версии (3.5.3-1).
Уже установлен пакет python3-dev самой новой версии (3.5.3-1).
Уже установлен пакет python3-pip самой новой версии (9.0.1-2+rpt2).
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 162 пакетов не обновлено.
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ sudo apt-get install libffi-dev libssl-dev
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Уже установлен пакет libffi-dev самой новой версии (3.2.1-6).
Уже установлен пакет libssl-dev самой новой версии (1.1.0j-1~deb9u1).
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 162 пакетов не обновлено.
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ sudo pip3 install -U pip setuptools
Collecting pip
Downloading https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl">https://files.pythonhosted.org... (1.4MB)
100% |████████████████████████████████| 1.4MB 155kB/s
Collecting setuptools
Downloading https://files.pythonhosted.org/packages/ec/51/f45cea425fd5cb0b0380f5b0f048ebc1da5b417e48d304838c02d6288a1e/setuptools-41.0.1-py2.py3-none-any.whl">https://files.pythonhosted.org... (575kB)
100% |████████████████████████████████| 583kB 214kB/s
Installing collected packages: pip, setuptools
Found existing installation: pip 9.0.1
Not uninstalling pip at /usr/lib/python3/dist-packages, outside environment /usr
Found existing installation: setuptools 39.2.0
Uninstalling setuptools-39.2.0:
Not removing or modifying (outside of prefix):
/usr/bin/easy_install
Successfully uninstalled setuptools-39.2.0
Successfully installed pip-19.1.1 setuptools-41.0.1
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ sudo pip3 install -U virtualenv
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple">https://www.piwheels.org/simpl...
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/ca/ee/8375c01412abe6ff462ec80970e6bb1c4308724d4366d7519627c98691ab/virtualenv-16.6.0-py2.py3-none-any.whl">https://files.pythonhosted.org... (2.0MB)
|████████████████████████████████| 2.0MB 301kB/s
Installing collected packages: virtualenv
Found existing installation: virtualenv 16.0.0
Uninstalling virtualenv-16.0.0:
Successfully uninstalled virtualenv-16.0.0
Successfully installed virtualenv-16.6.0
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ virtualenv -p python3 .env
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
Traceback (most recent call last):
File "/usr/local/bin/virtualenv", line 10, in
sys.exit(main())
File "/usr/local/lib/python3.5/dist-packages/virtualenv.py", line 831, in main
symlink=options.symlink,
File "/usr/local/lib/python3.5/dist-packages/virtualenv.py", line 1106, in create_environment
install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages=site_packages, clear=clear, symlink=symlink)
File "/usr/local/lib/python3.5/dist-packages/virtualenv.py", line 1375, in install_python
mkdir(lib_dir)
File "/usr/local/lib/python3.5/dist-packages/virtualenv.py", line 391, in mkdir
os.makedirs(at_path)
File "/usr/lib/python3.5/os.py", line 231, in makedirs
makedirs(head, mode, exist_ok)
File "/usr/lib/python3.5/os.py", line 231, in makedirs
makedirs(head, mode, exist_ok)
File "/usr/lib/python3.5/os.py", line 241, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/home/pi/domoticz/plugins/Chuangmi/.env'
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ sudo virtualenv -p python3 .env
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/pi/domoticz/plugins/Chuangmi/.env/bin/python3
Also creating executable in /home/pi/domoticz/plugins/Chuangmi/.env/bin/python
Installing setuptools, pip, wheel...
done.
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ sudo source .env/bin/activate
sudo: source: command not found
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ source .env/bin/activate
(.env) pi@raspberrypi:~/domoticz/plugins/Chuangmi $ sudo pip3 install python-miio
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple">https://www.piwheels.org/simpl...
Requirement already satisfied: python-miio in /usr/local/lib/python3.5/dist-packages (0.4.0)
Requirement already satisfied: pretty-cron in /usr/local/lib/python3.5/dist-packages (from python-miio) (1.0.2)
Requirement already satisfied: cryptography in /usr/lib/python3/dist-packages (from python-miio) (1.7.1)
Requirement already satisfied: pytz in /usr/local/lib/python3.5/dist-packages (from python-miio) (2018.4)
Requirement already satisfied: click in /usr/lib/python3/dist-packages (from python-miio) (6.6)
Requirement already satisfied: zeroconf in /usr/local/lib/python3.5/dist-packages (from python-miio) (0.20.0)
Requirement already satisfied: android-backup in /usr/local/lib/python3.5/dist-packages (from python-miio) (0.2.0)
Requirement already satisfied: appdirs in /usr/local/lib/python3.5/dist-packages (from python-miio) (1.4.3)
Requirement already satisfied: construct==2.9.41 in /usr/local/lib/python3.5/dist-packages (from python-miio) (2.9.41)
Requirement already satisfied: tqdm in /usr/local/lib/python3.5/dist-packages (from python-miio) (4.23.4)
Requirement already satisfied: attrs in /usr/local/lib/python3.5/dist-packages (from python-miio) (18.1.0)
Requirement already satisfied: netifaces!=0.10.5 in /usr/local/lib/python3.5/dist-packages (from zeroconf->python-miio) (0.10.7)
(.env) pi@raspberrypi:~/domoticz/plugins/Chuangmi $ deactivate
pi@raspberrypi:~/domoticz/plugins/Chuangmi $ sudo service domoticz restart
Версия домотикз 4.10217.