Difference between revisions of "Websockets Documentation"

From SecuriWiki
Jump to: navigation, search
(ClientList)
 
(One intermediate revision by one user not shown)
Line 1: Line 1:
 
[[Category:Almond+ 2014]]
 
[[Category:Almond+ 2014]]
 
[[Category:Almond 2015]]
 
[[Category:Almond 2015]]
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 [https://wiki.securifi.com/index.php/Devicelist_Documentation '''smart devices'''] that are paired with Almond and build smart applications around it.
+
[[Category:Almond 3]]
 
+
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 [https://wiki.securifi.com/index.php/Devicelist_Documentation '''smart devices'''] that are paired with Almond and build smart applications around it.
<b>Note: WebSocket API new Rules Commands are being updated according to the new firmware R089 and please [https://wiki.securifi.com/index.php/Changelog '''click here'''] to access the old Rules Commands which would work with the old firmware R085.</b>
+
  
 
== Authentication ==
 
== Authentication ==
Line 30: Line 29:
 
   "MobileInternalIndex":"<random key>",
 
   "MobileInternalIndex":"<random key>",
 
   "CommandType":"DeviceList",
 
   "CommandType":"DeviceList",
  "Action":"addAll",
 
 
   "Devices":{   
 
   "Devices":{   
 
       "1":{   
 
       "1":{   
Line 36: Line 34:
 
                 "ID":"1",
 
                 "ID":"1",
 
                 "Name":"ContactSwitch #1",
 
                 "Name":"ContactSwitch #1",
                "AssociationTimestamp":"1462172879",
 
 
                 "Type":"12",
 
                 "Type":"12",
 +
                "FriendlyDeviceType":"ContactSwitch",
 
                 "Location":"Default",
 
                 "Location":"Default",
 
                 "LastActiveEpoch":"1462172879",  
 
                 "LastActiveEpoch":"1462172879",  
                "Manufacturer":"Sercomm Co",
+
                "Manufacturer":"Sercomm Corp.",
 
                 "Version":"16",
 
                 "Version":"16",
                 "Model":"Unknown"
+
                 "Model":"Unknown",
 +
                "DeviceState":"1"
 
         },
 
         },
 
         "DeviceValues":{   
 
         "DeviceValues":{   
 
             "1":{   
 
             "1":{   
 
               "Name":"STATE",
 
               "Name":"STATE",
               "Value":"true"
+
               "Value":"true",
 +
              "Type":"4"
 
             },
 
             },
 
             "2":{   
 
             "2":{   
 
               "Name":"LOW BATTERY",
 
               "Name":"LOW BATTERY",
               "Value":"0"
+
               "Value":"0",
 +
              "Type":"12"
 
             },
 
             },
 
             "3":{   
 
             "3":{   
 
               "Name":"TAMPER",
 
               "Name":"TAMPER",
               "Value":"true"
+
               "Value":"true",
 +
              "Type":"9"
 
             }
 
             }
 
         }
 
         }
Line 63: Line 65:
 
                 "ID":"2",
 
                 "ID":"2",
 
                 "Name":"BinarySwitch #2",
 
                 "Name":"BinarySwitch #2",
 +
                "Type":"1",
 
                 "FriendlyDeviceType":"BinarySwitch",
 
                 "FriendlyDeviceType":"BinarySwitch",
                 "Type":"1",
+
                 "Location":"Default",
                 "ID":"2",
+
                 "LastActiveEpoch":"1462175634",  
                 "Location":"Default"
+
                 "Manufacturer":"Sercomm Corp.",
 +
                "Version":"16",
 +
                "Model":"SZ-BSW01",
 +
                "DeviceState":"1"
 
         },
 
         },
 
         "DeviceValues":{   
 
         "DeviceValues":{   
 
             "1":{   
 
             "1":{   
 
               "Name":"SWITCH BINARY",
 
               "Name":"SWITCH BINARY",
               "Value":"true"
+
               "Value":"true",
 +
              "Type":"1"
 
             }
 
             }
 
         }
 
         }
Line 82: Line 89:
 
  Request
 
  Request
 
  {
 
  {
  "MobilInternalIndex":"<random key>",
+
  "MobileInternalIndex":"<random key>",
 
  "CommandType":"UpdateDeviceIndex",
 
  "CommandType":"UpdateDeviceIndex",
 
  "ID":"<device id>",
 
  "ID":"<device id>",
Line 161: Line 168:
 
  {
 
  {
 
         "CommandType": "RuleList",
 
         "CommandType": "RuleList",
        "Action": "addAll",
 
 
         "Rules": {
 
         "Rules": {
 
                 "12": {
 
                 "12": {
Line 419: Line 425:
 
  {
 
  {
 
         "CommandType": "ClientList",
 
         "CommandType": "ClientList",
         "Action": "addAll",
+
         "MobileInternalIndex":"<random key same as request>",
 +
        "Success":"true",
 
         "Clients": {
 
         "Clients": {
 
               "1": {
 
               "1": {
Line 506: Line 513:
 
           "Wait":"6",
 
           "Wait":"6",
 
           "Block":"0/1/2",
 
           "Block":"0/1/2",
           "Category:"Kids/Others"
+
           "Category":"Kids/Others"
 
         },
 
         },
 
         "MobileInternalIndex":"324"
 
         "MobileInternalIndex":"324"
Line 534: Line 541:
 
   "MobileInternalIndex":"324",
 
   "MobileInternalIndex":"324",
 
   "Success":"true",
 
   "Success":"true",
   "ReasonCode":"0"  
+
   "Reason":"0"  
 
  }
 
  }
 
Failure
 
Failure
Line 541: Line 548:
 
   "MobileInternalIndex":"324",
 
   "MobileInternalIndex":"324",
 
   "Success":"false",
 
   "Success":"false",
   "ReasonCode":"0"
+
   "Reason":"0"
 
  }
 
  }
  
Line 576: Line 583:
 
Request
 
Request
 
  {
 
  {
   "CommandType":"SceneList",
+
   "CommandType":"DynamicSceneList",
 
   "MobileInternalIndex":"5432857"
 
   "MobileInternalIndex":"5432857"
 
  }
 
  }
Line 582: Line 589:
 
Note: Active :- Indicates the state of Scene<br/>
 
Note: Active :- Indicates the state of Scene<br/>
 
  {
 
  {
         "CommandType": "SceneList",
+
         "CommandType": "DynamicSceneList",
         "Action": "addAll"
+
         "MobileInternalIndex":"<same as in request>",
 
         "Scenes": {
 
         "Scenes": {
 
                 "1": {
 
                 "1": {
Line 590: Line 597:
 
                         "Name": "Scene1022",
 
                         "Name": "Scene1022",
 
                         "LastActiveEpoch": "251176214925585",
 
                         "LastActiveEpoch": "251176214925585",
 +
                        "VoiceCompatible":"true",
 
                         "SceneEntryList": [{
 
                         "SceneEntryList": [{
 
                                 "ID": "2",
 
                                 "ID": "2",
Line 628: Line 636:
  
 
Response
 
Response
  {"MobileInternalIndex":"324",
+
  {
 +
"CommandType":"AddScene",
 +
"MobileInternalIndex":"324",
 
  "ReasonCode":"0",
 
  "ReasonCode":"0",
 
  "Success":"true"
 
  "Success":"true"
Line 708: Line 718:
 
  {   
 
  {   
 
   "CommandType":"DynamicIndexUpdated",
 
   "CommandType":"DynamicIndexUpdated",
  "Action":"UpadateIndex",
 
 
   "Devices":{   
 
   "Devices":{   
 
       "<device id>":{  
 
       "<device id>":{  
Line 725: Line 734:
 
  {   
 
  {   
 
   "CommandType":"DynamicDeviceAdded",
 
   "CommandType":"DynamicDeviceAdded",
  "Action":"add",
 
 
   "Devices":{   
 
   "Devices":{   
 
       "<device id>":{  
 
       "<device id>":{  
Line 731: Line 739:
 
                   "Name":"<device name>",
 
                   "Name":"<device name>",
 
                   "Type":"<device type id >",
 
                   "Type":"<device type id >",
 +
                  "FriendlyDeviceType":"<friendly device type>",
 
                   "Location":"<location>",
 
                   "Location":"<location>",
 
                   "LastActiveEpoch":"<time stamp>",  
 
                   "LastActiveEpoch":"<time stamp>",  
                  "Manufacturer":"<manufacturer name>",
+
                  "Manufacturer":"<manufacturer name>",
 
                   "Version":"<version number>",
 
                   "Version":"<version number>",
                   "Model":"<model>"
+
                   "Model":"<model>",
 +
                  "DeviceState":"<0/1/2>"
 
                 },
 
                 },
 
         "DeviceValues":{   
 
         "DeviceValues":{   
 
             "1":{   
 
             "1":{   
 
               "Name":"<index name >",
 
               "Name":"<index name >",
               "value":"<index val>"
+
               "Value":"<index val>",
 +
              "Type":"<index type>"
 
             },
 
             },
 
             "2":{   
 
             "2":{   
 
               "Name":"<index name>",
 
               "Name":"<index name>",
               "Value":"<index val>"
+
               "Value":"<index val>",
 +
              "Type":"<index type>"
 
             },
 
             },
 
             "3":{   
 
             "3":{   
 
               "Name":"<index name>",
 
               "Name":"<index name>",
               "Value":"<index val>"
+
               "Value":"<index val>",
 +
              "Type":"<index type>"
 
             }
 
             }
 
         }
 
         }
Line 772: Line 785:
  
 
  {   
 
  {   
   "CommandType":"DynamicAllDevicesRemoved",
+
   "CommandType":"DynamicAllDevicesRemoved"
  "Action":"removeAll"
+
 
+
 
  }
 
  }
  
Line 782: Line 793:
 
  {   
 
  {   
 
   "CommandType":"DynamicDeviceUpdated",
 
   "CommandType":"DynamicDeviceUpdated",
  "Action":"update",
 
 
   "Devices":{   
 
   "Devices":{   
 
       "<device id>":{   
 
       "<device id>":{   
 
         "Data":{
 
         "Data":{
 
                 "Name":"<device name>",
 
                 "Name":"<device name>",
                "Type":"<device type id >",
+
                "Type":"<device type id >",
                "Location":"<location>",
+
                "FriendlyDeviceType":"<friendly device type>",
 +
                "Location":"<location>",
 
                 "LastActiveEpoch":"<time stamp>",  
 
                 "LastActiveEpoch":"<time stamp>",  
                "Manufacturer":"<manufacturer name>",
+
                "Manufacturer":"<manufacturer name>",
 
                 "Version":"<version number>",
 
                 "Version":"<version number>",
                 "Model":"<model>"
+
                 "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>"
 +
            }
 +
        }
 
         }
 
         }
 
   }
 
   }
Line 804: Line 833:
 
  {
 
  {
 
         "CommandType": "DynamicRuleAdded",
 
         "CommandType": "DynamicRuleAdded",
        "Action": "add",
 
 
         "Rules": {
 
         "Rules": {
 
                 "12": {
 
                 "12": {
Line 846: Line 874:
 
  {
 
  {
 
         "CommandType": "DynamicRuleUpdated",
 
         "CommandType": "DynamicRuleUpdated",
        "Action": "update",
 
 
         "Rules": {
 
         "Rules": {
 
                 "12": {
 
                 "12": {
Line 897: Line 924:
 
When all rules are removed the following update is received.  
 
When all rules are removed the following update is received.  
  
  {"CommandType":"DynamicAllRulesRemoved","Action":"removeAll"}
+
  {"CommandType":"DynamicAllRulesRemoved"}
  
 
<br/>
 
<br/>
Line 913: Line 940:
 
  {
 
  {
 
         "CommandType": "DynamicClientAdded",
 
         "CommandType": "DynamicClientAdded",
        "Action": "add",
 
 
         "Clients": {
 
         "Clients": {
 
                 "1": {
 
                 "1": {
Line 943: Line 969:
 
  {
 
  {
 
         "CommandType": "DynamicClientJoined",
 
         "CommandType": "DynamicClientJoined",
        "Action": "update",
 
 
         "Clients": {
 
         "Clients": {
 
                 "1": {
 
                 "1": {
Line 952: Line 977:
 
                         "Type": "other",
 
                         "Type": "other",
 
                         "LastKnownIP": "10.10.10.97",
 
                         "LastKnownIP": "10.10.10.97",
                         "Active": "false",
+
                         "Active": "true",
 
                         "UseAsPresence": "true",
 
                         "UseAsPresence": "true",
 
                         "Wait": "6",
 
                         "Wait": "6",
Line 974: Line 999:
 
  {
 
  {
 
         "CommandType": "DynamicClientLeft",
 
         "CommandType": "DynamicClientLeft",
        "Action": "update",
 
 
         "Clients": {
 
         "Clients": {
 
                 "1": {
 
                 "1": {
Line 1,005: Line 1,029:
 
  {
 
  {
 
         "CommandType": "DynamicClientUpdated",
 
         "CommandType": "DynamicClientUpdated",
        "Action": "update",
 
 
         "Clients": {
 
         "Clients": {
 
                 "1": {
 
                 "1": {
Line 1,048: Line 1,071:
 
   
 
   
 
  {
 
  {
  "CommandType":"DynamicAllClientsRemoved",
+
  "CommandType":"DynamicAllClientsRemoved"
"Action":"removeAll"
+
 
  }
 
  }
  
Line 1,056: Line 1,078:
 
  {
 
  {
 
         "CommandType": "DynamicSceneAdded",
 
         "CommandType": "DynamicSceneAdded",
        "Action": "add",
 
 
         "Scenes": {
 
         "Scenes": {
 
                 "1": {
 
                 "1": {
Line 1,063: Line 1,084:
 
                         "Name": "Scene1022",
 
                         "Name": "Scene1022",
 
                         "LastActiveEpoch": "251176214925585",
 
                         "LastActiveEpoch": "251176214925585",
 +
                        "VoiceCompatible":"true",
 
                         "SceneEntryList": [{
 
                         "SceneEntryList": [{
 
                                 "ID": "1",
 
                                 "ID": "1",
Line 1,082: Line 1,104:
 
  {
 
  {
 
         "CommandType": "DynamicSceneUpdated",
 
         "CommandType": "DynamicSceneUpdated",
        "Action": "update",
 
 
         "Scenes": {
 
         "Scenes": {
 
                 "1": {
 
                 "1": {
Line 1,089: Line 1,110:
 
                         "Name": "Scene1022",
 
                         "Name": "Scene1022",
 
                         "LastActiveEpoch": "251176214925585",
 
                         "LastActiveEpoch": "251176214925585",
 +
                        "VoiceCompatible":"true",
 
                         "SceneEntryList": [{
 
                         "SceneEntryList": [{
 
                                 "ID": "1",
 
                                 "ID": "1",
Line 1,132: Line 1,154:
  
 
  {
 
  {
         "CommandType": "DynamicAllScenesRemoved",
+
         "CommandType": "DynamicAllScenesRemoved"
        "Action": "removeAll"
+
 
  }
 
  }

Latest revision as of 14:52, 1 April 2019

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.

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"
}