Driver Setup
An integration driver can support a settings page and an interactive setup flow with the Remote Two app or web-configurator to configure the driver.
The integration driver can specify a setup_data_schema for the initial setup screen for the user to fill out.
This can be as simple as an information text or a confirmation button without any further interactions. It also allows
to define more sophisticated user interactions where the integration driver sends dynamic setup screens to the user,
e.g. offer choices or asking for more input data.
Driver Registration
The following sequence diagram shows the happy message flow of a driver registration. Note that driver registration can be aborted at every stage with an error response or timeout.
sequenceDiagram
participant I as Integration X
participant M as mDNS
participant R as Remote
participant C as UI configurator
actor User
I--)M: advertise service X
User->>C: Start integration discovery
C-)+R: start_discovery
R--)C: event: integration_discovery (START)
R-)M: lookup service
loop
M--)R: service(n)
opt Not yet registered
R--)C: event: integration_discovery (DISCOVER) [n]
end
end
R--)-C: event: integration_discovery (STOP)
User->>C: Choose integration X
loop
opt
User->>+C: Enter access token
end
opt
User->>+C: Change driver URL
end
opt
User->>C: Connection test
C-)+R: get_discovered_intg_driver_metadata
rect rgb(51, 82, 102)
R-)+I: [temporary connection]
Note right of I: See Establish Connection
end
R-)I: get_driver_metadata
I--)-R: driver_metadata
R-->I: disconnect
R--)-C: integration_driver
end
end
User->>+C: Confirm
C-)+R: configure_discovered_integration_driver
rect rgb(51, 82, 102)
R-)+I: [temporary connection]
Note right of I: See Establish Connection
end
R-)I: get_driver_metadata
I--)-R: driver_metadata
R-->I: disconnect
R->>R: create driver
R--)C: integration_driver
R--)C: event: integration_driver_change (NEW)
rect rgb(51, 82, 102)
R-)+I: [start communication]
Note right of I: See Establish Connection
end
R--)C: event: integration_state (CONNECTING)
R--)-C: event: integration_state (ACTIVE)
Note over I,R: Configured driver
Driver Setup Flow
The following sequence diagram shows the message flow after the driver registration above. Again, the happy flow is shown. An error response or timeout can occur at any step in the process.
sequenceDiagram
participant I as Integration
participant R as Remote
participant C as UI configurator
actor User
Note over I,R: Configured driver
R-->+I: connection
User->>C: Configure new integration
User->>C: Provide settings value
C-)+R: setup_integration
R->>R: verify setup session not running & driver connected
R--)C: event: integration_setup_change<br>START (SETUP)
R->>R: create new setup session
R--)C: integration_setup_info (SETUP)
R-)+I: setup_driver
I--)R: result (OK)
R--)C: event: integration_setup_change<br>SETUP (SETUP)
Note right of I: setup started, updates with `driver_setup_change`
loop
alt setup progress
I--)R: event: driver_setup_change<br>(`event_type: SETUP, state: PROGRESS?`)
R--)C: event: integration_setup_change<br>SETUP (PROGRESS)
else user interaction
I--)R: event: driver_setup_change<br>(`event_type: SETUP, state: WAIT_USER_ACTION?`)
R--)+C: event: integration_setup_change<br>SETUP (WAIT_USER_ACTION)
User->>C: Provide input
C-)+R: set_integration_user_data
R-)+I: set_driver_user_data
I--)-R: result (OK)
R--)-C: integration_setup_info
end
end
I--)-R: driver_setup_change<br>(`event_type: STOP, state: OK`
R-)R: create integration
R--)C: event: integration_change<br>(NEW)
R--)C: event: integration_state<br>(CONNECTED)
R--)C: event: integration_setup_change<br>SETUP (OK)
R--)C: event: integration_setup_change<br>STOP (OK)
R-)-R: remove setup session
Note over I,R: Configured integration
R-)R: wait for messages
Note over I,R: Message exchange until disconnected
I-->-R: disconnect