Web API
When micro-ebusd is running, it extends the HTTP server with micro-ebusd specific endpoints.
For the time being, it adds the endpoints desribed below.
GET /api/v1/ebus/list or /api/v1/ebus[/:circuit]/:name/list
Lists available messages.
The result is similar to the MQTT message list payload with “circuit” and “name” as optional search criteria.
Here is an example:
curl -s 'http://ebus-adapter/api/v1/ebus/datetime/list'|jq .
may reveal this (shortened, depends on the actual heating):
{
"name": "datetime",
"messages": [
{
"f": 0,
"e": 1,
"h": 62343,
"fields": 3,
"master": 3,
"name": "Datetime",
"write": false,
"passive": true
},
{
"f": 3,
"e": 86,
"h": 60369,
"fields": 4,
"master": 0,
"name": "DateTime",
"write": false,
"passive": false
}
]
}
GET /api/v1/ebus[/:circuit]/:name/get
Returns message details and optionally requests the message from eBUS (with query “from=0” from cache only, with “from=1” from cache or eBUS, and with “from=2” forced from eBUS).
Here is an example:
curl -s 'http://ebus-adapter/api/v1/ebus/datetime/get?from=0'|jq .
may reveal this (shortened, depends on the actual heating):
{
"name": "datetime",
"from": 0,
"circuit": "broadcast",
"write": false,
"passive": true,
"id": [7, 0],
"level": 0,
"master": 3,
"cnt": 3,
"fields": [
{
"name": "outsidetemp",
"type": "D2B",
"required": false,
"min": -127.99609375,
"max": 127.99609375,
"step": 0.00390625,
"unit": "°C",
"result": "number"
},
{
"name": "time",
"type": "BTI",
"required": false,
"pattern": "^[012][0-9]:[0-5][0-9]:[0-5][0-9]$",
"result": "time"
},
{
"name": "date",
"type": "BDA",
"required": false,
"pattern": "^[0-3][0-9].[01][0-9].20[0-3][0-9]$",
"result": "date"
}
],
"cached": 46,
"data": {
"fields": {
"outsidetemp": -9,
"time": "19:01:01",
"date": "04.01.2026"
},
"qq": 16,
"snd": "00f701011904010626",
"rcv": ""
}
}
PUT /api/v1/ebus[/:circuit]/:name/get
Sends a message to eBUS with optional input (with query “from=0” from cache only, with “from=1” from cache or eBUS, and with “from=2” forced from eBUS).
Here is an example:
curl -s -X PUT -d '{"zz":80}' 'http://ebus-adapter/api/v1/ebus/broadcast/id/get?from=1'|jq .
may reveal this (shortened, depends on the actual heating):
{
"zz": 80,
"circuit": "broadcast",
"name": "id",
"from": 1,
"write": false,
"passive": false,
"id": [7, 4],
"level": 0,
"master": 0,
"cnt": 4,
"fields": [
{
"name": "mf",
"type": "UCH",
"required": false,
"values": [
"Wolf",
"Theben",
"Thermowatt",
"Vaillant",
"Weishaupt",
"ebusd"
],
"result": "string"
},
{
"name": "id",
"type": "STR",
"required": false,
"result": "string"
},
{
"name": "sw",
"type": "PIN",
"required": false,
"min": 0,
"max": 39321,
"step": 1,
"result": "number"
},
{
"name": "hw",
"type": "PIN",
"required": false,
"min": 0,
"max": 39321,
"step": 1,
"result": "number"
}
],
"cached": 39,
"data": {
"fields": {
"mf": "Vaillant",
"id": "EHP00",
"sw": 327,
"hw": 7201
},
"qq": 247,
"snd": "",
"rcv": "b5454850303003277201"
}
}
For additional input fields, use the “fields” object in the input with field name/value as key/value pair, e.g.
curl -s -X PUT -d '{"fields":{"value":40}}' 'http://ebus-adapter/api/v1/ebus/mc/flowtempmap/get?from=2'|jq .
may reveal this (shortened, depends on the actual heating):
{
"name": "FlowTempMax",
"write": true,
"passive": false,
"id": [181, 9, 14, 49, 0],
"level": 0,
"master": 1,
"cnt": 1,
"fields": [
{
"name": "value",
"type": "UCH",
"required": false,
"min": 0,
"max": 254,
"step": 1,
"unit": "°C",
"result": "number"
}
],
"data": {
"fields": {
"value": 40
},
"qq": 247,
"snd": "28",
"rcv": ""
}
}
PUT /api/v1/ebus[/:circuit]/:name/set
Sends a write message to eBUS.
Similar to the /get endpoint, optional input can be passed in the body using the “fields” object with field name/value as key/value pair, e.g.
curl -s -X PUT -d '{"fields":{"value":40}}' 'http://ebus-adapter/api/v1/ebus/mc/flowtempmap/set'