Object logic management
The Rightech IoT Cloud platform has the ability to set flexible logic for the behavior of an object in the system. The logic is specified in the notation of finite state machines in the graphical interface of the platform.
The main operations that can be reproduced with automation scripts using the API include:
- Getting a list of automation scripts.
- Getting information about one automation script.
- Creating a new automation script.
- Automation script editing.
- Deleting an automation script.
- Creating a new logic container.
- Deleting a logic container.
- Getting a list of object logic containers.
- Running an automation script in a container.
- Stopping logic execution in a container.
- Sending an event to a container.
Getting a list of automation scripts
A list of predefined automation scripts available to the user can be obtained through the request GET /api/v1/automatons
. The response from the webserver will give an array of scripts in json format.
Request
GET /api/v1/automatons HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
Response
HTTP/1.1 200 OK
[
{
"_id": "5d8a4f2fd0025e0012fbdbf2",
"name": "Automat 01",
"models": [
"5d8a3319d0025e0012fba0fa"
],
"model": "5d8a3319d0025e0012fba0fa"
},
{
"_id": "5d8a4f6cd0025e0012fbdc75",
"name": "Automat 02",
"models": [
"5d8a1ef2d0025e0012fb76c6"
],
"model": "5d8a1ef2d0025e0012fb76c6"
}
]
Getting information about one automation script
In order to obtain information about one script, it is necessary to specify its identification number assigned by the system. The response from the server will give the configuration of the entity and the result of the execution of the request.
Request
GET /api/v1/automatons/:id HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
Response
HTTP/1.1 200 OK
{
"_id": "5d8a4f6cd0025e0012fbdc75",
"name": "Automat 02",
"models": [
"5d8a1ef2d0025e0012fb76c6"
],
"model": "5d8a1ef2d0025e0012fb76c6",
"success": true
}
Creating a new automation script
To create a new automation script in the request body, you must specify all the fields and their values, which are mandatory for any script. In response from the server, the generated configuration of the automation script, and the result of the request will be received.
Request
POST /api/v1/automatons HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
BODY
Response
HTTP/1.1 200 OK
BODY
Automation script editing
Using the platform API, some fields of scripts can be changed and edited, for example, such as the name, description, model, etc. To add new states and build transitions between them, it is better to use the graphical interface of the platform.
Request
PATCH /api/v1/automatons/:id HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
{
"description": "new description"
}
Response
HTTP/1.1 200 OK
{
"_id": "5d8a4f6cd0025e0012fbdc75",
"name": "Automat 02",
"models": [
"5d8a1ef2d0025e0012fb76c6"
],
"model": "5d8a1ef2d0025e0012fb76c6",
"data": "{"states":{"0":{"data":{"id":"0","type":"init","width":20,"height":20},"position":{"left":80,"top":100}},"1":{"data":{"id":"1","type":"final","width":20,"height":20},"position":{"left":120,"top":440}},"2":{"data":{"id":"2","name":"New condition","description":"","onenter":[],"onexit":[],"type":"state","width":280,"height":180},"position":{"left":400,"top":220}}},"transitions":{"0":{"version":3,"data":{"id":"0","name":"Logic initialization","description":"Event that occurs when the logic model interpretation is started","event":"init","owner":{"id":"0","point":{"location":"right","id":0}},"target":{"id":"2","point":{"location":"top","id":1}}},"block":{"key":"cb-0","data":{"connectionKey":"0","type":"connectionBlock"},"layout":{"height":6,"width":11,"position":{"x":16,"y":2}}},"drawMode":"rou","points":[{"x":140,"y":100},{"x":420,"y":100},{"x":420,"y":200}]},"1":{"version":3,"data":{"id":"1","event":null,"owner":{"id":"2","point":{"location":"left","id":1}},"target":{"id":"1","point":{"location":"top","id":0}}},"block":{"key":"cb-1","data":{"connectionKey":"1","type":"connectionBlock"},"layout":{"height":3,"width":8,"position":{"x":2,"y":11}}},"drawMode":"rou","points":[{"x":380,"y":240},{"x":120,"y":240},{"x":120,"y":420}]}}}",
"owner": "5d8a18d5d0025e0012fb6a34",
"group": "5d8a18d4d0025e0012fb6a31",
"time": 1569345388888,
"_at": 1569513576483,
"description": "new description",
"success": true
}
Deleting an automation script
To delete the script, you must send an HTTP request DELETE /api/v1/objects/:id
с with its identifier. The response will receive the configuration of the automation script and the result of the request.
Request
DELETE /api/v1/automatons/:id HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
Response
HTTP/1.1 200 OK
{
"_id": "5d8a52f6d0025e0012fbe47c",
"name": "Scenario 03",
"description": "Automation scenario for microcontroller",
"target": "5d8a25c1d0025e0012fb84b3",
"model": "5d8a1ef2d0025e0012fb76c6",
"owner": "5d8a18d5d0025e0012fb6a34",
"group": "5d8a18d4d0025e0012fb6a31",
"time": 1569346294975,
"_at": 1569346568864,
"data": {
... /* machine automation */
},
"success": true
}
Creating a new logic container
After deciding whether to run the logic script on a separate object, you must first create a new container. A container is an isolated environment necessary for interpreting a particular script.
Parameter | Type | Description |
---|---|---|
id | ObjectId | Object ID is required |
container_id | string | The container identifier is optional, will be generated if it is missing |
Request
POST /api/v1/objects/:id/containers/:container_id HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
Response
HTTP/1.1 200 OK
{
"container" : "NEW_CONTAINER_ID"
"success" : true
}
Deleting a logic container
To delete a previously created container, you must send a request:
Parameter | Type | Description |
---|---|---|
id | ObjectId | Object ID is required |
container_id | string | Object ID is required |
Request
DELETE /api/v1/objects/:id/containers/:container_id HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
Response
HTTP/1.1 200 OK
{
"success": true
}
Getting a list of object logic containers
Any time, it is possible to request a list of containers launched for an object with an indication of the execution status.
Request
GET /api/v1/objects/:id/containers HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
Response
HTTP/1.1 200 OK
{
"object_id": {
"container-1": true,
"container-2": false,
"container-3": true,
},
"success": true
}
Running an automation script in a container
After selecting an automation script and creating a container for it, it becomes possible to run the script directly. It should be kept in mind that when forming a request in its body, you must specify the identification number of the script generated by the system.
Parameter | Type | Description |
---|---|---|
id | ObjectId | Object ID is required |
container_id | string | Object ID is required |
automaton | ObjectId | Automation script ID is required |
Request
POST /api/v1/objects/:id/containers/:container_id/start HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
{
"automaton": "58238a935baa56173b24f0e4",
}
Response
HTTP/1.1 200 OK
{
"success": true
}
Stopping logic execution in a container
Script execution is stopped using a request
POST /api/v1/objects/:id/containers/:container_id/stop
In this case, the container in which the logic was previously launched remains.
Parameter | Type | Description |
---|---|---|
id | ObjectId | Object ID is required |
container_id | string | Container ID is required |
Request
POST /api/v1/objects/:id/containers/:container_id/stop HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
Response
HTTP/1.1 200 OK
{
"success": true
}
Sending an event to a container
An event can be sent to the logic container manually by sending the event identifier specified in the script in the request body. Sending the event for all containers of the object is carried out through the requestPOST /api/v1/objects/:id/emit
. Prefixes containers/:container_id
are added when sending an event for a specific container.
Parameter | Type | Request |
---|---|---|
id | ObjectId | Object ID is required |
container_id | string | Container ID is optional |
event | string | Event ID is required |
Request
POST /api/v1/objects/:id/containers/:container_id/emit HTTP/1.1
Content-Type: application/json
Autorizatoin: Bearer {token}
{
"event": "custom-user-event",
}
Response
HTTP/1.1 200 OK
{
"success": true
}