Websockets Documentation
Websocket is the protocol for establishing an interaction channel between an external application and Almond. It is also possible to receive event-based notifications. Websocket can be used to control smart devices that are paired with Almond and build smart applications around it.
Contents
- 1 Authentication
- 2 Device Commands
- 3 Rules Commands
- 4 ClientList
- 5 ScenesCommands
- 6 Notification and Event Updates
- 6.1 DynamicIndexUpdated
- 6.2 DynamicDeviceAdded
- 6.3 DynamicDeviceRemoved
- 6.4 DynamicAllDevicesRemoved
- 6.5 DynamicDeviceUpdated
- 6.6 DynamicRuleAdded
- 6.7 DynamicRuleUpdated
- 6.8 DynamicRuleRemoved
- 6.9 DynamicAllRulesRemoved
- 6.10 DynamicAlmondModeUpdated
- 6.11 DynamicClientAdded
- 6.12 DynamicClientJoined
- 6.13 DynamicClientLeft
- 6.14 DynamicClientUpdated
- 6.15 DynamicClientRemoved
- 6.16 DynamicAllClientsRemoved
- 6.17 DynamicSceneAdded
- 6.18 DynamicSceneUpdated
- 6.19 DynamicSceneActivated
- 6.20 DynamicSceneRemoved
- 6.21 DynamicAllScenesRemoved
Authentication
In order to connect to the webserver - first specify a web-interface url, then the portid - 7681 followed by web-interface login password.
<webinterfaceUrl>:<portid>/<Login>/<password>
Example ws://10.10.10.254:7681/root/frank
Device Commands
Note: mii is a random key that is generated by the client and should be used for matching the received response to the corresponding request.
Maximum string length of mii is 32 characters. A unique mii should be used for each request
Devicelist
Command to get the list of sensors and other smart devices associated with the almond.
Request { "MobileInternalIndex":"<random key>", "CommandType":"DeviceList" }
Response { "MobileInternalIndex":"<random key>", "CommandType":"DeviceList", "Devices":{ "1":{ "Data":{ "ID":"1", "Name":"ContactSwitch #1", "Type":"12", "FriendlyDeviceType":"ContactSwitch", "Location":"Default", "LastActiveEpoch":"1462172879", "Manufacturer":"Sercomm Corp.", "Version":"16", "Model":"Unknown", "DeviceState":"1" }, "DeviceValues":{ "1":{ "Name":"STATE", "Value":"true", "Type":"4" }, "2":{ "Name":"LOW BATTERY", "Value":"0", "Type":"12" }, "3":{ "Name":"TAMPER", "Value":"true", "Type":"9" } } }, "2":{ "Data":{ "ID":"2", "Name":"BinarySwitch #2", "Type":"1", "FriendlyDeviceType":"BinarySwitch", "Location":"Default", "LastActiveEpoch":"1462175634", "Manufacturer":"Sercomm Corp.", "Version":"16", "Model":"SZ-BSW01", "DeviceState":"1" }, "DeviceValues":{ "1":{ "Name":"SWITCH BINARY", "Value":"true", "Type":"1" } } } } }
Updatedeviceindex
Request { "MobileInternalIndex":"<random key>", "CommandType":"UpdateDeviceIndex", "ID":"<device id>", "Index":"<deviceindex>", "Value":"<indexvalue>" } Response
{ "MobileInternalIndex":"<random key>", "CommandType":"UpdateDeviceIndex", "Success":"true/false" }
Getdeviceindex
Command to get the value of a device index. Request { "MobileInternalIndex":"<random key>", "CommandType":"GetDeviceIndex", "ID":"<deviceid>", "Index":"<deviceindex>" } Response
{ "MobileInternalIndex":"<random key>", "CommandType":"GetDeviceIndex", "Success":"true/false", "Value":"<indexvalue>" }
UpdateDeviceName
Command to edit name and location of a device.
Request
{ "MobileInternalIndex":"<random key>", "CommandType":"UpdateDeviceName", "ID":"6", "Name":"newswitchsss", "Location":"default" } Response
{ "MobileInternalIndex":"<random key>", "CommandType":"UpdateDeviceName", "Success":"true/false" }
Updatealmondmode
Command to change the almond mode.
Request
{ "MobileInternalIndex":"<random key>", "CommandType":"UpdateAlmondMode", "Mode":"<mode i.e. 2/3>", "EmailId":"<email id>" } Response
{ "MobileInternalIndex":"<random key>", "CommandType":"UpdateAlmondMode", "Success":"true/false" }
Rules Commands
Note: mii is a random key that is generated by the client and should be used for matching the received response to the corresponding request. Maximum string length of mii is 32 characters. A unique mii should be used for each request.
Ruleslist
Command to get the list of existing rules.
Request:
{ "CommandType":"RuleList", "MobileInternalIndex":"111" }
Response:
{ "CommandType": "RuleList", "Rules": { "12": { "Name": "mynewrule", "Valid": "true", "ID":"12", "Triggers": [{ "Type": "<type of trigger>", "ID": "<device id>", "Index": "<device index>", "Value": "<index value>", "Grouping": "< AND/OR>", "Condition": "<condition type ie.eq/le/ge/lt/gt>", "Duration": "
Addrule
Command to create a new rule.
Request
{ "MobileInternalIndex": "111", "CommandType": "AddRule", "Name": "rule", "Valid":"true", "Triggers": [ { "Type": "<type of trigger>", "ID": "<device id>", "Index": "<device index>", "Value": "<index value>", "Grouping": "< AND/OR>", "Condition": "<condition type ie.eq/le/ge/lt/gt>", "Duration": "<time in sec>", "Valid": "true" }, { "Type": "<type of trigger>", "ID": "<event id>", "EventType": "<event type>", "value": "<event value>", "Grouping": "<AND/OR>", "Condition": "<condition type ie.eq/le/ge/lt/gt>", "Duration": "<time in sec>", "Valid": "true" } ], "Results": [ { "Type": "<type of result>", "ID": "<device id>", "Index": "<device index>", "Value": "<index value>", "PreDelay": "<time in sec>", "Valid": "true" }, { "Type": "<type of result>", "ID": "<event id>", "EventType": "<event type>", "Value": "<event value>", "PreDelay": "<time in sec>", "Valid": "true" } ] }
Response
{ "CommandType":"AddRule", "Success":"true", "MobileInternalIndex":"111", "ReasonCode":"1" }
Updaterule
Command to update an existing rule.
Request
{ "MobileInternalIndex": "111", "CommandType": "UpdateRule", "Name": "ruleNAME", "Valid":"true", "ID": "2", "Triggers": [ { "Type": "<type of trigger>", "ID": "<device id>", "Index": "<device index>", "Value": "<index value>", "Grouping": "< AND/OR>", "Condition": "<condition type ie.eq/le/ge/lt/gt>", "Duration": "<time in sec>", "Valid":"true" }, { "Type": "<type of trigger>", "ID": "<event id>", "EventType": "<event type>", "Value": "<event value>", "Grouping": "<AND/OR>", "Condition": "<condition type ie.eq/le/ge/lt/gt>", "Duration": "<time in sec>", "Valid":"true" } ], "Results": [ { "Type": "<type of result>", "ID": "<device id>", "Index": "<device index>", "Value": "<index value>", "PreDelay": "<time in sec>" }, { "Type": "<type of result>", "ID": "<event id>", "EventType": "<event type>", "Value": "<event value>", "PreDelay": "<time in sec>" } ] }
Response
{ "CommandType":"UpdateRule", "Success":"true", "MobileInternalIndex":"111", "ReasonCode":"1" }
Removerule
Command to remove an existing rule.
Request
{ "CommandType": "RemoveRule", "Rules": { "ID": "1" }, "MobileInternalIndex": "111" }
Response
{ "CommandType":"RemoveRule", "Success":"true", "MobileInternalIndex":"111", "ReasonCode":"0" }
Removeallrules
Command to remove all rules.
Request
{ "CommandType":"RemoveAllRules", "MobileInternalIndex":"111" }
Response
{ "CommandType":"RemoveAllRules", "Success":"true", "MobileInternalIndex":"111", "ReasonCode":"0"
}
Validaterule
Command to validate an existing rule.
Request
{ "CommandType":"ValidateRule", "ID":"1", "Value":"true" "MobileInternalIndex":"111" }
Response
{ "CommandType":"ValidateRule", "MobileInternalIndex":"111", "ReasonCode":"0", "Success":"false", "Data":{ "Value":"true", "ID":"1" } }
ClientList
Command to get clientlist.
Request
{ "MobileInternalIndex":"<random key>", "CommandType":"ClientList" }
Response
{ "CommandType": "ClientList", "MobileInternalIndex":"<random key same as request>", "Success":"true", "Clients": { "1": { "ID":"1", "Name": "64:bc:0c:80:62:46", "Connection": "wired", "MAC": "64:bc:0c:80:62:46", "Type": "other", "LastKnownIP": "10.10.10.97", "Active": "false", "UseAsPresence": "true", "Wait": "6", "LastActiveEpoch": "1459845389", "RX": "0", "TX": "0", "Block": "0/1/2", "CanBlock":"true/false", "Category":"Kids/Others", "Schedule": "0,0,0,0,0,0,0", "Manufacturer": "LG", "RSSI": "0", "ForceInActive": "0" }, "2": { "ID":"2", "Name": "64:bc:0c:80:62:46", "Connection": "wired", "MAC": "64:bc:0c:80:62:46", "Type": "other", "LastKnownIP": "10.10.10.97", "Active": "false", "UseAsPresence": "true", "Wait": "6", "LastActiveEpoch": "1459845389", "RX": "0", "TX": "0", "Block": "0", "Schedule": "0,0,0,0,0,0,0", "Manufacturer": "LG", "RSSI": "0", "ForceInActive": "0" } } }
Note - Success Tag in response:
If the Almond is in AP mode or Range Extender mode then Success tag will be set to ‘false’.
UpdateClient
Command to Update the data of a client.
ID - Clientid
Name - name of the client
Connection - wired/wireless
Type - pc laptop tablet smartphone ipod ipad iphone mac printer router_switch hub tv chromecast appleTV android_stick camera nest other
Use as Presence - true/false
Request
{ "CommandType":"UpdateClient", "Clients":{ "ID": "1", "Name": "device1", "Connection": "wired", "MAC": "1c:75:08:32:2a:6d", "Type": "other", "LastKnownIP": "10.2.2.11", "Active": "false", "UseAsPresence": "false", "Wait":"6", "Block":"0/1/2", "Category":"Kids/Others" }, "MobileInternalIndex":"324" } Response
{ "Success":"true/false", "MobileInternalIndex":"324", "ReasonCode":"0" }
Remove client
command to remove a client.
Request
{ "MobileInternalIndex":"<random key>", "CommandType":"RemoveClient", "Clients":{ "ID":"1", "MAC":"1c:75:08:32:2a:6d" } }
Response
Success
{ "CommandType":"RemoveClient", "MobileInternalIndex":"324", "Success":"true", "Reason":"0" }
Failure
{ "CommandType":"RemoveClient", "MobileInternalIndex":"324", "Success":"false", "Reason":"0" }
Removeallclients
Command to remove all clients
Request
{ "MobileInternalIndex":"<random key>", "CommandType":"RemoveAllClients", }
Response
Success
{ "CommandType":"RemoveAllClients", "MobileInternalIndex":"324", "Success":"true", "ReasonCode":"0" }
Failure
{ "CommandType":"RemoveAllClients", "MobileInternalIndex":"324", "Success":"false", "ReasonCode":"0" }
ScenesCommands
Note:mii(MobileInternalIndex) is a random key that is generated by the client and should be used for matching the received response to the corresponding request. Maximum string length of mii is 32 characters.
A unique mii should be used for each request
SceneList
Command to retrieve the list of existing Scenes.
Request
{ "CommandType":"DynamicSceneList", "MobileInternalIndex":"5432857" }
Response
Note: Active :- Indicates the state of Scene
{ "CommandType": "DynamicSceneList", "MobileInternalIndex":"<same as in request>", "Scenes": { "1": { "ID":"1", "Active": "true", "Name": "Scene1022", "LastActiveEpoch": "251176214925585", "VoiceCompatible":"true", "SceneEntryList": [{ "ID": "2", "Index": "1", "Value": "false", "Valid": "true" }, { "ID": "4", "Index": "1", "Value": "78", "Valid": "true" }] } } }
AddScene
Command to add a new Scene.
Request
{ "CommandType": "AddScene", "MobileInternalIndex": "324", "Scenes":{ "Name": "My_created_scene", "SceneEntryList": [ { "ID": "1", "Index": "1", "Value": "false" }, { "ID": "2", "Index": "2", "Value": "false" } ]} }
Response
{ "CommandType":"AddScene", "MobileInternalIndex":"324", "ReasonCode":"0", "Success":"true" }
UpdateScene
Command to update an existing Scene
Request
{ "MobileInternalIndex": 1667509461, "Scenes": { "Name": "DADad222d", "ID": 1, "SceneEntryList": [{ "ID": 0, "Value": "home", "Index": 1 }, { "ID": 2, "Value": "false", "Index": 1 }, { "ID": 2, "Value": "true", "Index": 2 }], "VoiceCompatible": false },"CommandType": "UpdateScene" }
Response
{"MobileInternalIndex":"324", "ReasonCode":"0", "Success":"true" }
ActivateScene
Command to activate a Scene
Request
{ "CommandType":"ActivateScene", "MobileInternalIndex":"324", "Scenes":{ "ID":"11" } }
Response
{"CommandType":"ActivateScene","MobileInternalIndex":"324","Success":"true","Reason":"0"}
RemoveScene
Command to remove a Scene
Request
{ "CommandType":"RemoveScene", "MobileInternalIndex":"324", "Scenes":{ "ID":"11" } }
Response
{"CommandType":"RemoveScene","MobileInternalIndex":"324","Success":"true","Reason":"0"}
RemoveAllScenes
Command to remove all Scenes
Request
{ "CommandType":"RemoveAllScenes", "MobileInternalIndex":"324" }
Response
{"CommandType":"RemoveAllScenes","MobileInternalIndex":"324","Success":"true","Reason":"0"}
Notification and Event Updates
DynamicIndexUpdated
If any device index is changed, the following update will be received.
{ "CommandType":"DynamicIndexUpdated", "Devices":{ "<device id>":{ "DeviceValues":{ "<index id>":{ "Name":"<index name>", "Value":"<index value>" } } } } }
DynamicDeviceAdded
Whenever a device is added, the follow update would be received. { "CommandType":"DynamicDeviceAdded", "Devices":{ "<device id>":{ "Data":{ "Name":"<device name>", "Type":"<device type id >", "FriendlyDeviceType":"<friendly device type>", "Location":"<location>", "LastActiveEpoch":"<time stamp>", "Manufacturer":"<manufacturer name>", "Version":"<version number>", "Model":"<model>", "DeviceState":"<0/1/2>" }, "DeviceValues":{ "1":{ "Name":"<index name >", "Value":"<index val>", "Type":"<index type>" }, "2":{ "Name":"<index name>", "Value":"<index val>", "Type":"<index type>" }, "3":{ "Name":"<index name>", "Value":"<index val>", "Type":"<index type>" } } } } }
DynamicDeviceRemoved
Whenever a device is removed, the following update is received. { "CommandType":"DynamicDeviceRemoved", "Action":"remove", "Devices":{ "25":{ "Type":"<device type id >"} } }
DynamicAllDevicesRemoved
Whenever all the devices are removed, the follow update is received.
{ "CommandType":"DynamicAllDevicesRemoved" }
DynamicDeviceUpdated
If any device type or index are changed the following update will be received.
{ "CommandType":"DynamicDeviceUpdated", "Devices":{ "<device id>":{ "Data":{ "Name":"<device name>", "Type":"<device type id >", "FriendlyDeviceType":"<friendly device type>", "Location":"<location>", "LastActiveEpoch":"<time stamp>", "Manufacturer":"<manufacturer name>", "Version":"<version number>", "Model":"<model>", "DeviceState":"<0/1/2>" }, "DeviceValues":{ "1":{ "Name":"<index name >", "Value":"<index val>", "Type":"<index type>" }, "2":{ "Name":"<index name>", "Value":"<index val>", "Type":"<index type>" }, "3":{ "Name":"<index name>", "Value":"<index val>", "Type":"<index type>" } } } } }
DynamicRuleAdded
When a new rule is added the following update is received.
{ "CommandType": "DynamicRuleAdded", "Rules": { "12": { "Name": "mynewrule", "Valid": "true", "ID":"12", "Triggers": [{ "Type": "<type of trigger>", "ID": "<device id>", "Index": "<device index>", "Value": "<index value>", "Grouping": "< AND/OR>", "Condition": "<condition typet>", "Duration": "<time in sec>", "Valid": "true" }], "Results": [{ "Type": "<type of result>", "ID": "<device id>", "Index": "<device index>", "Value": "<index value>", "PreDelay": "<time in sec>", "Valid": "true" }, { "Type": "<type of result>", "ID": "<event id>", "EventType": "<event type>", "Value": "<event value>", "PreDelay": "<time in sec>", "Valid": "true" }] } } }
DynamicRuleUpdated
When an existing rule is modified the following update is received.
{ "CommandType": "DynamicRuleUpdated", "Rules": { "12": { "ID":"12", "Name": "mynewrule", "Valid": "true", "Triggers": [{ "Type": "<type of trigger>", "ID": "<device id>", "Index": "<device index>", "Value": "<index value>", "Grouping": "< AND/OR>", "Condition": "<condition type ie.eq/le/ge/lt/gt>", "Duration": "<time in sec>", "Valid": "true" }], "Results": [{ "Type": "<type of result>", "ID": "<device id>", "Index": "<device index>", "Value": "<index value>", "PreDelay": "<time in sec>" }, { "Type": "<type of result>", "ID": "<event id>", "EventType": "<event type>", "Value": "<event value>", "PreDelay": "<time in sec>" }] } } }
DynamicRuleRemoved
When a rule is removed the following update is received.
{ "CommandType": "DynamicRuleRemoved", "Action": "remove", "Rules": { "1": {} } }
DynamicAllRulesRemoved
When all rules are removed the following update is received.
{"CommandType":"DynamicAllRulesRemoved"}
DynamicAlmondModeUpdated
{ "CommandType":"DymanicAlmondModeUpdated", "Mode":"<mode i.e. 2/3>", "EmailId":"<email id>" }
DynamicClientAdded
When a new client is added the following update is received.
{ "CommandType": "DynamicClientAdded", "Clients": { "1": { "ID":"1", "Name": "64:bc:0c:80:62:46", "Connection": "wired", "MAC": "64:bc:0c:80:62:46", "Type": "other", "LastKnownIP": "10.10.10.97", "Active": "false", "UseAsPresence": "true", "Wait": "6", "LastActiveEpoch": "1459845389", "RX": "0", "TX": "0", "Block": "0/1/2", "CanBlock":"true/false", "Category":"Kids/Others", "Schedule": "0,0,0,0,0,0,0", "Manufacturer": "LG", "RSSI": "0", "ForceInActive": "0" } } }
DynamicClientJoined
When a client joined network the following update is received. { "CommandType": "DynamicClientJoined", "Clients": { "1": { "ID":"1", "Name": "64:bc:0c:80:62:46", "Connection": "wired", "MAC": "64:bc:0c:80:62:46", "Type": "other", "LastKnownIP": "10.10.10.97", "Active": "true", "UseAsPresence": "true", "Wait": "6", "LastActiveEpoch": "1459845389", "RX": "0", "TX": "0", "Block": "0/1/2", "CanBlock":"true/false", "Category":"Kids/Others", "Schedule": "0,0,0,0,0,0,0", "Manufacturer": "LG", "RSSI": "0", "ForceInActive": "0" } } }
DynamicClientLeft
When a client leaves the network, following update is received.
{ "CommandType": "DynamicClientLeft", "Clients": { "1": { "ID":"1", "Name": "64:bc:0c:80:62:46", "Connection": "wired", "MAC": "64:bc:0c:80:62:46", "Type": "other", "LastKnownIP": "10.10.10.97", "Active": "false", "UseAsPresence": "true", "Wait": "6", "LastActiveEpoch": "1459845389", "RX": "0", "TX": "0", "Block": "0/1/2", "CanBlock":"true/false", "Category":"Kids/Others", "Schedule": "0,0,0,0,0,0,0", "Manufacturer": "LG", "RSSI": "0", "ForceInActive": "0" } } }
DynamicClientUpdated
When a name change or any changes done to a client the following update is received.
{ "CommandType": "DynamicClientUpdated", "Clients": { "1": { "ID":"1", "Name": "64:bc:0c:80:62:46", "Connection": "wired", "MAC": "64:bc:0c:80:62:46", "Type": "other", "LastKnownIP": "10.10.10.97", "Active": "false", "UseAsPresence": "true", "Wait": "6", "LastActiveEpoch": "1459845389", "RX": "0", "TX": "0", "Block": "0/1/2", "CanBlock":"true/false", "Category":"Kids/Others", "Schedule": "0,0,0,0,0,0,0", "Manufacturer": "LG", "RSSI": "0", "ForceInActive": "0" } } }
DynamicClientRemoved
When a client is removed this update is received
{ "CommandType": "DynamicClientRemoved", "Action": "remove", "Clients": { "1":{ "MAC": "1c:75:08:32:2a:6d" } } }
DynamicAllClientsRemoved
When all the clients are removed this update is received { "CommandType":"DynamicAllClientsRemoved" }
DynamicSceneAdded
When a new scene is added the following update is received. { "CommandType": "DynamicSceneAdded", "Scenes": { "1": { "ID":"1", "Active": "true", "Name": "Scene1022", "LastActiveEpoch": "251176214925585", "VoiceCompatible":"true", "SceneEntryList": [{ "ID": "1", "Index": "1", "Value": "false", "Valid": "true" }, { "ID": "4", "Index": "1", "Value": "78", "Valid": "false" }] } } }
DynamicSceneUpdated
when any changes are made to an existing scene the following update is received.
{ "CommandType": "DynamicSceneUpdated", "Scenes": { "1": { "ID":"1", "Active": "true", "Name": "Scene1022", "LastActiveEpoch": "251176214925585", "VoiceCompatible":"true", "SceneEntryList": [{ "ID": "1", "Index": "1", "Value": "false", "Valid": "true" }, { "ID": "4", "Index": "1", "Value": "78", "Valid": "true" }] } } }
DynamicSceneActivated
When any scene is activated the following update is received. { "CommandType": "DynamicSceneActivated", "Action": "update", "Scenes": { "1": { "Active": "true", "LastActiveEpoch": "251176214925585" } }
}
DynamicSceneRemoved
When any scene is removed the following update is received. { "CommandType": "DynamicSceneRemoved", "Action": "remove", "Scenes": { "1": {} } }
DynamicAllScenesRemoved
When all scenes are removed the following update is received.
{ "CommandType": "DynamicAllScenesRemoved" }