Перевести записанное значение ИК кода в MSW в код

На этапе экспериментов, кстати, когда были у меня телевизоры Hartens с поддержкой Алисы, она свои же пульты не могла определить. Максимум - включить-выключить. Тогда я пилил своё на RP, чтобы отдавать Алисе статус. Ведь она не знает включен телевизор или нет. И по команде “выключи все телевизоры” естественно половина включалась, другая выключалась. RP пингами определяла включено или нет. Т.е. жестокий DIY. Сейчас у меня нативные Яндекс телевизоры со встроенной станцией. Проблема исчезла.

И текущая тема поднимается раз в несколько месяцев. Поищите.

Совершенно верно. Никакого, по большему счету “анализа” - просто воспроизведение сигналов той же длительности и пауз между ними.
Вы как и @hexprof правы.

Нет, сделать-то можно. Наиболее распространет RC5 ЕМНИП, можно сделать его поддержку. И генерировать не саму посылку а ее код. Я такое да Ардуинке программировал. Но - это на самом деле не очень востребовано. Тот же “пульт” от Яндекс - точно так же “записывает” команды.

То есть она все нужна!

Проблема обратной связи имеет место быть. Но она вполне решаема довольно часто так или иначе … И не предмет этой темы.

Нет, в том смысле как это вы имеете ввиду (сейчас MSW и так пишет “все стандарты”)

Я предлагаю чуть по другому и проще.

3 этапа. 1 и 2 простые и дают много возможностей.
Третий и последующие позже и видимо более расширенно.

1 этап.
Расширить формат записи (протокол), сохраняя преемственность в RAM (а может и “сжатие ROM - тут не знаю ваш алгоритм)”

Формат данных такой (чтобы и старый работал и “новый”):

  1. Если первое слово равно нулю, то формат записи “новый”, если больше 1(2 …3) - то “старый”: каждое слово определяет длительность сигнала или паузы последовательно.
  2. В новом формате. Второе слово определяет “длительность такта”.
  3. Все следующие слова, кроме нулевого, определяют: если бит равен 1, то сигнал передается длительностью в такт, если бит равен нулю, то сигнал имеет паузу длительностью в такт. то есть 1100110010… Это передать сигнал длительностью два такта, два такта пауза, два такта сигнал, два такта пауза, такт сигнал, такт пауза …
  4. Нулевое слово определяет паузу длиной в секунду … (больше?)
  5. Если за нулевым словом идут данные, то работа по пункту 3 (отправляем 2 посылку (2 команду) и так далее.
  6. Если за нулевым словом следует еще одно нулевое слово, то работа прекращается.

2 этап.
Чтение и запись данных штатно через wb-rules и WEB интерфейс …

Чтение данных: считываем все данные и RAM и переводим в новый формат:

  • вычисляем период с самым маленьким значением отличным от нуля
  • вычисляем период с максимальным значением, но не больше 0,75 от вычисленного на первом шаге
  • берем среднее значение и считаем его равным “такту” - заносим во второе слово новой последовательности (первое 0)
  • проходим по всей последовательности преобразуя все сигналы (паузы) меньше 0.75 от минимального в 1 (0) бит. Все что меньше 1.75 в 11 (00) бит, все что меньше 2.75 в 111 (000) бит …

Делаем возможность записи последовательности в RAM штатно через wb-rules (WEB интерфейс), как следствие в любом формате, как новом, так и старом.

Если кто-то будет писать в RAM в старом формате и очень длительные последовательности, то … значит так ему нужно, даже если будет “тормозить” (правда непонятно что и где). Это в любом случае гораздо быстрее и проще чем переходить в shell, останавливать mqtt и модбас клиентом писать данные, а потом запускать (только его остановка занимает несколько секунд …)

3 этап.

Даем возможность добавлять протоколы ИК. Их не так много. По сути протокол, это:

  • стартовая посылка (может отсутствовать) из какой-то последовательности
  • данные
  • последний (иногда и промежуточные) байт (или какие-то биты) - контрольная сумма, которую нужно проверить одним из штатных механизмов протокола.

Даем возможность править и публиковать (собирать от пользователей) формат протокола конкретного устройства (такие-то биты задают температуру, такие-то включение, такие-то то то …) чтобы можно было прямо готовые команды отправлять в устройство.

3+ этап
Автоматическое распознование протокола и устройства.

Так как протоколов не так много, сделать три самых популярных и это закроет более 70 процентов всех устройств по протоколу.
По формату не знаю, не оценивал, но там тоже должно быть просто.

По максимум устройства возложить на пользователей … НО!!! Дать пользователям простой инструмент для этого. Теже esp-шники заносят все эксель сначала, потом уже биты разносят и это попадает в заголовочные файлы (но делает куча пользователей, одному человеку это просто не под силу).
То есть на пульте выставляется что именно, это помечается температура, качение …
Записывается. Меняется температура - записывается и сразу показывается разница …
Но это уже 4+ этап …

У меня пульт в телефоне выглядит так:

  • выберите тип устройства
  • выберите производителя (или всех)
  • направьте на устройство
  • нажмите на кнопку включения
  • если включился - дальше, если нет нажмите снова
  • далее либо сразу пульт, либо еще одно действие (увеличьте температуру, кондиционер пикнул или нет) …

В тех же кафе и гостиницах уже “заклеивают” окошки ИК в общих залах. Если раньше аналогичные устройства были “хакерскими”, но свободно покупались на али, то теперь это уже в телефонах “у каждого”.

Но в любом случае 1 и 2 этап позволит не использовать ROM и просто и быстро отправлять команды в RAM на выполнение. И значительно расширит возможности по управлению. Делать 3 этап и дальше … будет понятно как пойдет 2 …

Я добавлю в пожелания вариант доработки, конечно.

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

Зачем в телефоне? Датчик довольно “тупое” устройство по определению.
А вот контроллер легко может быстро записывать команды алгоритмом выше и проверять …
Это “функция” ПО контроллера, имхо …

Да. Сделать такое можно. Но вот пользы от решения (его разработка - разовая, ведение и актуализация базы команд - постоянное) не столько чтобы выделять на это ресурсы.

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

Не уверен. но вам виднее.

Но в любом случае, нужен механизм штатный записи в RAM оперативно из wb-rules (хотя бы в старом формате) и новый формат типа предложенного выше, для уменьшения объема записи (ускорения, особенно, если это критично)

Есть RPC вызов в wb-mqtt-serial.

В общем, нужно как-то реализовать, штатно.
Давайте ссылку на это RPC, поддерживаемый производителем (чтобы и завтра оно работало).
Переходить на выполнение команд в консоли из wb-rules, останавливая брокер wb-mqtt-serial. - это не то что “не штатно”, это недопустимо.

Именно для Modbus вот: GitHub - wirenboard/wb-mqtt-serial: Wiren Board MQTT serial protocol driver

1 лайк

Принято, спасибо, буду пробовать.

А как из wb-rules включить/проверить включен ли/отключить опрос канала?

Такой механизм настройки не предусмотрен.