Summary
SOMFY Digital Network (SDN) protocol integration guide for Somfy URTSI II IPToSerial. Source documents half-duplex RS-485 serial communication between MASTER and SLAVE devices. Supports point-to-point, group, broadcast, and NodeType addressing.
Transport
protocols:
- serial
serial:
baud_rate: 4800
data_bits: 8
parity: odd
stop_bits: 1
flow_control: UNRESOLVED
auth:
type: UNRESOLVED
Traits
- powerable # inferred: motor movement controls present
- routable # inferred: point-to-point, group, and broadcast addressing present
- queryable # inferred: GET messages returning POST status/configuration present
- levelable # inferred: position percentage control present
Actions
- id: get_node_addr
label: Get Node Address
kind: query
command: "GET_NODE_ADDR (40h)"
params: []
- id: post_node_addr
label: Post Node Address
kind: action
command: "POST_NODE_ADDR (60h)"
params: []
- id: set_group_addr
label: Set Group Address
kind: action
command: "SET_GROUP_ADDR (51h)"
params:
- name: group_index
type: integer
description: Group table entry, 0-15
- name: group_id
type: integer
description: 24-bit group address
- id: get_group_addr
label: Get Group Address
kind: query
command: "GET_GROUP_ADDR (41h)"
params:
- name: group_index
type: integer
description: Group table entry, 0-15
- id: post_group_addr
label: Post Group Address
kind: action
command: "POST_GROUP_ADDR (61h)"
params:
- name: group_index
type: integer
description: Group table entry, 0-15
- name: group_id
type: integer
description: 24-bit group address
- id: ack
label: Acknowledgment
kind: action
command: "ACK (7Fh)"
params: []
- id: nack
label: Negative Acknowledgment
kind: action
command: "NACK (6Fh)"
params:
- name: error_code
type: integer
description: "01h=data out of range; 10h=unknown message; 11h=message length error; FFh=busy"
- id: get_node_app_version
label: Get Firmware Revision
kind: query
command: "GET_NODE_APP_VERSION (74h)"
params: []
- id: post_node_app_version
label: Post Firmware Revision
kind: action
command: "POST_NODE_APP_VERSION (75h)"
params: []
- id: set_node_label
label: Set Node Label
kind: action
command: "SET_NODE_LABEL (55h)"
params:
- name: label
type: string
description: 16-character text label; pad shorter values with spaces
- id: get_node_label
label: Get Node Label
kind: query
command: "GET_NODE_LABEL (45h)"
params: []
- id: post_node_label
label: Post Node Label
kind: action
command: "POST_NODE_LABEL (65h)"
params: []
- id: set_local_ui
label: Set Local UI Lock
kind: action
command: "SET_LOCAL_UI (17h)"
params:
- name: function
type: integer
description: "00h=Enable/Unlock; 01h=Disable/Lock"
- 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: Priority, 0-255; greater number indicates higher priority
- id: get_local_ui
label: Get Local UI Status
kind: query
command: "GET_LOCAL_UI (27h)"
params:
- name: ui_index
type: integer
description: UI index, 01h through UI_MAX
- id: post_local_ui
label: Post Local UI Status
kind: action
command: "POST_LOCAL_UI (37h)"
params: []
- id: set_motor_ip
label: Set Intermediate Position
kind: action
command: "SET_MOTOR_IP (15h)"
params:
- name: function
type: integer
description: "00h=Delete IP; 01h=set at current position; 03h=set specified percentage; 04h=divide full range with the given IP count"
- name: ip_index
type: integer
description: "IP index, 1-16; ignored for function 04h"
- name: value
type: integer
description: "16-bit value; ignored for functions 00h and 01h; percentage for function 03h; IP count for function 04h"
- id: get_motor_ip
label: Get Intermediate Position
kind: query
command: "GET_MOTOR_IP (25h)"
params:
- name: ip_index
type: integer
description: IP index, 1-16
- id: post_motor_ip
label: Post Intermediate Position
kind: action
command: "POST_MOTOR_IP (35h)"
params: []
- id: set_motor_rolling_speed
label: Set Motor Rolling Speed
kind: action
command: "SET_MOTOR_ROLLING_SPEED (13h)"
params:
- name: up_speed
type: integer
description: Speed during UP movement, rpm; range depends on motor technical datasheet
- name: down_speed
type: integer
description: Speed during DOWN movement, rpm; range depends on motor technical datasheet
- name: slow_speed
type: integer
description: Speed for adjustment movements, rpm; range depends on motor technical datasheet
- id: get_motor_rolling_speed
label: Get Motor Rolling Speed
kind: query
command: "GET_MOTOR_ROLLING_SPEED (23h)"
params: []
- id: post_motor_rolling_speed
label: Post Motor Rolling Speed
kind: action
command: "POST_MOTOR_ROLLING_SPEED (33h)"
params: []
- id: set_network_lock
label: Set Network Lock
kind: action
command: "SET_NETWORK_LOCK (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: Priority, 0-255
- id: get_network_lock
label: Get Network Lock
kind: query
command: "GET_NETWORK_LOCK (26h)"
params: []
- id: post_network_lock
label: Post Network Lock
kind: action
command: "POST_NETWORK_LOCK (36h)"
params: []
- id: ctrl_moveto
label: Move to Position
kind: action
command: "CTRL_MOVETO (03h)"
params:
- name: function
type: integer
description: "00h=DOWN limit; 01h=UP limit; 02h=intermediate position; 04h=position percentage"
- name: position
type: integer
description: "Function-dependent: ignored for limits; IP index 0-15 for function 02h; percentage 0-100 for function 04h"
- name: reserved
type: integer
description: Reserved byte
- id: ctrl_stop
label: Stop Motor
kind: action
command: "CTRL_STOP (02h)"
params:
- name: reserved
type: integer
description: Reserved byte
- id: get_motor_position
label: Get Motor Position
kind: query
command: "GET_MOTOR_POSITION (0Ch)"
params: []
- id: post_motor_position
label: Post Motor Position
kind: action
command: "POST_MOTOR_POSITION (0Dh)"
params: []
- id: get_motor_status
label: Get Motor Status
kind: query
command: "GET_MOTOR_STATUS (0Eh)"
params: []
- id: post_motor_status
label: Post Motor Status
kind: action
command: "POST_MOTOR_STATUS (0Fh)"
params: []
Feedbacks
- id: motor_position
label: Motor Position
type: object
fields:
- name: position_pulse
type: integer
description: Position between UP_LIMIT and DOWN_LIMIT
- name: position_percentage
type: integer
description: Position, 0-100%
- name: reserved
type: integer
- name: ip_index
type: integer
description: Matching intermediate position index, 1-IP_MAX; FFh if no match
- id: motor_status
label: Motor Status
type: object
fields:
- name: status
type: enum
values: ["00h: Stopped", "01h: Running", "02h: Blocked", "03h: Locked"]
- name: direction
type: enum
values: ["00h: Going DOWN", "01h: Going UP", "FFh: Unknown"]
- name: source
type: enum
values: ["00h: Internal", "01h: Network message", "02h: Local UI"]
- name: cause
type: enum
values:
- "00h: Target reached"
- "01h: Explicit command"
- "02h: WINK"
- "20h: Obstacle detection"
- "21h: Over-current protection"
- "22h: Thermal protection"
- "30h: Run time exceeded"
- "32h: Timeout exceeded"
- "FFh: Reset / Power Up"
- id: node_address
label: Node Address
type: object
fields:
- name: node_id
type: integer
description: 24-bit NodeID; programmed during manufacture and cannot be changed
- id: group_address
label: Group Address
type: object
fields:
- name: group_index
type: integer
description: Group table entry, 0-15
- name: group_id
type: integer
description: 24-bit group address
- id: node_app_version
label: Firmware Version
type: object
fields:
- name: app_reference
type: integer
description: 24-bit firmware part number
- name: app_index_letter
type: string
description: Firmware major revision, ASCII 41h-5Ah
- name: app_index_number
type: integer
description: Firmware revision number
- name: reserved
type: integer
- id: node_label
label: Node Label
type: string
description: 16-character text label
- id: local_ui_status
label: Local UI Status
type: object
fields:
- name: ui_index
type: integer
- name: status
type: enum
values: ["00h: Enabled/Unlocked", "01h: Disabled/Locked"]
- name: source_addr
type: integer
description: NodeID of device that sent lock command
- name: priority
type: integer
description: Priority, 0-255
- id: motor_ip
label: Intermediate Position
type: object
fields:
- name: ip_index
type: integer
description: IP index, 1-16
- name: reserved
type: integer
- name: ip_position_percentage
type: integer
description: Position, 0-100%; FFh if IP not set
- id: motor_rolling_speed
label: Motor Rolling Speed
type: object
fields:
- name: up_speed
type: integer
description: Speed during UP movement, rpm
- name: down_speed
type: integer
description: Speed during DOWN movement, rpm
- name: slow_speed
type: integer
description: Speed for adjustment movements, rpm
- id: network_lock_status
label: Network Lock Status
type: object
fields:
- name: status
type: enum
values: ["00h: Unlocked", "01h: Locked"]
- name: source_addr
type: integer
description: NodeID of device that sent lock command
- name: priority
type: integer
- name: saved
type: enum
values: ["00h: Will not restore", "01h: Will restore on power cycle"]
- id: ack
label: Acknowledgment
type: enum
values: ["ACK received"]
- id: nack
label: Negative Acknowledgment
type: object
fields:
- name: error_code
type: enum
values:
- "01h: Data out of range"
- "10h: Unknown message"
- "11h: Message Length Error"
- "FFh: Busy - Cannot process message"
Variables
# No standalone settable parameters; all parameters are action parameters or feedback fields.
Events
# One documented exception: some devices may send their address after a user pushbutton request without MASTER request.
- id: user_requested_node_address
label: User-requested Node Address
type: notification
description: Device may send its address after user pushbutton activation without a MASTER request.
Macros
# No explicit multi-step macros defined in source.
Safety
confirmation_required_for: []
interlocks:
- description: Motor immediately stops without speed ramp-down on CTRL_STOP.
type: immediate_stop
- description: NETWORK_LOCK blocks movement and limit-changing commands unless CTRL_NETWORK_LOCK has equal or higher priority.
type: priority_lock
- description: Avoid requesting feedback or acknowledgment in group or broadcast addressing mode because RS-485 collisions may occur.
type: collision_warning
# UNRESOLVED: device-specific power-on sequencing not stated
Notes
SDN frame structure: MSG | ACK/LEN | NODE TYPE | SOURCE@ | DEST@ | DATA | CHECKSUM. Frame length is 11 bytes minimum and 32 bytes maximum, with DATA length from 0 to 21 bytes.
- LSB is transmitted first.
- All data bits must be inverted before transmission.
- SOURCE@ and DEST@ use LSBF encoding.
- Point-to-point DEST@ is destination NodeID.
- Group addressing uses SOURCE@=GroupID and DEST@=
000000h. - Broadcast addressing uses SOURCE@=NodeID and DEST@=
FFFFFFh. - NodeType addressing filters the receiver NodeType.
- Tfree minimum is 3ms.
- Treq minimum is 10ms before MASTER transmission.
- Tc maximum is 1ms between characters.
- Trep is 5ms–255ms before SLAVE reply.
- Checksum is calculated by adding the complement of every frame byte before checksum.
- Status requests receive POST responses instead of ACK.
- ACK requests are optional for CTRL, GET, and SET messages; status requests receive no ACK when feedback is returned.
- NACK error codes documented:
01h,10h,11h,FFh. - Source summary lists
SET_MOTOR_SPEEDandGET_MOTOR_SPEED; the detailed sections useSET_MOTOR_ROLLING_SPEEDandGET_MOTOR_ROLLING_SPEED. The naming discrepancy is UNRESOLVED.
Provenance
source_domains:
- service.somfy.com
source_urls:
- https://service.somfy.com/downloads/bui_v4/sdn-integration-guide--preliminary.pdf
retrieved_at: 2026-07-25T00:10:37.585Z
last_checked_at: 2026-10-07T12:55:13.940Z
Verification Summary
verdict: verified
checked_at: 2026-10-07T12:55:13.940Z
matched_actions: 30
action_count: 30
confidence: medium
summary: "All 30 actions and the serial parameters match the source SDN message set; the source never names the URTSI II, so device applicability is unconfirmed. (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "source describes RS-485; input identifies RS-232C gateway interface details not provided"
- "device-specific power-on sequencing not stated"
- "literal complete frame bytes require runtime SOURCE@, DEST@, ACK/LEN, data values, and checksum"
- "URTSI II IP-to-serial gateway-specific network addressing and IP transport configuration not stated"
- "firmware compatibility range not stated"
- "motor-specific speed ranges require device technical datasheet"
- "voltage, current, and power specifications not stated"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0