Summary
Web-enabled Ethernet-based 16-relay controller modules. Three variants share HTTP/XML/JSON control on TCP port 80 (default IP 192.168.1.100, default password admin): SmartDen IP-16R (SNMP), IP-16R-MT (Modbus-TCP), and IP-16R-MQ (MQTT V3.1.1). Each variant additionally exposes one integration protocol — SNMP (UDP 161), Modbus-TCP (502), or MQTT (1883) — documented below. Firmware versions are stated per-variant in the source header table.
Transport
protocols:
- http # all variants
- udp # SNMP (IP-16R only)
- tcp # Modbus-TCP (IP-16R-MT) and MQTT (IP-16R-MQ), variant-specific ports
addressing:
base_url: http://192.168.1.100 # default; source 7.1 states configurable, DHCP disabled by default
port: 80 # HTTP port (all variants). Variant-specific TCP/UDP ports documented below.
auth:
type: password # source describes login/password authentication
default_credentials:
username: admin # UNRESOLVED: source lists "Password: admin" but no explicit username field; username inferred
password: admin
# Variant-specific transport (source Section 7 default settings + Section 10):
# SNMP UDP port 161 - IP-16R only - communities: read-only "public"/"read", read-write "private"/"write"
# Modbus-TCP TCP port 502 - IP-16R-MT only - slave/server; only ONE TCP socket at a time (source 8.13)
# MQTT TCP port 1883 - IP-16R-MQ only - V3.1.1 client; Publish QoS 0; Keep Alive 120 s (source 8.14)
# SNMP OID prefix (replace "x" in OIDs below): .1.3.6.1.4.1.42505
Traits
- powerable # relay on/off commands present (HTTP, SNMP, Modbus, MQTT)
- routable # per-relay and all-relay (bitmap) control present
- queryable # current_state.xml/json, SNMP snmpget, Modbus Read Coil/Registers return state
Actions
# =========================================================================
# HTTP/XML/JSON (all variants) - existing entries
# =========================================================================
- id: set_relay
label: Set Relay State
kind: action
command: "GET /current_state.xml?Relay{relay}={state}&pw={pw}"
params:
- name: relay
type: integer
description: Relay number (1-16)
- name: state
type: integer
description: "0 = OFF, 1 = ON"
example: http://192.168.1.100/current_state.xml?Relay1=1&pw=admin
- id: set_all_relays
label: Set All Relays
kind: action
command: "GET /current_state.xml?SetAll={value}&pw={pw}"
params:
- name: value
type: integer
description: "0-65535 bitmap; bit 0 = relay 1, bit 15 = relay 16"
example: http://192.168.1.100/current_state.xml?SetAll=65535&pw=admin
- id: pulse_relay
label: Generate Pulse
kind: action
command: "GET /current_state.xml?Pulse{relay}={duration}&pw={pw} # IP-16R-MQ uses PulseOn{relay}"
params:
- name: relay
type: integer
description: Relay number (1-16)
- name: duration
type: integer
description: "Pulse duration in ms × 100 (1-65535); e.g. 30 = 3 seconds"
notes: Pulse_i param on IP-16R/IP-16R-MT; PulseOn_i on IP-16R-MQ
example: http://192.168.1.100/current_state.xml?Pulse1=30&pw=admin
# IP-16R-MQ only - negative pulse
- id: pulse_off_relay
label: Generate Negative Pulse
kind: action
command: "GET /current_state.json?PulseOff{relay}={duration}&pw={pw}"
params:
- name: relay
type: integer
description: Relay number (1-16)
- name: duration
type: integer
description: "Pulse duration in ms × 100 (1-65535)"
example: http://192.168.1.100/current_state.json?PulseOff1=30&pw=admin
# IP-16R-MQ only - relay description
- id: set_relay_description
label: Set Relay Description
kind: action
command: "GET /current_state.json?Description{relay}={description}&pw={pw}"
params:
- name: relay
type: integer
description: Relay number (1-16)
- name: description
type: string
description: "Max 7 characters"
example: http://192.168.1.100/current_state.json?Description1=Relay1&pw=admin
# IP-16R-MT / IP-16R-MQ - set date/time
- id: set_datetime
label: Set Date/Time
kind: action
command: "GET /current_state.xml?Date={date}&Time={time}&pw={pw}"
params:
- name: date
type: string
description: "Format dd/mm/yyyy"
- name: time
type: string
description: "Format hh:mm"
example: http://192.168.1.100/current_state.xml?Date=10%2F09%2F2020&Time=12%3A00&pw=admin
# =========================================================================
# SNMP (IP-16R only) - OIDs; prefix .1.3.6.1.4.1.42505 ; snmpget/snmpset only
# Source 10.1. Per-source rows preserved. Read-only = query; read-write = action.
# =========================================================================
# --- 10.1.1 Product (read-only) ---
- id: snmp_product_name
label: SNMP Product Name
kind: query
command: ".1.3.6.1.4.1.42505.6.1.1.0"
params: []
notes: "DISPLAYSTRING. Description of the module."
- id: snmp_product_version
label: SNMP Firmware Version
kind: query
command: ".1.3.6.1.4.1.42505.6.1.2.0"
params: []
notes: "DISPLAYSTRING. Current firmware version."
- id: snmp_product_date
label: SNMP Firmware Build Date
kind: query
command: ".1.3.6.1.4.1.42505.6.1.3.0"
params: []
notes: "DISPLAYSTRING. Firmware build date."
# --- 10.1.2 Setup (read-write) ---
- id: snmp_system_date
label: SNMP System Date
kind: action
command: ".1.3.6.1.4.1.42505.6.2.1.0"
params:
- name: value
type: string
description: "System Date, format dd/mm/yyyy"
notes: "DISPLAYSTRING, read-write."
- id: snmp_system_time
label: SNMP System Time
kind: action
command: ".1.3.6.1.4.1.42505.6.2.2.0"
params:
- name: value
type: string
description: "System Time, format hh:mm"
notes: "DISPLAYSTRING, read-write."
- id: snmp_relay_name
label: SNMP Relay Name
kind: action
command: ".1.3.6.1.4.1.42505.6.2.3.1.2.{i-1}"
params:
- name: i
type: integer
description: "Relay index 1..16; OID sub-index = i-1 (0..15)"
- name: value
type: string
description: "Relay Name, max length 7"
notes: "DISPLAYSTRING (SIZE 0..7), read-write."
- id: snmp_relay_state
label: SNMP Relay State
kind: action
command: ".1.3.6.1.4.1.42505.6.2.3.1.3.{i-1}"
params:
- name: i
type: integer
description: "Relay index 1..16; OID sub-index = i-1 (0..15)"
- name: value
type: integer
description: "INTEGER {off(0), on(1)}"
notes: "Read-write. Sets/reads individual relay state."
- id: snmp_relay_set_pulse_period
label: SNMP Relay Set Pulse Period
kind: action
command: ".1.3.6.1.4.1.42505.6.2.3.1.4.{i-1}"
params:
- name: i
type: integer
description: "Relay index 1..16; OID sub-index = i-1 (0..15)"
- name: value
type: integer
description: "INTEGER32 (0..65535), ms x100"
notes: "Read-write. Relay Set Pulse Period."
- id: snmp_relay_start_pulse
label: SNMP Relay Start Pulse
kind: action
command: ".1.3.6.1.4.1.42505.6.2.3.1.5.{i-1}"
params:
- name: i
type: integer
description: "Relay index 1..16; OID sub-index = i-1 (0..15)"
- name: value
type: integer
description: "INTEGER32 (0..65535), ms x100"
notes: "Read-write. Relay Start Pulse."
# --- 10.1.3 Control ---
- id: snmp_relays_state
label: SNMP All Relays State
kind: action
command: ".1.3.6.1.4.1.42505.6.3.1.0"
params:
- name: value
type: integer
description: "INTEGER32 (0..65535); bit0=Relay1 ... bit15=Relay16"
notes: "Read-write. Access all relays with single command."
- id: snmp_reboot
label: SNMP Reboot Device
kind: action
command: ".1.3.6.1.4.1.42505.6.3.2.0"
params:
- name: value
type: integer
description: "INTEGER (0..255) - set to ASCII decimal code of FIRST CHAR of web password (e.g. 'a' -> 97)"
notes: "Read-write. SAFETY GUARD: reboot only fires when value = ASCII code of first char of Web password (source 10.1.3)."
- id: snmp_sysuptime
label: SNMP sysUpTime
kind: query
command: ".1.3.6.1.4.1.42505.6.3.3.0"
params: []
notes: "TIMETICKS, read-only. Hundredths of a second since last re-initialization."
# --- 10.1.4 Week Schedule (read-write, 30 rows index 0..29) ---
- id: snmp_week_schedule_start_date
label: SNMP Week Schedule Start Date
kind: action
command: ".1.3.6.1.4.1.42505.6.4.1.0"
params:
- name: value
type: string
description: "Start date, format dd/mm/yyyy"
notes: "DISPLAYSTRING, read-write."
- id: snmp_ws_enabled
label: SNMP Week Schedule Row Enable
kind: action
command: ".1.3.6.1.4.1.42505.6.4.2.1.2.{row}"
params:
- name: row
type: integer
description: "Row 0..29"
- name: value
type: integer
description: "INTEGER {no(0), yes(1)}"
notes: "Read-write. Row enable flag."
- id: snmp_ws_outputs
label: SNMP Week Schedule Row Outputs
kind: action
command: ".1.3.6.1.4.1.42505.6.4.2.1.3.{row}"
params:
- name: row
type: integer
description: "Row 0..29"
- name: value
type: integer
description: "INTEGER32 (0..65535); bit0=Output1 ... bit15=Output16"
notes: "Read-write. Outputs code bitmap."
- id: snmp_ws_outputs_state
label: SNMP Week Schedule Row Outputs State
kind: action
command: ".1.3.6.1.4.1.42505.6.4.2.1.4.{row}"
params:
- name: row
type: integer
description: "Row 0..29"
- name: value
type: integer
description: "INTEGER32 (0..65535); off(0)/on(1) per bit"
notes: "Read-write. Outputs state."
- id: snmp_ws_hour
label: SNMP Week Schedule Row Hour
kind: action
command: ".1.3.6.1.4.1.42505.6.4.2.1.5.{row}"
params:
- name: row
type: integer
description: "Row 0..29"
- name: value
type: string
description: "Hour, format hh:mm"
notes: "DISPLAYSTRING, read-write."
- id: snmp_ws_weekdays
label: SNMP Week Schedule Row WeekDays
kind: action
command: ".1.3.6.1.4.1.42505.6.4.2.1.6.{row}"
params:
- name: row
type: integer
description: "Row 0..29"
- name: value
type: integer
description: "INTEGER (0..127); bit0=Sunday ... bit6=Saturday"
notes: "Read-write. WeekDays code."
# --- 10.1.5 Auto-reboot (read-write unless noted) ---
- id: snmp_autoreboot_mode_enable
label: SNMP Auto-reboot Mode Enable
kind: action
command: ".1.3.6.1.4.1.42505.6.5.1.0"
params:
- name: value
type: integer
description: "INTEGER {no(0), yes(1)}"
- id: snmp_ip_address_to_ping
label: SNMP IP Address To Ping
kind: action
command: ".1.3.6.1.4.1.42505.6.5.2.0"
params:
- name: value
type: string
description: "IP address to monitor"
notes: "DISPLAYSTRING (SIZE 0..23), read-write."
- id: snmp_interval_between_pings
label: SNMP Interval Between Pings
kind: action
command: ".1.3.6.1.4.1.42505.6.5.3.0"
params:
- name: value
type: integer
description: "INTEGER32 (1..3600), seconds"
- id: snmp_ping_failures_before_reboot
label: SNMP Ping Failures Before Reboot
kind: action
command: ".1.3.6.1.4.1.42505.6.5.4.0"
params:
- name: value
type: integer
description: "INTEGER32 (1..100)"
- id: snmp_ping_delay_after_reboot
label: SNMP Ping Delay After Reboot
kind: action
command: ".1.3.6.1.4.1.42505.6.5.5.0"
params:
- name: value
type: integer
description: "INTEGER32 (1..3600), seconds"
- id: snmp_relay_number
label: SNMP Auto-reboot Relay Number
kind: action
command: ".1.3.6.1.4.1.42505.6.5.6.0"
params:
- name: value
type: integer
description: "INTEGER32 (1..16)"
- id: snmp_powerup_pulse_enable
label: SNMP Power-up Pulse Enable
kind: action
command: ".1.3.6.1.4.1.42505.6.5.7.0"
params:
- name: value
type: integer
description: "INTEGER {no(0), yes(1)}"
- id: snmp_powerup_pulse
label: SNMP Power-up Pulse
kind: action
command: ".1.3.6.1.4.1.42505.6.5.8.0"
params:
- name: value
type: integer
description: "INTEGER32 (1..3600), seconds"
- id: snmp_reboot_pulse1_enable
label: SNMP Reboot Pulse1 Enable
kind: action
command: ".1.3.6.1.4.1.42505.6.5.9.0"
params:
- name: value
type: integer
description: "INTEGER {no(0), yes(1)}"
- id: snmp_reboot_pulse1
label: SNMP Reboot Pulse1
kind: action
command: ".1.3.6.1.4.1.42505.6.5.10.0"
params:
- name: value
type: integer
description: "INTEGER32 (1..3600), seconds"
- id: snmp_pulse1_to_pulse2_delay_enable
label: SNMP Pulse1-to-Pulse2 Delay Enable
kind: action
command: ".1.3.6.1.4.1.42505.6.5.11.0"
params:
- name: value
type: integer
description: "INTEGER {no(0), yes(1)}"
- id: snmp_pulse1_to_pulse2_delay
label: SNMP Pulse1-to-Pulse2 Delay
kind: action
command: ".1.3.6.1.4.1.42505.6.5.12.0"
params:
- name: value
type: integer
description: "INTEGER32 (1..3600), seconds"
- id: snmp_reboot_pulse2_enable
label: SNMP Reboot Pulse2 Enable
kind: action
command: ".1.3.6.1.4.1.42505.6.5.13.0"
params:
- name: value
type: integer
description: "INTEGER {no(0), yes(1)}"
- id: snmp_reboot_pulse2
label: SNMP Reboot Pulse2
kind: action
command: ".1.3.6.1.4.1.42505.6.5.14.0"
params:
- name: value
type: integer
description: "INTEGER32 (1..3600), seconds"
- id: snmp_auto_reboots_number
label: SNMP Auto-reboots Number
kind: query
command: ".1.3.6.1.4.1.42505.6.5.15.0"
params: []
notes: "INTEGER32, read-only."
- id: snmp_last_auto_reboot_time
label: SNMP Last Auto-reboot Time
kind: query
command: ".1.3.6.1.4.1.42505.6.5.16.0"
params: []
notes: "DISPLAYSTRING, read-only."
# =========================================================================
# Modbus-TCP (IP-16R-MT only) - Function codes; big-endian addresses/data.
# Slave/server device, port 502, unit ID 0, one socket at a time.
# Source 10.2. Literal example payloads from source preserved verbatim.
# =========================================================================
- id: modbus_read_coil_status
label: Modbus Read Coil Status (FC 01)
kind: query
command: "0x01 {start_address} {quantity}"
params:
- name: start_address
type: integer
description: "0x0000 (Relay 1) to 0x000F (Relay 16); relays addressed 0-15"
- name: quantity
type: integer
description: "0x0001 (1 relay) to 0x0010 (16 relays); start+quantity must not exceed 16"
notes: "Source example PDU: FC=0x01 Start=0x0000 Qty=0x0003. Response packs 1 coil/bit, LSB=lowest relay, 1=ON/0=OFF. Error FC 0x81 (0x01 unsupported, 0x02 bad addr/qty)."
- id: modbus_write_single_coil
label: Modbus Write Single Coil (FC 05)
kind: action
command: "0x05 {output_address} {output_value}"
params:
- name: output_address
type: integer
description: "0x0000 (Relay 1) to 0x000F (Relay 16)"
- name: output_value
type: integer
description: "0xFF00 = ON, 0x0000 = OFF, 0xFF02 = TOGGLE; all others illegal"
notes: "Source example: addr 0x0001 (Relay 2) value 0xFF00 (ON). Error FC 0x85 (0x02 bad addr, 0x03 illegal value)."
- id: modbus_write_multiple_coils
label: Modbus Write Multiple Coils (FC 0F)
kind: action
command: "0x0F {start_address} {quantity} {byte_count} {outputs_value}"
params:
- name: start_address
type: integer
description: "0x0000 (Relay 1) to 0x000F (Relay 16)"
- name: quantity
type: integer
description: "0x0001 to 0x0010; start+quantity must not exceed 16"
- name: outputs_value
type: integer
description: "Bitmap, bit0=Relay1; first byte = relays 8..1, second byte = relays 16..9"
notes: "Source example 1: relays 1,3 ON / 2 OFF -> ByteCount 0x01 OutputsValue 0x05. Example 2: relay 1 OFF, 2..16 ON -> ByteCount 0x02 OutputsValue 0xFEFF. Error FC 0x8F (0x02 bad addr/qty)."
- id: modbus_read_holding_registers
label: Modbus Read Holding Registers (FC 03)
kind: query
command: "0x03 {start_register} {quantity}"
params:
- name: start_register
type: integer
description: "Register address (see Variables: Modbus register map)"
- name: quantity
type: integer
description: "Number of registers; start+quantity must fit the block"
notes: "Source example: start 0x6100 (Week Schedule Start Date) qty 0x0003 -> returns Day=0x000A Month=0x0009 Year=0x07E4. Error FC 0x83 (0x02 bad addr/qty)."
- id: modbus_write_single_register
label: Modbus Write Single Register (FC 06)
kind: action
command: "0x06 {register_address} {register_value}"
params:
- name: register_address
type: integer
description: "Register address (see Variables); 0x0000-0x000F = generate pulse on relay"
- name: register_value
type: integer
description: "Value per register range; pulse durations in ms x100"
notes: "Source example: addr 0x0009 (Relay 10) value 0x001E -> 3-second pulse (30 = 3000 ms). Error FC 0x86 (0x02 bad addr, 0x03 bad value)."
- id: modbus_write_multiple_registers
label: Modbus Write Multiple Registers (FC 10)
kind: action
command: "0x10 {start_register} {quantity} {byte_count} {values}"
params:
- name: start_register
type: integer
description: "Starting register address"
- name: quantity
type: integer
description: "Number of registers; start+quantity must fit the block"
- name: values
type: string
description: "Values packed 2 bytes/register, ascending order"
notes: "Source example: start 0x6100 qty 0x0003 -> set Week Schedule Start Date 10/09/2020 (Day 0x000A, Month 0x0009, Year 0x07E4). Error FC 0x90 (0x02 bad addr, 0x03 bad value)."
Feedbacks
- id: relay_states
type: bitmap
values: [0..65535]
description: "16-bit bitmap; bit 0 = relay 1, bit 15 = relay 16"
example: http://192.168.1.100/current_state.xml
response_format: XML or JSON (see source Appendix 2)
- id: login_key
type: string
description: "Random key returned when encrypt password is enabled and login required"
example: "<LoginKey>65156</LoginKey>"
# Modbus-TCP (IP-16R-MT) - coil status response to FC 0x01
- id: modbus_coil_status
type: bitmap
values: [0..65535]
description: "Coil status packed 1 relay/bit; LSB of first byte = lowest addressed relay; 1=ON, 0=OFF"
notes: "Returned by Read Coil Status (FC 0x01). Bits beyond requested quantity padded with 0."
# SNMP (IP-16R) - read-only product/identity OIDs
- id: snmp_device_identity
type: object
description: "Product Name / Firmware Version / Firmware Build Date (read-only OIDs x.6.1.1-3.0)"
fields: [name, version, build_date]
# SNMP (IP-16R) - auto-reboot status (read-only)
- id: snmp_auto_reboot_status
type: object
description: "Auto-reboots number + last auto-reboot time (read-only OIDs x.6.5.15-16.0)"
fields: [reboots_number, last_reboot_time]
Variables
# IP-16R-MT and IP-16R-MQ only - system date/time settable via HTTP params
- id: system_date
type: string
format: dd/mm/yyyy
access: read-write
- id: system_time
type: string
format: hh:mm
access: read-write
# =========================================================================
# Modbus-TCP holding register map (IP-16R-MT only) - source 10.2.1.
# Accessed via FC 03 (read) / 06 / 10 (write). Addresses big-endian.
# =========================================================================
- id: modbus_reg_generate_pulse
address: 0x0000-0x000F
access: write-only
value_range: 1..65535
description: "Generate pulse on Relay i (addr 0x0000 = Relay 1 ... 0x000F = Relay 16); value = duration ms x100"
- id: modbus_reg_pulse_width
address: 0x6000-0x600F
access: read-write
value_range: 0..65535
description: "Set pulse width for Relay i (ms x100)"
- id: modbus_reg_ws_start_day
address: 0x6100
access: read-write
value_range: 1..31
description: "Week Schedule Start Date (Day)"
- id: modbus_reg_ws_start_month
address: 0x6101
access: read-write
value_range: 1..12
description: "Week Schedule Start Date (Month)"
- id: modbus_reg_ws_start_year
address: 0x6102
access: read-write
value_range: 2000..2099
description: "Week Schedule Start Date (Year)"
- id: modbus_reg_ws_row_enable
address: 0x6200-0x621D
access: read-write
value_range: 0..1
description: "Week Schedule Row Enable Flag; 30 rows, row index = low byte of address (0..29)"
- id: modbus_reg_ws_row_outputs
address: 0x6300-0x631D
access: read-write
value_range: 0..65535
description: "Week Schedule Row Outputs Code; LSB = Relay 1, MSB = Relay 16"
- id: modbus_reg_ws_row_outputs_state
address: 0x6400-0x641D
access: read-write
value_range: 0..1
description: "Week Schedule Row Outputs State"
- id: modbus_reg_ws_row_hour
address: 0x6500-0x651D
access: read-write
value_range: 0..23
description: "Week Schedule Row Hour"
- id: modbus_reg_ws_row_minute
address: 0x6600-0x661D
access: read-write
value_range: 0..59
description: "Week Schedule Row Minute"
- id: modbus_reg_ws_row_weekdays
address: 0x6700-0x671D
access: read-write
value_range: 0..127
description: "Week Schedule Row WeekDays Code; bit0 = Sunday ... bit6 = Saturday"
- id: modbus_reg_save_outputs
address: 0x6800
access: read-write
value_range: 0..1
description: "Save Outputs Option"
- id: modbus_reg_sys_day
address: 0x6900
access: read-write
value_range: 1..31
description: "System Date (Day)"
- id: modbus_reg_sys_month
address: 0x6901
access: read-write
value_range: 1..12
description: "System Date (Month)"
- id: modbus_reg_sys_year
address: 0x6902
access: read-write
value_range: 2000..2099
description: "System Date (Year)"
- id: modbus_reg_sys_hour
address: 0x6903
access: read-write
value_range: 0..23
description: "System Time (Hour)"
- id: modbus_reg_sys_minute
address: 0x6904
access: read-write
value_range: 0..59
description: "System Time (Minutes)"
- id: modbus_reg_firmware_version
address: 0x6A00
access: read-only
description: "Firmware Version"
Events
# IP-16R-MQ only - MQTT Get topics (published by device). Topic prefix SmartDEN_MQTT16R/<MAC>/
- id: relay_state_change
topic: SmartDEN_MQTT16R/<MAC>/Get/Ri
payload: "On, Off"
description: "Relay i (i=1..16) state. Published periodically, on relay state change (per Publish Mode), or on Set/GetStatus=0."
- id: all_relays_state
topic: SmartDEN_MQTT16R/<MAC>/Get/All
payload: "Relays state in XML or JSON format"
description: "Published upon receiving Set/GetStatus with value 1 (XML) or 2 (JSON). See Appendix 2."
- id: mqtt_status
topic: SmartDEN_MQTT16R/<MAC>/Get/Status
payload: "Rebooted, Connected, Disconnected"
description: "Module status related to the MQTT broker connection."
- id: auto_reboot_notification
topic: SmartDEN_MQTT16R/<MAC>/Get/Auto-reboot
payload: "RebootsNumber: i, LastReboot: date time"
description: "Notification when a monitored device connected to one of the relays is rebooted. date=dd/mm/yyyy, time=hh:mm."
- id: mqtt_all_messages
topic: SmartDEN_MQTT16R/<MAC>/Get/#
payload: "various"
description: "Wildcard subscription for all messages published by smartDEN IP-16R-MQ."
Macros
# IP-16R-MQ MQTT Set topics (client publishes; device subscribes). Prefix SmartDEN_MQTT16R/<MAC>/
- id: mqtt_set_single_relay
label: MQTT Set Single Relay
topic: SmartDEN_MQTT16R/<MAC>/Set/RSi
payload: "0 (OFF), 1 (ON), 2 (TOGGLE)"
- id: mqtt_set_all_relays
label: MQTT Set All Relays
topic: SmartDEN_MQTT16R/<MAC>/Set/All
payload: "0-65535 bitmap"
- id: mqtt_pulse_on
label: MQTT Positive Pulse
topic: SmartDEN_MQTT16R/<MAC>/Set/RNi
payload: "1-65535 (ms × 100)"
- id: mqtt_pulse_off
label: MQTT Negative Pulse
topic: SmartDEN_MQTT16R/<MAC>/Set/RFi
payload: "1-65535 (ms × 100)"
- id: mqtt_set_date
label: MQTT Set Date
topic: SmartDEN_MQTT16R/<MAC>/Set/Date
payload: "Date in format dd/mm/yyyy"
- id: mqtt_set_time
label: MQTT Set Time
topic: SmartDEN_MQTT16R/<MAC>/Set/Time
payload: "Time in format hh:mm"
- id: mqtt_set_relay_description
label: MQTT Set Relay Description
topic: SmartDEN_MQTT16R/<MAC>/Set/RDi
payload: "Relay description string (max 7 chars)"
- id: mqtt_query_states
label: MQTT Query Relay States
topic: SmartDEN_MQTT16R/<MAC>/Set/GetStatus
payload: "0 = per-relay (Get/Ri), 1 = XML (Get/All), 2 = JSON (Get/All)"
Safety
confirmation_required_for:
- snmp_reboot # source 10.1.3: reboot only fires when value = ASCII code of first char of Web password
interlocks:
- "Modbus-TCP (IP-16R-MT): only ONE TCP socket connection supported at a time; concurrent connections rejected (source 8.13)."
- "HTTP Multiple Access is not allowed when Encrypt Password is enabled; in that mode only one user may be logged in at a time (source 8.5/9)."
- "When Multiple Access is disabled, XML/JSON access requires login within Session Timeout (default 3 min) (source 9)."
- "SNMP access must use snmpget/snmpset to exactly one OID per operation, never a group of OIDs (source 10.1)."
# UNRESOLVED: no hardware interlock / power-sequencing warnings stated in source beyond the reboot guard above
Notes
Three hardware variants share Ethernet HTTP control; each variant additionally exposes one integration protocol — SNMP (IP-16R), Modbus-TCP (IP-16R-MT), or MQTT (IP-16R-MQ) — documented above.
Relay state convention (source): ON = NO contacts closed, NC open; OFF = NO open, NC closed.
HTTP/XML/JSON (all variants) — http://<ip>/current_state.xml or .json with query params. Default port 80. Session timeout 3 min (configurable). Encrypt Password option toggles two-step login (encrypted pw) vs plain pw= in URL. Multiple Access option enables simultaneous clients (mutually exclusive with Encrypt Password). Access can be restricted by client IP/MAC via Access IP/Mask/MAC settings.
SNMP (IP-16R only) — source header table lists SNMPv2; Section 10.1 body states SNMPv1 (uses snmpget/snmpset). Discrepancy unresolved. UDP port 161. OID prefix .1.3.6.1.4.1.42505. Communities: read-only public and read; read-write private and write. Full OID tables for Product / Setup / Control / Week Schedule (30 rows) / Auto-reboot are in source Section 10.1 and enumerated under Actions above.
Modbus-TCP (IP-16R-MT only) — TCP port 502. Slave/server device, unit ID 0, big-endian. One socket at a time. Function codes 0x01 (Read Coil), 0x05 (Write Single Coil; values 0xFF00 ON / 0x0000 OFF / 0xFF02 TOGGLE), 0x0F (Write Multiple Coils), 0x03 (Read Holding Registers), 0x06 (Write Single Register), 0x10 (Write Multiple Registers). Relay coil addresses 0x0000–0x000F. Full holding-register map (pulses, pulse width, week schedule, save-outputs, system date/time, firmware version) in source Section 10.2.1 and enumerated under Variables above. Exception responses echo FC | 0x80.
MQTT (IP-16R-MQ only) — TCP port 1883. V3.1.1 client; QoS 0; Keep Alive 120 s. Publish modes: Periodically, Edge Triggered, or Edge Triggered + Periodically (Publish Period 5–250 s). Topic prefix SmartDEN_MQTT16R/<MAC>/ (MAC without colons). Plain topics enumerated under Events (Get/) and Macros (Set/) above. Encrypted topics + password-encryption algorithm available on request from vendor (not in source).
Defaults (source 7.1): IP 192.168.1.100, gateway 192.168.1.1, mask 255.255.255.0, DHCP disabled, password admin, Save Outputs = No, HTTP Access IP 192.168.1.0 / Mask 0.0.0.0 / MAC 00:00:00:00:00:00, Session Timeout 3 min, EnableAccess Yes, Encrypt Password No, Multiple Access Yes.
Provenance
source_domains:
- denkovi.com
source_urls:
- http://denkovi.com/Documents/smartDen-IP-16R/Current-Version/UserManual.pdf
retrieved_at: 2026-04-30T04:31:35.492Z
last_checked_at: 2026-07-21T21:53:23.152Z
Verification Summary
verdict: verified
checked_at: 2026-07-21T21:53:23.152Z
matched_actions: 46
action_count: 46
confidence: medium
summary: "All 46 spec actions have verbatim command tokens in source; transport verified; coverage complete. (9 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "source header table lists \"SNMPv2\" for IP-16R while Section 10.1 body states \"SNMPv1\"; discrepancy not resolved"
- "Appendix 2 (full XML/JSON current_state reply formats) is referenced by the source but not reproduced in the excerpt"
- "encrypted-MQTT topic protocol and password-encryption algorithm are \"available upon request\" — not in source"
- "source lists \"Password: admin\" but no explicit username field; username inferred"
- "no hardware interlock / power-sequencing warnings stated in source beyond the reboot guard above"
- "source header table lists \"SNMPv2\" for IP-16R while Section 10.1 body states \"SNMPv1\""
- "Appendix 2 (full XML/JSON current_state reply field formats) referenced but not reproduced in the source excerpt"
- "MIB file itself not included in source (OID table above transcribed from Section 10.1 prose/tables)"
- "encrypted-MQTT topic protocol and XML/JSON password-encryption algorithm are \"available upon request\" — not in source"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0