Пытаюсь написать скрипт для управлениями кондиционерами через ИК и движок правил

Доброго вечера.

Пытаюсь написать скрипт для управлениями кондиционерами через ИК и движок правил.

То что осилил:

  • Виртуальное устройство с параметрами кондея
  • JS, который берет параметры кондея, генерит ИК команду и собирает байтики для записи в регистр 2000+ (для того чтобы положить ИК команду RAM)

Проблема эти байтики передать через API. Вижу два варианта:

  • Выполнить компнду modbus_client из JS. Плохо тем, что, похоже, перед и после каждой записи придется останавливать драйвер который wb-mqtt-serial. Поэтому этот вариант не подходит.
  • Настроить регистр “строку” с адресом 2000+ и писать в нее через dev. Тут проблемы две:
    • Я не смог настроить регистр через конфиг. Пробовал добавить кастномный переметр через веб интерфейс (строка, holding register длинной 18 байт начиная с 2000) - после сохранения падает клиент. Что я делаю не так и можно ли так вообще?
    • Буффер будет передаваться каждый раз. Можно ли как то настроить чтобы передавался один раз, или выставить низкий приоритет для кастомной проперти?

В идеале конечно бы иметь возможность в wb-mqtt-serial передавать данные один раз. Например, при получении обновления от MQTT добавлять его в очередь и передавать ровно один раз. Я готов законтребютить это в GitHub - wirenboard/wb-mqtt-serial: Wiren Board MQTT serial protocol driver если фича устраивает архитектурно.

Подобный режим, помимо этого случая, думаю, будет очень полезен при пуско-наладке. Также можно добавить противополжный вариант: читать данные из регистра ровно один раз. Очень не хватает этого для чтенияи, например, серийного номера или других настроек однократно. Но, это не относится к этой теме. Тоже готов законтребютить это если договоримся об архитектуре.

p.s. если поможете - скрипты могу выложить в общий доступ. Будет доступно полное управление следующими кондеями (включая передачу температуры iFeel!):

  • Airwell

  • Ballu

  • Carrier

  • Daikin

  • Fuego

  • Fujitsu

  • Gree

  • Gree_YAC

  • Hitachi

  • Hyundai

  • MitsubishiElectric

  • MitsubishiHeavy

  • Nibe

  • PanasonicCPK

  • PanasonicCS

  • Philco

  • Samsung

  • Sharp

  • Toshiba

Проверить смогу только Gree, других кондеев нет :slight_smile: Код для формирования ИК сингалов отсюда: Raw-IR-decoder-for-Arduino/rawirdecode at master · ToniA/Raw-IR-decoder-for-Arduino · GitHub

Нашел некий (незадокументированный, видимо) mqtt rpc который позволяет отправлять кастомные команды. Попробую использовать его.

wb-mqtt-serial

            response = await self.rpc_client.make_rpc_call(
                driver="wb-mqtt-serial",
                service="port",
                method="Load",
                params=rpc_request,
                timeout=rpc_call_timeout,
            )

Буду рад если есть более изящный способ.

Документация на отправку команд в порт через RPC тут: wb-mqtt-serial: Прямое чтение и запись в порт.

1 лайк

О, это просто влошебно, все завелось с первого раза. Спасибо!

И даже утилитка уже есть вместо модбас клиента чтобы не отключать mqtt_serial. Ну просто влошебно!

Скриптик приведу в порядок и опубикую ссылку тут. Попробую сделать так чтобы IR устройства можно было просто добавлять и привызяывать к ИК передатичкам.

1 лайк

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.