diff --git a/debian/changelog b/debian/changelog index 6998568a..98e3e00a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +wb-mqtt-serial (2.153.0) stable; urgency=medium + + * Deprecate WB-MIR v.2 template + * Add new template for WB-MIR v.2 with buttons support + * Add new template for WB-MIR v.3 + + -- Radmir Khakimov Tue, 17 Dec 2024 20:35:00 +0500 + wb-mqtt-serial (2.152.5) stable; urgency=medium * Validate conditions syntax in device templates diff --git a/templates/config-wb-mir_v2.json b/templates/config-wb-mir_v2.json index 86f022fa..8981de1e 100644 --- a/templates/config-wb-mir_v2.json +++ b/templates/config-wb-mir_v2.json @@ -2,6 +2,7 @@ "title": "WB-MIR-v2_template_title", "device_type": "WB-MIR v2", "group": "g-wb", + "deprecated": true, "hw": [ { "signature": "WBMIR3" diff --git a/templates/config-wb-mir_v2_buttons.json.jinja b/templates/config-wb-mir_v2_buttons.json.jinja new file mode 100644 index 00000000..2f5519cf --- /dev/null +++ b/templates/config-wb-mir_v2_buttons.json.jinja @@ -0,0 +1,523 @@ +{% set FIRST_ROM = 1 -%} +{% set LAST_ROM = 40 -%} +{% set INPUTS_NUMBER = 1 -%} +{% set FIRST_INPUT = 1 -%} +{ + "title": "WB-MIR-v.2_template_title", + "device_type": "tpl1_wb_mir_v2", + "group": "g-wb", + "hw": [ + { + "signature": "WBMIR3" + } + ], + "device": { + "name": "WB-MIR v2", + "id": "wb-mir_v2", + "max_read_registers": 0, + "response_timeout_ms": 1, + "frame_timeout_ms": 8, + "enable_wb_continuous_read": true, + "min_request_interval": 100, + + "groups": [ + { + "title": "IR Commands", + "id": "ir_commands" + }, + {% for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + { + "title": "Input {{in_num}}", + "id": "g_in{{in_num}}" + }, + { + "title": "Press Parameters", + "id": "gg_in{{in_num}}_press_params", + "group": "g_in{{in_num}}" + }, + { + "title": "input{{in_num}}_channels", + "id": "gg_in{{in_num}}_channels", + "group": "g_in{{in_num}}", + "ui_options": { + "wb": { + "disable_title": true + } + } + }, + {% endfor -%} + { + "title": "General", + "id": "g_general" + }, + { + "title": "HW Info", + "id": "g_hw_info" + } + ], + + "parameters": { + {% for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + "in{{in_num}}_mode": { + "title": "Mode", + "description": "mode_description", + "address": {{275 + in_num - 1}}, + "reg_type": "holding", + "enum": [0, 1], + "default": 0, + "enum_titles": [ + "1-Wire", + "Counting and press detection" + ], + "group": "g_in{{in_num}}", + "order": 1 + }, + "in{{in_num}}_debounce_ms": { + "title": "debounce_time_title", + "description": "debounce_time_description", + "address": {{340 + in_num - 1}}, + "reg_type": "holding", + "min": 0, + "max": 2000, + "default": 50, + "group": "g_in{{in_num}}", + "order": 2, + "condition": "in{{in_num}}_mode==1" + }, + "in{{in_num}}_lp_hold_time": { + "group": "gg_in{{in_num}}_press_params", + "title": "lp_hold_time_title", + "description": "lp_hold_time_description", + "order": 1, + "address": {{1100 + in_num - 1}}, + "reg_type": "holding", + "default": 1000, + "min": 500, + "max": 5000, + "condition": "in{{in_num}}_mode==1" + }, + "in{{in_num}}_secp_waiting_time": { + "group": "gg_in{{in_num}}_press_params", + "title": "secp_waiting_time_title", + "description": "secp_waiting_time_description", + "order": 2, + "address": {{1140 + in_num - 1}}, + "reg_type": "holding", + "default": 300, + "min": 0, + "max": 2000, + "condition": "in{{in_num}}_mode==1" + }, + {% endfor -%} + "temperature_readings_filter_deg": { + "title": "temperature_readings_filter_deg_title", + "description": "temperature_readings_filter_deg_description", + "address": 99, + "reg_type": "holding", + "scale": 0.0625, + "default": 1, + "group": "g_general", + "order": 2 + }, + "temperature_readings_period_s": { + "title": "temperature_readings_period_s_title", + "description": "temperature_readings_period_s_description", + "address": 101, + "reg_type": "holding", + "default": 2, + "min": 1, + "max": 60, + "group": "g_general", + "order": 3 + }, + "baud_rate": { + "title": "Baud rate", + "description": "baud_rate_description", + "address": 110, + "reg_type": "holding", + "enum": [96, 192, 384, 576, 1152], + "default": 96, + "enum_titles": [ + "9600", + "19200", + "38400", + "57600", + "115200" + ], + "group": "g_general", + "order": 1 + }, + "rs485_response_delay_ms": { + "title": "RS-485 Response Delay (ms)", + "address": 113, + "reg_type": "holding", + "default": 8, + "group": "g_general", + "order": 2 + }, + "disable_indication": { + "title": "Status LED", + "address": 130, + "reg_type": "holding", + "enum": [0, 1], + "enum_titles": ["Enabled", "Disabled"], + "default": 0, + "group": "g_general", + "order": 3 + } + }, + + "channels": [ + { + "name": "Play from RAM", + "reg_type": "coil", + "address": 5002, + "type": "pushbutton", + "group": "ir_commands" + }, + { + "name": "Record to RAM", + "id": "Learn to RAM", + "reg_type": "coil", + "address": 5001, + "type": "switch", + "group": "ir_commands" + }, + + {% for rom in range(FIRST_ROM, LAST_ROM + 1) -%} + {% set enabled = "true" if rom < 11 else "false" -%} + { + "name": "Play command {{ rom }}", + "id": "Play from ROM{{ rom }}", + "reg_type": "coil", + "address": {{ 5100 + rom - 1 }}, + "type": "pushbutton", + "group": "ir_commands", + "enabled": {{ enabled }} + }, + {% endfor -%} + + {% for rom in range(FIRST_ROM, LAST_ROM + 1) -%} + { + "name": "Editing command {{ rom }} in RAM", + "id": "ROM{{ rom }} -> RAM", + "reg_type": "coil", + "address": {{ 5200 + rom - 1 }}, + "type": "switch", + "group": "ir_commands", + "enabled": false + }, + {% set enabled = "true" if rom < 11 else "false" -%} + { + "name": "Command {{ rom }} recording", + "id": "Learn to ROM{{ rom }}", + "reg_type": "coil", + "address": {{ 5300 + rom - 1 }}, + "type": "switch", + "group": "ir_commands", + "enabled": {{ enabled }} + }, + { + "name": "Command {{ rom }} size", + "id": "ROM{{ rom }} size", + "reg_type": "input", + "address": {{ 5400 + rom - 1 }}, + "group": "ir_commands", + "enabled": false + }, + {% endfor -%} + + { + "name": "Reset all commands", + "id": "Reset all ROM", + "reg_type": "coil", + "address": 5000, + "type": "pushbutton", + "group": "ir_commands" + }, + { + "name": "Play a command", + "id": "Play from BANK", + "reg_type": "holding", + "format": "s16", + "address": 5500, + "type": "value", + "group": "ir_commands", + "enabled": false + }, + { + "name": "Editing a command", + "id": "BANK -> RAM", + "reg_type": "holding", + "format": "s16", + "address": 5501, + "type": "value", + "group": "ir_commands", + "enabled": false + }, + { + "name": "Recording a command", + "id": "Learn to BANK", + "reg_type": "holding", + "format": "s16", + "address": 5502, + "type": "value", + "group": "ir_commands", + "enabled": false + }, + {% for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + { + "name": "Input {{in_num}}", + "reg_type": "discrete", + "address": {{in_num - 1}}, + "type": "switch", + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Counter", + "reg_type": "input", + "format": "u16", + "address": {{277 + in_num - 1}}, + "type": "value", + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Single Press Counter", + "reg_type": "input", + "address": {{464 + in_num - 1}}, + "type": "value", + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Long Press Counter", + "reg_type": "input", + "address": {{480 + in_num - 1}}, + "type": "value", + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Double Press Counter", + "reg_type": "input", + "address": {{496 + in_num - 1}}, + "type": "value", + "enabled": false, + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Shortlong Press Counter", + "reg_type": "input", + "address": {{512 + in_num - 1}}, + "type": "value", + "enabled": false, + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + {% endfor -%} + { + "name": "External Temperature Sensor", + "reg_type": "input", + "address": 7, + "type": "value", + "units": "deg C", + "format": "s16", + "scale": 0.0625, + "error_value": "0x7FFF", + "group": "gg_in1_channels", + "condition": "in1_mode==0" + }, + { + "name": "External Temperature Sensor OK", + "reg_type": "discrete", + "address": 16, + "type": "switch", + "enabled": false, + "group": "gg_in1_channels", + "condition": "in1_mode==0" + }, + { + "name": "Reset All Counters", + "reg_type": "holding", + "address": 100, + "value": 1, + "type": "pushbutton", + "enabled": false, + "group": "g_general", + "condition": " + {%- for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + in{{in_num}}_mode==1 + {%- if not loop.last -%} || {%- endif -%} + {%- endfor -%} + " + }, + { + "name": "Serial NO", + "type": "text", + "reg_type": "input", + "address": 270, + "format": "u32", + "group": "g_hw_info" + }, + { + "name": "FW Version", + "reg_type": "input", + "address": 250, + "type": "text", + "format": "string", + "string_data_size": 16, + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "Input Voltage", + "reg_type": "input", + "address": 121, + "scale": 0.001, + "type": "value", + "units": "V", + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "Uptime", + "reg_type": "input", + "address": 104, + "format": "u32", + "type": "value", + "units": "s", + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "MCU Temperature", + "reg_type": "input", + "address": 124, + "type": "value", + "units": "deg C", + "format": "s16", + "scale": 0.1, + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "MCU Voltage", + "reg_type": "input", + "address": 123, + "scale": 0.001, + "type": "value", + "units": "V", + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "Minimum MCU Voltage Since Startup", + "reg_type": "input", + "address": 119, + "scale": 0.001, + "type": "value", + "units": "V", + "enabled": false, + "group": "g_hw_info" + } + ], + + "translations": { + "en": { + "WB-MIR-v.2_template_title": "WB-MIR v.2 (Modbus IR remote control)", + + "temperature_readings_filter_deg_title": "Erroneous 1-Wire Temperature Readings Filter (°C)", + "temperature_readings_filter_deg_description": "If the new value equals 85 °C, it is discarded if it differs from the previous one by more than the filter value. Write 0 to disable the filter. The default value is 1", + "temperature_readings_period_s_title": "Temperature sensor poll period (s)", + "temperature_readings_period_s_description": "When changing this parameter, you should also change the erroneous values filter coefficient. The default value is 2", + + "mode_description": "For press detection, firmware version 4.32.0 or newer is required", + "baud_rate_description": "Make sure that communication with the device is established before changing this parameter. Select required baud rate, save configuration and then change port baud rate to the same value. Default value is 9600", + + "lp_hold_time_title": "Long Press Time (ms)", + "secp_waiting_time_title": "Second Press Waiting Time (ms)", + "debounce_time_title": "Debounce Time (ms)", + + "lp_hold_time_description": "If the press is longer than the specified time, then it is long. Default value is 1000", + "secp_waiting_time_description": "If there is no second press during the specified time then the press is single. 0 - disables all presses except short and long. Adds a delay to the response to a short press. Default value is 300", + "debounce_time_description": "For press detection must be 5-10 times less than the second press waiting time. Adds a delay to the response to presses. Default value is 50" + }, + "ru": { + "WB-MIR-v.2_template_title": "WB-MIR v.2 (Modbus-модуль ИК-управления)", + "IR Commands": "ИК-команды", + "General": "Общее", + "HW Info": "Данные модуля", + "RS-485 Response Delay (ms)": "Задержка перед ответом по RS-485 (мс)", + "Status LED": "Индикатор состояния", + "Enabled": "Активен", + "Baud rate": "Скорость обмена", + "baud_rate_description": "Перед изменением параметра убедитесь, что связь с устройством установлена. Выберите нужную скорость обмена, сохраните конфигурацию, а затем укажите в настройках порта эту же скорость.", + "Record to RAM": "Запись команды в RAM", + "Play from RAM": "Воспроизвести команду из RAM", + + {% for rom in range(FIRST_ROM, LAST_ROM + 1) -%} + "Command {{ rom }} recording": "Запись команды {{ rom }}", + "Command {{ rom }} size": "Размер команды {{ rom }}", + "Editing command {{ rom }} in RAM": "Редактирование команды {{ rom }} в RAM", + "Play command {{ rom }}": "Воспроизвести команду {{ rom }}", + {% endfor -%} + + "Reset all commands": "Стереть все команды", + "Play a command": "Воспроизвести команду", + "Editing a command": "Редактирование команды", + "Recording a command": "Запись команды", + + "temperature_readings_filter_deg_title": "Фильтр ошибочных значений датчика 1-Wire (°C)", + "temperature_readings_filter_deg_description": "Если значение температуры равно 85 °C, то оно отбрасывается, если оно отличается от предыдущего больше, чем на значение фильтра. Запишите 0, чтобы отключить фильтр. Значение по умолчанию - 1", + "temperature_readings_period_s_title": "Период опроса датчика температуры (с)", + "temperature_readings_period_s_description": "При изменении данного параметра, следует также изменить коэффициент фильтра ошибочных значений. Значение по умолчанию - 2", + + {% for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + "Input {{in_num}}": "Вход {{in_num}}", + "Input {{in_num}} Counter": "Счетчик {{in_num}}", + "Input {{in_num}} Single Press Counter": "Счетчик коротких нажатий входа {{in_num}}", + "Input {{in_num}} Long Press Counter": "Счетчик длинных нажатий входа {{in_num}}", + "Input {{in_num}} Double Press Counter": "Счетчик двойных нажатий входа {{in_num}}", + "Input {{in_num}} Shortlong Press Counter": "Счетчик коротких, а затем длинных нажатий входа {{in_num}}", + {% endfor -%} + "External Temperature Sensor": "Датчик температуры", + "External Temperature Sensor OK": "Датчик температуры подключен", + + "Press Parameters": "Параметры нажатий", + "Counting and press detection": "Счет и детектирование нажатий", + "mode_description": "Для детектирования нажатий требуется прошивка версии 4.32.0 или новее", + "Baud rate": "Скорость обмена", + "baud_rate_description": "Перед изменением параметра убедитесь, что связь с устройством установлена. Выберите нужную скорость обмена, сохраните конфигурацию, а затем укажите в настройках порта эту же скорость. Значение по умолчанию - 9600", + + "lp_hold_time_title": "Время длинного нажатия (мс)", + "secp_waiting_time_title": "Время ожидания второго нажатия (мс)", + "debounce_time_title": "Время подавления дребезга (мс)", + + "lp_hold_time_description": "Если нажатие длится больше указанного времени - считаем его длинным. Значение по умолчанию - 1000", + "secp_waiting_time_description": "Если за указанное время второго нажатия не было - считаем нажатие одиночным. 0 - отключит все нажатия кроме короткого и длинного. Вносит задержку в реакцию на короткое нажатие. Значение по умолчанию - 300", + "debounce_time_description": "Для детектирования нажатий значение должно быть в 5-10 раз меньше, чем время ожидания второго нажатия. Вносит задержку в реакцию на нажатия. Значение по умолчанию - 50", + "Reset All Counters": "Сбросить все счетчики", + + "Serial NO": "Серийный номер", + "FW Version": "Версия прошивки", + "Input Voltage": "Напряжение питания", + "Uptime": "Время работы с момента включения (с)", + "MCU Temperature": "Температура МК", + "MCU Voltage": "Напряжение питания МК", + "Minimum MCU Voltage Since Startup": "Минимальное напряжение питания МК с момента включения", + "1-Wire": "Датчик 1-Wire", + "Disabled": "Отключен", + "Mode": "Режим работы" + } + } + } +} diff --git a/templates/config-wb-mir_v3.json.jinja b/templates/config-wb-mir_v3.json.jinja new file mode 100644 index 00000000..2bb36bff --- /dev/null +++ b/templates/config-wb-mir_v3.json.jinja @@ -0,0 +1,508 @@ +{% set FIRST_ROM = 1 -%} +{% set LAST_ROM = 80 -%} +{% set INPUTS_NUMBER = 1 -%} +{% set FIRST_INPUT = 1 -%} +{ + "title": "WB-MIR-v.3_template_title", + "device_type": "WB-MIR v.3", + "group": "g-wb", + "hw": [ + { + "signature": "WB-MIR v.3" + } + ], + "device": { + "name": "WB-MIR v.3", + "id": "wb-mir_v3", + "max_read_registers": 0, + "response_timeout_ms": 1, + "frame_timeout_ms": 8, + "enable_wb_continuous_read": true, + + "groups": [ + { + "title": "IR Commands", + "id": "ir_commands" + }, + {% for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + { + "title": "Input {{in_num}}", + "id": "g_in{{in_num}}" + }, + { + "title": "Press Parameters", + "id": "gg_in{{in_num}}_press_params", + "group": "g_in{{in_num}}" + }, + { + "title": "input{{in_num}}_channels", + "id": "gg_in{{in_num}}_channels", + "group": "g_in{{in_num}}", + "ui_options": { + "wb": { + "disable_title": true + } + } + }, + {% endfor -%} + { + "title": "General", + "id": "g_general" + }, + { + "title": "HW Info", + "id": "g_hw_info" + } + ], + + "parameters": { + {% for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + "in{{in_num}}_mode": { + "title": "Mode", + "address": {{275 + in_num - 1}}, + "reg_type": "holding", + "enum": [0, 1], + "default": 0, + "enum_titles": [ + "1-Wire", + "Counting and press detection" + ], + "group": "g_in{{in_num}}", + "order": 1 + }, + "in{{in_num}}_debounce_ms": { + "title": "debounce_time_title", + "description": "debounce_time_description", + "address": {{340 + in_num - 1}}, + "reg_type": "holding", + "min": 0, + "max": 2000, + "default": 50, + "group": "g_in{{in_num}}", + "order": 2, + "condition": "in{{in_num}}_mode==1" + }, + "in{{in_num}}_lp_hold_time": { + "group": "gg_in{{in_num}}_press_params", + "title": "lp_hold_time_title", + "description": "lp_hold_time_description", + "order": 1, + "address": {{1100 + in_num - 1}}, + "reg_type": "holding", + "default": 1000, + "min": 500, + "max": 5000, + "condition": "in{{in_num}}_mode==1" + }, + "in{{in_num}}_secp_waiting_time": { + "group": "gg_in{{in_num}}_press_params", + "title": "secp_waiting_time_title", + "description": "secp_waiting_time_description", + "order": 2, + "address": {{1140 + in_num - 1}}, + "reg_type": "holding", + "default": 300, + "min": 0, + "max": 2000, + "condition": "in{{in_num}}_mode==1" + }, + {% endfor -%} + "temperature_readings_filter_deg": { + "title": "temperature_readings_filter_deg_title", + "description": "temperature_readings_filter_deg_description", + "address": 99, + "reg_type": "holding", + "scale": 0.0625, + "default": 1, + "group": "g_general", + "order": 2 + }, + "temperature_readings_period_s": { + "title": "temperature_readings_period_s_title", + "description": "temperature_readings_period_s_description", + "address": 101, + "reg_type": "holding", + "default": 2, + "min": 1, + "max": 60, + "group": "g_general", + "order": 3 + }, + "baud_rate": { + "title": "Baud rate", + "description": "baud_rate_description", + "address": 110, + "reg_type": "holding", + "enum": [96, 192, 384, 576, 1152], + "default": 96, + "enum_titles": [ + "9600", + "19200", + "38400", + "57600", + "115200" + ], + "group": "g_general", + "order": 1 + }, + "rs485_response_delay_ms": { + "title": "RS-485 Response Delay (ms)", + "address": 113, + "reg_type": "holding", + "default": 8, + "group": "g_general", + "order": 2 + }, + "disable_indication": { + "title": "Status LED", + "address": 130, + "reg_type": "holding", + "enum": [0, 1], + "enum_titles": ["Enabled", "Disabled"], + "default": 0, + "group": "g_general", + "order": 3 + } + }, + + "channels": [ + { + "name": "Command size in RAM", + "reg_type": "input", + "address": 5520, + "group": "ir_commands", + "enabled": false + }, + { + "name": "Play from RAM", + "reg_type": "coil", + "address": 5002, + "type": "pushbutton", + "group": "ir_commands", + "enabled": false + }, + { + "name": "Record to RAM", + "id": "Learn to RAM", + "reg_type": "coil", + "address": 5001, + "type": "switch", + "group": "ir_commands", + "enabled": false + }, + + {% for rom in range(FIRST_ROM, LAST_ROM + 1) -%} + {% set enabled = "true" if rom < 11 else "false" -%} + { + "name": "Play command {{ rom }}", + "id": "Play from ROM{{ rom }}", + "reg_type": "coil", + "address": {{ 5100 + rom - 1 }}, + "type": "pushbutton", + "group": "ir_commands", + "enabled": {{ enabled }} + }, + {% endfor -%} + + {% for rom in range(FIRST_ROM, LAST_ROM + 1) -%} + {% set enabled = "true" if rom < 11 else "false" -%} + { + "name": "Command {{ rom }} recording", + "id": "Learn to ROM{{ rom }}", + "reg_type": "coil", + "address": {{ 5300 + rom - 1 }}, + "type": "switch", + "group": "ir_commands", + "enabled": {{ enabled }} + }, + { + "name": "Command {{ rom }} size", + "id": "ROM{{ rom }} size", + "reg_type": "input", + "address": {{ 5400 + rom - 1 }}, + "group": "ir_commands", + "enabled": {{ enabled }} + }, + {% endfor -%} + + { + "name": "Reset all commands", + "id": "Reset all ROM", + "reg_type": "coil", + "address": 5000, + "type": "pushbutton", + "group": "ir_commands" + }, + { + "name": "Play a command", + "id": "Play from BANK", + "reg_type": "holding", + "format": "s16", + "address": 5500, + "type": "value", + "group": "ir_commands", + "enabled": false + }, + { + "name": "Recording a command", + "id": "Learn to BANK", + "reg_type": "holding", + "format": "s16", + "address": 5502, + "type": "value", + "group": "ir_commands", + "enabled": false + }, + {% for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + { + "name": "Input {{in_num}}", + "reg_type": "discrete", + "address": {{in_num - 1}}, + "type": "switch", + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Counter", + "reg_type": "input", + "format": "u16", + "address": {{277 + in_num - 1}}, + "type": "value", + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Single Press Counter", + "reg_type": "input", + "address": {{464 + in_num - 1}}, + "type": "value", + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Long Press Counter", + "reg_type": "input", + "address": {{480 + in_num - 1}}, + "type": "value", + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Double Press Counter", + "reg_type": "input", + "address": {{496 + in_num - 1}}, + "type": "value", + "enabled": false, + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + { + "name": "Input {{in_num}} Shortlong Press Counter", + "reg_type": "input", + "address": {{512 + in_num - 1}}, + "type": "value", + "enabled": false, + "sporadic": true, + "group": "gg_in{{in_num}}_channels", + "condition": "in{{in_num}}_mode==1" + }, + {% endfor -%} + { + "name": "External Temperature Sensor", + "reg_type": "input", + "address": 7, + "type": "value", + "units": "deg C", + "format": "s16", + "scale": 0.0625, + "error_value": "0x7FFF", + "group": "gg_in1_channels", + "condition": "in1_mode==0" + }, + { + "name": "External Temperature Sensor OK", + "reg_type": "discrete", + "address": 16, + "type": "switch", + "enabled": false, + "group": "gg_in1_channels", + "condition": "in1_mode==0" + }, + { + "name": "Reset All Counters", + "reg_type": "holding", + "address": 100, + "value": 1, + "type": "pushbutton", + "enabled": false, + "group": "g_general", + "condition": " + {%- for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + in{{in_num}}_mode==1 + {%- if not loop.last -%} || {%- endif -%} + {%- endfor -%} + " + }, + { + "name": "Serial NO", + "type": "text", + "reg_type": "input", + "address": 270, + "format": "u32", + "group": "g_hw_info" + }, + { + "name": "FW Version", + "reg_type": "input", + "address": 250, + "type": "text", + "format": "string", + "string_data_size": 16, + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "Input Voltage", + "reg_type": "input", + "address": 121, + "scale": 0.001, + "type": "value", + "units": "V", + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "Uptime", + "reg_type": "input", + "address": 104, + "format": "u32", + "type": "value", + "units": "s", + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "MCU Temperature", + "reg_type": "input", + "address": 124, + "type": "value", + "units": "deg C", + "format": "s16", + "scale": 0.1, + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "MCU Voltage", + "reg_type": "input", + "address": 123, + "scale": 0.001, + "type": "value", + "units": "V", + "enabled": false, + "group": "g_hw_info" + }, + { + "name": "Minimum MCU Voltage Since Startup", + "reg_type": "input", + "address": 119, + "scale": 0.001, + "type": "value", + "units": "V", + "enabled": false, + "group": "g_hw_info" + } + ], + + "translations": { + "en": { + "WB-MIR-v.3_template_title": "WB-MIR v.3 (Modbus IR remote control)", + + "temperature_readings_filter_deg_title": "Erroneous 1-Wire Temperature Readings Filter (°C)", + "temperature_readings_filter_deg_description": "If the new value equals 85 °C, it is discarded if it differs from the previous one by more than the filter value. Write 0 to disable the filter. The default value is 1", + "temperature_readings_period_s_title": "Temperature sensor poll period (s)", + "temperature_readings_period_s_description": "When changing this parameter, you should also change the erroneous values filter coefficient. The default value is 2", + + "baud_rate_description": "Make sure that communication with the device is established before changing this parameter. Select required baud rate, save configuration and then change port baud rate to the same value. Default value is 9600", + + "lp_hold_time_title": "Long Press Time (ms)", + "secp_waiting_time_title": "Second Press Waiting Time (ms)", + "debounce_time_title": "Debounce Time (ms)", + + "lp_hold_time_description": "If the press is longer than the specified time, then it is long. Default value is 1000", + "secp_waiting_time_description": "If there is no second press during the specified time then the press is single. 0 - disables all presses except short and long. Adds a delay to the response to a short press. Default value is 300", + "debounce_time_description": "For press detection must be 5-10 times less than the second press waiting time. Adds a delay to the response to presses. Default value is 50" + }, + "ru": { + "WB-MIR-v.3_template_title": "WB-MIR v.3 (Modbus-модуль ИК-управления)", + "IR Commands": "ИК-команды", + "General": "Общее", + "HW Info": "Данные модуля", + "RS-485 Response Delay (ms)": "Задержка перед ответом по RS-485 (мс)", + "Status LED": "Индикатор состояния", + "Enabled": "Активен", + "Baud rate": "Скорость обмена", + "baud_rate_description": "Перед изменением параметра убедитесь, что связь с устройством установлена. Выберите нужную скорость обмена, сохраните конфигурацию, а затем укажите в настройках порта эту же скорость.", + "Command size in RAM": "Размер команды в RAM", + "Record to RAM": "Запись команды в RAM", + "Play from RAM": "Воспроизвести команду из RAM", + + {% for rom in range(FIRST_ROM, LAST_ROM + 1) -%} + "Command {{ rom }} recording": "Запись команды {{ rom }}", + "Command {{ rom }} size": "Размер команды {{ rom }}", + "Play command {{ rom }}": "Воспроизвести команду {{ rom }}", + {% endfor -%} + + "Reset all commands": "Стереть все команды", + "Play a command": "Воспроизвести команду", + "Recording a command": "Запись команды", + + "temperature_readings_filter_deg_title": "Фильтр ошибочных значений датчика 1-Wire (°C)", + "temperature_readings_filter_deg_description": "Если значение температуры равно 85 °C, то оно отбрасывается, если оно отличается от предыдущего больше, чем на значение фильтра. Запишите 0, чтобы отключить фильтр. Значение по умолчанию - 1", + "temperature_readings_period_s_title": "Период опроса датчика температуры (с)", + "temperature_readings_period_s_description": "При изменении данного параметра, следует также изменить коэффициент фильтра ошибочных значений. Значение по умолчанию - 2", + + {% for in_num in range(FIRST_INPUT, INPUTS_NUMBER + 1) -%} + "Input {{in_num}}": "Вход {{in_num}}", + "Input {{in_num}} Counter": "Счетчик {{in_num}}", + "Input {{in_num}} Single Press Counter": "Счетчик коротких нажатий входа {{in_num}}", + "Input {{in_num}} Long Press Counter": "Счетчик длинных нажатий входа {{in_num}}", + "Input {{in_num}} Double Press Counter": "Счетчик двойных нажатий входа {{in_num}}", + "Input {{in_num}} Shortlong Press Counter": "Счетчик коротких, а затем длинных нажатий входа {{in_num}}", + {% endfor -%} + "External Temperature Sensor": "Датчик температуры", + "External Temperature Sensor OK": "Датчик температуры подключен", + + "Press Parameters": "Параметры нажатий", + "Counting and press detection": "Счет и детектирование нажатий", + "Baud rate": "Скорость обмена", + "baud_rate_description": "Перед изменением параметра убедитесь, что связь с устройством установлена. Выберите нужную скорость обмена, сохраните конфигурацию, а затем укажите в настройках порта эту же скорость. Значение по умолчанию - 9600", + + "lp_hold_time_title": "Время длинного нажатия (мс)", + "secp_waiting_time_title": "Время ожидания второго нажатия (мс)", + "debounce_time_title": "Время подавления дребезга (мс)", + + "lp_hold_time_description": "Если нажатие длится больше указанного времени - считаем его длинным. Значение по умолчанию - 1000", + "secp_waiting_time_description": "Если за указанное время второго нажатия не было - считаем нажатие одиночным. 0 - отключит все нажатия кроме короткого и длинного. Вносит задержку в реакцию на короткое нажатие. Значение по умолчанию - 300", + "debounce_time_description": "Для детектирования нажатий значение должно быть в 5-10 раз меньше, чем время ожидания второго нажатия. Вносит задержку в реакцию на нажатия. Значение по умолчанию - 50", + "Reset All Counters": "Сбросить все счетчики", + + "Serial NO": "Серийный номер", + "FW Version": "Версия прошивки", + "Input Voltage": "Напряжение питания", + "Uptime": "Время работы с момента включения (с)", + "MCU Temperature": "Температура МК", + "MCU Voltage": "Напряжение питания МК", + "Minimum MCU Voltage Since Startup": "Минимальное напряжение питания МК с момента включения", + "1-Wire": "Датчик 1-Wire", + "Disabled": "Отключен", + "Mode": "Режим работы" + } + } + } +} diff --git a/test/TDeviceTemplatesTest.Validate.dat b/test/TDeviceTemplatesTest.Validate.dat index 8e043092..11d5fa93 100644 --- a/test/TDeviceTemplatesTest.Validate.dat +++ b/test/TDeviceTemplatesTest.Validate.dat @@ -18884,6 +18884,269 @@ WB-MIR (simple) Play from ROM5 => Play from ROM5 Play from ROM6 => Play from ROM6 Play from ROM7 => Play from ROM7 +WB-MIR v.3 + Command 1 recording => Learn to ROM1 + Command 1 size => ROM1 size + Command 10 recording => Learn to ROM10 + Command 10 size => ROM10 size + Command 11 recording => Learn to ROM11 + Command 11 size => ROM11 size + Command 12 recording => Learn to ROM12 + Command 12 size => ROM12 size + Command 13 recording => Learn to ROM13 + Command 13 size => ROM13 size + Command 14 recording => Learn to ROM14 + Command 14 size => ROM14 size + Command 15 recording => Learn to ROM15 + Command 15 size => ROM15 size + Command 16 recording => Learn to ROM16 + Command 16 size => ROM16 size + Command 17 recording => Learn to ROM17 + Command 17 size => ROM17 size + Command 18 recording => Learn to ROM18 + Command 18 size => ROM18 size + Command 19 recording => Learn to ROM19 + Command 19 size => ROM19 size + Command 2 recording => Learn to ROM2 + Command 2 size => ROM2 size + Command 20 recording => Learn to ROM20 + Command 20 size => ROM20 size + Command 21 recording => Learn to ROM21 + Command 21 size => ROM21 size + Command 22 recording => Learn to ROM22 + Command 22 size => ROM22 size + Command 23 recording => Learn to ROM23 + Command 23 size => ROM23 size + Command 24 recording => Learn to ROM24 + Command 24 size => ROM24 size + Command 25 recording => Learn to ROM25 + Command 25 size => ROM25 size + Command 26 recording => Learn to ROM26 + Command 26 size => ROM26 size + Command 27 recording => Learn to ROM27 + Command 27 size => ROM27 size + Command 28 recording => Learn to ROM28 + Command 28 size => ROM28 size + Command 29 recording => Learn to ROM29 + Command 29 size => ROM29 size + Command 3 recording => Learn to ROM3 + Command 3 size => ROM3 size + Command 30 recording => Learn to ROM30 + Command 30 size => ROM30 size + Command 31 recording => Learn to ROM31 + Command 31 size => ROM31 size + Command 32 recording => Learn to ROM32 + Command 32 size => ROM32 size + Command 33 recording => Learn to ROM33 + Command 33 size => ROM33 size + Command 34 recording => Learn to ROM34 + Command 34 size => ROM34 size + Command 35 recording => Learn to ROM35 + Command 35 size => ROM35 size + Command 36 recording => Learn to ROM36 + Command 36 size => ROM36 size + Command 37 recording => Learn to ROM37 + Command 37 size => ROM37 size + Command 38 recording => Learn to ROM38 + Command 38 size => ROM38 size + Command 39 recording => Learn to ROM39 + Command 39 size => ROM39 size + Command 4 recording => Learn to ROM4 + Command 4 size => ROM4 size + Command 40 recording => Learn to ROM40 + Command 40 size => ROM40 size + Command 41 recording => Learn to ROM41 + Command 41 size => ROM41 size + Command 42 recording => Learn to ROM42 + Command 42 size => ROM42 size + Command 43 recording => Learn to ROM43 + Command 43 size => ROM43 size + Command 44 recording => Learn to ROM44 + Command 44 size => ROM44 size + Command 45 recording => Learn to ROM45 + Command 45 size => ROM45 size + Command 46 recording => Learn to ROM46 + Command 46 size => ROM46 size + Command 47 recording => Learn to ROM47 + Command 47 size => ROM47 size + Command 48 recording => Learn to ROM48 + Command 48 size => ROM48 size + Command 49 recording => Learn to ROM49 + Command 49 size => ROM49 size + Command 5 recording => Learn to ROM5 + Command 5 size => ROM5 size + Command 50 recording => Learn to ROM50 + Command 50 size => ROM50 size + Command 51 recording => Learn to ROM51 + Command 51 size => ROM51 size + Command 52 recording => Learn to ROM52 + Command 52 size => ROM52 size + Command 53 recording => Learn to ROM53 + Command 53 size => ROM53 size + Command 54 recording => Learn to ROM54 + Command 54 size => ROM54 size + Command 55 recording => Learn to ROM55 + Command 55 size => ROM55 size + Command 56 recording => Learn to ROM56 + Command 56 size => ROM56 size + Command 57 recording => Learn to ROM57 + Command 57 size => ROM57 size + Command 58 recording => Learn to ROM58 + Command 58 size => ROM58 size + Command 59 recording => Learn to ROM59 + Command 59 size => ROM59 size + Command 6 recording => Learn to ROM6 + Command 6 size => ROM6 size + Command 60 recording => Learn to ROM60 + Command 60 size => ROM60 size + Command 61 recording => Learn to ROM61 + Command 61 size => ROM61 size + Command 62 recording => Learn to ROM62 + Command 62 size => ROM62 size + Command 63 recording => Learn to ROM63 + Command 63 size => ROM63 size + Command 64 recording => Learn to ROM64 + Command 64 size => ROM64 size + Command 65 recording => Learn to ROM65 + Command 65 size => ROM65 size + Command 66 recording => Learn to ROM66 + Command 66 size => ROM66 size + Command 67 recording => Learn to ROM67 + Command 67 size => ROM67 size + Command 68 recording => Learn to ROM68 + Command 68 size => ROM68 size + Command 69 recording => Learn to ROM69 + Command 69 size => ROM69 size + Command 7 recording => Learn to ROM7 + Command 7 size => ROM7 size + Command 70 recording => Learn to ROM70 + Command 70 size => ROM70 size + Command 71 recording => Learn to ROM71 + Command 71 size => ROM71 size + Command 72 recording => Learn to ROM72 + Command 72 size => ROM72 size + Command 73 recording => Learn to ROM73 + Command 73 size => ROM73 size + Command 74 recording => Learn to ROM74 + Command 74 size => ROM74 size + Command 75 recording => Learn to ROM75 + Command 75 size => ROM75 size + Command 76 recording => Learn to ROM76 + Command 76 size => ROM76 size + Command 77 recording => Learn to ROM77 + Command 77 size => ROM77 size + Command 78 recording => Learn to ROM78 + Command 78 size => ROM78 size + Command 79 recording => Learn to ROM79 + Command 79 size => ROM79 size + Command 8 recording => Learn to ROM8 + Command 8 size => ROM8 size + Command 80 recording => Learn to ROM80 + Command 80 size => ROM80 size + Command 9 recording => Learn to ROM9 + Command 9 size => ROM9 size + Command size in RAM => Command size in RAM + External Temperature Sensor => External Temperature Sensor + External Temperature Sensor OK => External Temperature Sensor OK + FW Version => FW Version + Input 1 => Input 1 + Input 1 Counter => Input 1 Counter + Input 1 Double Press Counter => Input 1 Double Press Counter + Input 1 Long Press Counter => Input 1 Long Press Counter + Input 1 Shortlong Press Counter => Input 1 Shortlong Press Counter + Input 1 Single Press Counter => Input 1 Single Press Counter + Input Voltage => Input Voltage + MCU Temperature => MCU Temperature + MCU Voltage => MCU Voltage + Minimum MCU Voltage Since Startup => Minimum MCU Voltage Since Startup + Play a command => Play from BANK + Play command 1 => Play from ROM1 + Play command 10 => Play from ROM10 + Play command 11 => Play from ROM11 + Play command 12 => Play from ROM12 + Play command 13 => Play from ROM13 + Play command 14 => Play from ROM14 + Play command 15 => Play from ROM15 + Play command 16 => Play from ROM16 + Play command 17 => Play from ROM17 + Play command 18 => Play from ROM18 + Play command 19 => Play from ROM19 + Play command 2 => Play from ROM2 + Play command 20 => Play from ROM20 + Play command 21 => Play from ROM21 + Play command 22 => Play from ROM22 + Play command 23 => Play from ROM23 + Play command 24 => Play from ROM24 + Play command 25 => Play from ROM25 + Play command 26 => Play from ROM26 + Play command 27 => Play from ROM27 + Play command 28 => Play from ROM28 + Play command 29 => Play from ROM29 + Play command 3 => Play from ROM3 + Play command 30 => Play from ROM30 + Play command 31 => Play from ROM31 + Play command 32 => Play from ROM32 + Play command 33 => Play from ROM33 + Play command 34 => Play from ROM34 + Play command 35 => Play from ROM35 + Play command 36 => Play from ROM36 + Play command 37 => Play from ROM37 + Play command 38 => Play from ROM38 + Play command 39 => Play from ROM39 + Play command 4 => Play from ROM4 + Play command 40 => Play from ROM40 + Play command 41 => Play from ROM41 + Play command 42 => Play from ROM42 + Play command 43 => Play from ROM43 + Play command 44 => Play from ROM44 + Play command 45 => Play from ROM45 + Play command 46 => Play from ROM46 + Play command 47 => Play from ROM47 + Play command 48 => Play from ROM48 + Play command 49 => Play from ROM49 + Play command 5 => Play from ROM5 + Play command 50 => Play from ROM50 + Play command 51 => Play from ROM51 + Play command 52 => Play from ROM52 + Play command 53 => Play from ROM53 + Play command 54 => Play from ROM54 + Play command 55 => Play from ROM55 + Play command 56 => Play from ROM56 + Play command 57 => Play from ROM57 + Play command 58 => Play from ROM58 + Play command 59 => Play from ROM59 + Play command 6 => Play from ROM6 + Play command 60 => Play from ROM60 + Play command 61 => Play from ROM61 + Play command 62 => Play from ROM62 + Play command 63 => Play from ROM63 + Play command 64 => Play from ROM64 + Play command 65 => Play from ROM65 + Play command 66 => Play from ROM66 + Play command 67 => Play from ROM67 + Play command 68 => Play from ROM68 + Play command 69 => Play from ROM69 + Play command 7 => Play from ROM7 + Play command 70 => Play from ROM70 + Play command 71 => Play from ROM71 + Play command 72 => Play from ROM72 + Play command 73 => Play from ROM73 + Play command 74 => Play from ROM74 + Play command 75 => Play from ROM75 + Play command 76 => Play from ROM76 + Play command 77 => Play from ROM77 + Play command 78 => Play from ROM78 + Play command 79 => Play from ROM79 + Play command 8 => Play from ROM8 + Play command 80 => Play from ROM80 + Play command 9 => Play from ROM9 + Play from RAM => Play from RAM + Record to RAM => Learn to RAM + Recording a command => Learn to BANK + Reset All Counters => Reset All Counters + Reset all commands => Reset all ROM + Serial NO => Serial NO + Uptime => Uptime WB-MIR v2 BANK -> RAM => BANK -> RAM FW Version => FW Version @@ -23765,6 +24028,189 @@ tpl1_wb_mdm3 Supply voltage => Supply voltage Uptime => Uptime Zero-Сross Offset (us) => Zero-Сross Offset (us) +tpl1_wb_mir_v2 + Command 1 recording => Learn to ROM1 + Command 1 size => ROM1 size + Command 10 recording => Learn to ROM10 + Command 10 size => ROM10 size + Command 11 recording => Learn to ROM11 + Command 11 size => ROM11 size + Command 12 recording => Learn to ROM12 + Command 12 size => ROM12 size + Command 13 recording => Learn to ROM13 + Command 13 size => ROM13 size + Command 14 recording => Learn to ROM14 + Command 14 size => ROM14 size + Command 15 recording => Learn to ROM15 + Command 15 size => ROM15 size + Command 16 recording => Learn to ROM16 + Command 16 size => ROM16 size + Command 17 recording => Learn to ROM17 + Command 17 size => ROM17 size + Command 18 recording => Learn to ROM18 + Command 18 size => ROM18 size + Command 19 recording => Learn to ROM19 + Command 19 size => ROM19 size + Command 2 recording => Learn to ROM2 + Command 2 size => ROM2 size + Command 20 recording => Learn to ROM20 + Command 20 size => ROM20 size + Command 21 recording => Learn to ROM21 + Command 21 size => ROM21 size + Command 22 recording => Learn to ROM22 + Command 22 size => ROM22 size + Command 23 recording => Learn to ROM23 + Command 23 size => ROM23 size + Command 24 recording => Learn to ROM24 + Command 24 size => ROM24 size + Command 25 recording => Learn to ROM25 + Command 25 size => ROM25 size + Command 26 recording => Learn to ROM26 + Command 26 size => ROM26 size + Command 27 recording => Learn to ROM27 + Command 27 size => ROM27 size + Command 28 recording => Learn to ROM28 + Command 28 size => ROM28 size + Command 29 recording => Learn to ROM29 + Command 29 size => ROM29 size + Command 3 recording => Learn to ROM3 + Command 3 size => ROM3 size + Command 30 recording => Learn to ROM30 + Command 30 size => ROM30 size + Command 31 recording => Learn to ROM31 + Command 31 size => ROM31 size + Command 32 recording => Learn to ROM32 + Command 32 size => ROM32 size + Command 33 recording => Learn to ROM33 + Command 33 size => ROM33 size + Command 34 recording => Learn to ROM34 + Command 34 size => ROM34 size + Command 35 recording => Learn to ROM35 + Command 35 size => ROM35 size + Command 36 recording => Learn to ROM36 + Command 36 size => ROM36 size + Command 37 recording => Learn to ROM37 + Command 37 size => ROM37 size + Command 38 recording => Learn to ROM38 + Command 38 size => ROM38 size + Command 39 recording => Learn to ROM39 + Command 39 size => ROM39 size + Command 4 recording => Learn to ROM4 + Command 4 size => ROM4 size + Command 40 recording => Learn to ROM40 + Command 40 size => ROM40 size + Command 5 recording => Learn to ROM5 + Command 5 size => ROM5 size + Command 6 recording => Learn to ROM6 + Command 6 size => ROM6 size + Command 7 recording => Learn to ROM7 + Command 7 size => ROM7 size + Command 8 recording => Learn to ROM8 + Command 8 size => ROM8 size + Command 9 recording => Learn to ROM9 + Command 9 size => ROM9 size + Editing a command => BANK -> RAM + Editing command 1 in RAM => ROM1 -> RAM + Editing command 10 in RAM => ROM10 -> RAM + Editing command 11 in RAM => ROM11 -> RAM + Editing command 12 in RAM => ROM12 -> RAM + Editing command 13 in RAM => ROM13 -> RAM + Editing command 14 in RAM => ROM14 -> RAM + Editing command 15 in RAM => ROM15 -> RAM + Editing command 16 in RAM => ROM16 -> RAM + Editing command 17 in RAM => ROM17 -> RAM + Editing command 18 in RAM => ROM18 -> RAM + Editing command 19 in RAM => ROM19 -> RAM + Editing command 2 in RAM => ROM2 -> RAM + Editing command 20 in RAM => ROM20 -> RAM + Editing command 21 in RAM => ROM21 -> RAM + Editing command 22 in RAM => ROM22 -> RAM + Editing command 23 in RAM => ROM23 -> RAM + Editing command 24 in RAM => ROM24 -> RAM + Editing command 25 in RAM => ROM25 -> RAM + Editing command 26 in RAM => ROM26 -> RAM + Editing command 27 in RAM => ROM27 -> RAM + Editing command 28 in RAM => ROM28 -> RAM + Editing command 29 in RAM => ROM29 -> RAM + Editing command 3 in RAM => ROM3 -> RAM + Editing command 30 in RAM => ROM30 -> RAM + Editing command 31 in RAM => ROM31 -> RAM + Editing command 32 in RAM => ROM32 -> RAM + Editing command 33 in RAM => ROM33 -> RAM + Editing command 34 in RAM => ROM34 -> RAM + Editing command 35 in RAM => ROM35 -> RAM + Editing command 36 in RAM => ROM36 -> RAM + Editing command 37 in RAM => ROM37 -> RAM + Editing command 38 in RAM => ROM38 -> RAM + Editing command 39 in RAM => ROM39 -> RAM + Editing command 4 in RAM => ROM4 -> RAM + Editing command 40 in RAM => ROM40 -> RAM + Editing command 5 in RAM => ROM5 -> RAM + Editing command 6 in RAM => ROM6 -> RAM + Editing command 7 in RAM => ROM7 -> RAM + Editing command 8 in RAM => ROM8 -> RAM + Editing command 9 in RAM => ROM9 -> RAM + External Temperature Sensor => External Temperature Sensor + External Temperature Sensor OK => External Temperature Sensor OK + FW Version => FW Version + Input 1 => Input 1 + Input 1 Counter => Input 1 Counter + Input 1 Double Press Counter => Input 1 Double Press Counter + Input 1 Long Press Counter => Input 1 Long Press Counter + Input 1 Shortlong Press Counter => Input 1 Shortlong Press Counter + Input 1 Single Press Counter => Input 1 Single Press Counter + Input Voltage => Input Voltage + MCU Temperature => MCU Temperature + MCU Voltage => MCU Voltage + Minimum MCU Voltage Since Startup => Minimum MCU Voltage Since Startup + Play a command => Play from BANK + Play command 1 => Play from ROM1 + Play command 10 => Play from ROM10 + Play command 11 => Play from ROM11 + Play command 12 => Play from ROM12 + Play command 13 => Play from ROM13 + Play command 14 => Play from ROM14 + Play command 15 => Play from ROM15 + Play command 16 => Play from ROM16 + Play command 17 => Play from ROM17 + Play command 18 => Play from ROM18 + Play command 19 => Play from ROM19 + Play command 2 => Play from ROM2 + Play command 20 => Play from ROM20 + Play command 21 => Play from ROM21 + Play command 22 => Play from ROM22 + Play command 23 => Play from ROM23 + Play command 24 => Play from ROM24 + Play command 25 => Play from ROM25 + Play command 26 => Play from ROM26 + Play command 27 => Play from ROM27 + Play command 28 => Play from ROM28 + Play command 29 => Play from ROM29 + Play command 3 => Play from ROM3 + Play command 30 => Play from ROM30 + Play command 31 => Play from ROM31 + Play command 32 => Play from ROM32 + Play command 33 => Play from ROM33 + Play command 34 => Play from ROM34 + Play command 35 => Play from ROM35 + Play command 36 => Play from ROM36 + Play command 37 => Play from ROM37 + Play command 38 => Play from ROM38 + Play command 39 => Play from ROM39 + Play command 4 => Play from ROM4 + Play command 40 => Play from ROM40 + Play command 5 => Play from ROM5 + Play command 6 => Play from ROM6 + Play command 7 => Play from ROM7 + Play command 8 => Play from ROM8 + Play command 9 => Play from ROM9 + Play from RAM => Play from RAM + Record to RAM => Learn to RAM + Recording a command => Learn to BANK + Reset All Counters => Reset All Counters + Reset all commands => Reset all ROM + Serial NO => Serial NO + Uptime => Uptime veda_vf_51 AI1 Voltage => AI1 Voltage AO1 Voltage => AO1 Voltage