You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

499 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

![Logo](admin/simple-api.png)
yunkong2 simple-api adapter
=================
[![NPM version](http://img.shields.io/npm/v/yunkong2.simple-api.svg)](https://www.npmjs.com/package/yunkong2.simple-api)
[![Downloads](https://img.shields.io/npm/dm/yunkong2.simple-api.svg)](https://www.npmjs.com/package/yunkong2.simple-api)
[![Tests](https://travis-ci.org/yunkong2/yunkong2.simple-api.svg?branch=master)](https://travis-ci.org/yunkong2/yunkong2.simple-api)
[![NPM](https://nodei.co/npm/yunkong2.simple-api.png?downloads=true)](https://nodei.co/npm/yunkong2.simple-api/)
This is RESTFul interface to read the objects and states from yunkong2 and to write/control the states over HTTP Get/Post requests.
## Usage
Call in browser ```http://ipaddress:8087/help``` to get the help about API. The result is:
```
{
"getPlainValue": "http://ipaddress:8087/getPlainValue/stateID",
"get": "http://ipaddress:8087/get/stateID/?prettyPrint",
"getBulk": "http://ipaddress:8087/getBulk/stateID1,stateID2/?prettyPrint",
"set": "http://ipaddress:8087/set/stateID?value=1&prettyPrint",
"toggle": "http://ipaddress:8087/toggle/stateID&prettyPrint",
"setBulk": "http://ipaddress:8087/setBulk?stateID1=0.7&stateID2=0&prettyPrint",
"objects": "http://ipaddress:8087/objects?pattern=system.adapter.admin.0*&prettyPrint",
"objects": "http://ipaddress:8087/objects?pattern=system.adapter.admin.0*&type=adapter&prettyPrint",
"states": "http://ipaddress:8087/states?pattern=system.adapter.admin.0*&prettyPrint"
}
```
### getPlainValue
Call e.g.:
```
http://ipaddress:8087/getPlainValue/system.adapter.admin.0.alive
```
Result:
```
true
```
### get
Call e.g.:
```
http://ipaddress:8087/get/system.adapter.admin.0.alive
```
Result:
```
{"val":true,"ack":true,"ts":1442432193,"from":"system.adapter.admin.0","lc":1442431190,"expire":23437,"_id":"system.adapter.admin.0.alive","type":"state","common":{"name":"admin.0.alive","type":"boolean","role":"indicator.state"},"native":{}}
```
or call e.g.:
```
http://ipaddress:8087/get/system.adapter.admin.0.alive?prettyPrint
```
Result:
```
{
"val": true,
"ack": true,
"ts": 1442432238,
"from": "system.adapter.admin.0",
"lc": 1442431190,
"expire": 28494,
"_id": "system.adapter.admin.0.alive",
"type": "state",
"common": {
"name": "admin.0.alive",
"type": "boolean",
"role": "indicator.state"
},
"native": {}
}
```
### getBulk
get many states with one request, returned as object with ID as key and val/ts as subobject
### set
Call e.g.:
```
http://ipaddress:8087/set/javascript.0.test?value=1
```
Result:
```
{"id":"javascript.0.test","value":1}
```
or call e.g.:
```
http://ipaddress:8087/set/javascript.0.test?value=1&prettyPrint
```
Result:
```
{
"id": "javascript.0.test",
"value": 1
}
```
Of course the data point *javascript.0.test* must exist.
### toggle
toggles value:
- boolean: true => false, false => true
- number without limits: x => 100-x
- number with limits: x => max - (x - min)
### setBulk
Set many states with one request. This request supports POST method too, for POST data should be in body and not URL.
### setValueFromBody
Allows to set the value of a given State be set by the POST body content.
### objects
### states
### help
Gives [this](#usage) output back
## Install
```node yunkong2.js add simple-api```
## Usage
Assume, we have no security and the server runs on default port 8087.
For all queries the name or id of the state can be specified.
For every requiest that returns JSON you can set parameter *prettyPrint* to get the output in human readable form.
If authentication is enabled, two other fields are mandatory: <pre>?user=admin&pass=yunkong2</pre>
### getPlainValue
Read state value as text. You can specify more ids divided by semicolon
<pre>http://ip:8087/getPlainValue/admin.0.memHeapTotal</pre>
<pre>
31.19
</pre>
<pre>http://ip:8087/getPlainValue/admin.0.memHeapTotal, admin.0.memHeapUsed</pre>
<pre>
31.19
17.52
</pre>
### get
Read state and object data of state as json. You can specify more ids divided by semicolon.
If more than one ID requested, the JSON array will be returned.
<pre>http://localhost:8087/get/admin.0.memHeapTotal/?prettyPrint</pre>
<pre>
{
"val": 31.19,
"ack": true,
"ts": 1423154619,
"from": "system.adapter.admin.0",
"lc": 1423153989,
"_id": "system.adapter.admin.0.memHeapTotal",
"type": "state",
"common": {
"name": "admin.0.memHeapTotal",
"type": "number",
"role": "indicator.state",
"unit": "MB",
"history": {
"enabled": true,
"changesOnly": true,
"minLength": 480,
"maxLength": 960,
"retention": 604800,
"debounce": 10000
}
},
"native": {}
}
</pre>
<pre>http://ip:8087/get/admin.0.memHeapTotal,admin.0.memHeapUsed/?prettyPrint</pre>
<pre>
[
{
"val": 31.19,
"ack": true,
"ts": 1423154544,
"from": "system.adapter.admin.0",
"lc": 1423153989,
"_id": "system.adapter.admin.0.memHeapTotal",
"type": "state",
"common": {
"name": "admin.0.memHeapTotal",
"type": "number",
"role": "indicator.state",
"unit": "MB",
"history": {
"enabled": true,
"changesOnly": true,
"minLength": 480,
"maxLength": 960,
"retention": 604800,
"debounce": 10000
}
},
"native": {}
},
{
"val": 16.25,
"ack": true,
"ts": 1423154544,
"from": "system.adapter.admin.0",
"lc": 1423154544,
"_id": "system.adapter.admin.0.memHeapUsed",
"type": "state",
"common": {
"name": "admin.0.memHeapUsed",
"type": "number",
"role": "indicator.state",
"unit": "MB",
"history": {
"enabled": true,
"changesOnly": true,
"minLength": 480,
"maxLength": 960,
"retention": 604800,
"debounce": 10000
}
},
"native": {}
}
]
</pre>
### getBulk
Read the states of more IDs with timestamp. You can specify more ids divided by semicolon.
Always the JSON array will be returned.
<pre>http://ip:8087/getBulk/admin.0.memHeapTotal,admin.0.memHeapUsed/?prettyPrint</pre>
<pre>
{
"admin.0.memHeapTotal": {
"val": 31.19,
"ts": 1423154754
},
"admin.0.memHeapUsed": {
"val": 15.6,
"ts": 1423154754
}
}
</pre>
### set
Write the states with specified IDs. You can specifiy *wait* option in milliseconds to wait for answer from driver.
<pre>http://ip:8087/set/hm-rpc.0.IEQ12345.LEVEL?value=1&prettyPrint</pre>
<pre>{
"id": "hm-rpc.0.IEQ12345.LEVEL",
"value": 1
}
</pre>
<pre>http://ip:8087/set/hm-rpc.0.IEQ12345.LEVEL?value=1&wait=5000&prettyPrint</pre>
<pre>{
"val": 1,
"ack": true,
"ts": 1423155399,
"from": "hm-rpc.0.IEQ12345.LEVEL",
"lc": 1423155399
}
</pre>
If no answer will be recieved in specified time, the *null* value will be returned.
In the first case the answer will be returned immediately and *ack* is false. In the second case *ack* is true. That means it was response from driver.
### setBulk
- write bulk of IDs in one request.
<pre>http://ip:8087/setBulk?hm-rpc.0.FEQ1234567:1.LEVEL=0.7&Anwesenheit=0&prettyPrint</pre>
<pre>
[
{
"id": "hm-rpc.0.FEQ1234567:1.LEVEL",
"val": "0.7"
},
{
"error": "error: datapoint \"Anwesenheit\" not found"
}
]
</pre>
You can send this request as POST too.
### objects
Get the list of all objects for pattern. If no pattern specified all objects as JSON array will be returned.
<pre>http://ip:8087/objects?prettyPrint</pre>
<pre>
{
"system.adapter.admin.0.uptime": {
"_id": "system.adapter.admin.0.uptime",
"type": "state",
"common": {
"name": "admin.0.uptime",
"type": "number",
"role": "indicator.state",
"unit": "seconds"
},
"native": {}
},
"system.adapter.admin.0.memRss": {
"_id": "system.adapter.admin.0.memRss",
"type": "state",
"common": {
"name": "admin.0.memRss",
"desc": "Resident set size",
"type": "number",
"role": "indicator.state",
"unit": "MB",
"history": {
"enabled": true,
"changesOnly": true,
"minLength": 480,
"maxLength": 960,
"retention": 604800,
"debounce": 10000
}
},
"native": {}
},
...
</pre>
Get all control objects of adapter system.adapter.admin.0:
<pre>http://ip:8087/objects?pattern=system.adapter.admin.0*&prettyPrint</pre>
<pre>
{
"system.adapter.admin.0.uptime": {
"_id": "system.adapter.admin.0.uptime",
"type": "state",
"common": {
"name": "admin.0.uptime",
"type": "number",
"role": "indicator.state",
"unit": "seconds"
},
"native": {}
},
...
</pre>
### states
Get the list of all states for pattern. If no pattern specified all states as JSON array will be returned.
<pre>http://ip:8087/states?prettyPrint</pre>
<pre>
{
"system.adapter.admin.0.uptime": {
"val": 32176,
"ack": true,
"ts": 1423156164,
"from": "system.adapter.admin.0",
"lc": 1423156164
},
"system.adapter.admin.0.memRss": {
"val": 41.14,
"ack": true,
"ts": 1423156164,
"from": "system.adapter.admin.0",
"lc": 1423156119
},
"system.adapter.admin.0.memHeapTotal": {
"val": 31.19,
"ack": true,
"ts": 1423156164,
"from": "system.adapter.admin.0",
"lc": 1423155084
},
...
</pre>
Get all control objects of adapter system.adapter.admin.0:
<pre>http://ip:8087/states?pattern=system.adapter.admin.0*&prettyPrint</pre>
<pre>
{
"system.adapter.admin.0.uptime": {
"val": 32161,
"ack": true,
"ts": 1423156149,
"from": "system.adapter.admin.0",
"lc": 1423156149
},
"system.adapter.admin.0.memRss": {
"val": 41.14,
"ack": true,
"ts": 1423156149,
"from": "system.adapter.admin.0",
"lc": 1423156119
},
"system.adapter.admin.0.memHeapTotal": {
"val": 31.19,
"ack": true,
"ts": 1423156149,
"from": "system.adapter.admin.0",
"lc": 1423155084
},
"system.adapter.admin.0.memHeapUsed": {
"val": 19.07,
"ack": true,
"ts": 1423156149,
"from": "system.adapter.admin.0",
"lc": 1423156149
},
"system.adapter.admin.0.connected": {
"val": true,
"ack": true,
"ts": 1423156149,
"from": "system.adapter.admin.0",
"lc": 1423128324,
"expire": 28100
},
"system.adapter.admin.0.alive": {
"val": true,
"ack": true,
"ts": 1423156149,
"from": "system.adapter.admin.0",
"lc": 1423128324,
"expire": 28115
}
}
</pre>
## Changelog
### 2.0.0 (2018-06-29)
* (Giermann) BREAKING CHANGE: getBulk is returning data in a different structure
### 1.6.3 (2018-04-15)
* (Apollon77) Return used character encoding (UTF-8)
### 1.6.2 (2017-11-27)
* (Apollon77) Fix decoding problems
### 1.6.1 (2017-09-25)
* (Apollon77) Fix statuscode for setBulk and optimize permission errors
### 1.6.0 (2017-07-10)
* (Apollon77) Fix handling of URL-encoded values, they are now decoded properly
* (Apollon77) Optimize Permission handling
* (Apollon77) add possibility to only allow access to states where user is also owner, finally works correct with js-controller 1.1.1!
### 1.5.0 (2017-03-10)
* (greyhound) Add new POST method setValueFromBody
### 1.4.0 (2017-01-05)
* (bluefox) new web server plugin support
### 1.3.0 (2016-08-30)
* (bluefox) сompatible only with new admin
### 1.2.0 (2016-08-27)
* (bluefox) support of letsencrypt certificates
### 1.1.1 (2016-07-06)
* (bluefox) support of chained certificates
### 1.1.0 (2016-02-09)
* (bluefox) fix toggle, objects, states, setBulk, POST
* (bluefox) add tests
### 1.0.0 (2015-09-30)
* (bluefox) stop adapter before update
### 0.1.2 (2015-06-28)
* (bluefox) add description in readme.md
* (bluefox) change "toggle" for boolean and numbers
### 0.1.1 (2015-06-28)
* (bluefox) change setForeignState api
* (bluefox) add type to io-package.json
* (bluefox) enable run from "web"
* (bluefox) add default user
### 0.1.0 (2015-06-10)
* (bluefox) change setForeignState api
* (bluefox) support of user permissions
### 0.0.4 (2015-03-11)
* (bluefox) remove socket.io from file
### 0.0.3 (2015-02-13)
* (bluefox) remove socket.io from dependencies
### 0.0.2 (2015-02-12)
* (bluefox) enable be a part of "web"
### 0.0.1 (2015-02-06)
* (bluefox) initial commit