mirror of https://github.com/nymea/nymea.git
166 lines
5.4 KiB
Plaintext
166 lines
5.4 KiB
Plaintext
/*!
|
|
\page jsonrpc.html
|
|
\title JSONRPC Interface
|
|
\ingroup jsonrpc
|
|
|
|
\brief The JSON RPC interface represents a TCP socket connection using plaintext string communication.
|
|
|
|
\section1 Description
|
|
|
|
The JSON RPC interface represents a TCP socket connection using plaintext string communication.
|
|
Messages are exchanged using the JSON format. Please note that this is not a REST API as the
|
|
transport channel is not based on HTTP. It is an internal RPC mechanism to allow communication
|
|
between the guh Server and the main controller interface. This communication socket is not meant
|
|
to be exported to the outside of the of the systen as it allows arbitrary commands to manipulate
|
|
the system. A more limited REST API implementation might be added in the main controller interface.
|
|
|
|
The JSON message protocol communicates by exchanging JSON Objects with the following properties:
|
|
\list
|
|
\li \code "id": integer \endcode
|
|
The id should be a unique identifier for the message. Any server response will contain the
|
|
same id allowing to match responses to requests/commands. This parameter is mandatory.
|
|
\li \code "method": string \endcode
|
|
The method field holds the method to be executed. Methods are grouped into namespaces. The
|
|
method string consists of two parts, the namespace and the method name, separated by a dot.
|
|
This parameter is mandatory.
|
|
(Example: \c"JSONRPC.Introspect")
|
|
\li \code "params": object \endcode
|
|
The params contains any JSON object. This parameter is optional and differs according to
|
|
the requested method.
|
|
\endlist
|
|
|
|
The JSONRPC API is self documenting and can be introspected by calling \c"JSONRPC.Introspect".
|
|
|
|
Parameters are optional if the type is the type is prefixed with "o:" for optional.
|
|
|
|
\section1 Communicating with the server
|
|
The server listens on TCP port 1234 for incoming TCP connections. It will respond to incoming
|
|
connections with a some information about the server. Telnet can be used to issue commands for
|
|
testing.
|
|
|
|
An example how to communicate with the API using telnet on the same host where the guh server
|
|
is running:
|
|
\code
|
|
$ telnet localhost 1234
|
|
Trying 127.0.0.1...
|
|
Connected to localhost.
|
|
Escape character is '^]'.
|
|
{
|
|
"id":0,
|
|
"status": "connected",
|
|
"server":"Guh JSONRPC Interface",
|
|
"version":"0.0.0"
|
|
}
|
|
\endcode
|
|
Now the connection is established and waits for commands.
|
|
|
|
|
|
\section1 Examples
|
|
|
|
\section2 Introspect API
|
|
\section3 Request
|
|
\code
|
|
{
|
|
"id": 1,
|
|
"method":"JSONRPC.Introspect"
|
|
}
|
|
\endcode
|
|
\section3 Response
|
|
\code
|
|
{
|
|
"id": 1,
|
|
"params": {
|
|
"methods": {
|
|
...
|
|
"Devices.GetSupportedDevices": {
|
|
"description": "Returns a list of supported Device classes.",
|
|
"params": {
|
|
},
|
|
"returns": {
|
|
"deviceClasses": [
|
|
"$ref:DeviceClass"
|
|
]
|
|
}
|
|
},
|
|
...
|
|
},
|
|
"types": {
|
|
...
|
|
"DeviceClass": {
|
|
"actions": [
|
|
"$ref:ActionType"
|
|
],
|
|
"id": "uuid",
|
|
"name": "string",
|
|
"params": [
|
|
"$ref:ParamType"
|
|
],
|
|
"states": [
|
|
"$ref:StateType"
|
|
],
|
|
"events": [
|
|
"$ref:EventType"
|
|
]
|
|
},
|
|
...
|
|
}
|
|
},
|
|
"status": "success"
|
|
}
|
|
\endcode
|
|
|
|
\section2 Getting a list of supported devices
|
|
\section3 Request
|
|
\code
|
|
{
|
|
"id":1,
|
|
"method":"Devices.GetSupportedDevices"
|
|
}
|
|
\endcode
|
|
|
|
|
|
\section3 Response:
|
|
\code {
|
|
"id": 1,
|
|
"params": {
|
|
"deviceClasses": [
|
|
{
|
|
"actions": [
|
|
],
|
|
"id": "{bd216356-f1ec-4324-9785-6982d2174e17}",
|
|
"name": "WiFi Device",
|
|
"params": [
|
|
{
|
|
"name": "mac",
|
|
"type": "string"
|
|
}
|
|
],
|
|
"states": [
|
|
{
|
|
"id": "{cb43e1b5-4f61-4538-bfa2-c33055c542cf}",
|
|
"name": "inRange",
|
|
"type": "bool"
|
|
}
|
|
],
|
|
"events": [
|
|
{
|
|
"id": "{7cae711a-a0af-41b4-b3bf-38d3e23b41ba}",
|
|
"name": "inRange",
|
|
"params": [
|
|
{
|
|
"name": "inRange",
|
|
"type": "bool"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
...
|
|
]
|
|
}
|
|
"status": "success"
|
|
}
|
|
\endcode
|
|
|
|
*/
|