WB-MSx Consumer IR Manual: различия между версиями
(поправил) |
|||
(не показано 20 промежуточных версий 3 участников) | |||
Строка 3: | Строка 3: | ||
{{DISPLAYTITLE: Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MSW, WB-MIR }} | {{DISPLAYTITLE: Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MSW, WB-MIR }} | ||
= Назначение = <!--T:1--> | |||
Инфракрасный приёмопередатчик, установленный в устройствах WB-MSW модификации I и WB-MIR, предназначен для записи сигналов с ИК-пультов ДУ бытовых устройств и дальнейшего управления бытовой техникой: кондиционерами, телевизорами и т.д. Модули WB-MIR v.2 и WB-MSW v.3 | Инфракрасный приёмопередатчик, установленный в устройствах WB-MSW модификации I и WB-MIR, предназначен для записи сигналов с ИК-пультов ДУ бытовых устройств и дальнейшего управления бытовой техникой: кондиционерами, телевизорами и т.д. Модули WB-MIR v.2 и WB-MSW v.3 поддерживают около 80 ИК-команд (зависит от объема занимаемой в памяти). | ||
'''Внимание! Все модули, кроме WB-MSW v.3 | '''Внимание! Все модули, кроме WB-MSW v.3, обеспечивают управление возможно только с небольшого расстояния (< 1 метра).''' | ||
== Принцип работы == <!--T:2--> | == Принцип работы == <!--T:2--> | ||
=== Описание === | === Описание === | ||
Строка 20: | Строка 20: | ||
=== Управление телевизором === | === Управление телевизором === | ||
Обычно пульт телевизора работает в одиночном режиме — передаёт на устройство код нажатой клавиши. Поэтому, достаточно записать сигналы используемых кнопок пульта и вы сможете полностью управлять устройством. | |||
В итоге у вас получится в памяти модуля набор команд, которые соответствуют клавишам на пульте ДУ: | |||
* Включить / выключить | |||
* Прибавить громкость | |||
* Убавить громкость | |||
* Листать каналы вперёд | |||
* Листать каналы назад | |||
* Нажата кнопка 1 | |||
Также можно записывать целые режимы, например, включить 13 программу. | |||
=== Управление климатической техникой === | === Управление климатической техникой === | ||
Обычно пульт климатической техники передаёт на устройство набор команд, который соответствует выбранному на пульте режиму. Притом, состояние устройства (включено или выключено) может передаваться отдельно. | |||
Например, чтобы управлять кондиционером, нужно сперва выставить нужный режим на пульте, а потом записать его в модуль. Для записи сигнала в модуль, направьте пульт на ИК-приёмник и измените один из параметров, например, температуру. | |||
В итоге получится в памяти модуля набор готовых режимов: | |||
* Выключен | |||
* Включён | |||
* вентилятор на максимум, охлаждаем до 20 °C | |||
* вентилятор на малый, охлаждаем до 20 °C | |||
* вентилятор на средний, нагреваем до 27 °C | |||
=== Управление другой техникой по ИК === | === Управление другой техникой по ИК === | ||
С помощью модуля вы можете управлять любой техникой, которая принимает команды по ИК. Для этого нужно выяснить: передаёт пульт одиночные сигналы на каждую нажатую клавишу или целиком режим и выбрать одну из описанных выше стратегий. | |||
==Способ представления и хранения сигнала== <!--T:6--> | ==Способ представления и хранения сигнала== <!--T:6--> | ||
Строка 38: | Строка 57: | ||
<!--T:9--> | <!--T:9--> | ||
В последних версиях прошивок модулей WB-MIR v.2 и WB-MSW v.3 последовательности команд сжимаются по специальному алгоритму, чтобы обеспечить более высокую плотность хранения. Перед воспроизведением последовательности разархивируются. | |||
== Управление модулем по Modbus == <!--T:10--> | == Управление модулем по Modbus == <!--T:10--> | ||
Строка 58: | Строка 76: | ||
* редактирование сигнала в оперативной памяти. | * редактирование сигнала в оперативной памяти. | ||
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>. | В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке <code>BUSY</code>. | ||
== Постоянный режим == <!--T:15--> | == Постоянный режим == <!--T:15--> | ||
В постоянном режиме ИК-команды сохраняются в памяти устройства и доступны после перезагрузки по питанию. Каждая команда хранится в отдельном "банке" памяти. Количество банков памяти зависит отпрошивки устройства. До прошивки 3.7.2 включительно устройства имели 7 банков памяти ИК-команд. Начиная с версии 4.4.0 поддерживается 32 банка. Промежуточные версии позволяли записывать до 80 команд, но в ряде случаев делали это некорректно | В постоянном режиме ИК-команды сохраняются в памяти устройства и доступны после перезагрузки по питанию. Каждая команда хранится в отдельном "банке" памяти. Количество банков памяти зависит отпрошивки устройства. До прошивки 3.7.2 включительно устройства имели 7 банков памяти ИК-команд. Начиная с версии 4.4.0 поддерживается 32 банка. Промежуточные версии позволяли записывать до 80 команд, но в ряде случаев делали это некорректно. | ||
==== Запись сигнала в постоянную память с пульта ДУ ==== <!--T:16--> | ==== Запись сигнала в постоянную память с пульта ДУ ==== <!--T:16--> | ||
Строка 70: | Строка 84: | ||
<!--T:17--> | <!--T:17--> | ||
Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите | Чтобы записать сигнал под номером <code>i</code> с пульта ДУ в память, запишите 1 в регистр флагов по адресу <code>5300 + i</code>. Затем направьте пульт ДУ на ИК-приёмник и нажмите кнопку на пульте. После отпускания кнопки, завершите запись сигнала, записав 0 в регистр флагов по адресу <code>5300 + i</code>. | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16 | #Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16 | ||
Строка 91: | Строка 105: | ||
==== Удаление всех сигналов из постоянной памяти ==== <!--T:19--> | ==== Удаление всех сигналов из постоянной памяти ==== <!--T:19--> | ||
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу <code>5000</code>. | Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу <code>5000</code>. | ||
== Оперативный режим == <!--T:20--> | == Оперативный режим == <!--T:20--> | ||
Строка 124: | Строка 127: | ||
== Чтение/запись банков команд == | == Чтение/запись банков команд == | ||
Пользователь [https://support.wirenboard.com/u/pivcheg pivcheg] написал скрипты чтения и записи IR-команд, которые [https://support.wirenboard.com/t/wb-mir-wb-msw-skript-dlya-sohraneniya-i-zapisi-komand-ik-ir/7918/16 | Пользователь [https://support.wirenboard.com/u/pivcheg pivcheg] написал скрипты чтения и записи IR-команд, которые [https://support.wirenboard.com/t/wb-mir-wb-msw-skript-dlya-sohraneniya-i-zapisi-komand-ik-ir/7918/16 выложил на форуме]. | ||
Мы немного поправили им имена и опубликовали в архиве: [[Media:ir_backup.tgz | ir_backup.tgz]] | Мы немного поправили им имена и опубликовали в архиве: [[Media:ir_backup.tgz | ir_backup.tgz]] | ||
Строка 189: | Строка 192: | ||
Starting wb-mqtt-serial | Starting wb-mqtt-serial | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Карта регистров == <!--T:24--> | == Карта регистров == <!--T:24--> | ||
Строка 293: | Строка 215: | ||
|- | |- | ||
| 5400 || input || number_of_banks || style="text-align:left" | Размер данных IR-команды в байтах || I | | 5400 || input || number_of_banks || style="text-align:left" | Размер данных IR-команды в байтах || I | ||
|- | |- | ||
|} | |} | ||
<!--T:29--> | <!--T:29--> | ||
В последних версиях прошивок значение number_of_banks равняется 80, то есть, например, регистры размера команд имеют значения от 5400 до 5479. | |||
</translate> | </translate> |
Версия 14:52, 2 ноября 2021
Назначение
Инфракрасный приёмопередатчик, установленный в устройствах WB-MSW модификации I и WB-MIR, предназначен для записи сигналов с ИК-пультов ДУ бытовых устройств и дальнейшего управления бытовой техникой: кондиционерами, телевизорами и т.д. Модули WB-MIR v.2 и WB-MSW v.3 поддерживают около 80 ИК-команд (зависит от объема занимаемой в памяти).
Внимание! Все модули, кроме WB-MSW v.3, обеспечивают управление возможно только с небольшого расстояния (< 1 метра).
Принцип работы
Описание
Записываете управляющий сигнал с пульта дистанционного управления устройством в память модуля и потом воспроизводите его.
Вы можете записать сигнал в одну из двух видов памяти:
- Постоянную — записанные команды хранятся в ROM-буферах, которые записываются в ПЗУ модуля и сохраняются при отключении питания.
- Оперативную — это RAM-буфер модуля, данные теряются при отключении питания.
Помните, что при использовании постоянной памяти вы расходуете ресурс ПЗУ, каждую ячейку можно перезаписать не более 1000 раз.
Подробнее о записи и воспроизведении сигналов читайте в разделах Постоянный режим и Оперативный режим.
Управление телевизором
Обычно пульт телевизора работает в одиночном режиме — передаёт на устройство код нажатой клавиши. Поэтому, достаточно записать сигналы используемых кнопок пульта и вы сможете полностью управлять устройством.
В итоге у вас получится в памяти модуля набор команд, которые соответствуют клавишам на пульте ДУ:
- Включить / выключить
- Прибавить громкость
- Убавить громкость
- Листать каналы вперёд
- Листать каналы назад
- Нажата кнопка 1
Также можно записывать целые режимы, например, включить 13 программу.
Управление климатической техникой
Обычно пульт климатической техники передаёт на устройство набор команд, который соответствует выбранному на пульте режиму. Притом, состояние устройства (включено или выключено) может передаваться отдельно.
Например, чтобы управлять кондиционером, нужно сперва выставить нужный режим на пульте, а потом записать его в модуль. Для записи сигнала в модуль, направьте пульт на ИК-приёмник и измените один из параметров, например, температуру.
В итоге получится в памяти модуля набор готовых режимов:
- Выключен
- Включён
- вентилятор на максимум, охлаждаем до 20 °C
- вентилятор на малый, охлаждаем до 20 °C
- вентилятор на средний, нагреваем до 27 °C
Управление другой техникой по ИК
С помощью модуля вы можете управлять любой техникой, которая принимает команды по ИК. Для этого нужно выяснить: передаёт пульт одиночные сигналы на каждую нажатую клавишу или целиком режим и выбрать одну из описанных выше стратегий.
Способ представления и хранения сигнала
Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 0 до 65535), где каждое число - продолжительность логического 0 или 1 в сигнале в квантах по 10 микросекунд. Следовательно, максимальная продолжительность каждого нуля или единицы должна быть не более 65535 * 10 мкс = 655350 мкс = 0,655 секунд
. Первое число последовательности — длительность первой логической единицы. Конец последовательности маркируется двумя периодами продолжительностью 0.
В оперативном режиме IR-сигнал (только один) находится в оперативной памяти устройства. Он записывается туда с пульта управления при подаче соответствующей Modbus-команды или путем записи значений в соответствующие регистры с внешнего устройства по Modbus (например, с контроллера Wiren Board), также IR-сигнал может быть скопирован из Flash-ПЗУ. IR-сигнал может быть воспроизведён из оперативной памяти и затем перезаписан; ресурс ПЗУ при этом не расходуется. При отключении питания сигнал в оперативной памяти не сохраняется.
В последних версиях прошивок модулей WB-MIR v.2 и WB-MSW v.3 последовательности команд сжимаются по специальному алгоритму, чтобы обеспечить более высокую плотность хранения. Перед воспроизведением последовательности разархивируются.
Управление модулем по Modbus
Внимание! Номера используемых Modbus регистров менялись, начиная с версии прошивки 3.2.0. В инструкции указаны новые номера регистров. Если вы пользуетесь устройством со старой прошивкой, общий принцип остаётся прежним, но номера регистров сдвигаются; как именно — смотрите в Карта регистров флагов и входов (Coils и Inputs). Полное описание регистров ИК-устройств можно найти в этой статье в разделе Карта регистров.
Обмен данными
На физическом уровне модуль подключается через интерфейс RS-485. Для управления модулем используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу Протокол Modbus. Modbus-адрес модуля задается на заводе и нанесен на наклейке на его боковой стороне. Адрес может быть изменен программно.
В устройствах с версией прошивки 3.1.0 и позднее также можно изменить настройки параметров обмена данными — смотрите таблицу регистров Modbus.
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus; полный список можно найти в описании карты регистров. Есть 3 типа операций с сигналами:
- запись сигнала в память с пульта ДУ,
- воспроизведение сигнала из памяти,
- редактирование сигнала в оперативной памяти.
В каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке BUSY
.
Постоянный режим
В постоянном режиме ИК-команды сохраняются в памяти устройства и доступны после перезагрузки по питанию. Каждая команда хранится в отдельном "банке" памяти. Количество банков памяти зависит отпрошивки устройства. До прошивки 3.7.2 включительно устройства имели 7 банков памяти ИК-команд. Начиная с версии 4.4.0 поддерживается 32 банка. Промежуточные версии позволяли записывать до 80 команд, но в ряде случаев делали это некорректно.
Запись сигнала в постоянную память с пульта ДУ
Примечение: Подробно о работе в режиме командной строки рассказано в разделе Управление модулем из командной строки.
Чтобы записать сигнал под номером i
с пульта ДУ в память, запишите 1 в регистр флагов по адресу 5300 + i
. Затем направьте пульт ДУ на ИК-приёмник и нажмите кнопку на пульте. После отпускания кнопки, завершите запись сигнала, записав 0 в регистр флагов по адресу 5300 + i
.
#Начинаем запись сигнала с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -mrtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 1
#Направляем пульт на окно приемника и нажимаем кнопку на пульте ДУ
root@wirenboard:~# modbus_client --debug -mrtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5301 0
#Завершаем запись сигнала с номером 1
Воспроизведение сигнала из постоянной памяти
Чтобы воспроизвести сигнал под номером i
из памяти, запишите 1 в регистр флага по адресу 5100 + i
. Если сигнал под номером i
не был записан ранее, будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу 5100 + i
будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.
#Отдаём команду воспроизвести сигнал с номером 1. Устройство подключено к порту /dev/ttyRS485-1 и имеет Modbus-адрес 16
root@wirenboard:~# modbus_client --debug -mrtu -b9600 -s2 -pnone /dev/ttyRS485-1 -a16 -t5 -r5101 1
Редактирование сигнала в постоянной памяти
Чтобы отредактировать сигнал под номером i
или записать его по Modbus (без пульта ДУ), запишите 1 в регистр флага по адресу 5200 + i
. После этого сигнал в виде последовательности натуральных чисел (смотрите рисунок "Пример содержимого оперативного буфера WB-MIR") будет записан в подряд идущие регистры хранения, начиная с регистра 2000
. В конце последовательности будут два подряд идущих регистра хранения, содержащих 0. Если сигнал под номером i
не был записан ранее, в регистрах хранения 2000
и 2001
будут находиться 0. Для внесения изменений в последовательность (в том числе для записи команды по Modbus) нужно записать правильную последовательность в данные регистры хранения с помощью команд WRITE_SINGLE_REGISTER
и WRITE_MULTI_REGISTERS
. В конце изменённой последовательности всё также должен быть маркер конца последовательности - два подряд идущих регистра хранения, содержащих 0. Чтобы удалить сигнал, запишите в первые два регистра хранения (2000
и 2001
) 0. После окончания редактирования запишите 0 в регистр флагов по адресу 5200 + i
. До тех пор пока в регистре флагов по адресу 5200 + i
не будет стоять 0, никакие другие операции, в том числе и над другими сигналами, не будут доступны.
Удаление всех сигналов из постоянной памяти
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу 5000
.
Оперативный режим
Запись сигнала в оперативную память с пульта ДУ
Чтобы записать сигнал (только один) с пульта в оперативную память, не помещая при этом в ПЗУ - запишите 1 в регистр флага по адресу 5001
. Далее действия происходят так же, как описано выше для записи сигнала в ПЗУ. После прекращения записи в регистрах хранения по адресу 2000
и дальше будет храниться сигнал в виде последовательности чисел. Эту последовательность можно редактировать, как описано выше. Внимание: содержимое этих регистров хранения не сохраняется при отключении питания устройства!
Воспроизведение сигнала из оперативной памяти
Чтобы воспроизвести сигнал из оперативной памяти, запишите 1 в регистр флага по адресу 5002
. Будет воспроизведён сигнал, записанный в регистрах хранения, начиная с 2000
. В случае отсутствия маркера конца команды будет возвращена ошибка. Пока идёт воспроизведение сигнала, регистр флага по адресу 5002
будет установлен в 1, а затем сам установится в 0. Пока идёт воспроизведение сигнала, никакие другие операции с ИК-приёмопередатчиком по Modbus не будут доступны.
Управление ИК-приёмопередатчиком производится через регистры флагов Modbus (полный список можно найти в #Карта регистров флагов и входов (Coils и Inputs)). Есть 3 типа операций с сигналами:
- запись сигнала в память с пульта ДУ,
- воспроизведение сигнала из памяти,
- редактирование сигнала в памяти.
- в следующих версиях предполагается реализовать непосредственную запись из оперативного буфера в ПЗУ.
Как и в случае работы с регистрами постоянного хранения, в каждый момент времени можно выполнять только одну операцию только над одним сигналом. Так как во время выполнения любой операции в один из регистров флагов ставится 1, а после завершения операции туда же ставится 0, в каждый момент времени среди всех регистров флагов, относящихся к ИК-приёмопередатчику, только один регистр может быть установлен в единицу. Попытка записи 1 в регистры флагов, связанных с ИК, при уже имеющейся единице приведёт к ошибке BUSY
.
Удаление всех сигналов из постоянной памяти
Чтобы удалить все записанные сигналы, запишите 1 в регистр флагов по адресу 5000
.
Чтение/запись банков команд
Пользователь pivcheg написал скрипты чтения и записи IR-команд, которые выложил на форуме.
Мы немного поправили им имена и опубликовали в архиве: ir_backup.tgz
Подготовка
Содержимое архива:
- read_roms.pl — скрипт сохранения ИК-команд в файлы
- write_roms.pl — скрипт записи ИК-команд из файлов в регистры датчика
- compare_bufs.pl, getbuffer.pl, putbuffer.pl — вспомогательные скрипты, запускаются автоматически.
Перед тем, как приступить к чтению и записи команд:
- Зайдите в консоль контроллера по SSH.
- Перейдите в папку
/home
- Загрузите скрипт на контроллер и распакуйте его:
# wget -qO- https://wirenboard.com/wiki/images/1/19/Ir_backup.tgz | tar -xvz -C ./ ir_backup/ ir_backup/getbuffer.pl ir_backup/write_roms.pl ir_backup/putbuffer.pl ir_backup/read_roms.pl ir_backup/readme.txt ir_backup/compare_bufs.pl
- Перейдите в папку с распакованными файлами:
cd ir_backup
Настройки скриптов read_roms.pl и write_roms.pl:
- Скрипт читает/записывает только первые пять банков памяти: 0 — 4, если вам нужно считать/записать больше банков, то измените в скрипте значения
0..4
. - Скорость подключения и serial-порту можно указать в строке
modbus_client…
.
Чтение команд в файлы
Для чтения ИК-команд используется скрипт read_roms.pl
.
Формат запуска скрипта:
./read_roms.pl directory modbus-address
Пример, в котором ИК-команды из устройства с адресом 22
сохраняются в папку ./roms
:
# ./read_roms.pl ./roms 22
Stoping wb-mqtt-serial
->1<-->2<-->3<-->4<-->5<-
Starting wb-mqtt-serial
Запись команд из файлов
Для записи ИК-команд используется скрипт write_roms.pl
.
Формат запуска скрипта:
./write_roms.pl directory modbus-address
Пример, в котором ИК-команды из папки ./roms
записываются в устройство с адресом 22
:
# ./write_roms.pl ./roms/ 22
Stoping wb-mqtt-serial
->1<-->2<-->3<-->4<-->5<-
Starting wb-mqtt-serial
Карта регистров
Карта регистров флагов и входов (Coils и Inputs)
Начальный адрес | Тип | Количество | Назначение | В модификациях |
---|---|---|---|---|
5000 | coil | 1 | Очистка всех банков ИК-команд | I |
5001 | coil | 1 | Запись ИК-команды с ИК-приёмника в Modbus регистры хранения (2000-2509) (RAM), без сохранения в банк команд | I |
5002 | coil | 1 | Воспроизведение ИК-команды из Modbus регистров хранения (2000-2509) (RAM) | I |
5100 (в прошивке 3.1.0 и ранее - 0) | coil | number_of_banks | Воспроизведение ИК-команды из соответствующего банка ROM (Play) | I |
5200 (в прошивке 3.1.0 и ранее - 1000) | coil | number_of_banks | Редактирование ИК-команд (ROM) с копированием в RAM (ROM -> RAM) | I |
5300 (в прошивке 3.1.0 и ранее - 2000) | coil | number_of_banks | Запись в банк ИК-команд с использованием IR-приёмника (Learn) | I |
5400 | input | number_of_banks | Размер данных IR-команды в байтах | I |
В последних версиях прошивок значение number_of_banks равняется 80, то есть, например, регистры размера команд имеют значения от 5400 до 5479.