WB-MSx Consumer IR Manual: различия между версиями

Материал из Wiren Board
Строка 38: Строка 38:
Также можно записывать целые режимы, например, включить 13 программу.
Также можно записывать целые режимы, например, включить 13 программу.


=== Управление кондиционером ===
=== Управление кондиционером или тепловой завесой ===
Чтобы управлять кондиционером, нужно сперва выставить нужный режим на пульте, а потом записать его в модуль.  
Чтобы управлять кондиционером, нужно сперва выставить нужный режим на пульте, а потом записать его в модуль.  



Версия 13:50, 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

Способ представления и хранения сигнала

Пример содержимого оперативного буфера WB-MIR

Сигнал хранится в памяти устройства виде последовательности натуральных чисел (каждое от 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 — вспомогательные скрипты, запускаются автоматически.

Перед тем, как приступить к чтению и записи команд:

  1. Зайдите в консоль контроллера по SSH.
  2. Перейдите в папку /home
  3. Загрузите скрипт на контроллер и распакуйте его:
    # 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
    
  4. Перейдите в папку с распакованными файлами:
    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.