Basic DyNet Opcodes

Opcode Structure

Logical Message Protocol Interface
  • 8 byte packet

  • Checksum = Negative 8 bit 2s

  • Complement sum of bytes 1-7

  • All numbers in hexadecimal

  • RS-485

  • 9600 baud

  • 8 bit data

  • 1 start bit, 1 stop bit, no parity

  • Idle between bytes to be <1ms

  • Delay between Packets to be >10ms

Logical Message Structure

Physical Message Structure

Byte 0: 1C – Logical Sync byte
Byte 1: Area number
Byte 2: Data Byte 1
Byte 3: Opcode
Byte 4: Data Byte 2
Byte 5: Data Byte 3
Byte 6: Join Byte
Byte 7: Checksum

Byte 0: 5C – Physical Sync byte
Byte 1: Device code
Byte 2: Box Number
Byte 3: Opcode
Byte 4: Data Byte 1
Byte 5: Data Byte 2
Byte 6: Data Byte 3
Byte 7: Checksum

Opcode Examples

Preset

Select Current Preset

Byte 0: 1C hex
Byte 1: Area
Byte 2: Fade Rate low byte (usually 100)
Byte 3: Preset: 0= P1, 1= P2, 2= P3, 3= P4, A= P5, B= P6, C= P7, D= P8
Byte 4: Fade Rate high byte (usually 0)
Byte 5: Preset Bank: 0= P1 – P8, 1= P9 – P16, 2= P17 – P24 etc.
Byte 6: Join
Byte 7: Checksum

Example: Select Preset 4 in Area 1:
[1C] [01] [20] [03] [00] [00] [FF] [C1]

Select Current Preset (Linear)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Preset (0 origin)
Byte 3: 65 hex
Byte 4: Fade Time Lo (16 bit fade time in 20 ms steps)
Byte 5: Fade Time Hi
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Select Preset 4 in Area 1 with a fade of 2 seconds:
[1C] [01] [03] [65] [64] [00] [FF] [18]

Preset Offset

Byte 0: 1C hex
Byte 1: Area
Byte 2: Data: Offset value plus Bit 8 set, to distinguish Preset Offset from Swap Bank
Byte 3: Opcode $64
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Preset Offset of 15 in Area 1:
[1C] [01] [8F] [64] [00] [00] [FF] [F1]

Reset Preset

Byte 0: 1C hex
Byte 1: Area
Byte 2: Fade Time Lo (16 bit fade time in 20 ms steps)
Byte 3: 0F hex
Byte 4: Fade Time Hi
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Reset Preset in Area 1 over 5 seconds:
[1C] [01] [FA] [0F] [00] [00] [FF] [DB]

Ramp / Fade

Ramp Channel/Area to Off

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 68 hex
Byte 4: 0 (Unused)
Byte 5: Ramp Rate (100 ms steps. Ramp Rate is the time to fade from 0 to 100%)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Ramp Channel 4 in Area 1 to off with a ramp rate of 5 seconds:
[1C] [01] [03] [68] [00] [32] [FF] [47]

Ramp Channel/Area to On

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 69 hex
Byte 4: 0 (Unused)
Byte 5: Ramp Rate (100 ms steps. Ramp Rate is the time to fade from 0: 100%)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Ramp Channel 4 in Area 1 to On with a ramp rate of 5 seconds:
[1C] [01] [03] [69] [00] [32] [FF] [46]

Fade Channel/Area to Preset

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 6B hex
Byte 4: Preset (0 origin)
Byte 5: Fade Time (20 ms steps)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 1, Channel 4, Recall Preset 4 with a Fade Time of 2.00s:
[1C] [01] [03] [6B] [03] [64] [FF] [0F]

Ramp Channel/Area to a Level (0.1 sec to 25.5 sec)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 71 hex
Byte 4: Channel Level (01 = 100%, FF = 0%)
Byte 5: Ramp Rate (100 ms steps. Ramp Rate is the time to fade from 0: 100%)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 2 Channel 3 Fade to 50% over 5 seconds:
[1C] [02] [02] [71] [82] [32] [FF] [BC]

Fade Channel/Area to a Level (1 sec to 255 sec)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 72 hex
Byte 4: Channel Level (01 = 100%, FF = 0%)
Byte 5: Fade Rate (1 sec steps)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 2 Channel 3 Fade to 50% over 50 seconds:
[1C] [02] [02] [72] [82] [32] [FF] [BB]

Fade Channel/Area to a Level (1 min to 22 min)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 73 hex
Byte 4: Channel Level (01 = 100%, FF = 0%)
Byte 5: Fade Rate (1 min steps, max 22 minutes)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 2 Channel 3 Fade to 50% over 15 minutes:
[1C] [02] [02] [73] [82] [0F] [FF] [DD]

Fade Channel/Area to Off

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 74 hex
Byte 4: Fade Time Lo (16 bit fade time in 20 ms steps)
Byte 5: Fade Time Hi
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 4, All Channels,: Fade to off with a Fade Time of 2.00s:
[1C] [04] [FF] [74] [64] [00] [FF] [0A]

Fade Channel/Area to On

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 75 hex
Byte 4: Fade Time Lo (16 bit fade time in 20 ms steps)
Byte 5: Fade Time Hi
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 4, All Channels,: Fade to on with a Fade Time of 2.00s:
[1C] [04] [FF] [75] [64] [00] [FF] [09]

Stop Fade Channel/Area

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 76 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 4 Channel 6 Stop Fading:
[1C] [04] [05] [76] [00] [00] [FF] [66]

Fade Area to a Level

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 79 hex
Byte 4: Fade Time Lo (16 bit fade time in 20 ms steps)
Byte 5: Fade Time Hi
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Fade Area 4 to 50% over 2 sec:
[1C] [04] [82] [79] [64] [00] [FF] [82]

Set to Off

Byte 0: 1C hex
Byte 1: Area
Byte 2: Fade Rate low Byte (usually 100)
Byte 3: 4 hex
Byte 4: Fade Rate high Byte (usually 0)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Turn Area 3 Off:
[1C] [03] [0A] [04] [00] [00] [FF] [D4]

Ramp Channel/Area to a Level except channels preset to 0% or don’t care

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 5F hex
Byte 4: Level (01 = 100%, FF = 0%)
Byte 5: Ramp Rate (100 ms steps. Ramp Rate is the time to fade from 0: 100%)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 4, Ramp Lit Channels Toward 100% with a ramp rate of 5.00s:
[1C] [04] [FF] [5F] [01] [32] [FF] [50]

Request / Report

Report Channel Level (reply from dimmer)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin)
Byte 3: 60 hex
Byte 4: Target Level (01 = 100%, FF = 0%)
Byte 5: Current Level (01 = 100%, FF = 0%)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Report from Channel 5 in Area 2 Target Level is 57% & Current Level is 57%:
[1C] [02] [04] [60] [70] [70] [FF] [9F]

Request Channel Level (sent to dimmer)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin)
Byte 3: 61 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Request Level of Channel 5 in Area 2:
[1C] [02] [04] [61] [00] [00] [FF] [7E]

Report Preset (reply from dimmer)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Preset (0 origin)
Byte 3: 62 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 4 is currently in Preset 6:
[1C] [04] [05] [62] [00] [00] [FF] [7A]

Request Preset (sent to dimmer)

Byte 0: 1C hex Byte 1: Area Byte 2: 0 (Unused) Byte 3: 63 hex Byte 4: 0 (Unused) Byte 5: 0 (Unused) Byte 6: Join (usually FF hex) Byte 7: Checksum

Example: Request Current Preset of Area 4:
[1C] [04] [00] [63] [00] [00] [FF] [7E]

Program / Save / Restore Preset

Program Current Preset: Saves channel levels to the current preset

Byte 0: 1C hex
Byte 1: Area
Byte 2: 0 (Unused)
Byte 3: 8 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Save the Current Channel Levels of Area 4 to the Current Preset:
[1C] [04] [00] [08] [00] [00] [FF] [D9]

Program Defined Preset: Saves channel levels to a defined preset

Byte 0: 1C hex
Byte 1: Area
Byte 2: Preset (0 origin)
Byte 3: 9 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Save the Current Channel Levels of Area 4 to Preset 1:
[1C] [04] [00] [09] [00] [00] [FF] [D8]

Save Current Preset (Saves current preset number)

Byte 0: 1C hex
Byte 1: Area
Byte 2: 0 (Unused)
Byte 3: 66 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Save Current Preset in Area 1:
[1C] [01] [00] [66] [00] [00] [FF] [7E]

Restore Saved Preset

Byte 0: 1C hex
Byte 1: Area
Byte 2: Fade Time Lo (16 bit fade time in 20 ms steps)
Byte 3: 67 hex
Byte 4: Fade Time Hi
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Restore Saved Preset in Area 1:
[1C] [01] [FA] [67] [00] [00] [FF] [83]

Panic

Panic (Locks panels & selects panic preset)

Byte 0: 1C hex
Byte 1: Area
Byte 2: 0 (Unused)
Byte 3: 17 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Select Panic Mode in Area 2:
[1C] [02] [F0] [17] [00] [00] [FF] [DC]

Un-Panic (Unlocks panels & restores previous preset)

Byte 0: 1C hex
Byte 1: Area
Byte 2: 0 (Unused)
Byte 3: 18 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Restore normal operation in Area 2:
[1C] [02] [F0] [18] [00] [00] [FF] [DB]

DMX

Set DMX mode

Byte 0: 1C hex
Byte 1: AREA
Byte 2: Data (00=DMX if Present, 01=Local Override, 02=HTP, 03=DyNet)
Byte 3: 10 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 1: Select DMX Mode DyNet Only:
[1C] [01] [03] [10] [00] [00] [FF] [D1]

Disable/Enable Control Panels

Disable Control Panels

Byte 0: 1C hex
Byte 1: Area
Byte 2: 0 (Unused)
Byte 3: 15 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Lock All Control Panels in Area 6:
[1C] [06] [00] [15] [00] [00] [FF] [CA]

Enable Control Panels

Byte 0: 1C hex
Byte 1: Area
Byte 2: 0 (Unused)
Byte 3: 16 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Unlock All Control Panels in Area 6:
[1C] [06] [00] [16] [00] [00] [FF] [C9]

Light Level Compensation (Daylight Harvesting)

Suspend/Resume Light Level Compensation (All presets)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 11 hex
Byte 4: 0 (Unused)
Byte 5: Suspend / Resume (0 = Suspend, 1 = Resume)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 2, All Channels,: Resume Light Level Compensation for all Presets:
[1C] [02] [FF] [11] [00] [01] [FF] [D2]

Suspend Light Level Compensation (Current Preset)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 1A hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 2, All Channels,: Disable Light Level Compensation for Current Preset:
[1C] [02] [FF] [1A] [00] [00] [FF] [CA]

Resume Light Level Compensation (Current Preset)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 1B hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 2, All Channels,: Enable Light Level Compensation for Current Preset:
[1C] [02] [FF] [1B] [00] [00] [FF] [C9]

Occupancy Detection

Suspend/Resume Occupancy Detection (All presets)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 31 hex
Byte 4: 0 (Unused)
Byte 5: Suspend / Resume (0 = Suspend, 1 = Resume)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 1, All Channels, Resume Occupancy Detection for All Presets:
[1C] [01] [FF] [31] [00] [01] [FF] [B3]

Disable Occupancy Detection (Current Preset)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 3A hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 1, All Channels, Disable Occupancy Detection for Current Preset:
[1C] [01] [FF] [3A] [00] [00] [FF] [AB]

Enable Occupancy Detection (Current Preset)

Byte 0: 1C hex
Byte 1: Area
Byte 2: Channel (0 origin, FF = All Channels in the Area)
Byte 3: 3B hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 1, All Channels, Enable Occupancy Detection for Current Preset:
[1C] [01] [FF] [3B] [00] [00] [FF] [AA]

User Preference Messages

Set User Preference

Byte 0: 1C hex
Byte 1: Area
Byte 2: Preference (see below)
Byte 3: 48 hex
Byte 4: Data Hi (see below)
Byte 5: Data Lo (see below)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 1: Set Indicator LED Brightness to 50% with a fade of 1.00s:
[1C] [01] [01] [48] [82] [32] [FF] [E7]

Request User Preference

Byte 0: 1C hex
Byte 1: Area
Byte 2: Preference (see below)
Byte 3: 49 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 1: Request Actual Temperature:
[1C] [01] [06] [49] [00] [00] [FF] [95]

Report User Preference

Byte 0: 1C hex
Byte 1: Area
Byte 2: Preference Value (see below)
Byte 3: 4A hex
Byte 4: Data Hi (see below)
Byte 5: Data Lo (see below)
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Area 1 Actual temperature 22C:
[1C] [01] [06] [4A] [00] [58] [FF] [3C]

Preference Values:

0x01 = Indicator LED Brightness
0x02 = Backlight LED Brightness
0x03 = Display Brightness
0x04 = Display Contrast
0x05 = Sounder Volume
0x06 = Actual Temperature, 16 bit two’s complement in 0.25 deg Celsius steps
0x07 = User Temperature setpoint, 16 bit two’s complement in 0.25°C steps
0x08 = Display Brightness Scaled Value
0x09 = Air Conditioning Plant Capability
0x0A = Closed loop Light control setpoint (Temporary Adjust) in LUX
0x0B = Dynamic No Motion Timeout (Temporary Adjust) for Universal Motion sensor
0x0C = Actual Temperature, as signed fixed point °C (Range -127.99 to 127.99)
0x0D = User Temperature setpoint, as signed fixed point °C (Range -127.99 to 127.99)

Preference = 0x01

Data Hi: Indicator LED brightness (01=100% FF=0%)
Data Lo: 8 bit Fade Time in 20ms increments.

Preference = 0x02

Data Hi: Backlight LED Brightness (01=100% FF=0%)
Data Lo: 8 bit Fade Time in 20ms increments.

Preference = 0x03

Data Hi: LCD Brightness (01=100% FF=0%)
Data Lo: 8 bit Fade Time in 20ms increments.

Preference = 0x04

Data Hi: LCD Contrast ( 01=100% FF=0%)
Data Lo: 8 bit Fade Time in 20ms increments.

Preference = 0x05

Data Hi: Sounder Volume ( 01=100% FF=0%)
Data Lo: 8 bit Fade Time in 20ms increments.

Preference = 0x06

Actual Temperature, 16 bit two’s complement in 0.25°C steps

Preference = 0x07

User Temperature setpoint, 16 bit two’s complement in 0.25°C steps

Preference = 0x08

Data Hi: Display Brightness Scaled Value (01=100% FF=0%)
Data Lo: 8 bit Fade Time in 20mS increments.

Preference = 0x09

Data Hi: Air-conditioning Plant Capabilities
Bit-0: 1- Hot water available, 0- Hot water not available
Bit-1: 1- Cold water available, 0- Cold water not available
Data Lo: Unused

Preference = 0x0A

Closed loop light control setpoint (Temporary Adjust) in LUX
0x0000 to 0xFFFF (Raw Lux)

Preference = 0x0B

No Motion Timeout
0x0000 Revert To Configured No Motion Timeout
0x0001 to 0xFFFE (Timeout in Seconds)
0xFFFF Revert To Configured No Motion Timeout

Preference = 0x0C

Actual / Measured Temperature Range -127.99 to 127.99
Data Hi: 1 MSB is sign bit of temperature (1-negative, 0=positive)
7 LSBs are integer part of temperature (not in 2’s complement)
Data Lo: 8 bit unsigned fraction part of temperature (valid decimal range is 0-99)
Example +25.56°C =⇒ Value High = 0x19, Value Low = 0x38

Preference = 0x0D

Setpoint / Desired Temperature
Data values as per preference 0x0C

Join

Set Join Level

Byte 0: 1C hex
Byte 1: Area
Byte 2: Join Level
Byte 3: 14 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join
Byte 7: Checksum

Example: Area 1, Set Join Level 6:
[1C] [01] [06] [14] [00] [00] [FF] [CA]

Set RMask

Byte 0: 1C hex
Byte 1: Area
Byte 2: RMask
Byte 3: 40 hex
Byte 4: 0 (Unused)
Byte 5: 0 (Unused)
Byte 6: Join
Byte 7: Checksum

Example: Area 1 set RMask level 3:
[1C] [01] [03] [40] [00] [00] [FF] [A1]

Area Linking

The Base Link Area (BLA) acts like an Area 0 for all channels that have that BLA defined, and is useful as a global control for a block of areas.

The following is for the 24 areas directly above the BLA, as used by the Set Area Links and Clear Area Links messages:

  • Byte 2:

    • Bit 7 is the 1st area

    • Bit 0 is the 8th area

  • Byte 4:

    • Bit 7 is the 9th area

    • Bit 0 is the 16th area

  • Byte 5:

    • Bit 7 is the 17th area

    • Bit 0 is the 24th area

Byte 0: 1C hex
Byte 1: Area
Byte 2: Data: Areas to Link
Byte 3: 20 hex
Byte 4: Data: Areas to Link
Byte 5: Data: Areas to Link
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Link Areas 4 & 5 (assumes Base Area = 3):
[1C] [04] [80] [20] [00] [00] [FF] [41]

Byte 0: 1C hex
Byte 1: Area
Byte 2: Data: Areas to Unlink
Byte 3: 21 hex
Byte 4: Data: Areas to Unlink
Byte 5: Data: Areas to Unlink
Byte 6: Join (usually FF hex)
Byte 7: Checksum

Example: Separate Areas 4 & 5 (assumes Base Area = 3):
[1C] [04] [80] [21] [00] [00] [FF] [40]