Summary

Somfy ILT2 motorised window-covering controller communicating over the Somfy Digital Network (SDN), a half-duplex RS-485 bus protocol. Spec covers framing, addressing, message set (SET/CTRL/GET/POST/ACK/NACK), and bus timing.

Transport

protocols:
  - serial
serial:
  baud_rate: 4800
  data_bits: 8
  parity: odd
  stop_bits: 1
  flow_control: null  # UNRESOLVED: no flow control specified in source
auth:
  type: none  # inferred: no auth procedure in source

Traits

- queryable       # inferred from GET_xxx command examples
- levelable       # inferred from intermediate position + speed commands

Actions

# Device Management
- id: set_group_addr
  label: Set Group Address
  kind: action
  command: "51h"  # MSG byte, full frame per §5
  params:
    - name: group_index
      type: integer
      description: Entry in group table (0-15)
    - name: group_id
      type: integer
      description: 24-bit group address (LSBF)

- id: get_node_addr
  label: Get Node Address
  kind: query
  command: "40h"
  params: []

- id: get_group_addr
  label: Get Group Address
  kind: query
  command: "41h"
  params:
    - name: group_index
      type: integer
      description: Entry in group table (0-15)

# Device Information
- id: get_node_app_version
  label: Get Firmware Version
  kind: query
  command: "74h"
  params: []

- id: set_node_label
  label: Set Node Label
  kind: action
  command: "55h"
  params:
    - name: label
      type: string
      description: 16-char ASCII, pad with spaces if shorter

- id: get_node_label
  label: Get Node Label
  kind: query
  command: "45h"
  params: []

# Device Configuration
- id: set_local_ui
  label: Set Local UI (HMI)
  kind: action
  command: "17h"
  params:
    - name: function
      type: integer
      description: "00h=Enable, 01h=Disable"
    - name: ui_index
      type: integer
      description: "00h=All, 01h=DCT, 02h=Local stimuli, 03h=Local radio, 04h=Touch motion, 05h=LEDs"
    - name: priority
      type: integer
      description: 0-255, higher wins lock

- id: get_local_ui
  label: Get Local UI Status
  kind: query
  command: "27h"
  params:
    - name: ui_index
      type: integer
      description: 01h-UI_MAX (refer to UI list)

- id: set_motor_ip
  label: Set Intermediate Position
  kind: action
  command: "15h"
  params:
    - name: function
      type: integer
      description: "00h=Delete, 01h=Set at current, 03h=Set at % position, 04h=Divide full range"
    - name: ip_index
      type: integer
      description: 1-16
    - name: value
      type: integer
      description: 16-bit, see Function remarks

- id: get_motor_ip
  label: Get Intermediate Position
  kind: query
  command: "25h"
  params:
    - name: ip_index
      type: integer
      description: 1-16

- id: set_motor_rolling_speed
  label: Set Motor Rolling Speed
  kind: action
  command: "13h"
  params:
    - name: up_speed
      type: integer
      description: 8-bit rpm, see technical datasheet
    - name: down_speed
      type: integer
      description: 8-bit rpm, see technical datasheet
    - name: slow_speed
      type: integer
      description: 8-bit rpm, see technical datasheet

- id: get_motor_rolling_speed
  label: Get Motor Rolling Speed
  kind: query
  command: "23h"
  params: []

- id: set_network_lock
  label: Set Network Lock
  kind: action
  command: "16h"
  params:
    - name: function
      type: integer
      description: "00h=Unlock, 01h=Lock, 03h=Save on power cycle, 04h=Do not save"
    - name: priority
      type: integer
      description: 0-255, higher wins lock

- id: get_network_lock
  label: Get Network Lock Status
  kind: query
  command: "26h"
  params: []

# Device Control
- id: ctrl_moveto
  label: Move To Position
  kind: action
  command: "03h"
  params:
    - name: function
      type: integer
      description: "00h=Down limit, 01h=Up limit, 02h=Intermediate position, 04h=% of full range"
    - name: position
      type: integer
      description: 16-bit, contents per Function
    - name: reserved
      type: integer
      description: 8-bit, set to 00h

- id: ctrl_stop
  label: Stop Motor
  kind: action
  command: "02h"
  params:
    - name: reserved
      type: integer
      description: 8-bit, set to 00h

# Device Status
- id: get_motor_position
  label: Get Motor Position
  kind: query
  command: "0Ch"
  params: []

- id: get_motor_status
  label: Get Motor Status
  kind: query
  command: "0Eh"
  params: []

Feedbacks

- id: node_address
  type: bytes
  description: POST_NODE_ADDR (60h) - source NodeID is in frame header

- id: group_address
  type: bytes
  description: POST_GROUP_ADDR (61h) - returns group_index (8-bit) + group_id (24-bit)

- id: ack
  type: enum
  values: [ok]
  description: ACK (7Fh) - successful processing

- id: nack
  type: object
  description: NACK (6Fh) - error code
  fields:
    - name: error_code
      values: [01h_data_out_of_range, 10h_unknown_message, 11h_length_error, FFh_busy, low_priority, node_is_locked, ip_not_set, data_error]

- id: app_version
  type: object
  description: POST_NODE_APP_VERSION (75h) - 24-bit reference + ASCII letter + 8-bit number + reserved

- id: node_label
  type: string
  description: POST_NODE_LABEL (65h) - 16-char ASCII label

- id: local_ui_status
  type: object
  description: POST_LOCAL_UI (37h) - ui_index, status, source_addr, priority

- id: motor_ip
  type: object
  description: POST_MOTOR_IP (35h) - ip_index + reserved + position percentage (FFh=unset)

- id: motor_speed
  type: object
  description: POST_MOTOR_ROLLING_SPEED (33h) - up_speed, down_speed, slow_speed

- id: network_lock_status
  type: object
  description: POST_NETWORK_LOCK (36h) - status, source_addr, priority, saved flag

- id: motor_position
  type: object
  description: POST_MOTOR_POSITION (0Dh) - position_pulse (16-bit) + percentage (8-bit) + reserved + ip (8-bit, FFh=no IP)

- id: motor_status
  type: object
  description: POST_MOTOR_STATUS (0Fh) - status, direction, source, cause

Variables

# UNRESOLVED: no continuously-settable parameters beyond the discrete actions above

Events

# UNRESOLVED: source does not document unsolicited event messages - all reports are in response to GET requests

Macros

# UNRESOLVED: source does not document multi-step sequences

Safety

confirmation_required_for: []
interlocks:
  - network_lock_blocks_ctrl_xxx  # explicit: all CTRL_xxx and limit changes rejected when locked (NACK NODE_IS_LOCKED)
  - thermal_protection_stops_motor  # explicit: motor enters Blocked status on thermal protection
  - obstacle_detection_stops_motor  # explicit: motor enters Blocked status on obstacle
  - run_time_exceeded_stops_motor  # explicit: motor reports Run time exceeded
  - timeout_exceeded_cancels_move  # explicit: CTRL_MOVE canceled after 2 min
# UNRESOLVED: no explicit human-safety interlocks documented

Notes

Frame structure (per §5). Every SDN frame is 11-32 bytes: MSG (1) | ACK/LEN (1) | NODE_TYPE (1, src+dst nibbles) | SOURCE@ (3, LSBF) | DEST@ (3, LSBF) | DATA (0-21) | CHECKSUM (1, 16-bit). Checksum = NOT(sum of bytes 1..n-2). Bits transmitted LSB first, inverted before transmission (so logical 58h appears on bus as A7h).

Addressing (per §5.4). Point-to-point: DEST@ = target NodeID. Group: DEST@ = 000000h, all devices with that GroupID in their group table respond. Broadcast: DEST@ = FFFFFFh.

Timing (per §4.3). Tc max 1ms between characters. Tfree 3ms bus free. Trep 5-255ms (randomised) before slave reply. Treq 10ms before master retransmits.

Collisions. Doc explicitly warns about RS-485 bus collisions; recommends NOT requesting feedback/ACK in group or broadcast mode.

Power-cycle behavior (per §6.3.4). Network lock save state controlled by Function 03h/04h. Local UI state: DCT and Local Stimuli not saved; others saved and restored. Default = "Do Not Save" lock; default = all UI enabled.

ILT2 mapping gap. Source is the generic SDN protocol manual, not ILT2-specific. ILT2 NodeType value, default config, and speed ranges are not stated in the source — refer to device technical datasheet.

Provenance

source_domains:
  - service.somfy.com
source_urls:
  - https://service.somfy.com/downloads/bui_v4/sdn-integration-guide--preliminary.pdf
retrieved_at: 2026-04-29T08:47:09.724Z
last_checked_at: 2026-06-02T22:14:44.556Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T22:14:44.556Z
matched_actions: 18
action_count: 18
confidence: medium
summary: "All 18 spec actions traced to source (dip-safe re-verify). (8 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "source is the generic SDN protocol document; no explicit mapping from ILT2 to a specific NodeType value. NodeType 09h (\"Ø40 AC Serie RS485\") listed as \"Not yet available\" at time of doc."
- "no flow control specified in source"
- "no continuously-settable parameters beyond the discrete actions above"
- "source does not document unsolicited event messages - all reports are in response to GET requests"
- "source does not document multi-step sequences"
- "no explicit human-safety interlocks documented"
- "baud rate (4800), parity (odd), data bits (8), stop bits (1) stated for SDN bus; flow control and any hardware-handshake pins not stated."
- "voltage, current, and wiring (RJ45, daisy-chain, terminator) not stated in source."

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0