This document describes payloads of FW 1.1.x. Differences with FW 1.0.x are marked with light blue.
nas-codec Live Decoder can be used to decode any payload. Every packet has an example which is also decoded using nas-codec. Parameter names are used consistently where possible.
Downlink: Send command to fPort 50. The same command will be returned if it was accepted and applied.
Note: If using firmware >1.1.10, please see 0x29 light_sensor_config_packet.
Example of how to turn ldr on when signal gets below 40 and off when it gets above 80.
01 50 28 00
Byte | Type | Example | Parameter | Details | Example value | |
---|---|---|---|---|---|---|
0 | uint8 | 0x01 | packet_type | 0x01 - deprecated_ldr_input_config_packet | deprecated_ldr_input_config_packet | |
1 | uint8 | 0x50 | ldr_off_threshold_high | 0 ... 254 0xFF - disabled comment: switch off / alert off threshold |
0x50 → 80 | |
2 | uint8 | 0x28 | ldr_on_threshold_low | 0 ... 254 0xFF - disabled comment: switch on / alert on threshold |
0x28 → 40 | |
3 | bit8 | 0x00 | Bit | Function | ||
0..1 | reserved | |||||
2 | trigger_alert_enabled | false | ||||
3..7 | reserved |
{
"data": {
"packet_type": "deprecated_ldr_input_config_packet",
"ldr_off_threshold_high": 80,
"ldr_on_threshold_low": 40,
"trigger_alert_enabled": false
},
"errors": [],
"warnings": []
}
Note: If using firmware >1.1.10, please see 0x28 dig_input_config_packet.
Example of how to configure motion on dig_input to be on for 30 s for dali_broadcast address, no alert sent:
03 1E00 00 FE 64
Byte | Type | Example | Parameter | Details | Example value | |
---|---|---|---|---|---|---|
0 | uint8 | 0x03 | packet_type | 0x03 - deprecated_dig_input_config_packet | deprecated_dig_input_config_packet | |
1 | uint16 | 0x1E | light_on_duration__s | 0xFFFF - dig_input_disabled default: dig_input_disabled |
0x001E → 30 (s) | |
2 | 0x00 | |||||
3 | bit8 | 0x00 | Bit | Function | ||
0 | reserved | |||||
1 | signal_edge_rising | false | ||||
2 | trigger_alert_enabled default: false |
false | ||||
3..7 | reserved | |||||
4 | uint8 | 0xFE | address | see address encoding | dali_broadcast | |
5 | uint8 | 0x64 | dimming_level__percent | 0..100 | 0x64 → 100 (%) |
{
"data": {
"packet_type": "deprecated_dig_input_config_packet",
"light_on_duration__s": 30,
"signal_edge_rising": false,
"trigger_alert_enabled": false,
"address": "dali_broadcast",
"dimming_level__percent": 100
},
"errors": [],
"warnings": []
}
Example of how to set status_interval to 10 minutes:
07 58020000
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x07 | packet_type | 0x07 - status_config_packet | status_config_packet |
1 | uint32 |
0x58 | status_interval__s | default: 3600 s reasonable min: 600 s maximum: 86400 s note: for testing purposes 60 s minimum is allowed |
0x00000258 → 600 |
2 | 0x02 | ||||
3 | 0x00 | ||||
4 | 0x00 |
{
"data": {
"packet_type": "status_config_packet",
"status_interval__s": 600
},
"errors": [],
"warnings": []
}
UL20xx requests time once a day since FW 1.1.14 by sending out LoRaWAN deviceTimeRequest which makes time_config_packet obsolete.
Example of how to sync time to January 16, 2020 15:23:31 (UTC):
09 F37F205E
Example of how to force time sync (using FW 1.1.15 or later):
09 00000000
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x09 | packet_type | 0x09 - time_config_packet | time_config_packet |
1 | uint32 | 0xF3 | device_unix_epoch |
Number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT) Notice: if the device has not received the timestamp form LoRaWAN DevTimeReq, it will start from Jan 1 2000. 0x00000000 - force_lorawan_devicetimereq (since FW 1.1.15) |
0x5E207FF3 → January 16, 2020 |
2 | 0x7F | ||||
3 | 0x20 | ||||
4 | 0x5E |
{
"data": {
"packet_type": "time_config_packet",
"device_unix_epoch": "2020-01-16T15:23:31.000Z"
},
"errors": [],
"warnings": []
}
Example of how to configure a 15 minute interval:
0B 84030000 FF
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x0B | packet_type | 0x0B - usage_config_packet | usage_config_packet |
1 | uint32 | 0x84 | usage_interval__s | minimum: 600 s 0x00 - disabled (does not turn off measuring) default: 1800 s |
0x00000384 → 900 (s) |
2 | 0x03 | ||||
3 | 0x00 | ||||
4 | 0x00 | ||||
5 | uint8 | 0xFF | reserved / mains_voltage__v* *only for some UL2014 that dont measure voltage |
default: 230 0xFF - ignore |
ignore |
{
"data": {
"packet_type": "usage_config_packet",
"usage_interval__s": 900
},
"errors": [],
"warnings": []
}
Boot delay helps when controllers are power-cycled daily, causing many devices to start regularly joining within a very short time window. boot_delay_range sets the max range from which the device can randomly pick a boot delay, easing network load during power recovery.
Example of how to set boot delay to 2 minutes:
0D 7800
Example of how to set boot delay to 10 minutes:
0D 5802
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x0D | packet_type | 0x0D - boot_delay_config_packet | boot_delay_config_packet |
1 | uint16 |
0x78 | boot_delay_range__s |
default: 15 s (boot_delay_range set to 0) note: since 1.1.14 if boot_delay_range is set doubles the initial time request interval. |
0x0078 → 120 (s) |
2 | 0x00 |
{
"data": {
"packet_type": "boot_delay_config_packet",
"boot_delay_range__s": 120
},
"errors": [],
"warnings": []
}
Useful for UL202x or UL203x where the green lights on top of lamp poles might disturb people looking down from higher buildings.
Notice: status_led_enabled is automatically disabled when light_sensor_config_packet is configured.
Example of how to turn off green status led:
15 00
Byte | Type | Example | Parameter | Details | Example value | ||
---|---|---|---|---|---|---|---|
0 | uint8 | 0x15 | packet_type | 0x15 - onboard_led_config_packet | onboard_led_config_packet | ||
1 | bit8 | 0x00 | Bit | Function | Default | status_led_enabled: false | |
0 | status_led_enabled | true | |||||
1..7 | reserved |
{
"data": {
"packet_type": "onboard_led_config_packet",
"status_led_enabled": false
},
"errors": [],
"warnings": []
}
For configuring metering alerts. Available only on controllers with a Metering chip. To avoid false positive alerts, please set all parameters with sufficient margin.
Example of how to set min_power to 5 W and min_voltage to 190 V:
16 01 0500 FFFF BE00 FFFF FF
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x16 | packet_type | 0x16 - metering_alert_config_packet | metering_alert_config_packet |
1 | uint8 | 0x01 | reserved | ||
2 | uint16 | 0x05 | min_power__W (lamp error) |
note: only monitored when dim ≥ 20% 0xFFFF - alert_off |
0x0005 → 5 (W) |
3 | 0x00 | ||||
4 | uint16 | 0xFF | max_power__W | 0xFFFF - alert_off | alert_off |
5 | 0xFF | ||||
6 | uint16 | 0xBE | min_voltage__V | 0xFFFF - alert_off | 0x00BE → 190 (V) |
7 | 0x00 | ||||
8 | uint16 | 0xFF | max_voltage__V | 0xFFFF - alert_off | alert_off |
9 | 0xFF | ||||
10 | uint8 | 0xFF | min_power_factor | note: only monitored when dim ≥ 20% value: 0-100 0xFF - alert_off |
alert_off |
{
"data": {
"packet_type": "metering_alert_config_packet",
"min_power__W": 5,
"max_power__W": "alert_off",
"min_voltage__V": 190,
"max_voltage__V": "alert_off",
"min_power_factor": "alert_off"
},
"errors": [],
"warnings": []
}
Astronomical calendar_config_packet contains rough coordinates to calculate location's sunrises/sunsets and then list of sunrise_steps and then sunset_steps.
Horizon and zenith_angle are 90° apart. So civil dusk would be 96°.
Example of how to set to 48.77°, 13.84° sunset_step 89.66° to 25% and sunrise_step 90.83° back to 0%:
20 11 00 0D13 6805 05 00 FE 19
Example similar to the above example, but sunrise_step disables the calendar in the morning so that e.g. fallback_dim_level takes over:
20 11 00 0D13 6805 05 FF FE 19
Example of how to disable calendar:
20 00 00 FFFFFFFF
Byte | Type | Example | Parameter | Details | Example value | ||
---|---|---|---|---|---|---|---|
0 | uint8 | 0x20 | packet_type | 0x20 - calendar_config_packet | calendar_config_packet | ||
1 | bit8 | 0x11 | Bit | Function | |||
0..3 | sunrise_step_length | 1 | |||||
4..7 | sunset_step_length | 1 | |||||
note: if sunrise_step_length and sunset_step_length are 0, then 90.83° is assumed and dimming level is 50%. | |||||||
2 | uint8 | 0x00 | Bit | Function | Default | ||
0 | calendar_prefers_meta_pos* | 1 | 0 | ||||
1 | calendar_clamps_profiles* | 1 | 0 | ||||
2 | calendar_clamps_dig* | 1 | 0 | ||||
3..7 | reserved | ||||||
* - Available in firmware version 1.1.0 and onward | |||||||
3 | int16 | 0x0D | latitude__deg | convert: /100 | 0x130D → 4877 4877 / 100 = 48.77 (°) |
||
4 | int16 | 0x13 | |||||
5 | int16 | 0x68 | longitude__deg | convert: /100 | 0x0568 → 1384 1384 / 100 = 13.84 (°) |
||
6 | int16 | 0x05 | |||||
sunrise_steps . sunrise_step_length number of following sunrise_steps blocks will follow: | |||||||
r0 | int8 | 0x05 | zenith_angle__deg | convert: 90 + 1/6 * angle | 0x05 → 5 5 / 6 + 90 = 90.83 (°) |
||
r1 | uint8 | 0x00 | dimming_level__percent | 0 ... 100 0xFF - disabled (calendar active, but not driving) |
0x00 → 0 (%) | ||
sunset_steps . sunset_step_length number of following sunset_steps blocks will follow: | |||||||
r0 | int8 | 0xFE | zenith angle__deg | convert: 90 + 1/6 * angle | 0xFE → -2 -2 / 6 + 90 = 89.66 (°) |
||
r1 | uint8 | 0x19 | dimming_level__percent | 0 ... 100 0xFF - disabled (calendar active, but not driving) |
0x19 → 25 (%) |
The calendar_clamps_profiles setting essentially enables you to only activate the profile between sunset and sunrise (when calendar is active). The calendar_clamps_dig setting works similarly - the motion sensor will not light up when the sun is up if this is set to ‘true’.
In EU868 region calendar_config defaults to 48.77°, 13.84°, sunrise_steps: 96° → 25%, 90.83° → 0%, sunset_steps: 90.83° → 25% 96° → 50%.
{
"data": {
"packet_type": "calendar_config_packet",
"calendar_prefers_meta_pos": false,
"calendar_clamps_profiles": false,
"calendar_clamps_dig": false,
"latitude__deg": 48.77,
"longitude__deg": 13.84,
"sunrise_steps": [
{
"zenith_angle__deg": "90.83",
"dimming_level__percent": 0
}
],
"sunset_steps": [
{
"zenith_angle__deg": "89.67",
"dimming_level__percent": 25
}
]
},
"errors": [],
"warnings": []
}
Profiles have higher priority than calendar and lower than dig, unless set otherwise via calendar_config_packet.
Example of how to set profile to dim to 20% from 1:00 - 5:30 for weekdays (at GMT+0):
21 00 02 FE 3E 00 06 14 21 FF
Example of how to set profile to dim to 20% from 1:00 - 5:30 for weekdays (at GMT+1):
21 00 02 FE 3E 00 0C 14 27 FF
Byte | Type | Example | Parameter | Details | Example value | |
---|---|---|---|---|---|---|
0 | uint8 | 0x21 | packet_type | 0x21 - profile_config_packet | profile_config_packet | |
1 | uint8 | 0x00 | profile_id | 0 ... 7 | ||
2 | uint8 | 0x02 | dimming_steps_length | max: 10 | ||
3 | uint8 | 0xFE | address | see address encoding | dali_broadcast | |
4 | bit8 | 0x3E | days_active | Bit | Function | |
0 | holiday | false | ||||
1 | mon | true | ||||
2 | tue | true | ||||
3 | wed | true | ||||
4 | thu | true | ||||
5 | fri | true | ||||
6 | sat | false | ||||
7 | sun | false | ||||
5 | uint8 | 0x00 | reserved | |||
dimming_steps . Follows length number of dimming_steps blocks. | ||||||
r0 | uint8 | 0x06 | step_time (UTC) |
minutes from the start of day note: convert local time to UTC. |
0x06 → 6 6 * 10 = 60 min → 1:00 AM |
|
r1 | uint8 | 0x14 | dimming_level__percent | 0...100 0xFF - inactive |
0x14 → 20 (%) |
Notes:
step_time must be converted from local time to UTC. E.g. for 21:00 GMT-1 set 20:00 UTC. E.g. for 21:00 GMT+5 set 02:00 UTC.
dimming_steps' step_times must be increasing in time, and must not roll over midnight.
E.g. following profile:
21:00 → 70%, 23:00 → 40%, 02:00 → 20%, 07:00 → inactive
should be entered as:
00:00 → 40%, 02:00→ 20%, 07:00→ inactive, 21:00 → 70%, 23:00 → 40%
If the first dimming_step's step_time is not 00:00, the profile is inactive until the first step.
If the last dimming_step's dimming_level is not inactive then the level is active until 00:00.
Multiple simultaneously active profiles on the same address may result in undefined behaviour.
{
"data": {
"packet_type": "profile_config_packet",
"profile_id": 0,
"address": "dali_broadcast",
"days_active": [
"mon",
"tue",
"wed",
"thu",
"fri"
],
"dimming_steps": [
{
"step_time": "01:00",
"dimming_level__percent": 20
},
{
"step_time": "05:30",
"dimming_level__percent": "inactive"
}
]
},
"errors": [],
"warnings": []
}
Sets fade_duration to all detected DALI drivers and also to analog_0_10v output.
Example of how to fade super smoothly with 16 s:
22 0A
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x22 | packet_type | 0x22 - fade_config_packet | fade_config_packet |
1 | uint8 | 0x0A | fade_duration__s |
default: 4 s 0x00 - 0.50 |
16.00 s |
* - does not configure DALI driver fade, it is left as is |
{
"data": {
"packet_type": "fade_config_packet",
"fade_duration__s": 16
},
"errors": [],
"warnings": []
}
Example configuration to set the 1st of May as a holiday:
23 01 05 01
Example configuration to set the 1st of January, 1st of May and 23rd of Dec as holidays.
23 03 01 01 05 01 0C 17
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x23 | packet_type | 0x23 - holiday_config_packet | holiday_config_packet |
1 | uint8 | 0x01 | length | max: 25 | |
holidays. Following holiday block repeats length number of times . | |||||
r0 | uint8 | 0x05 | month | 1..12 | 5 → may |
r1 | uint8 | 0x01 | day | 1..31 | 1 |
{
"data": {
"packet_type": "holiday_config_packet",
"holidays": [
"05/01"
]
},
"errors": [],
"warnings": []
}
LCU polls DALI driver statuses with a certain interval.
Example of how to disable DALI polling:
24 00 0000
Byte | Type | Example | Parameter | Details | Example value | ||
---|---|---|---|---|---|---|---|
0 | uint8 | 0x24 | packet_type | 0x24 - dali_monitor_config_packet | dali_monitor_config_packet | ||
1 | bit8 | 0x00 | Bit | Function | Default | ||
0 | send_dali_alert | true | false | ||||
1 | correct_dali_dimming_level* | true | false | ||||
2 | periodic_bus_scan_enabled | true | false | ||||
3..7 | reserved | ||||||
* - If driver should restart and lose its dim level, it will be corrected at next monitoring_interval. This may cause problems with multi-master setups, then disable. |
|||||||
2 | uint16 | 0x00 | monitoring_interval__s | 0 - disabled default: 60 s |
disabled | ||
3 | 0x00 |
{
"data": {
"packet_type": "dali_monitor_config_packet",
"send_dali_alert": false,
"correct_dali_dimming_level": false,
"periodic_bus_scan_enabled": false,
"monitoring_interval__s": 0,
"monitoring_interval": "disabled"
},
"errors": [],
"warnings": []
}
Fallback dim configures the default lamp state when nothing else is controlling the lamp (e.g. when astronomical calendar's last sunrise step is 0xFF - inactive). fallback_dim_level also applies when no valid time is available (when RTC time is lost and LoRaWAN not joined).
Example of how to set fallback_dimming_level to 80%:
25 50
Example of how to set fallback_dimming_level to 20%:
25 14
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x25 | packet_type | 0x25 - fallback_dim_config_packet | fallback_dim_config_packet |
1 | uint8 | 0x50 | fallback_dimming_level__percent | 0 ... 100 default: 25% note: can not be 0xFF |
0x50 → 80 (%) |
{
"data": {
"packet_type": "fallback_dim_config_packet",
"fallback_dimming_level__percent": 80
},
"errors": [],
"warnings": []
}
Example of how to set 59.4272704°, 24.6622098° and "Ööbiku Str. 2-16":
26 12 AC5E6D23 0017C10E C396C3B662696B75205374722E20322D3136
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x26 | packet_type | 0x26 - location_config_packet | location_config_packet |
1 | uint8 | 0x12 | address_ length | 0x12 → 18 | |
2 | uint32 | 0xAC | latitude__deg | convert: /10e7 0x7FFFFFFF - not_configured |
0x236D5EAC → 594370220 594272704 / 10000000 = |
3 | 0x5E | ||||
4 | 0x6D | ||||
5 | 0x23 | ||||
6 | uint32 | 0x00 | longitude__deg | convert: /10e7 0x7FFFFFFF - not_configured |
0x0EC11700 → 247535360 246622098 / 10000000 = |
7 | 0x17 | ||||
8 | 0xC1 | ||||
9 | 0x0E | ||||
10 ... n |
char array | 0xC3 0x96 0xC3 0xB6 0x62 0x69 0x6B 0x75 0x20 0x53 0x74 0x72 0x2E 0x20 0x32 0x2D 0x31 0x36 |
address | encoding: utf-8 length: address_ length note: does not end with \0 |
0xc3 0x96 0xc3 0xb6 0x62 0x69 0x6b 0x75 0x20 0x53 0x74 0x72 0x2e 0x20 0x32 0x2d 0x31 0x36 → "Ööbiku Str. 2-16" |
{
"data": {
"packet_type": "location_config_packet",
"latitude__deg": 59.437022,
"longitude__deg": 24.753536,
"address": "Ööbiku Str. 2-16"
},
"errors": [],
"warnings": []
}
Example of how to set LumaLink always connectable (convenient for testing):
27 03
Example of how to set LumaLink never connectable:
2700
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x27 | packet_type | 0x27 - lumalink_config_packet | lumalink_config_packet |
1 | uint8 | 0x03 | access_mode | 0x00 - never_advertise 0x01 - first_commission* (default) 0x02 - every_boot (5 minutes) 0x03 - always |
always |
* - first_commission - 4 h from first LoRaWAN join |
{
"data": {
"packet_type": "lumalink_config_packet",
"access_mode": "always"
},
"errors": [],
"warnings": []
}
Example of how to configure motion on dig_input to be on for 120 s for dali_broadcast address, no notification is sent:
28 00 03 FE 64 FF 0000 7800
Byte | Type | Example | Parameter | Details | Example value | |
---|---|---|---|---|---|---|
0 | uint8 | 0x28 | packet_type | 0x28 - dig_input_config_packet | dig_input_config_packet | |
1 | uint8 | 0x00 | dig_enabled | 0x00 - true 0xFF - false |
true | |
2 | bit8 | 0x03 | Bit | Function | ||
0 | dig_mode_button (false - acting on edge true - acting on on_state) |
true | ||||
1 | polarity_high_or_rising | true | ||||
2 | notification_on_activation | false | ||||
3 | notification_on_inactivation | false | ||||
4..7 | reserved | |||||
3 | uint8 | 0xFE | address | see address encoding | dali_broadcast | |
4 | uint8 | 0x64 | active_dimming_level__percent | 0..100 0xFF - inactive |
0x64 → 100 (%) | |
5 | uint8 | 0xFF | inactive_dimming_level__percent | 0..100 0xFF - inactive |
0xFF → inactive | |
6 | uint16 | 0x00 | on_delay__s | delay time when turning on | 0x0000 → 0 (s) | |
7 | 0x00 | |||||
8 | uint16 | 0x78 | off_delay__s | delay time when turning off | 0x0078 → 120 (s) | |
9 | 0x00 |
{
"data": {
"packet_type": "dig_input_config_packet",
"dig_mode_button": true,
"polarity_high_or_rising": true,
"notification_on_activation": false,
"notification_on_inactivation": false,
"address": "dali_broadcast",
"active_dimming_level__percent": 100,
"inactive_dimming_level__percent": "inactive",
"on_delay__s": 0,
"off_delay__s": 120
},
"errors": [],
"warnings": []
}
Notice: Configuring onboard light_sensor automatically disables onboard status LED (see onboard_led_config_packet).
Example of how to configure:
29 02 0E 3C FE 0000C441 3C CCCCF642 FF
Byte | Type | Example | Parameter | Details | Example value | |
---|---|---|---|---|---|---|
0 | uint8 | 0x29 | packet_type | 0x29 - light_sensor_config_packet | light_sensor_config_packet | |
1 | uint8 | 0x02 | step_count | 2..8 0xFF - disabled |
0x02 → 2 | |
2 | bit8 | 0x0E | Bit | Function | ||
0 | notification_on_every_step | false | ||||
1 | light_sensor_clamps_profile overrides active profile if profile is higher |
true | ||||
2 | light_sensor_clamps_dig overrides active dig if dig is higher |
true | ||||
3 | interpolate_steps | true | ||||
4..7 | reserved | |||||
3 | uint8 | 0x3C | measurement_duration__s | how long measurement takes place | 0x3C → 60 (s) | |
4 | uint8 | 0xFE | address | see address encoding | dali_broadcast | |
dim_steps. Following dim_steps block repeats step_count number of times. Note: light_level value must be increasing. |
||||||
r0 | float | 0x00 | light_level__lx | hw with ambient light sensor: 0..120000 (lx) hw with ldr input: unit: none 0..255 |
0x41C40000 → 24.5(lx) | |
r1 | 0x00 | |||||
r2 | 0xC4 | |||||
r3 | 0x41 | |||||
r4 | uint8 | 0x3C | dimming_level__percent | 0..100 0xFF - inactive |
0x3C → 60 (%) |
{
"data": {
"packet_type": "light_sensor_config_packet",
"notification_on_every_step": false,
"light_sensor_clamps_profile": true,
"light_sensor_clamps_dig": true,
"interpolate_steps": true,
"measurement_duration__s": 60,
"address": "dali_broadcast",
"dim_steps": [
{
"light_level__lx": "24.50",
"dimming_level__percent": 60
},
{
"light_level__lx": "123.4",
"dimming_level__percent": "inactive"
}
]
},
"errors": [],
"warnings": []
}
Example of how to request status_packet on every dim level change:
2A 12 05
Example of how to disable dim_notify:
2A FF 00
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x2A | packet_type | 0x2A - dim_notify_config_packet | dim_notify_config_packet |
1 | uint8 | 0x12 | random_delay__s |
conversion: *5 0xff - disabled (notifications) |
0x12 → 18 18 * 5 = 90 (s) |
2 | uint8 | 0x05 | packet_limit__s | conversion: *60 default: 600 s |
0x05 → 5 5 * 60 = 300 (s) |
{
"data": {
"packet_type": "dim_notify_config_packet",
"random_delay__s": 90,
"packet_limit__s": 300
},
"errors": [],
"warnings": []
}
Example of how to set up multicast device 0:
52 00 44332211 82840C7056429B143D21974557F93A53 82840C70C08494B931FE2FA6F8835C6A
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0x52 | packet_type | 0x52 - multicast_config_packet | multicast_config_packet |
1 | uint8 | 0x00 | multicast_device | 0 … 3 | 0 |
2-5 | uint32 | 0x44 0x33 0x22 0x11 |
devaddr | 11223344 | |
6-21 | uint8 array |
0x82 0x84 0x0C 0x70 0x56 0x42 0x9B 0x14 0x3D 0x21 0x97 0x45 0x57 0xF9 0x3A 0x53 |
nwkskey | 82840C7056429B14 3D21974557F93A53 |
|
22-37 | uint8 array |
0x82 0x84 0x0C 0x70 0xC0 0x84 0x94 0xB9 0x31 0xFE 0x2F 0xA6 0xF8 0x83 0x5C 0x6A |
appskey | 82840C70C08494B9 31FE2FA6F8835C6A |
{
"data": {
"packet_type": "multicast_config_packet",
"multicast_device": 0,
"devaddr": "11223344",
"nwkskey": "82840C7056429B143D21974557F93A53",
"appskey": "82840C70C08494B931FE2FA6F8835C6A"
},
"errors": [],
"warnings": []
}
Chained configuration allows to chain up (concatenate) any configuration packet to simplify initial configuration and reduce the number of packets.
Example of chained configuration consisting of ldr_input_config_packet and boot_delay_config_packet:
FE 01 50 28 00 0D 5802
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0xFE | packet_type | 0xFE - chained_config_packet | chained_config_packet |
payloads will follow. |
And the included config_packets follow (complete packets).
{
"data": {
"packet_type": "chained_config_packet",
"payloads": [
{
"packet_type": "deprecated_ldr_input_config_packet",
"ldr_off_threshold_high": 80,
"ldr_on_threshold_low": 40,
"trigger_alert_enabled": false
},
{
"packet_type": "boot_delay_config_packet",
"boot_delay_range__s": 600
}
]
},
"errors": [],
"warnings": []
}
Example of how to reset holiday_config:
FF 23
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0xFF | packet_type | 0xFF - clear_config_packet | clear_config_packet |
1 | uint8 | 0x23 | reset_target |
0x01 - deprecated_ldr_input_config_request Note: for 0x21 and 0x52 see below. |
holiday_config |
{
"data": {
"packet_type": "clear_config_packet",
"reset_target": "holiday_config"
},
"errors": [],
"warnings": []
}
Example of how to reset all profiles:
FF 21 FF
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0xFF | packet_type | 0xFF - clear_config_packet | clear_config_packet |
1 | uint8 | 0x21 | reset_target | 0x21 - profile_config | profile_config |
2 | uint8 | 0xFF | profile_id | 0x00 - profile_0 ... 0x07 - profile_7 0xFF - all_profiles |
all_profiles |
{
"data": {
"packet_type": "clear_config_packet",
"reset_target": "profile_config",
"address": "all_profiles"
},
"errors": [],
"warnings": []
}
Example of how to reset all multicast devices:
FF 52 FF
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0xFF | packet_type | 0xFF - clear_config_packet | clear_config_packet |
1 | uint8 | 0x52 | reset_target | 0x52 - multicast_config | multicast_config |
2 | uint8 | 0xFF | multicast_device | 0x00 - multicast_device_0 ... 0x03 - multicast_device_3 0xFF - all_multicast_devices |
all_multicast_devices |
{
"data": {
"packet_type": "clear_config_packet",
"reset_target": "multicast_config",
"multicast_device": "all_multicast_devices"
},
"errors": [],
"warnings": []
}
Example of how to reset everything (replace device_serial):
FF FF 0D008350
Byte | Type | Example | Parameter | Details | Example value |
---|---|---|---|---|---|
0 | uint8 | 0xFF | packet_type | 0xFF - clear_config_packet | clear_config_packet |
1 | uint8 | 0xFF | reset_target | 0xFF - factory_reset | factory_reset |
2 | uint32 | 0x0D | device_serial | formatting: hex | 5083000D |
3 | 0x00 | ||||
4 | 0x83 | ||||
5 | 0x50 |
{
"data": {
"packet_type": "clear_config_packet",
"reset_target": "factory_reset",
"device_serial": "5083000D"
},
"errors": [],
"warnings": []
}
Direction: Downlink. Request any configuration packet by its header by sending request to fPort 49.
Example of how to request calendar_config_packet:
20
Byte | Type | Example | Parameter | Details | Example Value |
---|---|---|---|---|---|
0 | uint8 | 0x20 | packet_type |
0x01 - deprecated_ldr_input_config_request Note: for 0x21 and 0x52 see below. |
calendar_config_request |
{
"data": {
"packet_type": "calendar_config_request"
},
"errors": [],
"warnings": []
}
Example of how to request all_profiles:
21 FF
Byte | Type | Example | Parameter | Details | Example Value |
---|---|---|---|---|---|
0 | uint8 | 0x21 | packet_type | 0x21 - profile_config_request | profile_config_request |
1 | uint8 | 0xFF | profile_id | 0 ... 7 - profile_0 ... profile_7 0xFF - all_profiles |
all_profiles |
"data": {
"packet_type": "profile_config_request",
"profile_id": "all_profiles"
},
"errors": [],
"warnings": []
}
Example of how to request multicast_device 0:
52 00
Byte | Type | Example | Parameter | Details | Example Value |
---|---|---|---|---|---|
0 | uint8 | 0x52 | packet_type | 0x52 - multicast_config_request | multicast_config_request |
1 | uint8 | 0x00 | multicast_device | 0 ... 3 | 0 |
{
"data": {
"packet_type": "multicast_config_request",
"multicast_device": 0
},
"errors": [],
"warnings": []
}
Bit 0 | Bit 1 | Bit 2 | Bit 3 | Bit 4 | Bit 5 | Bit 6 | Bit 7 | address values | address range |
---|---|---|---|---|---|---|---|---|---|
0 | x | x | x | x | x | x | 0 | 0x00 - dali_single_0 0x02 - dali_single_1 ... 0x7C - dali_single_62 0x7E - dali_single_63 |
0-63 |
0 | x | x | x | x | 0 | 0 | 1 | 0x80 - dali_group_0 0x82 - dali_group_1 ... 0x9C - dali_group_14 0x9E - dali_group_15 |
0-15 |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0xFE - dali_broadcast (since 1.1.x 0xFE does not control analog) |
|
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x01 - analog_0_10v | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0xFF - all_devices (dali_broadcast + analog_0_10v) |
Notice: all DALI addresses start from Bit 1. Thats why there is no conflict between DALI addresses and analog_0_10v.
See Uplink packets
See Command_packets