Summary
Dynalite Dadpe lighting/network controller speaking the DyNet RS-485 protocol. Spec covers the Logical Message opcodes for preset recall, channel ramp/fade, level reporting, program/save/restore preset, panic, DMX mode, panel lock, daylight harvesting, occupancy detection, user preferences, join/RMask, and area linking. Communication uses 8-byte packets with a negative 8-bit two's-complement checksum over bytes 1–7.
Transport
# Source explicitly states RS-485 at 9600 bps, 8 data bits, 1 start, 1 stop, no parity.
# NOTE: input context labelled the protocol "RS-232C", but the refined source document
# describes the DyNet interface as RS-485. Population follows the source (Tier 1).
protocols:
- serial
serial:
baud_rate: 9600
data_bits: 8
parity: none
stop_bits: 1
flow_control: none # UNRESOLVED: flow control not stated; none implied by listed params
auth:
type: none # inferred: no auth/login procedure in source
Traits
# - powerable (Set to Off / Ramp to Off / Ramp to On / Fade to Off / Fade to On)
# - levelable (ramp/fade to a level across multiple rate ranges)
# - queryable (Request Channel Level, Request Preset, Request User Preference)
traits:
- powerable
- levelable
- queryable
Actions
# DyNet Logical Message packet: 8 bytes. Byte0=1C sync, Byte1=Area, Byte2-5=data,
# Byte6=Join (usually FF), Byte7=Checksum = negative 8-bit two's-complement sum of bytes 1-7.
# Idle between bytes <1ms; delay between packets >10ms.
# Commands listed verbatim with example payloads from source.
# --- Preset ---
- id: select_current_preset
label: Select Current Preset
kind: action
command: "1C {area} {fade_rate_lo} {preset} {fade_rate_hi} {preset_bank} {join} {checksum}"
params:
- name: area
type: integer
description: Area number (Byte 1)
- name: preset
type: enum
description: "Byte3 opcode also carries preset: 0=P1,1=P2,2=P3,3=P4,A=P5,B=P6,C=P7,D=P8"
- name: preset_bank
type: integer
description: "Byte5: 0=P1-P8, 1=P9-P16, 2=P17-P24, etc."
notes: "Example Select Preset 4 in Area 1: [1C] [01] [20] [03] [00] [00] [FF] [C1]"
- id: select_current_preset_linear
label: Select Current Preset (Linear)
kind: action
command: "1C {area} {preset} 65 {fade_time_lo} {fade_time_hi} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: preset
type: integer
description: Preset (0 origin)
- name: fade_time_lo
type: integer
description: "16-bit fade time, 20ms steps (low byte)"
- name: fade_time_hi
type: integer
description: "16-bit fade time, 20ms steps (high byte)"
notes: "Example Preset 4 Area 1 fade 2s: [1C] [01] [03] [65] [64] [00] [FF] [18]"
- id: preset_offset
label: Preset Offset
kind: action
command: "1C {area} {offset_or_80} 64 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: offset_or_80
type: integer
description: "Offset value plus Bit 8 set, to distinguish from Swap Bank"
notes: "Example Offset 15 Area 1: [1C] [01] [8F] [64] [00] [00] [FF] [F1]"
- id: reset_preset
label: Reset Preset
kind: action
command: "1C {area} {fade_time_lo} 0F {fade_time_hi} 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: fade_time_lo
type: integer
description: "16-bit fade time, 20ms steps (low byte)"
- name: fade_time_hi
type: integer
description: "16-bit fade time, 20ms steps (high byte)"
notes: "Example Reset Preset Area 1 5s: [1C] [01] [FA] [0F] [00] [00] [FF] [DB]"
# --- Ramp / Fade ---
- id: ramp_to_off
label: Ramp Channel/Area to Off
kind: action
command: "1C {area} {channel} 68 00 {ramp_rate} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: ramp_rate
type: integer
description: "100ms steps (time to fade 0 to 100%)"
notes: "Example Ch4 Area1 5s: [1C] [01] [03] [68] [00] [32] [FF] [47]"
- id: ramp_to_on
label: Ramp Channel/Area to On
kind: action
command: "1C {area} {channel} 69 00 {ramp_rate} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: ramp_rate
type: integer
description: "100ms steps (time to fade 0 to 100%)"
notes: "Example Ch4 Area1 5s: [1C] [01] [03] [69] [00] [32] [FF] [46]"
- id: fade_to_preset
label: Fade Channel/Area to Preset
kind: action
command: "1C {area} {channel} 6B {preset} {fade_time} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: preset
type: integer
description: Preset (0 origin)
- name: fade_time
type: integer
description: "Fade time, 20ms steps"
notes: "Example Area1 Ch4 Preset4 2.00s: [1C] [01] [03] [6B] [03] [64] [FF] [0F]"
- id: ramp_to_level_0_1_to_25_5s
label: Ramp Channel/Area to a Level (0.1s to 25.5s)
kind: action
command: "1C {area} {channel} 71 {level} {ramp_rate} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: level
type: integer
description: "Channel level (01=100%, FF=0%)"
- name: ramp_rate
type: integer
description: "100ms steps (time to fade 0 to 100%)"
notes: "Example Area2 Ch3 50% 5s: [1C] [02] [02] [71] [82] [32] [FF] [BC]"
- id: fade_to_level_1_to_255s
label: Fade Channel/Area to a Level (1s to 255s)
kind: action
command: "1C {area} {channel} 72 {level} {fade_rate} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: level
type: integer
description: "Channel level (01=100%, FF=0%)"
- name: fade_rate
type: integer
description: "1 sec steps"
notes: "Example Area2 Ch3 50% 50s: [1C] [02] [02] [72] [82] [32] [FF] [BB]"
- id: fade_to_level_1_to_22min
label: Fade Channel/Area to a Level (1 min to 22 min)
kind: action
command: "1C {area} {channel} 73 {level} {fade_rate} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: level
type: integer
description: "Channel level (01=100%, FF=0%)"
- name: fade_rate
type: integer
description: "1 min steps, max 22 minutes"
notes: "Example Area2 Ch3 50% 15min: [1C] [02] [02] [73] [82] [0F] [FF] [DD]"
- id: fade_to_off
label: Fade Channel/Area to Off
kind: action
command: "1C {area} {channel} 74 {fade_time_lo} {fade_time_hi} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: fade_time_lo
type: integer
description: "16-bit fade time, 20ms steps (low byte)"
- name: fade_time_hi
type: integer
description: "16-bit fade time, 20ms steps (high byte)"
notes: "Example Area4 all chans 2.00s: [1C] [04] [FF] [74] [64] [00] [FF] [0A]"
- id: fade_to_on
label: Fade Channel/Area to On
kind: action
command: "1C {area} {channel} 75 {fade_time_lo} {fade_time_hi} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: fade_time_lo
type: integer
description: "16-bit fade time, 20ms steps (low byte)"
- name: fade_time_hi
type: integer
description: "16-bit fade time, 20ms steps (high byte)"
notes: "Example Area4 all chans 2.00s: [1C] [04] [FF] [75] [64] [00] [FF] [09]"
- id: stop_fade
label: Stop Fade Channel/Area
kind: action
command: "1C {area} {channel} 76 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
notes: "Example Area4 Ch6: [1C] [04] [05] [76] [00] [00] [FF] [66]"
- id: fade_area_to_level
label: Fade Area to a Level
kind: action
command: "1C {area} {level} 79 {fade_time_lo} {fade_time_hi} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: level
type: integer
description: "Byte2 acts as level (01=100%, FF=0% per sibling opcodes)"
- name: fade_time_lo
type: integer
description: "16-bit fade time, 20ms steps (low byte)"
- name: fade_time_hi
type: integer
description: "16-bit fade time, 20ms steps (high byte)"
notes: "Example Area4 50% 2s: [1C] [04] [82] [79] [64] [00] [FF] [82]"
- id: set_to_off
label: Set to Off
kind: action
command: "1C {area} {fade_rate_lo} 04 {fade_rate_hi} 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: fade_rate_lo
type: integer
description: "Fade rate low byte (usually 100 decimal = 0x64)"
- name: fade_rate_hi
type: integer
description: "Fade rate high byte (usually 0)"
notes: "Example Area3 Off: [1C] [03] [0A] [04] [00] [00] [FF] [D4]"
- id: ramp_to_level_except_zero
label: Ramp Channel/Area to a Level except channels preset to 0% or don't care
kind: action
command: "1C {area} {channel} 5F {level} {ramp_rate} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: level
type: integer
description: "Level (01=100%, FF=0%)"
- name: ramp_rate
type: integer
description: "100ms steps (time to fade 0 to 100%)"
notes: "Example Area4 ramp lit channels to 100% 5.00s: [1C] [04] [FF] [5F] [01] [32] [FF] [50]"
# --- Request / Report ---
- id: report_channel_level
label: Report Channel Level (reply from dimmer)
kind: event
command: "1C {area} {channel} 60 {target_level} {current_level} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: Channel (0 origin)
- name: target_level
type: integer
description: "Target level (01=100%, FF=0%)"
- name: current_level
type: integer
description: "Current level (01=100%, FF=0%)"
notes: "Example Ch5 Area2 target/current 57%: [1C] [02] [04] [60] [70] [70] [FF] [9F]"
- id: request_channel_level
label: Request Channel Level (sent to dimmer)
kind: query
command: "1C {area} {channel} 61 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: Channel (0 origin)
notes: "Example Ch5 Area2: [1C] [02] [04] [61] [00] [00] [FF] [7E]"
- id: report_preset
label: Report Preset (reply from dimmer)
kind: event
command: "1C {area} {preset} 62 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: preset
type: integer
description: Preset (0 origin)
notes: "Example Area4 currently in Preset 6: [1C] [04] [05] [62] [00] [00] [FF] [7A]"
- id: request_preset
label: Request Preset (sent to dimmer)
kind: query
command: "1C {area} 00 63 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
notes: "Example Request current preset Area4: [1C] [04] [00] [63] [00] [00] [FF] [7E]"
# --- Program / Save / Restore Preset ---
- id: program_current_preset
label: Program Current Preset (save channel levels to current preset)
kind: action
command: "1C {area} 00 08 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
notes: "Example Area4 save current levels to current preset: [1C] [04] [00] [08] [00] [00] [FF] [D9]"
- id: program_defined_preset
label: Program Defined Preset (save channel levels to a defined preset)
kind: action
command: "1C {area} {preset} 09 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: preset
type: integer
description: Preset (0 origin)
notes: "Example Area4 save current levels to Preset 1: [1C] [04] [00] [09] [00] [00] [FF] [D8]"
- id: save_current_preset
label: Save Current Preset (saves current preset number)
kind: action
command: "1C {area} 00 66 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
notes: "Example Area1: [1C] [01] [00] [66] [00] [00] [FF] [7E]"
- id: restore_saved_preset
label: Restore Saved Preset
kind: action
command: "1C {area} {fade_time_lo} 67 {fade_time_hi} 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: fade_time_lo
type: integer
description: "16-bit fade time, 20ms steps (low byte)"
- name: fade_time_hi
type: integer
description: "16-bit fade time, 20ms steps (high byte)"
notes: "Example Area1: [1C] [01] [FA] [67] [00] [00] [FF] [83]"
# --- Panic ---
- id: panic
label: Panic (Locks panels and selects panic preset)
kind: action
command: "1C {area} 00 17 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
notes: "Example Area2: [1C] [02] [F0] [17] [00] [00] [FF] [DC]"
- id: un_panic
label: Un-Panic (Unlocks panels and restores previous preset)
kind: action
command: "1C {area} 00 18 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
notes: "Example Area2: [1C] [02] [F0] [18] [00] [00] [FF] [DB]"
# --- DMX ---
- id: set_dmx_mode
label: Set DMX Mode
kind: action
command: "1C {area} {mode} 10 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: mode
type: enum
description: "00=DMX if Present, 01=Local Override, 02=HTP, 03=DyNet"
notes: "Example Area1 DyNet only: [1C] [01] [03] [10] [00] [00] [FF] [D1]"
# --- Disable/Enable Control Panels ---
- id: disable_control_panels
label: Disable Control Panels
kind: action
command: "1C {area} 00 15 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
notes: "Example lock all panels Area6: [1C] [06] [00] [15] [00] [00] [FF] [CA]"
- id: enable_control_panels
label: Enable Control Panels
kind: action
command: "1C {area} 00 16 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
notes: "Example unlock all panels Area6: [1C] [06] [00] [16] [00] [00] [FF] [C9]"
# --- Light Level Compensation (Daylight Harvesting) ---
- id: suspend_resume_llc_all_presets
label: Suspend/Resume Light Level Compensation (All presets)
kind: action
command: "1C {area} {channel} 11 00 {suspend_resume} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: suspend_resume
type: enum
description: "0 = Suspend, 1 = Resume"
notes: "Example Area2 all chans Resume: [1C] [02] [FF] [11] [00] [01] [FF] [D2]"
- id: suspend_llc_current_preset
label: Suspend Light Level Compensation (Current Preset)
kind: action
command: "1C {area} {channel} 1A 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
notes: "Example Area2 all chans disable LLC current preset: [1C] [02] [FF] [1A] [00] [00] [FF] [CA]"
- id: resume_llc_current_preset
label: Resume Light Level Compensation (Current Preset)
kind: action
command: "1C {area} {channel} 1B 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
notes: "Example Area2 all chans enable LLC current preset: [1C] [02] [FF] [1B] [00] [00] [FF] [C9]"
# --- Occupancy Detection ---
- id: suspend_resume_occupancy_all_presets
label: Suspend/Resume Occupancy Detection (All presets)
kind: action
command: "1C {area} {channel} 31 00 {suspend_resume} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
- name: suspend_resume
type: enum
description: "0 = Suspend, 1 = Resume"
notes: "Example Area1 all chans Resume: [1C] [01] [FF] [31] [00] [01] [FF] [B3]"
- id: disable_occupancy_current_preset
label: Disable Occupancy Detection (Current Preset)
kind: action
command: "1C {area} {channel} 3A 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
notes: "Example Area1 all chans disable occupancy current preset: [1C] [01] [FF] [3A] [00] [00] [FF] [AB]"
- id: enable_occupancy_current_preset
label: Enable Occupancy Detection (Current Preset)
kind: action
command: "1C {area} {channel} 3B 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: channel
type: integer
description: "Channel (0 origin, FF = all channels in area)"
notes: "Example Area1 all chans enable occupancy current preset: [1C] [01] [FF] [3B] [00] [00] [FF] [AA]"
# --- User Preference Messages ---
- id: set_user_preference
label: Set User Preference
kind: action
command: "1C {area} {preference} 48 {data_hi} {data_lo} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: preference
type: enum
description: >
Preference ID. 0x01 Indicator LED Brightness, 0x02 Backlight LED Brightness,
0x03 Display Brightness, 0x04 Display Contrast, 0x05 Sounder Volume,
0x06 Actual Temperature (16-bit 2s comp, 0.25C steps), 0x07 User Temp setpoint,
0x08 Display Brightness Scaled, 0x09 AC Plant Capability, 0x0A Closed-loop light setpoint (LUX),
0x0B Dynamic No Motion Timeout, 0x0C Actual Temp (signed fixed point C), 0x0D User Temp setpoint (signed fixed point C)
- name: data_hi
type: integer
description: "Data high byte (meaning depends on preference)"
- name: data_lo
type: integer
description: "Data low byte (meaning depends on preference)"
notes: "Example Area1 LED brightness 50% fade 1.00s: [1C] [01] [01] [48] [82] [32] [FF] [E7]"
- id: request_user_preference
label: Request User Preference
kind: query
command: "1C {area} {preference} 49 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: preference
type: enum
description: "See set_user_preference preference enum (0x01-0x0D)"
notes: "Example Area1 request actual temperature: [1C] [01] [06] [49] [00] [00] [FF] [95]"
- id: report_user_preference
label: Report User Preference
kind: event
command: "1C {area} {preference} 4A {data_hi} {data_lo} {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: preference
type: enum
description: "See set_user_preference preference enum (0x01-0x0D)"
- name: data_hi
type: integer
description: "Data high byte (per preference encoding)"
- name: data_lo
type: integer
description: "Data low byte (per preference encoding)"
notes: "Example Area1 actual temp 22C: [1C] [01] [06] [4A] [00] [58] [FF] [3C]"
# --- Join ---
- id: set_join_level
label: Set Join Level
kind: action
command: "1C {area} {join_level} 14 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: join_level
type: integer
description: Join level
notes: "Example Area1 Set Join Level 6: [1C] [01] [06] [14] [00] [00] [FF] [CA]"
- id: set_rmask
label: Set RMask
kind: action
command: "1C {area} {rmask} 40 00 00 {join} {checksum}"
params:
- name: area
type: integer
description: Area number
- name: rmask
type: integer
description: RMask value
notes: "Example Area1 RMask level 3: [1C] [01] [03] [40] [00] [00] [FF] [A1]"
# --- Area Linking ---
- id: set_area_links
label: Set Area Links
kind: action
command: "1C {area} {link_byte2} 20 {link_byte4} {link_byte5} {join} {checksum}"
params:
- name: area
type: integer
description: Base Link Area (BLA) - acts as Area 0
- name: link_byte2
type: integer
description: "Bitmask Byte2: Bit7=1st area, Bit0=8th area"
- name: link_byte4
type: integer
description: "Bitmask Byte4: Bit7=9th area, Bit0=16th area"
- name: link_byte5
type: integer
description: "Bitmask Byte5: Bit7=17th area, Bit0=24th area"
notes: "Example link Areas 4&5 (Base Area=3): [1C] [04] [80] [20] [00] [00] [FF] [41]"
- id: clear_area_links
label: Clear Area Links
kind: action
command: "1C {area} {unlink_byte2} 21 {unlink_byte4} {unlink_byte5} {join} {checksum}"
params:
- name: area
type: integer
description: Base Link Area
- name: unlink_byte2
type: integer
description: Bitmask of areas to unlink (Byte 2 encoding)
- name: unlink_byte4
type: integer
description: Bitmask of areas to unlink (Byte 4 encoding)
- name: unlink_byte5
type: integer
description: Bitmask of areas to unlink (Byte 5 encoding)
notes: "Example separate Areas 4&5 (Base Area=3): [1C] [04] [80] [21] [00] [00] [FF] [40]"
Feedbacks
# Observable query/response states. See also Actions with kind: event for the
# unsolicited Report opcodes (0x60, 0x62, 0x4A).
- id: channel_level_response
type: object
description: "Reply to Request Channel Level (op 0x61). Carries target and current level (01=100%, FF=0%)."
- id: preset_response
type: integer
description: "Reply to Request Preset (op 0x63). Current preset number (0 origin)."
- id: user_preference_response
type: object
description: "Reply to Request User Preference (op 0x49). Carries preference id, data hi, data lo."
# UNRESOLVED: device-level status (e.g. online/offline, fault flags) not documented in source.
Variables
# Settable parameters that are not discrete one-shot actions.
- id: area
type: integer
description: "Logical area number (Byte 1). Scope for most opcodes."
- id: channel
type: integer
description: "Channel within area (Byte 2). 0 origin; FF = all channels in the area."
- id: preset
type: integer
description: "Preset index (0 origin). Banked in groups of 8 via preset_bank."
- id: preset_bank
type: integer
description: "Byte5 in Select Current Preset. 0=P1-P8, 1=P9-P16, 2=P17-P24, etc."
- id: channel_level
type: integer
range: [0x01, 0xFF]
description: "Channel level encoding. 01=100%, FF=0% (inverted)."
- id: fade_time_20ms
type: integer
description: "16-bit fade time, 20ms steps (split across low/high bytes)."
- id: ramp_rate_100ms
type: integer
description: "Ramp rate in 100ms steps (time to fade 0 to 100%)."
- id: join
type: integer
description: "Byte 6. Usually FF hex."
- id: checksum
type: integer
description: "Byte 7. Negative 8-bit two's complement sum of bytes 1-7."
# UNRESOLVED: max channel count per area not stated; FF=all is documented but no upper bound.
Events
# Unsolicited / reply messages the device emits.
- id: report_channel_level_event
opcode: "0x60"
description: "Dimmer reports channel target/current level (reply or push)."
- id: report_preset_event
opcode: "0x62"
description: "Dimmer reports current preset."
- id: report_user_preference_event
opcode: "0x4A"
description: "Dimmer reports a user preference value (e.g. actual temperature)."
# UNRESOLVED: source does not describe whether Report opcodes are pushed unsolicited or only in reply to a Request.
Macros
# UNRESOLVED: no multi-step sequences described in source.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or
# power-on sequencing requirements. Panic/Un-Panic opcodes are documented as
# panel-lock + preset-recall behaviour, not as safety interlocks.
Notes
- Packet framing: 8-byte Logical Message. Byte0 =
1Csync (Logical). Byte1 = Area. Bytes 2–5 = opcode + data. Byte6 = Join (usuallyFF). Byte7 = checksum = negative 8-bit two's complement sum of bytes 1–7. - Bus timing: idle between bytes
< 1ms; delay between packets> 10ms. - Byte3 carries the opcode for all Logical opcodes (the "preset" field in Select Current Preset at Byte3 doubles as both opcode position and preset selector per the source's mixed Byte3 description).
- Source also defines a Physical Message Structure (Byte0=
5C, device code, box number) not enumerated here — refined excerpt covers Logical Message space only. - Input context labelled the protocol "RS-232C"; the refined source explicitly describes the DyNet interface as RS-485 at 9600 bps. This spec follows the source.
- Level encoding is inverted:
01= 100%,FF= 0%.
规范已输出。共 39 个操作码,均为 1 级直接来自源。`serial` + RS-485 9600(遵循源,而非 RS-232C 输入标签)。恐慌/解除恐慌为面板锁定,并非安全联锁 → 安全部分未解决。
## Provenance
```yaml
source_domains:
- docs.dynalite.com
- aca.im
source_urls:
- https://docs.dynalite.com/system-builder/latest/quick_start/dynet_opcodes.html
- https://docs.dynalite.com/system-builder/latest/user_interfaces/display_and_buttons/display_properties.html
- https://docs.dynalite.com/system-builder/latest/user_interfaces/device_properties.html
- https://docs.dynalite.com/system-builder/latest/ddng232/dynet_messaging.html
- "https://aca.im/driver_docs/Philips/Dynet%20Integrators%20hand%20book%20for%20the%20DNG232%20V2.pdf"
retrieved_at: 2026-06-29T21:24:43.409Z
last_checked_at: 2026-06-30T07:00:16.008Z
Verification Summary
verdict: verified
checked_at: 2026-06-30T07:00:16.008Z
matched_actions: 42
action_count: 42
confidence: medium
summary: "All 42 spec action opcodes matched literally in source with correct byte-level shapes and parameter ranges; RS-485/9600/8N1 transport verified; complete bidirectional coverage. (13 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "device hardware specs (voltage, current, power) not in source. Firmware version compatibility not stated. Physical Message Structure opcodes (device-code/box-number space) not included in this refined excerpt."
- "flow control not stated; none implied by listed params"
- "device-level status (e.g. online/offline, fault flags) not documented in source."
- "max channel count per area not stated; FF=all is documented but no upper bound."
- "source does not describe whether Report opcodes are pushed unsolicited or only in reply to a Request."
- "no multi-step sequences described in source."
- "source contains no safety warnings, interlock procedures, or"
- "firmware version compatibility not stated in source."
- "device hardware specs (voltage/current/power) not in source."
- "Physical Message Structure opcodes (device-code/box-number space) omitted — not in refined excerpt."
- "maximum number of channels per area not stated; FF=all-channels documented but no upper bound given."
- "whether Report opcodes (0x60/0x62/0x4A) are pushed unsolicited or strictly query-replies is not stated."
- "\"Swap Bank\" mentioned as a sibling of Preset Offset but not documented in source."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0