bdsd.sock
Version:
Bobaos Datapoint Sdk Unix Domain Socket
154 lines (84 loc) • 4.34 kB
Markdown
# Bobaos Datapoint Sdk Message protocol specification
1. Frame format.
All communication should be enveloped in following frame format:
```
|B|D|S|M|<LB>|<LE>|<DATA>|<C>|
```
Where \<L\> is two byte field in BE that contains length of \<DATA\>, \<C\> is checksum of \<DATA\> (sum of all bytes modulo 256). BDSM(Bobaos Datapoint Sdk Message) is a string header of message.
# \<DATA\> field description
Field \<DATA\> is stringified JSON object which shoud match next format in case of Client => Host communication:
```
{
request_id: Number,
method: String,
payload: Object // optional
}
```
## Fields explanation
### `request_id`
field should be unique at the moment of sending and it is responsibility of client to process this value. Server sends responses with this value in response_id field back to client.
### `method` field.
#### `get datapoints`
Get all configured datapoint descriptions.
Request:
```{"request_id":18052831966,"method":"get datapoints"}```
Response:
```{"response_id":18052831966,"method":"get datapoints","payload":[{"id":1,"length":1,"flags":{"priority":"low","communication":true,"read":false,"write":true,"readOnInit":false,"transmit":true,"update":false},"dpt":"dpt1"},{"id":2,"length":1,"...}]}```
#### `get description`
Get description for datapoint with specified id.
Request:
```{"request_id":145663188249,"method":"get description","payload":{"id":31}}```
Response:
```{"response_id":145663188249,"method":"get description","payload":{"id":31,"value":{"id":31,"dpt":"dpt5","flags":{"priority":"low","communication":true,"read":false,"write":true,"readOnInit":false,"transmit":true,"update":false},"length":1}},"success":true}```
#### `get value`
Get datapoint value.
Request:
```{"request_id":65362052157,"method":"get value","payload":{"id":31}}```
Response:
```{"response_id":65362052157,"method":"get value","payload":{"id":31,"value":74},"success":true}```
#### `read value`
Send read request to KNX bus.
Request:
```{"request_id":611387384802,"method":"read value","payload":{"id":31}}```
Response:
```{"response_id":611387384802,"method":"read value","payload":{"id":31},"success":true}```
#### `set value`
Set datapoint value and send to KNX bus.
Request:
```{"request_id":839768583900,"method":"set value","payload":{"id":31,"value":5}}```
Response:
```{"response_id":839768583900,"method":"set value","payload":{"id":31},"success":true}```
#### `programming mode`
Set programming mode. As if you press PROG button.
Request:
```{"request_id":1366287859749,"method":"programming mode","payload":{"value":1}}```
Response:
```{"response_id":1366287859749,"method":"programming mode","success":true}```
#### `get stored value`
Get datapoint value.
Request:
```{"request_id":65362052157,"method":"get stored value","payload":{"id":31}}```
Response:
```{"response_id":65362052157,"method":"get stored value","payload":{"id":31,"value":74},"success":true}```
### `read multiple`
Read multiple datapoints.
Request: ```{"request_id":175279505890,"method":"read multiple","payload":[1,105,106,107,108]}```
Response: ```{"response_id":175279505890,"method":"read multiple","payload":[1,105,106,107,108],"success":true}```
### `set multiple`
Set multiple datapoints
Request: ```{"request_id":1526404778316,"method":"set multiple","payload":[{"id":2,"value":false},{"id":999,"value":"hello, drug"}]}```
Response: ```{"response_id":1526404778316,"method":"set multiple","payload":[{"id":2,"value":false},{"id":999,"value":"hello, drug"}],"success":true}```
## Broadcasting value.
When datapoint value changes on bus, socket broadcasts following data to all connected clients:
```
{"method":"cast value","payload":{"id":12,"value":22.92}}
```
## Notify
When Client connects to socket, initial notification sends from Host to Client indicating connectino status:
```{"method":"notify","payload":"bus connected"}```
## Error handling
In case of error Host sends to Client data with "success" field set to false and error message in "error" field.
Request:
```{"request_id":289551154644,"method":"set value","payload":{"id":31,"value":257}}```
Response:
```{"response_id":289551154644,"method":"set value","success":false,"error":"Value out of range (expected 0-255, got 257)"}```