Summary

Somfy RTS URTSI II is an RS-485 to RS-232 gateway that translates serial commands into SOMFY Digital Network (SDN) protocol for motor control. Supports half-duplex MASTER/SLAVE communication on RS-485 bus. Control interface is RS-232 at 4800 baud, 8 data bits, odd parity. SDN bus operates at 4800 baud RS-485 with 3-byte NodeID addressing, group addressing, and broadcast modes.

Transport

protocols:
  - serial
serial:
  baud_rate: 4800
  data_bits: 8
  parity: odd
  stop_bits: 1
  flow_control: none
  # UNRESOLVED: byte inversion requirement noted in spec - clarify if this is handled by device firmware or must be applied by host
auth:
  type: UNRESOLVED  # source does not state this (was inferred none: no auth procedure in source)

Traits

- powerable    # inferred: CTRL_MOVETO, CTRL_STOP present
- queryable    # inferred: GET_MOTOR_POSITION, GET_MOTOR_STATUS present
- routable     # inferred: CTRL_MOVETO with IP index, group addressing present
- levelable    # inferred: position commands with percentage values present

Actions

- id: ctrl_moveto
  label: Move to Position
  kind: action
  params:
    - name: function
      type: integer
      description: "0=Down limit, 1=Up limit, 2=Intermediate position, 4=Position in %"
    - name: position
      type: integer
      description: Position value (IP index 0-15 or % 0-100 depending on function)

- id: ctrl_stop
  label: Stop Motor
  kind: action
  params: []

- id: set_network_lock
  label: Set Network Lock
  kind: action
  params:
    - name: function
      type: integer
      description: "0=Unlock, 1=Lock, 3=Save lock on power cycle, 4=Do not save lock on power cycle"
    - name: priority
      type: integer
      description: Priority level 0-FFh (higher = more important)

- id: get_network_lock
  label: Get Network Lock Status
  kind: query
  params: []

- id: set_motor_ip
  label: Set Intermediate Position
  kind: action
  params:
    - name: function
      type: integer
      description: "0=Delete IP, 1=Set at current position, 3=Set at specified position %, 4=Divide full range"
    - name: ip_index
      type: integer
      description: IP entry index 1-16
    - name: value
      type: integer
      description: Position value or IP count depending on function

- id: get_motor_ip
  label: Get Intermediate Position
  kind: query
  params:
    - name: ip_index
      type: integer
      description: IP entry index 1-16

- id: set_local_ui
  label: Set Local UI Lock
  kind: action
  params:
    - name: function
      type: integer
      description: "0=Enable/Unlock, 1=Disable/Lock"
    - name: ui_index
      type: integer
      description: "0=All, 1=DCT input, 2=Local stimulus, 3=Radio/Bluetooth, 4=Touch Motion, 5=LEDs"
    - name: priority
      type: integer
      description: Priority level 0-FFh

- id: get_local_ui
  label: Get Local UI Status
  kind: query
  params:
    - name: ui_index
      type: integer
      description: UI index to query

- id: set_motor_rolling_speed
  label: Set Motor Speed
  kind: action
  params:
    - 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)
    - name: ip_index
      type: integer
      description: IP entry index 1-16
    - name: ip_position_percentage
      type: integer
      description: IP position 0-100 (FFh if not set)

- id: get_motor_rolling_speed
  label: Get Motor Speed
  kind: query
  params: []

- id: set_node_label
  label: Set Device Label
  kind: action
  params:
    - name: label
      type: string
      description: 16-character text label (padded with spaces)

- id: get_node_label
  label: Get Device Label
  kind: query
  params: []

- id: get_motor_position
  label: Get Motor Position
  kind: query
  params: []

- id: get_motor_status
  label: Get Motor Status
  kind: query
  params: []

- id: set_group_addr
  label: Set Group Address
  kind: action
  params:
    - name: group_index
      type: integer
      description: Group table entry 0-15
    - name: group_id
      type: string
      description: 24-bit group NodeID

- id: get_group_addr
  label: Get Group Address
  kind: query
  params:
    - name: group_index
      type: integer
      description: Group table entry 0-15

- id: get_node_addr
  label: Get Node Address
  kind: query
  params: []

- id: get_node_app_version
  label: Get Firmware Version
  kind: query
  params: []

Feedbacks

- id: post_node_addr
  label: Node Address Response
  type: object
  fields:
    - name: node_id
      type: string
      description: 3-byte NodeID (LSBF)

- id: post_group_addr
  label: Group Address Response
  type: object
  fields:
    - name: group_index
      type: integer
    - name: group_id
      type: string

- id: post_node_app_version
  label: Firmware Version Response
  type: object
  fields:
    - name: app_reference
      type: string
      description: 24-bit firmware part number
    - name: app_index_letter
      type: string
      description: ASCII major revision (41h-5Ah)
    - name: app_index_number
      type: integer
      description: Firmware revision number

- id: post_node_label
  label: Device Label Response
  type: string

- id: post_local_ui
  label: Local UI Status Response
  type: object
  fields:
    - name: status
      type: enum
      values: [enabled, disabled]
    - name: source_addr
      type: string
      description: NodeID of locking device
    - name: priority
      type: integer

- id: post_motor_ip
  label: Intermediate Position Response
  type: object
  fields:
    - name: ip_index
      type: integer
    - name: reserved
      type: integer
    - name: ip_position_percentage
      type: integer
      description: "0-100, FFh if IP not set"

- id: post_motor_rolling_speed
  label: Motor Speed Response
  type: object
  fields:
    - name: up_speed
      type: integer
    - name: down_speed
      type: integer
    - name: slow_speed
      type: integer

- id: post_network_lock
  label: Network Lock Status Response
  type: object
  fields:
    - name: status
      type: enum
      values: [unlocked, locked]
    - name: source_addr
      type: string
    - name: priority
      type: integer
    - name: saved
      type: boolean
      description: true if lock restored on power cycle

- id: post_motor_position
  label: Motor Position Response
  type: object
  fields:
    - name: position_pulse
      type: integer
      description: Raw position in pulses
    - name: position_percentage
      type: integer
      description: 0-100
    - name: reserved
      type: integer
    - name: ip
      type: integer
      description: "IP index 01h-10h, FFh if not at an IP"

- id: post_motor_status
  label: Motor Status Response
  type: object
  fields:
    - name: status
      type: enum
      values: [stopped, running, blocked, locked]
    - name: direction
      type: enum
      values: [going_down, going_up, unknown]
    - name: source
      type: enum
      values: [internal, network, local_ui]
    - name: cause
      type: enum
      values:
        - target_reached
        - explicit_command
        - wink
        - obstacle_detection
        - over_current
        - thermal_protection
        - run_time_exceeded
        - timeout_exceeded
        - reset_power_up

- id: ack
  label: Acknowledgment
  type: enum
  values: [ack, nack]

- id: nack
  label: Negative Acknowledgment
  type: object
  fields:
    - name: error_code
      type: enum
      values:
        - data_out_of_range
        - unknown_message
        - message_length_error
        - busy_cannot_process

Variables

# UNRESOLVED: SDN protocol does not have independent settable parameters beyond Actions above.
# All configuration is performed via SET_xxx / CTRL_xxx commands.

Events

# UNRESOLVED: SDN is half-duplex MASTER/SLAVE - SLAVEs only respond to requests.
# No unsolicited event notifications defined in source.

Macros

# UNRESOLVED: no multi-step sequences defined in source.

Safety

confirmation_required_for: []
interlocks:
  - Network lock blocks all movement and limit changes except CTRL_NETWORK_LOCK with equal/higher priority
  - Motor blocked if thermal protection or obstacle detection active
  - Collision avoidance: avoid ACK requests and status queries in group/broadcast mode

Notes

SDN protocol uses LSBF (least significant bit first) byte order. All data bits must be inverted before transmission (NOT 58h = A7h example in source).

Master/SLAVE half-duplex — MASTER sends requests, SLAVEs only respond when polled.

Bus timing critical: Trep (slave response delay) varies 5ms-255ms and is partially randomized. Master must wait Treq=10ms after bus activity before transmitting.

NodeID is 3 bytes, fixed at manufacturing. Addresses recycled every 3-5 years.

Provenance

source_domains:
  - service.somfy.com
source_urls:
  - https://service.somfy.com/downloads/bui_v4/sdn-integration-guide--preliminary.pdf
retrieved_at: 2026-05-21T23:00:54.412Z
last_checked_at: 2026-10-01T10:51:05.924Z

Verification Summary

verdict: verified
checked_at: 2026-10-01T10:51:05.924Z
matched_actions: 18
action_count: 18
confidence: medium
summary: "All 18 spec actions map 1:1 to the 18 MASTER-issued commands in source §6; POST_xxx responses represented as Feedbacks; transport values verbatim. (10 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "physical RS-232 port number on URTSI II not stated in source"
- "byte inversion requirement noted in spec - clarify if this is handled by device firmware or must be applied by host"
- "SDN protocol does not have independent settable parameters beyond Actions above."
- "SDN is half-duplex MASTER/SLAVE - SLAVEs only respond to requests."
- "no multi-step sequences defined in source."
- "physical RS-232 port number on URTSI II gateway not stated"
- "RS-485 bus default port number not stated"
- "firmware version compatibility range not stated"
- "voltage/current/power specifications not in source"
- "byte inversion handling (host applies or device handles) not confirmed"

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