ABB/Busch-Jäger free@home - official REST api

No idea if I did it right, but I gave it everything I had :slight_smile:

https://github.com/openhab/openhab-addons/pull/18568

Hi,
Sorry for my stupid question :wink: But could you perhaps upload a compiled version of your binding as .jar ? Don’t know how to get the updates in my system :wink:

org.openhab.binding.freeathome-4.3.4-SNAPSHOT.jar.txt (100.4 KB)

@rover1982 just rename it from txt to jar.

@lsiepel could you help me understand why the DCO check failed on my PR?

If you click on the dots next to the failed DCO, you get a pop-up to view the details. That page shows information why it failed and how to fix it.

@lsiepel just to be clear, my problem is that the DCO check still fails even though I signed off on every commit.

Maybe it’s just a small typo, but I don’t see any.

second try:
https://github.com/openhab/openhab-addons/pull/18631

Dears, the binding I can use with SysAp v1 or only with SysAp v2 ?

Thank you.

Hi Sascha,

i use SysAp v1 and it runs without problems on OH 5.0.0.

Hi,

Ok thanks :+1:

I updated the SysApp to version 3.5.1-14348 two weeks ago, and everything has been running smoothly since then.

Hi @UhA, hi all,

I migrated my relatively huge installation to the new free@home binding. First of all, thanks for the great work, it looks very very good so far.

However, I observe one bug. I have window contacts at home, which shall switch to ON when the window is open. In free@hoem, this is realized via the contact type opener (öffner in German). In that configuration, the channel #switch-on-off is not delivering the state from free@home. You can see the configuration in the picture, the contact type is at the bottom.

Is anyone aware of that? Do I “simply” need to use another channel or is this a bug? In that case I would open an issue in GitHub.

1 Like

That fix came fast, THX!!

for those, who have the same problem, the channel is now detected as #window-door, which solved the issue.

Hi @UhA, all,

maybe another question. I am doing fine-tuning now. Function-wise I am totally OK; but I get a couple of thousands of warnings when starting Openhab:

2025-10-03 15:12:35.389 [WARN ] [ation.ConfigDescriptionValidatorImpl] - No config description found for URI ‘channel-type:freeathome:config’

2025-10-03 15:12:35.389 [WARN ] [ation.ConfigDescriptionValidatorImpl] - Skipping config description validation because no config description found for URI ‘channel-type:freeathome:config’

I know that they are not really problematic but what is missing here? Can I support to adjust the binding to get rid of that?

Thanks!

Hi @LuiSauberhorn

the issue shall be that the URI for the dynamically created channel is not clean.
I think the warning shall be triggered around this line.

Could you look around this code? Below you will find a link

Hi @UhA,

so far, I have no real experience in building bindings, but could it be that we do miss the /OH-INF/thing/channel-types.xml? It should be something:

<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId=“freeathome” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:thing=“https://openhab.org/schemas/thing-description/v1.0.0” xsi:schemaLocation=“https://openhab.org/schemas/thing-description/v1.0.0https://openhab.org/schemas/thing-description-1.0.0.xsd”>
<channel-type id="config">
    <item-type>String</item-type>
    <label>free@home Channel Config</label>
    <description>Per-channel configuration</description>
  </channel-type>
</thing:thing-descriptions>

Could that be the reason? Best, Lui

Thank you the heads-up regarding this issue.

This structure is built in runtime in the binding. The static files are not needed in the free@home binding. I will look into this topic on the weekend

Hi @UhA ,

i needed a new blind actuator (Busch-Jaeger Jalousieaktor) because my old is defect.
The binding find the actuator but only the firts 2 channels ?

Is there a bug in the discovery ?
Log: Blind sensor channel - Channel FID: 0x3, not implemented yet

Thy Stephan

Hi @Stephan-Prem

to find the root cause could you send me the JSON output of your new blind actuator.
by the way this actuator is the same as you had previously or a new type?

once you send me the JSON file I will look into this iusse

Hi András,

thx for your reply.

This is the code from the new actuator in OH:

UID: freeathome:device:896533xxxx:00021704xxxx
label: f@h 4x Jalousieaktor - 5
thingTypeUID: freeathome:device
configuration:
deviceId: 00021704xxxx
bridgeUID: freeathome:gateway:896533xxxx
channels:

  • id: ch0000#move-up-down
    channelTypeUID: freeathome:shuttermovement
    label: Move Up/Down
    description: (Ⓐ Büro) Moves sunblind up and down
    configuration: {}
  • id: ch0000#adjust-up-down
    channelTypeUID: freeathome:shuttermovement
    label: Adjust Up/Down
    description: (Ⓐ Büro) Stops the sunblind and to step it up/down
    configuration: {}
  • id: ch0000#set-absolute-position-blinds
    channelTypeUID: freeathome:integer
    label: Blinds Position
    description: (Ⓐ Büro) Moves the sunblinds into a specified position
    configuration: {}
  • id: ch0001#move-up-down
    channelTypeUID: freeathome:shuttermovement
    label: Move Up/Down
    description: (Ⓑ Wohnzimmer) Moves sunblind up and down
    configuration: {}
  • id: ch0001#adjust-up-down
    channelTypeUID: freeathome:shuttermovement
    label: Adjust Up/Down
    description: (Ⓑ Wohnzimmer) Stops the sunblind and to step it up/down
    configuration: {}
  • id: ch0001#set-absolute-position-blinds
    channelTypeUID: freeathome:integer
    label: Blinds Position
    description: (Ⓑ Wohnzimmer) Moves the sunblinds into a specified position
    configuration: {}

This is the code from the new actuator in f@h:

{
  "00000000-0000-0000-0000-000000000000": {
    "devices": {
      "00021704xxxx": {
        "deviceReboots": "8",
        "interface": "TP",
        "deviceId": "10xx",
        "displayName": "Blind actuator 4gang, MDRC",
        "unresponsive": false,
        "unresponsiveCounter": 0,
        "defect": false,
        "channels": {
          "ch0000": {
            "floor": "01",
            "room": "00",
            "displayName": "Büro",
            "selectedIcon": "3",
            "functionID": "1821",
            "inputs": {
              "idp0000": {
                "pairingID": 32,
                "value": ""
              },
              "idp0001": {
                "pairingID": 33,
                "value": "0"
              },
              "idp0002": {
                "pairingID": 35,
                "value": "0"
              },
              "idp0004": {
                "pairingID": 40,
                "value": ""
              },
              "idp0005": {
                "pairingID": 37,
                "value": ""
              },
              "idp0006": {
                "pairingID": 39,
                "value": ""
              },
              "idp0007": {
                "pairingID": 38,
                "value": ""
              },
              "idp0008": {
                "pairingID": 4,
                "value": ""
              },
              "idp0009": {
                "pairingID": 53,
                "value": ""
              }
            },
            "outputs": {
              "odp0000": {
                "pairingID": 288,
                "value": "0"
              },
              "odp0001": {
                "pairingID": 289,
                "value": "0"
              },
              "odp0003": {
                "pairingID": 273,
                "value": "0"
              },
              "odp0004": {
                "pairingID": 257,
                "value": "0"
              },
              "odp0005": {
                "pairingID": 417,
                "value": "0"
              }
            },
            "parameters": {
              "par0008": "15",
              "par0035": "15",
              "par0009": "2",
              "par0036": "2",
              "par0014": "1",
              "par0054": "1",
              "par005c": "1",
              "par0058": "2",
              "par005a": "3",
              "par005b": "2",
              "par0037": "60",
              "par0059": "1",
              "par00fd": "4"
            }
          },
          "ch0001": {
            "floor": "01",
            "room": "01",
            "displayName": "Wohnzimmer",
            "selectedIcon": "3",
            "functionID": "1821",
            "inputs": {
              "idp0000": {
                "pairingID": 32,
                "value": "0"
              },
              "idp0001": {
                "pairingID": 33,
                "value": ""
              },
              "idp0002": {
                "pairingID": 35,
                "value": "0"
              },
              "idp0004": {
                "pairingID": 40,
                "value": ""
              },
              "idp0005": {
                "pairingID": 37,
                "value": ""
              },
              "idp0006": {
                "pairingID": 39,
                "value": ""
              },
              "idp0007": {
                "pairingID": 38,
                "value": ""
              },
              "idp0008": {
                "pairingID": 4,
                "value": ""
              },
              "idp0009": {
                "pairingID": 53,
                "value": ""
              }
            },
            "outputs": {
              "odp0000": {
                "pairingID": 288,
                "value": "0"
              },
              "odp0001": {
                "pairingID": 289,
                "value": "0"
              },
              "odp0003": {
                "pairingID": 273,
                "value": "0"
              },
              "odp0004": {
                "pairingID": 257,
                "value": "0"
              },
              "odp0005": {
                "pairingID": 417,
                "value": "0"
              }
            },
            "parameters": {
              "par0008": "35",
              "par0035": "34",
              "par0009": "2",
              "par0036": "2",
              "par0014": "1",
              "par0054": "1",
              "par005c": "1",
              "par0058": "2",
              "par005a": "3",
              "par005b": "2",
              "par0037": "60",
              "par0059": "1",
              "par00fd": "4"
            }
          },
          "ch0002": {
            "floor": "01",
            "room": "01",
            "displayName": "Essen links",
            "selectedIcon": "3",
            "functionID": "1820",
            "inputs": {
              "idp0000": {
                "pairingID": 32,
                "value": "0"
              },
              "idp0001": {
                "pairingID": 33,
                "value": "0"
              },
              "idp0002": {
                "pairingID": 35,
                "value": "100"
              },
              "idp0003": {
                "pairingID": 36,
                "value": "53"
              },
              "idp0004": {
                "pairingID": 40,
                "value": ""
              },
              "idp0005": {
                "pairingID": 37,
                "value": ""
              },
              "idp0006": {
                "pairingID": 39,
                "value": ""
              },
              "idp0007": {
                "pairingID": 38,
                "value": ""
              },
              "idp0008": {
                "pairingID": 4,
                "value": ""
              },
              "idp0009": {
                "pairingID": 53,
                "value": ""
              }
            },
            "outputs": {
              "odp0000": {
                "pairingID": 288,
                "value": "1"
              },
              "odp0001": {
                "pairingID": 289,
                "value": "100"
              },
              "odp0002": {
                "pairingID": 290,
                "value": "53"
              },
              "odp0003": {
                "pairingID": 273,
                "value": "0"
              },
              "odp0004": {
                "pairingID": 257,
                "value": "0"
              },
              "odp0005": {
                "pairingID": 417,
                "value": "0"
              }
            },
            "parameters": {
              "par0008": "63",
              "par0035": "62",
              "par000a": "1800",
              "par0009": "2",
              "par0036": "2",
              "par000b": "2",
              "par0014": "1",
              "par0037": "30",
              "par0054": "1",
              "par005c": "1",
              "par0058": "2",
              "par0059": "2",
              "par005a": "3",
              "par005b": "2",
              "par00fd": "1"
            }
          },
          "ch0003": {
            "floor": "01",
            "room": "01",
            "displayName": "Essen mitte",
            "selectedIcon": "3",
            "functionID": "1820",
            "inputs": {
              "idp0000": {
                "pairingID": 32,
                "value": "0"
              },
              "idp0001": {
                "pairingID": 33,
                "value": "0"
              },
              "idp0002": {
                "pairingID": 35,
                "value": "100"
              },
              "idp0003": {
                "pairingID": 36,
                "value": "50"
              },
              "idp0004": {
                "pairingID": 40,
                "value": ""
              },
              "idp0005": {
                "pairingID": 37,
                "value": ""
              },
              "idp0006": {
                "pairingID": 39,
                "value": ""
              },
              "idp0007": {
                "pairingID": 38,
                "value": ""
              },
              "idp0008": {
                "pairingID": 4,
                "value": ""
              },
              "idp0009": {
                "pairingID": 53,
                "value": ""
              }
            },
            "outputs": {
              "odp0000": {
                "pairingID": 288,
                "value": "0"
              },
              "odp0001": {
                "pairingID": 289,
                "value": "0"
              },
              "odp0002": {
                "pairingID": 290,
                "value": "0"
              },
              "odp0003": {
                "pairingID": 273,
                "value": "0"
              },
              "odp0004": {
                "pairingID": 257,
                "value": "0"
              },
              "odp0005": {
                "pairingID": 417,
                "value": "0"
              }
            },
            "parameters": {
              "par0008": "62",
              "par0035": "61",
              "par000a": "1800",
              "par0009": "2",
              "par0036": "2",
              "par000b": "2",
              "par0014": "1",
              "par0037": "30",
              "par0054": "1",
              "par005c": "1",
              "par0058": "2",
              "par0059": "2",
              "par005a": "3",
              "par005b": "2",
              "par00fd": "1"
            }
          }
        },
        "parameters": {}
      }
    }
  }
}

No, this is a newer version.
The older actuator are from a previus version (all 4 channels are working by the old version):

This is the Json from the older version (workin):

{
  "00000000-0000-0000-0000-000000000000": {
    "devices": {
      "ABB29F82xxxx": {
        "interface": "TP",
        "deviceId": "B001",
        "displayName": "Blind actuator, 4gang, MDRC",
        "unresponsive": false,
        "unresponsiveCounter": 0,
        "defect": false,
        "channels": {
          "ch0000": {
            "floor": "02",
            "room": "09",
            "displayName": "Badfenster kl.",
            "selectedIcon": "03",
            "functionID": "61",
            "inputs": {
              "idp0000": {
                "pairingID": 32,
                "value": "0"
              },
              "idp0001": {
                "pairingID": 33,
                "value": "0"
              },
              "idp0002": {
                "pairingID": 35,
                "value": "100"
              },
              "idp0004": {
                "pairingID": 40,
                "value": ""
              },
              "idp0005": {
                "pairingID": 37,
                "value": ""
              },
              "idp0006": {
                "pairingID": 39,
                "value": ""
              },
              "idp0007": {
                "pairingID": 38,
                "value": ""
              },
              "idp0008": {
                "pairingID": 4,
                "value": ""
              },
              "idp0009": {
                "pairingID": 53,
                "value": ""
              }
            },
            "outputs": {
              "odp0000": {
                "pairingID": 288,
                "value": "1"
              },
              "odp0001": {
                "pairingID": 289,
                "value": "100"
              },
              "odp0003": {
                "pairingID": 273,
                "value": "0"
              },
              "odp0004": {
                "pairingID": 257,
                "value": "0"
              }
            },
            "parameters": {
              "par0008": "15",
              "par0035": "16",
              "par000a": "1400",
              "par0009": "2",
              "par0036": "2",
              "par000b": "2",
              "par0014": "4",
              "par0037": "0",
              "par0054": "1",
              "par005c": "1",
              "par0058": "2",
              "par0059": "1",
              "par005a": "3",
              "par005b": "2"
            }
          },
          "ch0001": {
            "floor": "02",
            "room": "09",
            "displayName": "Badfenster gr.",
            "selectedIcon": "3",
            "functionID": "61",
            "inputs": {
              "idp0000": {
                "pairingID": 32,
                "value": "0"
              },
              "idp0001": {
                "pairingID": 33,
                "value": "0"
              },
              "idp0002": {
                "pairingID": 35,
                "value": "0"
              },
              "idp0004": {
                "pairingID": 40,
                "value": ""
              },
              "idp0005": {
                "pairingID": 37,
                "value": ""
              },
              "idp0006": {
                "pairingID": 39,
                "value": ""
              },
              "idp0007": {
                "pairingID": 38,
                "value": ""
              },
              "idp0008": {
                "pairingID": 4,
                "value": ""
              },
              "idp0009": {
                "pairingID": 53,
                "value": ""
              }
            },
            "outputs": {
              "odp0000": {
                "pairingID": 288,
                "value": "0"
              },
              "odp0001": {
                "pairingID": 289,
                "value": "0"
              },
              "odp0003": {
                "pairingID": 273,
                "value": "0"
              },
              "odp0004": {
                "pairingID": 257,
                "value": "0"
              }
            },
            "parameters": {
              "par0008": "13",
              "par0035": "12",
              "par000a": "0",
              "par0009": "2",
              "par0036": "2",
              "par000b": "2",
              "par0014": "4",
              "par0037": "0",
              "par0054": "1",
              "par005c": "1",
              "par0058": "2",
              "par0059": "1",
              "par005a": "3",
              "par005b": "2"
            }
          },
          "ch0002": {
            "floor": "02",
            "room": "0A",
            "displayName": "Sportraumfenster",
            "selectedIcon": "3",
            "functionID": "61",
            "inputs": {
              "idp0000": {
                "pairingID": 32,
                "value": "0"
              },
              "idp0001": {
                "pairingID": 33,
                "value": "1"
              },
              "idp0002": {
                "pairingID": 35,
                "value": "0"
              },
              "idp0004": {
                "pairingID": 40,
                "value": ""
              },
              "idp0005": {
                "pairingID": 37,
                "value": ""
              },
              "idp0006": {
                "pairingID": 39,
                "value": ""
              },
              "idp0007": {
                "pairingID": 38,
                "value": ""
              },
              "idp0008": {
                "pairingID": 4,
                "value": ""
              },
              "idp0009": {
                "pairingID": 53,
                "value": ""
              }
            },
            "outputs": {
              "odp0000": {
                "pairingID": 288,
                "value": "0"
              },
              "odp0001": {
                "pairingID": 289,
                "value": "0"
              },
              "odp0003": {
                "pairingID": 273,
                "value": "0"
              },
              "odp0004": {
                "pairingID": 257,
                "value": "0"
              }
            },
            "parameters": {
              "par0008": "15",
              "par0035": "13",
              "par000a": "0",
              "par0009": "2",
              "par0036": "2",
              "par000b": "2",
              "par0014": "4",
              "par0037": "0",
              "par0054": "1",
              "par005c": "1",
              "par0058": "2",
              "par0059": "1",
              "par005a": "3",
              "par005b": "2"
            }
          },
          "ch0003": {
            "floor": "02",
            "room": "11",
            "displayName": "Schlafzimmerfenster",
            "selectedIcon": "3",
            "functionID": "61",
            "inputs": {
              "idp0000": {
                "pairingID": 32,
                "value": "0"
              },
              "idp0001": {
                "pairingID": 33,
                "value": "1"
              },
              "idp0002": {
                "pairingID": 35,
                "value": ""
              },
              "idp0004": {
                "pairingID": 40,
                "value": ""
              },
              "idp0005": {
                "pairingID": 37,
                "value": ""
              },
              "idp0006": {
                "pairingID": 39,
                "value": ""
              },
              "idp0007": {
                "pairingID": 38,
                "value": ""
              },
              "idp0008": {
                "pairingID": 4,
                "value": ""
              },
              "idp0009": {
                "pairingID": 53,
                "value": ""
              }
            },
            "outputs": {
              "odp0000": {
                "pairingID": 288,
                "value": "1"
              },
              "odp0001": {
                "pairingID": 289,
                "value": "100"
              },
              "odp0003": {
                "pairingID": 273,
                "value": "0"
              },
              "odp0004": {
                "pairingID": 257,
                "value": "0"
              }
            },
            "parameters": {
              "par0008": "22",
              "par0035": "21",
              "par000a": "0",
              "par0009": "2",
              "par0036": "2",
              "par000b": "2",
              "par0014": "4",
              "par0037": "0",
              "par0054": "1",
              "par005c": "1",
              "par0058": "2",
              "par0059": "1",
              "par005a": "3",
              "par005b": "2"
            }
          }
        },
        "parameters": {}
      }
    }
  }
}

Hi @Stephan-Prem

It looks so that Busch Jäger changed the function ID for the Actuator REST API response

new: “functionID”: “1821”

The new function ID is not implemented.

Can you describe me the channel that I can add a correct name for this channel in the code?

I will look into tomorrow and will implement this and try to fix one warning with the URI generation.