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'