Table of Contents
S-RMS API
The API is a REST API with a bearer token authorization. The API specification can be found here.
Adding an access code
An access code can be added with a POST to /api/v1/room/{access_code_controller_id}/code
The response is a HTTP 202 Accepted.
The access_code_controller_id path parameter is the ID of the controller to add the code to (eg.: access_code_controller_01, access_code_controller_02).
The POST data is a JSON containing the necessary data for a valid access code.
{
"code": 123, // The access code in decimal representation
"label": "Guest 1", // The code label or description (can be empty)
"code_type": 1, // The code type
"valid_from": "2022-10-24T07:33:21.674Z", // Start time of code validity in the UTC timezone (can be null for no start limit)
"valid_to": "2022-10-30T07:33:21.674Z", // End time of code validity in the UTC timezone (can be null for no end limit)
"access": [ // List of access points to grant the access to
{
"access_point": 1, // Access point ID
"remaining_passes": 3 // Number of passes for the access point (can be null for unlimited passes)
},
{
"access_point": 2, // Access point ID
"remaining_passes": null // Number of passes for the access point (can be null for unlimited passes)
}
]
}
A valid code must contain at least one access point with the remaining number of passes greater than 0 and must not be expired.
Removing an access code
An access code can be removed with a DELETE to /api/v1/room/{access_code_controller_id}/code/{code}
The response is a HTTP 204.
The access_code_controller_id path parameter is the ID of the controller to remove the code from (eg.: access_code_controller_01, access_code_controller_02). The code path parameter is the decimal representation of the code to remove.
Updating an access code
An access code can be updated with a PUT to /api/v1/room/{access_code_controller_id}/code/{code}
The response is a HTTP 202 Accepted.
The access_code_controller_id path parameter is the ID of the controller to update the code on (eg.: access_code_controller_01, access_code_controller_02). The code path parameter is the decimal representation of the code to update.
The PUT data is a JSON containing the necessary data for a valid access code.
{
"code": 123, // The access code in decimal representation
"label": "Guest 1", // The code label or description (can be empty)
"code_type": 1, // The code type
"valid_from": "2022-10-24T07:33:21.674Z", // Start time of code validity in the UTC timezone (can be null for no start limit)
"valid_to": "2022-10-30T07:33:21.674Z", // End time of code validity in the UTC timezone (can be null for no end limit)
"access": [ // List of access points to grant the access to
{
"access_point": 1, // Access point ID
"remaining_passes": 3 // Number of passes for the access point (can be null for unlimited passes)
},
{
"access_point": 2, // Access point ID
"remaining_passes": null // Number of passes for the access point (can be null for unlimited passes)
}
]
}
A valid code must contain at least one access point with the remaining number of passes greater than 0 and must not be expired.
If no access points are specified then the access points of the access code are not modified.
Updating only one access point of a code
Removing an access point
An access point of an access code can be removed with a DELETE to /api/v1/room/{access_code_controller_id}/code/{code}/access_point/{ap_id}
The response is a HTTP 204.
The access_code_controller_id path parameter is the ID of the controller to update the code on (eg.: access_code_controller_01, access_code_controller_02). The code path parameter is the decimal representation of the code to update. The ap_id path parameter is the ID of the access point to remove.
Adding or updating an access point
An access point of an access code can be added/updated with a PUT to /api/v1/room/{access_code_controller_id}/code/{code}/access_point/{ap_id}
The response is a HTTP 202.
The access_code_controller_id path parameter is the ID of the controller to update the code on (eg.: access_code_controller_01, access_code_controller_02). The code path parameter is the decimal representation of the code to update. The ap_id path parameter is the ID of the access point to remove.
The PUT data is a JSON containing the necessary data for a valid access point.
{
"access_point": 1, // Access point ID
"remaining_passes": 3 // Number of passes for the access point (can be null for unlimited passes)
}
Reading an access code
An access code can be read with a GET to /api/v1/room/{access_code_controller_id}/code/{code}
The access_code_controller_id path parameter is the ID of the controller to update the code on (eg.: access_code_controller_01, access_code_controller_02). The code path parameter is the decimal representation of the code to update.
The response is a JSON containing code data.
{
"code": 123, // The access code in decimal representation
"label": "Guest 1", // The code label or description (can be empty)
"code_type": 1, // The code type
"valid_from": "2022-10-24T07:33:21.674Z", // Start time of code validity in the UTC timezone (can be null for no start limit)
"valid_to": "2022-10-30T07:33:21.674Z", // End time of code validity in the UTC timezone (can be null for no end limit)
"access": [ // List of access points to grant the access to
{
"access_point": 1, // Access point ID
"remaining_passes": 3 // Number of passes for the access point (can be null for unlimited passes)
},
{
"access_point": 2, // Access point ID
"remaining_passes": null // Number of passes for the access point (can be null for unlimited passes)
}
]
}
Reading code data of a specified access point
Access point data of an access code can be read with a GET to /api/v1/room/{access_code_controller_id}/code/{code}/access_point/{ap_id}
The access_code_controller_id path parameter is the ID of the controller to read the code from (eg.: access_code_controller_01, access_code_controller_02). The code path parameter is the decimal representation of the code to read. The ap_id path parameter is the ID of the access point to read.
The response is a JSON with the access point data.
{
"access_point": 1, // Access point ID
"remaining_passes": 3 // Number of passes for the access point (can be null for unlimited passes)
}
Reading/Setting room devices data
Each room is split into logical things that represent controllable devices in the room.
The different types of things are:
The parent of all these things is the room controller.
Reading room device data
Geting the room device state is done with a GET to /api/v1/things/rt/{thing_id}
The thing_id path parameter is the ID of the device to read the state from (eg.: room_01_light_1, room_02_hvac).
The response is a JSON with the device state.
Light state
{
"id": "room_01_light_1",
"type": "com.robotina.s_rms.iot_things.light-1_0",
"vars": {
"light": "0"
}
}
Dimmable light state
{
"id": "room_01_dimmable_light_1",
"type": "com.robotina.s_rms.iot_things.dimmable_light-1_0",
"vars": {
"dimmer": "0",
"dimmer_level": "0"
}
}
Scene state
{
"id": "room_01_scene_1",
"type": "com.robotina.s_rms.iot_things.scene-1_0",
"vars": {
"scene_status": "1"
}
}
Blinds state
{
"id": "room_01_scene_1",
"type": "com.robotina.s_rms.iot_things.scene-1_0",
"vars": {
"scene_status": "1"
}
}
DND/MUR state
{
"id": "room_01_dnd_mur",
"type": "com.robotina.s_rms.iot_things.dnd_mur-1_0",
"vars": {
"mur_status": "1",
"dnd_status": "0"
}
}
SOS state
{
"id": "room_01_sos",
"type": "com.robotina.s_rms.iot_things.sos_alert-1_0",
"vars": {
"sos_status": "0"
}
}
Fire alert state
{
"id": "room_01_fire_alert",
"type": "com.robotina.s_rms.iot_things.fire_alert-1_0",
"vars": {
"fire_alert_status": "0"
}
}
Door state
{
"id": "room_01_door",
"type": "com.robotina.s_rms.iot_things.door-1_0",
"vars": {
"door_status": "0",
"door_open_code_type": "0",
"door_bell": "0",
"door_bell_status": "0",
"door_bell_preset": "1000",
"access_lock": "0"
}
}
HVAC state
{
"id": "room_01_hvac",
"type": "com.robotina.s_rms.iot_things.hvac-1_0",
"vars": {
"hvac_room_mode": "2",
"hvac_room_status": "6",
"hvac_room_measured": "23.1",
"hvac_room_fan": "0",
"hvac_room_setpoint": "23.8",
"hvac_room_fan_mode": "2"
}
}
HVAC setpoints state
{
"id": "room_01_hvac_setpoints",
"type": "com.robotina.s_rms.iot_things.hvac_setpoints-1_0",
"vars": {
"hvac_room_setpoint_cool_idle": "30.0",
"hvac_room_setpoint_heat_idle": "10.0",
"hvac_room_fan_idle": "1",
"hvac_room_setpoint_cool_book": "25.0",
"hvac_room_setpoint_heat_book": "18.0",
"hvac_room_fan_book": "2",
"hvac_room_setpoint_guest": "23.8",
"hvac_room_fan_guest": "2",
"hvac_room_setpoint_cool_max": "30.0",
"hvac_room_setpoint_cool_min": "18.0",
"hvac_room_setpoint_heat_max": "25.0",
"hvac_room_setpoint_heat_min": "10.0",
"hvac_room_offset_cool_night": "2.0",
"hvac_room_offset_heat_night": "-2.0",
"hvac_room_fan_night": "1",
"def_hvac_room_setpoint_cool_idle": "30.0",
"def_hvac_room_setpoint_heat_idle": "10.0",
"def_hvac_room_fan_idle": "1",
"def_hvac_room_setpoint_cool_book": "25.0",
"def_hvac_room_setpoint_heat_book": "18.0",
"def_hvac_room_fan_book": "2",
"def_hvac_room_setpoint_guest": "22.4",
"def_hvac_room_fan_guest": "1",
"def_hvac_room_setpoint_cool_max": "30.0",
"def_hvac_room_setpoint_cool_min": "18.0",
"def_hvac_room_setpoint_heat_max": "25.0",
"def_hvac_room_setpoint_heat_min": "10.0",
"def_hvac_room_offset_cool_night": "2.0",
"def_hvac_room_offset_heat_night": "-2.0",
"def_hvac_room_fan_night": "1"
}
}
Bathroom ventilation state
{
"id": "room_01_ventilation",
"type": "com.robotina.s_rms.iot_things.ventilation-1_0",
"vars": {
"ventilation_status": "0",
"ventilation_timeout": "30"
}
}
Room presence state
{
"id": "room_01_presence",
"type": "com.robotina.s_rms.iot_things.room_presence-1_0",
"vars": {
"presence_status": "1",
"presence_state": "1",
"presence_type": "0",
"presence_pir_sensor": "0",
"presence_door_sensor": "0",
"presence_aux_sensor": "0",
"presence_long_preset": "900",
"presence_short_preset": "5"
}
}
Room power supply state
{
"id": "room_01_power_supply",
"type": "com.robotina.s_rms.iot_things.room_power_supply-1_0",
"vars": {
"power_booked": "1",
"power_presence": "1"
}
}
Room state
{
"id": "room_01",
"type": "com.robotina.s_rms.iot_things.room-1_0",
"vars": {
"room_number": "102",
"room_status": "0",
"booked_state": "1",
"booked_on_code": "1"
}
}
Wake up state
{
"id": "room_01_wake_up",
"type": "com.robotina.s_rms.iot_things.wake_up-1_0",
"vars": {
"wakeup_status": "0",
"wakeup_enabled": "0",
"wakeup_time_hour": "8",
"wakeup_time_min": "0",
"wakeup_scene_enabled": "0"
}
}
Setting room device state
For writable device variables the state can be changed with a POST to /api/v1/things/rt/{thing_id}
The thing_id path parameter is the ID of the device to read the state to (eg.: room_01_light_1, room_02_hvac).
The POST data is a JSON containing only the variables to change.
{
"vars": {
"variable_to_change_1": "new_value_1",
"variable_to_change_2": "new_value_2"
}
}
The variable structure is the same as the response for reading device states.
The response is the updated device state (same as in a read request).
