Home Assistant Addon + MQTT in OH 5.1

I’ve tried configuring the Home Assistant add-on in OH 5,1 but I don’t know what to put in the MQTT config topic parameter.

I have MQTT working correctly, I know this because I use zigbee2mqtt. I’d like all the Home Assistant entities under the sensor topic to be imported into OH. MQTT explorer looks like this:

(there are many more entities than are in the screenshot.)

The Home Assistant device in OH looks like this:

If I update the config topic I see this error in the log:

2025-12-25 23:14:48.863 [ERROR] [st.core.internal.thing.ThingResource] - Exception during HTTP PUT request for update config at 'things/homeassistant:device:54ef004c22:HomeAssistant/config'
java.lang.IllegalArgumentException: Bad configuration. topic must be <component>/<objectId> or <component>/<nodeId>/<objectId>!

What do I need to put in the config topic?

The whole point of using HomeAssistant MQTT is that the things are automatically discovered. You don’t need to put anything in that field. The binding fills that in when it discovers the device and adds it to the inbox.

You do not manually create Home Assistant Things. If you want that kind of control use Generic MQTT instead.

It didn’t discover automatically. So I manually configured with below topic filter,

+/+/

I also installed GitHub - RogerSelwyn/mqtt_discoverystream_ha: Extension of HA mqtt_statestream integration with discovery config publishing

Since auto discovery didn’t work, you might check that the publish format from HA is correct. You should have a topic that looks like this:

image

If it looks like this:

…I believe that is consider “flat”, and I don’t think the HomeAssistant binding will discover that (at least it doesn’t on my system).

I tested with the mqtt_discoverysteam_alt config, and while I had a Thing in my inbox (a simple switch) it remained in UNKNOWN status as yours did. So there could be other issues.

I think you need to enable the discovery part. E.g configuration,

mqtt_discoverystream_alt:

  • base_topic: my_ha_mirror

    publish_discovery: true

    publish_attributes: true

    publish_timestamps: true

The Home Assistant binding needs to know how to connect to the MQTT bridge that provides the comms with Home Assistant. After that communication is established then the auto-discovery can take please. It’s that initial comms that I’m trying to set up. This is what I see when I try to create a Home Assistant thing:

I know the base prefix is correct because I have other generic MQTT devices working already. A screenshot of MQTT explorer:

If I click on save on the thing as it was in the screenshot above I get this error:

I tried changing it to:

+/+/

as per the suggestion from @krishgcek but that results in “Unknown” as the thing error message:

Where do I configure this?

That screen shot shows it already knows how to connect to the MQTT bridge. It connects through an MQTT Broker Thing, mqtt:broker:54ef004c22.

On the MQTT Broker Thing. Click “Show Advanced” and it’s the last property in the list.

The process is:

  1. Create an MQTT Broker Thing
  2. discovery should already be enabled but if not enable it
  3. The binding will automatically discover the HomeAssistant Things through the MQTT Broker Thing
  4. accept the Things from the inbox.

You do not modify the config of the discovered Things.

I chose the MQTT bridge that we see in the screenshot above when I created the Home Assistant thing, it’s the only MQTT broker I have on my LAN. A Home Assistant thing wasn’t autodiscovered when I created the MQTT broker, hence me trying to create a home assistant thing manually. I understand that the HA thing needs to know about the MQTT broker, it just doesn’t seem to work for me and I don’t understand what I’m doing incorrectly.

Discovery was already enabled on the MQTT broker thing:

I can’t see where the other options that @krishgcek mentioned are stored:

publish_attributes: true

publish_timestamps: true

I deleted the existing Home Assistant thing and created a new one:

I click on the Home Assistant Device and give it a name and choose the bridge:

The base prefix is already homeassistant which is correct as show in the MQTT explorer screenshot I posted earler. I click on save and get this:

I’ve tried “sensor”, “/” and “+/+/” (without the quotes) with no success.

If it wasn’t discovered automatically, it’s unlikely to be manually configurable successfully. If it can’t discover it, it can’t really see the topics in the first place or the topics/messages are not valid for the HomeAssistant standard.

Discovery is pretty straight forward. The binding asks the broker for all the topics. If it finds a homeassistant topic it looks at all the topics directly under that and reads devices and the config messages there to figure out what Things with what Channels to create.

If that isn’t working, manually configuring the Thing isn’t going to work either because for some reason OH can’t access those topics in the first place.

So we need to figure out why it’s not seeing those topics.

First ensure that the MQTT Broker Thing is connected and ONLINE.

Put the HomeAssistant add-on into debug level logging.

Go to Things → Inbox → + → HomeAssistant → Scan.

Capture the logs from the HA add-on and post them here with code fences.

```
logs go here
```

There is no expectation that if it can’t be discovered correctly in the first place that even a correctly configured manually created Thing will work. But if you want to try anyway, the MQTT Base Profile needs to be homeassistant but that’s not sufficient. You also need to add the MQTT Config Topics.

For example, here’s one of my HA devices:

version: 1
things:
  mqtt:homeassistant:broker:familyRoomSensors:
    bridge: mqtt:broker:broker
    label: Family Room Sensors
    config:
      topics:
        - sensor/A4C138C58E33-batt
        - sensor/A4C138C58E33-hum
        - sensor/A4C138C58E33-tempc
      basetopic: homeassistant
    channels:
      A4C138C58E33_batt:
        type: number
        label: H5072/75-batt
        config:
          component: sensor
          nodeid: ""
          objectid:
            - A4C138C58E33-batt
          config:
            - "{\"stat_t\": \"+/+/BTtoMQTT/A4C138C58E33\", \"dev_cla\": \"battery\", \"unit_of_meas\": \"%\", \"state_class\": \"measurement\", \"name\": \"H5072/75-batt\", \"uniq_id\": \"A4C138C58E33-batt\", \"val_tpl\": \"{{ value_json.batt | is_defined }}\", \"device\": {\"ids\": [\"A4C138C58E33\"], \"cns\": [[\"mac\", \"A4C138C58E33\"]], \"mf\": \"Govee\", \"mdl\": \"H5072/75\", \"name\": \"Thermo-Hygrometer-C58E33\", \"via_device\": \"TheengsGateway\"}}"
      A4C138C58E33_hum:
        type: number
        label: H5072/75-hum
        config:
          component: sensor
          nodeid: ""
          objectid:
            - A4C138C58E33-hum
          config:
            - "{\"stat_t\": \"+/+/BTtoMQTT/A4C138C58E33\", \"dev_cla\": \"humidity\", \"unit_of_meas\": \"%\", \"state_class\": \"measurement\", \"name\": \"H5072/75-hum\", \"uniq_id\": \"A4C138C58E33-hum\", \"val_tpl\": \"{{ value_json.hum | is_defined }}\", \"device\": {\"ids\": [\"A4C138C58E33\"], \"cns\": [[\"mac\", \"A4C138C58E33\"]], \"mf\": \"Govee\", \"mdl\": \"H5072/75\", \"name\": \"Thermo-Hygrometer-C58E33\", \"via_device\": \"TheengsGateway\"}}"
      A4C138C58E33_tempc:
        type: number
        label: H5072/75-tempc
        config:
          component: sensor
          nodeid: ""
          objectid:
            - A4C138C58E33-tempc
          config:
            - "{\"stat_t\": \"+/+/BTtoMQTT/A4C138C58E33\", \"dev_cla\": \"temperature\", \"unit_of_meas\": \"\\u00b0C\", \"state_class\": \"measurement\", \"name\": \"H5072/75-tempc\", \"uniq_id\": \"A4C138C58E33-tempc\", \"val_tpl\": \"{{ value_json.tempc | is_defined }}\", \"device\": {\"ids\": [\"A4C138C58E33\"], \"cns\": [[\"mac\", \"A4C138C58E33\"]], \"mf\": \"Govee\", \"mdl\": \"H5072/75\", \"name\": \"Thermo-Hygrometer-C58E33\", \"via_device\": \"TheengsGateway\"}}"

Here’s another one:

version: 1
things:
  mqtt:homeassistant:broker:garageCameraTheengs:
    bridge: mqtt:broker:broker
    label: 'Wyze Cam Garage '
    config:
      topics:
        - binary_sensor/2CAA8E2F8559/motion
        - button/2CAA8E2F8559/reboot
        - button/2CAA8E2F8559/update_snapshot
        - camera/2CAA8E2F8559/snapshot
        - number/2CAA8E2F8559/bitrate
        - number/2CAA8E2F8559/fps
        - sensor/2CAA8E2F8559/audio
        - sensor/2CAA8E2F8559/res
        - sensor/2CAA8E2F8559/signal
        - switch/2CAA8E2F8559/flip_horizontal
        - switch/2CAA8E2F8559/flip_vertical
        - switch/2CAA8E2F8559/ir
        - switch/2CAA8E2F8559/motion_detection
        - switch/2CAA8E2F8559/motion_tagging
        - switch/2CAA8E2F8559/night_vision
        - switch/2CAA8E2F8559/notifications
        - switch/2CAA8E2F8559/power
        - switch/2CAA8E2F8559/status_light
        - switch/2CAA8E2F8559/stream
      basetopic: homeassistant
    channels:
      audio:
        type: string
        label: Audio
        config:
          component: sensor
          nodeid: 2CAA8E2F8559
          objectid:
            - audio
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/audio\", \"icon\": \"mdi:volume-high\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Audio\", \"uniq_id\": \"WYZE2CAA8E2F8559AUDIO\"}"
      bitrate:
        type: number
        label: Bitrate
        config:
          component: number
          nodeid: 2CAA8E2F8559
          objectid:
            - bitrate
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/bitrate\", \"command_topic\": \"wyze/garage/bitrate/set\", \"device_class\": \"data_rate\", \"min\": 1, \"max\": 1000, \"icon\": \"mdi:high-definition-box\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Bitrate\", \"uniq_id\": \"WYZE2CAA8E2F8559BITRATE\"}"
      flip_horizontal:
        type: switch
        label: Flip Horizontal
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - flip_horizontal
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/hor_flip\", \"command_topic\": \"wyze/garage/hor_flip/set\", \"payload_on\": 1, \"payload_off\": 2, \"icon\": \"mdi:flip-horizontal\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Flip Horizontal\", \"uniq_id\": \"WYZE2CAA8E2F8559FLIP_HORIZONTAL\"}"
      flip_vertical:
        type: switch
        label: Flip Vertical
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - flip_vertical
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/ver_flip\", \"command_topic\": \"wyze/garage/ver_flip/set\", \"payload_on\": 1, \"payload_off\": 2, \"icon\": \"mdi:flip-vertical\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Flip Vertical\", \"uniq_id\": \"WYZE2CAA8E2F8559FLIP_VERTICAL\"}"
      fps:
        type: number
        label: Fps
        config:
          component: number
          nodeid: 2CAA8E2F8559
          objectid:
            - fps
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/fps\", \"command_topic\": \"wyze/garage/fps/set\", \"min\": 1, \"max\": 30, \"icon\": \"mdi:filmstrip\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Fps\", \"uniq_id\": \"WYZE2CAA8E2F8559FPS\"}"
      ir:
        type: switch
        label: Ir
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - ir
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/irled\", \"command_topic\": \"wyze/garage/irled/set\", \"payload_on\": 1, \"payload_off\": 2, \"icon\": \"mdi:lightbulb-night\", \"availability_topic\": \"wyze/state\", \"name\": \"Ir\", \"uniq_id\": \"WYZE2CAA8E2F8559IR\"}"
      motion:
        type: switch
        label: Motion
        config:
          component: binary_sensor
          nodeid: 2CAA8E2F8559
          objectid:
            - motion
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/motion\", \"payload_on\": 1, \"payload_off\": 2, \"icon\": \"mdi:motion-sensor\", \"availability_topic\": \"wyze/state\", \"name\": \"Motion\", \"uniq_id\": \"WYZE2CAA8E2F8559MOTION\"}"
      motion_detection:
        type: switch
        label: Motion Detection
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - motion_detection
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/motion_detection\", \"command_topic\": \"wyze/garage/motion_detection/set\", \"payload_on\": 1, \"payload_off\": 2, \"state_off\": \"stopped\", \"icon\": \"mdi:motion-sensor-off\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Motion Detection\", \"uniq_id\": \"WYZE2CAA8E2F8559MOTION_DETECTION\"}"
      motion_tagging:
        type: switch
        label: Motion Tagging
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - motion_tagging
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/motion_tagging\", \"command_topic\": \"wyze/garage/motion_tagging/set\", \"payload_on\": 1, \"payload_off\": 2, \"icon\": \"mdi:image-filter-center-focus\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Motion Tagging\", \"uniq_id\": \"WYZE2CAA8E2F8559MOTION_TAGGING\"}"
      night_vision:
        type: switch
        label: Night Vision
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - night_vision
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/night_vision\", \"command_topic\": \"wyze/garage/night_vision/set\", \"payload_on\": 3, \"payload_off\": 2, \"icon\": \"mdi:weather-night\", \"availability_topic\": \"wyze/state\", \"name\": \"Night Vision\", \"uniq_id\": \"WYZE2CAA8E2F8559NIGHT_VISION\"}"
      notifications:
        type: switch
        label: Notifications
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - notifications
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/notifications\", \"command_topic\": \"wyze/garage/notifications/set\", \"payload_on\": 1, \"payload_off\": 2, \"icon\": \"mdi:square-rounded-badge\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Notifications\", \"uniq_id\": \"WYZE2CAA8E2F8559NOTIFICATIONS\"}"
      power:
        type: switch
        label: Power
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - power
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/power\", \"command_topic\": \"wyze/garage/power/set\", \"payload_on\": \"on\", \"payload_off\": \"off\", \"icon\": \"mdi:power-plug\", \"availability_topic\": \"wyze/state\", \"name\": \"Power\", \"uniq_id\": \"WYZE2CAA8E2F8559POWER\"}"
      reboot:
        type: string
        label: Reboot
        config:
          component: button
          nodeid: 2CAA8E2F8559
          objectid:
            - reboot
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"command_topic\": \"wyze/garage/power/set\", \"payload_press\": \"restart\", \"icon\": \"mdi:restart\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Reboot\", \"uniq_id\": \"WYZE2CAA8E2F8559REBOOT\"}"
      res:
        type: string
        label: Res
        config:
          component: sensor
          nodeid: 2CAA8E2F8559
          objectid:
            - res
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/res\", \"icon\": \"mdi:image-size-select-large\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Res\", \"uniq_id\": \"WYZE2CAA8E2F8559RES\"}"
      signal:
        type: string
        label: Signal
        config:
          component: sensor
          nodeid: 2CAA8E2F8559
          objectid:
            - signal
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/wifi\", \"icon\": \"mdi:wifi\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Signal\", \"uniq_id\": \"WYZE2CAA8E2F8559SIGNAL\"}"
      snapshot:
        type: image
        label: Snapshot
        config:
          component: camera
          nodeid: 2CAA8E2F8559
          objectid:
            - snapshot
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"availability_topic\": \"wyze/garage/state\", \"payload_not_available\": \"stopped\", \"topic\": \"wyze/garage/image\", \"icon\": \"mdi:cctv\", \"name\": \"Snapshot\", \"uniq_id\": \"WYZE2CAA8E2F8559SNAPSHOT\"}"
      status_light:
        type: switch
        label: Status Light
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - status_light
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/status_light\", \"command_topic\": \"wyze/garage/status_light/set\", \"payload_on\": 1, \"payload_off\": 2, \"icon\": \"mdi:led-on\", \"entity_category\": \"diagnostic\", \"availability_topic\": \"wyze/state\", \"name\": \"Status Light\", \"uniq_id\": \"WYZE2CAA8E2F8559STATUS_LIGHT\"}"
      stream:
        type: switch
        label: Stream
        config:
          component: switch
          nodeid: 2CAA8E2F8559
          objectid:
            - stream
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"state_topic\": \"wyze/garage/state\", \"command_topic\": \"wyze/garage/state/set\", \"payload_on\": \"start\", \"state_on\": \"online\", \"payload_off\": \"stop\", \"state_off\": \"stopped\", \"icon\": \"mdi:play-pause\", \"availability_topic\": \"wyze/state\", \"name\": \"Stream\", \"uniq_id\": \"WYZE2CAA8E2F8559STREAM\"}"
      update_snapshot:
        type: string
        label: Update Snapshot
        config:
          component: button
          nodeid: 2CAA8E2F8559
          objectid:
            - update_snapshot
          config:
            - "{\"device\": {\"name\": \"Wyze Cam Garage \", \"connections\": [[\"mac\", \"2CAA8E2F8559\"]], \"identifiers\": \"2CAA8E2F8559\", \"manufacturer\": \"Wyze\", \"model\": \"WYZEC1-JZ\", \"sw_version\": \"4.9.9.3006\", \"via_device\": \"docker-wyze-bridge v2.10.3\"}, \"retain\": false, \"command_topic\": \"wyze/garage/update_snapshot/get\", \"icon\": \"mdi:camera\", \"availability_topic\": \"wyze/state\", \"name\": \"Update Snapshot\", \"uniq_id\": \"WYZE2CAA8E2F8559UPDATE_SNAPSHOT\"}"

Notice how it’s not consistent. Sometimes the same device has multiple topics directly under sensor and others have one topic and puts all the separate “channels” under that.

Since you are manually creating the Thing, almost nothing gets done for you. You have to configure everything manually. So you’ll need to use MQTT Explorer to find all of the config topics related to the one device and add them as config topics to the Thing.

I think this might be sufficient. However, even this may not be enough and you’ll have to create the individual Channels manually on the code tab. It should be pretty apparent how to map the MQTT topics and messages to what needs to go into the config based on the examples above.

But again, if OH couldn’t discover these in the first place, manually configuring them is unlikely to work. And to do the manual config, you must configure everything manually. You can’t just point it at the root “homeassistant” topic and expect it to discover everything else on its own if it’s already failed to discover it.

There is no scan button. The second screenshot in my previous message shows what I see when I create a new HomeAssistant thing. I only have the option to add it manually, there’s no blue Scan button. This is what I see when I go to Things → + → Matter Binding:

This is what I see when I go to Things → + → HomeAssistant Binding:

I have several other generic MQTT devices that I’ve configured already. I know the MQTT broker works. I’ve been attempting to create the HA thing so that I don’t have to keep on creating generic MQTT things and configure channels manually. I’m using generic MQTT things via the broker that is receiving messages from my HomeAssistant VM and my zigbee2mqtt service.

:person_shrugging:

This is what I see.

Something is preventing the binding from scanning. I don’t know what that could be. I’ve never not had a scan button there.

Even when I disable discovery on the MQTT Broker Thing I still have the SCAN button in the UI.

The HomeAsssitant binding itself doesn’t have any relevant settings under Settings → HomeAssistant.

Have you restarted OH as part of these experiments? Maybe the binding needs to be reinstalled (i.e. clear the cache). If you clear the cache, let OH boot for a while then, when OH settles, restart OH and watch the logs for errors.

If it’s still a problem, I think all I can recommend at this point is to file an issue on the add-on. There is something going wrong somehow.

I’d restarted OH a few times, yes. I hadn’t cleared the cache though, I just tried that. I stopped the OH service, ran openhab-cli clean-cache and then restarted the service. There’s still no Scan button. There are some shenanigans going on somewhere…

I’ll create a new Debian 13 VM, install OH and the MQTT and HomeAssistant bindings and see if the behaviour is the same.

I just created a fresh Debian 13.2 VM, added the OH apt repo, installed JRE21 and OH. Logged into OH and installed the MQTT add-on and created a broker thing. Next, I installed the HomeAssistant addon and waited for a few minutes to see if a HomeAssistant thing appeared in the inbox. It didn’t so I went through the steps to manually create a HomeAssistant thing as I described in a previous post. Still no Scan button:

I looked at the log and found this:

2026-01-07 21:09:03.660 [INFO ] [.transport.mqtt.MqttBrokerConnection] - Starting MQTT broker connection to 'openhab.bigpizza.co.uk' with clientid openHAB32_1new
2026-01-07 21:09:27.164 [ERROR] [t.internal.HomeAssistantPythonBridge] - bundle org.openhab.binding.homeassistant:5.1.0 (329)[org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge(570)] : Error during instantiation of the>
java.lang.reflect.InvocationTargetException: null
        at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74) ~[?:?]
        at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) ~[?:?]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:486) ~[?:?]
        at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:326) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920) ~[?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220) ~[org.eclipse.osgi-3.18.0.jar:?]
        at java.security.AccessController.doPrivileged(AccessController.java:319) ~[?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88) ~[?:?]
        at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:287) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920) ~[?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220) ~[org.eclipse.osgi-3.18.0.jar:?]
        at java.security.AccessController.doPrivileged(AccessController.java:319) ~[?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88) ~[?:?]
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675) ~[?:?]
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2612) ~[?:?]
        at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2078) ~[?:?]
        at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2061) ~[?:?]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:443) ~[?:?]
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:336) ~[?:?]
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:304) ~[?:?]
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) ~[?:?]
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) ~[?:?]
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) ~[?:?]
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) ~[?:?]
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) ~[?:?]
        at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) ~[?:?]
        at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) ~[?:?]
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) ~[?:?]
        at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) ~[?:?]
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) ~[?:?]
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) ~[?:?]
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674) ~[?:?]
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:437) ~[?:?]
        at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:671) ~[?:?]
        at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:310) ~[?:?]
        at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:593) ~[?:?]
        at org.apache.felix.scr.impl.Activator.access$200(Activator.java:74) ~[?:?]
        at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:460) ~[?:?]
        at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196) ~[?:?]
        at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169) ~[?:?]
        at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49) ~[?:?]
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) ~[osgi.core-8.0.0.jar:?]
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) ~[osgi.core-8.0.0.jar:?]
        at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) ~[osgi.core-8.0.0.jar:?]
        at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) ~[osgi.core-8.0.0.jar:?]
        at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:949) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.container.Module.publishEvent(Module.java:499) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.container.Module.start(Module.java:486) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:445) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:464) ~[org.eclipse.osgi-3.18.0.jar:?]
        at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:165) ~[?:?]
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1160) ~[?:?]
        at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1041) ~[?:?]
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069) ~[?:?]
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.lang.Thread.run(Thread.java:1583) [?:?]
Caused by: java.lang.IllegalArgumentException: Could not find option with name python.Executable.
        at com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument(PolyglotEngineException.java:129) ~[?:?]
        at com.oracle.truffle.polyglot.OptionValuesImpl.failNotFound(OptionValuesImpl.java:331) ~[?:?]
        at com.oracle.truffle.polyglot.PolyglotEngineImpl.parseOptions(PolyglotEngineImpl.java:873) ~[?:?]
        at com.oracle.truffle.polyglot.PolyglotEngineImpl.<init>(PolyglotEngineImpl.java:356) ~[?:?]
        at com.oracle.truffle.polyglot.PolyglotImpl.buildEngine(PolyglotImpl.java:357) ~[?:?]
        at org.graalvm.polyglot.Engine$Builder.build(Engine.java:843) ~[?:?]
        at org.graalvm.polyglot.Context$Builder.build(Context.java:2136) ~[?:?]
        at org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge.<init>(HomeAssistantPythonBridge.java:62) ~[?:?]
        at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[?:?]
        ... 93 more
2026-01-07 21:09:27.226 [WARN ] [ler.HomeAssistantThingHandlerFactory] - bundle org.openhab.binding.homeassistant:5.1.0 (329)[org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory(574)] : Could not get serv>
2026-01-07 21:09:27.227 [ERROR] [ler.HomeAssistantThingHandlerFactory] - bundle org.openhab.binding.homeassistant:5.1.0 (329)[org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory(574)] : Error during insta>
2026-01-07 21:09:27.227 [WARN ] [.thing.internal.GenericThingProvider] - bundle org.openhab.core.model.thing:5.1.0 (216)[org.openhab.core.model.thing.internal.GenericThingProvider(25)] : Could not get service from ref {org.openhab.core.>
2026-01-07 21:09:27.227 [WARN ] [.thing.internal.GenericThingProvider] - bundle org.openhab.core.model.thing:5.1.0 (216)[org.openhab.core.model.thing.internal.GenericThingProvider(25)] : DependencyManager : invokeBindMethod : Service no>
2026-01-07 21:09:27.232 [WARN ] [g.discovery.internal.PersistentInbox] - bundle org.openhab.core.config.discovery:5.1.0 (170)[org.openhab.core.config.discovery.internal.PersistentInbox(81)] : Could not get service from ref {org.openhab.>
2026-01-07 21:09:27.232 [WARN ] [g.discovery.internal.PersistentInbox] - bundle org.openhab.core.config.discovery:5.1.0 (170)[org.openhab.core.config.discovery.internal.PersistentInbox(81)] : DependencyManager : invokeBindMethod : Servi>
2026-01-07 21:09:27.232 [WARN ] [ml.internal.things.YamlThingProvider] - bundle org.openhab.core.model.yaml:5.1.0 (219)[org.openhab.core.model.yaml.internal.things.YamlThingProvider(90)] : Could not get service from ref {org.openhab.cor>

Does the HomeAssistant addon require Python to be installed?

That’s not going to do anything.

Yes, but GraalVM Python should have been installed when you installed the HomeAssistant add-on. The add-on uses the actual Python code from the HomeAssistant project to discover and process the MQTT topics and messages.

Do you see it listed in the bundle list in the karaf console? That could be the root of the problem.

How are you installing the HomeAssistant add-on, through the Add-on store?

Do you mean that you wouldn’t expect a fresh OH install with the HomeAssistant addon installed to have a Scan button like your install does?

The end of output of bundle:list looks like this:

302 │ Active │ 80 │ 4.0.0.M2 │ Californium (Cf) Core
303 │ Active │ 80 │ 4.0.0.M2 │ Californium (Cf) Element Connector
304 │ Active │ 80 │ 4.0.0.M2 │ Californium (Cf) OSGi
305 │ Active │ 80 │ 4.0.0.M2 │ Scandium (Sc) Core
306 │ Active │ 80 │ 5.1.0 │ openHAB Add-ons :: Bundles :: TRÅDFRI Binding
307 │ Active │ 80 │ 5.1.0 │ openHAB UI :: Bundles :: Basic UI
308 │ Active │ 80 │ 2.42 │ Dagger
309 │ Active │ 80 │ 1.3.9 │ hivemq-mqtt-client
310 │ Active │ 80 │ 4.1.126.Final │ Netty/Codec/Socks
311 │ Active │ 80 │ 4.1.126.Final │ Netty/Handler/Proxy
312 │ Active │ 80 │ 4.1.126.Final │ Netty/Transport/Classes/Epoll
313 │ Active │ 80 │ 2.2.21 │ rxjava
314 │ Active │ 80 │ 1.0.5 │ Jakarta Dependency Injection
315 │ Active │ 80 │ 2.1.2 │ Java Concurrency Tools Core Library
316 │ Active │ 80 │ 5.1.0 │ openHAB Add-ons :: Bundles :: MQTT Broker Binding
317 │ Active │ 81 │ 5.1.0 │ openHAB Add-ons :: Bundles :: MQTT Awtrix 3
318 │ Active │ 81 │ 5.1.0 │ openHAB Add-ons :: Bundles :: MQTT EspMilightHub
319 │ Active │ 81 │ 5.1.0 │ openHAB Add-ons :: Bundles :: MQTT FPP
320 │ Active │ 81 │ 5.1.0 │ openHAB Add-ons :: Bundles :: MQTT Ruuvi Gateway
321 │ Active │ 80 │ 5.1.0 │ openHAB Core :: Bundles :: MQTT Transport
322 │ Active │ 80 │ 1.0.4 │ reactive-streams-jvm
323 │ Active │ 80 │ 25.0.1 │ GraalVM :: Python :: Embedding
324 │ Active │ 78 │ 25.0.1 │ GraalVM :: Python :: Language
325 │ Active │ 78 │ 25.0.1 │ GraalVM :: Python :: Resources
326 │ Active │ 80 │ 25.0.1 │ GraalVM :: Truffle :: JSON
327 │ Active │ 80 │ 25.0.1 │ GraalVM :: Tools :: Profiler
328 │ Active │ 80 │ 25.0.1 │ GraalVM :: Truffle :: NFI
329 │ Waiting │ 81 │ 5.1.0 │ openHAB Add-ons :: Bundles :: Home Assistant Binding

Yup, through the add-on store:

Not to hijack the thread, but if this is a Home Assistant instance (not just a device using HA MQTT format) you can use the Home Assistant API and the HTTP binding to get readings on sensors. I know it doesn’t solve your issue, but this avoids MQTT. Here is an example I use for a Powerwall 3 integration:

version: 1
things:
  http:url:cd37d9a1e8:
    label: Tesla Battery - HA
    config:
      baseURL: http://192.168.30.208:8123/api/
      refresh: 30
      timeout: 3000
      delay: 0
      bufferSize: 2048
      password: YOUR_LONG_LIVED_ACCESS_TOKEN
      authMode: TOKEN
      stateMethod: GET
      commandMethod: POST
      contentType: application/json
      ignoreSSLErrors: false
    channels:
      last-failure:
        type: request-date-time
        label: Last Failure
      last-success:
        type: request-date-time
        label: Last Success
      TeslaBatteryRemaining:
        type: number
        label: Tesla Battery Remaining
        description: ""
        config:
          stateTransformation:
            - JSONPATH:$.state
          stateExtension: states/sensor.my_home_battery
          mode: READONLY
          unit: '%'
      TeslaBatteryBackupReserve:
        type: number
        label: Tesla Battery Backup Reserve
        description: ""
        config:
          stateTransformation:
            - JSONPATH:$.state
          stateExtension: states/sensor.my_home_backup_reserve
          mode: READONLY
          unit: '%'
      TeslaBatteryLoadPower:
        type: number
        label: Tesla Battery Load Power
        description: ""
        config:
          stateTransformation:
            - JSONPATH:$.state
          stateExtension: states/sensor.my_home_load_power
          mode: READONLY
          unit: W
      TeslaBatterySolarPower:
        type: number
        label: Tesla Battery Solar Power
        description: ""
        config:
          stateTransformation:
            - JSONPATH:$.state
          stateExtension: states/sensor.my_home_solar_power
          mode: READONLY
          unit: W
      TeslaBatteryGridPower:
        type: number
        label: Tesla Battery Grid Power
        description: ""
        config:
          stateTransformation:
            - JSONPATH:$.state
          stateExtension: states/sensor.my_home_grid_power
          mode: READONLY
          unit: W

Get your long lived access token under Profile>Security. You can find the api endpoints by running curl (documented on HA API pages), but things like sensors tend to be state. I haven’t found the right command transformation to control devices (switches, etc.), but it’s possible without MQTT with some rules and webhooks+automation triggers. If you don’t have an actual HA instance, well… carry on.

I’m already using zigbee2mqtt for my Zigbee devices and HomeAssistant for the solar panels + battery + inverter integration. I don’t have a problem with using MQTT, I was just being lazy and hoping that using the HomeAssistant add-on would mean a thing or things would appear in the inbox that represents the panels + battery + inverter and I wouldn’t have to create MQTT channels manually.

Thanks for the info though, I’ll definitely bear it in mind if I want to move away from MQTT.

No, what I mean is creating and configuring a Thing would make the SCAN button appear.

So GraalVM Python is installed and active. Something else must be going on.

Unfortunately all your log statements posted above are truncated and the most important parts are cut off. For example:

2026-01-07 21:09:27.164 [ERROR] [t.internal.HomeAssistantPythonBridge] - bundle org.openhab.binding.homeassistant:5.1.0 (329)[org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge(570)] : Error during instantiation of the>

The most important bit comes after the >

Can you post the full lines?

And I think we are at the point of filing an issue. For most users all this seems to get set up as expected after installing the add-on. Something weird and relatively unique to your environment is causing something to go wrong. I can’t imagine what that would be given you set it up on a new install.

I purged the openhab package and reinstalled, let the service start up for a few minutes and then installed the MQTT add-on, then the Homie Convention add-on (in case it helped) and finally the HomeAssistant add-on. I watched the log after starting the HA add-on and within a few seconds the error appeared. Full log as follows:

2026-01-08 20:38:14.628 [INFO ] [.transport.mqtt.MqttBrokerConnection] - Starting MQTT broker connection to '192.168.16.48' with clientid openhab1
2026-01-08 20:38:24.817 [INFO ] [.reconnect.PeriodicReconnectStrategy] - Try to restore connection to '192.168.16.48'. Next attempt in 60000ms
2026-01-08 20:38:24.852 [INFO ] [.transport.mqtt.MqttBrokerConnection] - Starting MQTT broker connection to '192.168.16.48' with clientid openhab1
2026-01-08 20:38:30.877 [INFO ] [.transport.mqtt.MqttBrokerConnection] - Starting MQTT broker connection to '192.168.16.48' with clientid openhab1
2026-01-08 20:42:00.197 [ERROR] [t.internal.HomeAssistantPythonBridge] - bundle org.openhab.binding.homeassistant:5.1.0 (324)[org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge(562)] : Error during instantiation of the implementation object
java.lang.reflect.InvocationTargetException: null
	at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74) ~[?:?]
	at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) ~[?:?]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:486) ~[?:?]
	at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:326) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220) ~[org.eclipse.osgi-3.18.0.jar:?]
	at java.security.AccessController.doPrivileged(AccessController.java:319) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88) ~[?:?]
	at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:287) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220) ~[org.eclipse.osgi-3.18.0.jar:?]
	at java.security.AccessController.doPrivileged(AccessController.java:319) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88) ~[?:?]
	at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2612) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2078) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2061) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:443) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:336) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:304) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) ~[?:?]
	at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) ~[?:?]
	at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:437) ~[?:?]
	at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:671) ~[?:?]
	at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:310) ~[?:?]
	at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:593) ~[?:?]
	at org.apache.felix.scr.impl.Activator.access$200(Activator.java:74) ~[?:?]
	at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:460) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49) ~[?:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) ~[osgi.core-8.0.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:949) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.Module.publishEvent(Module.java:499) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.Module.start(Module.java:486) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:445) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:464) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:165) ~[?:?]
	at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1160) ~[?:?]
	at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1041) ~[?:?]
	at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069) ~[?:?]
	at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004) ~[?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
	at java.lang.Thread.run(Thread.java:1583) [?:?]
Caused by: java.lang.IllegalArgumentException: Could not find option with name python.Executable.
	at com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument(PolyglotEngineException.java:129) ~[?:?]
	at com.oracle.truffle.polyglot.OptionValuesImpl.failNotFound(OptionValuesImpl.java:331) ~[?:?]
	at com.oracle.truffle.polyglot.PolyglotEngineImpl.parseOptions(PolyglotEngineImpl.java:873) ~[?:?]
	at com.oracle.truffle.polyglot.PolyglotEngineImpl.<init>(PolyglotEngineImpl.java:356) ~[?:?]
	at com.oracle.truffle.polyglot.PolyglotImpl.buildEngine(PolyglotImpl.java:357) ~[?:?]
	at org.graalvm.polyglot.Engine$Builder.build(Engine.java:843) ~[?:?]
	at org.graalvm.polyglot.Context$Builder.build(Context.java:2136) ~[?:?]
	at org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge.<init>(HomeAssistantPythonBridge.java:62) ~[?:?]
	at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[?:?]
	... 93 more
2026-01-08 20:42:00.255 [WARN ] [nal.discovery.HomeAssistantDiscovery] - bundle org.openhab.binding.homeassistant:5.1.0 (324)[org.openhab.binding.homeassistant.internal.discovery.HomeAssistantDiscovery(565)] : Could not get service from ref {org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge}={service.id=765, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge, component.id=562}
2026-01-08 20:42:00.257 [ERROR] [nal.discovery.HomeAssistantDiscovery] - bundle org.openhab.binding.homeassistant:5.1.0 (324)[org.openhab.binding.homeassistant.internal.discovery.HomeAssistantDiscovery(565)] : Error during instantiation of the implementation object: Unable to get service for reference $001
2026-01-08 20:42:00.260 [WARN ] [nternal.DiscoveryServiceRegistryImpl] - bundle org.openhab.core.config.discovery:5.1.0 (170)[org.openhab.core.config.discovery.internal.DiscoveryServiceRegistryImpl(157)] : Could not get service from ref {org.openhab.core.config.discovery.DiscoveryService}={service.id=768, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), service.config.label=Home Assistant Binding, component.name=org.openhab.binding.homeassistant.internal.discovery.HomeAssistantDiscovery, component.id=565, service.config.factory=false, service.config.category=binding, service.pid=org.openhab.binding.homeassistant, service.config.description.uri=binding:homeassistant}
2026-01-08 20:42:00.266 [WARN ] [nternal.DiscoveryServiceRegistryImpl] - bundle org.openhab.core.config.discovery:5.1.0 (170)[org.openhab.core.config.discovery.internal.DiscoveryServiceRegistryImpl(157)] : DependencyManager : invokeBindMethod : Service not available from service registry for ServiceReference {org.openhab.core.config.discovery.DiscoveryService}={service.id=768, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), service.config.label=Home Assistant Binding, component.name=org.openhab.binding.homeassistant.internal.discovery.HomeAssistantDiscovery, component.id=565, service.config.factory=false, service.config.category=binding, service.pid=org.openhab.binding.homeassistant, service.config.description.uri=binding:homeassistant} for reference DiscoveryService
2026-01-08 20:42:00.396 [ERROR] [t.internal.HomeAssistantPythonBridge] - bundle org.openhab.binding.homeassistant:5.1.0 (324)[org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge(562)] : Error during instantiation of the implementation object
java.lang.reflect.InvocationTargetException: null
	at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74) ~[?:?]
	at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) ~[?:?]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:486) ~[?:?]
	at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:326) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220) ~[org.eclipse.osgi-3.18.0.jar:?]
	at java.security.AccessController.doPrivileged(AccessController.java:319) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88) ~[?:?]
	at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:287) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220) ~[org.eclipse.osgi-3.18.0.jar:?]
	at java.security.AccessController.doPrivileged(AccessController.java:319) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88) ~[?:?]
	at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2612) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2078) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2061) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:443) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:336) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:304) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) ~[?:?]
	at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) ~[?:?]
	at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:437) ~[?:?]
	at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:671) ~[?:?]
	at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:310) ~[?:?]
	at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:593) ~[?:?]
	at org.apache.felix.scr.impl.Activator.access$200(Activator.java:74) ~[?:?]
	at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:460) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49) ~[?:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) ~[osgi.core-8.0.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:949) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.Module.publishEvent(Module.java:499) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.Module.start(Module.java:486) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:445) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:464) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:165) ~[?:?]
	at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1160) ~[?:?]
	at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1041) ~[?:?]
	at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069) ~[?:?]
	at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004) ~[?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
	at java.lang.Thread.run(Thread.java:1583) [?:?]
Caused by: java.lang.IllegalArgumentException: Could not find option with name python.Executable.
	at com.oracle.truffle.polyglot.PolyglotEngineException.illegalArgument(PolyglotEngineException.java:129) ~[?:?]
	at com.oracle.truffle.polyglot.OptionValuesImpl.failNotFound(OptionValuesImpl.java:331) ~[?:?]
	at com.oracle.truffle.polyglot.PolyglotEngineImpl.parseOptions(PolyglotEngineImpl.java:873) ~[?:?]
	at com.oracle.truffle.polyglot.PolyglotEngineImpl.<init>(PolyglotEngineImpl.java:356) ~[?:?]
	at com.oracle.truffle.polyglot.PolyglotImpl.buildEngine(PolyglotImpl.java:357) ~[?:?]
	at org.graalvm.polyglot.Engine$Builder.build(Engine.java:843) ~[?:?]
	at org.graalvm.polyglot.Context$Builder.build(Context.java:2136) ~[?:?]
	at org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge.<init>(HomeAssistantPythonBridge.java:62) ~[?:?]
	at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[?:?]
	... 93 more
2026-01-08 20:42:00.438 [WARN ] [ler.HomeAssistantThingHandlerFactory] - bundle org.openhab.binding.homeassistant:5.1.0 (324)[org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory(566)] : Could not get service from ref {org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge}={service.id=765, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.HomeAssistantPythonBridge, component.id=562}
2026-01-08 20:42:00.440 [ERROR] [ler.HomeAssistantThingHandlerFactory] - bundle org.openhab.binding.homeassistant:5.1.0 (324)[org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory(566)] : Error during instantiation of the implementation object: Unable to get service for reference $004
2026-01-08 20:42:00.442 [WARN ] [.thing.internal.GenericThingProvider] - bundle org.openhab.core.model.thing:5.1.0 (216)[org.openhab.core.model.thing.internal.GenericThingProvider(22)] : Could not get service from ref {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566}
2026-01-08 20:42:00.443 [WARN ] [.thing.internal.GenericThingProvider] - bundle org.openhab.core.model.thing:5.1.0 (216)[org.openhab.core.model.thing.internal.GenericThingProvider(22)] : DependencyManager : invokeBindMethod : Service not available from service registry for ServiceReference {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566} for reference ThingHandlerFactory
2026-01-08 20:42:00.446 [WARN ] [g.discovery.internal.PersistentInbox] - bundle org.openhab.core.config.discovery:5.1.0 (170)[org.openhab.core.config.discovery.internal.PersistentInbox(158)] : Could not get service from ref {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566}
2026-01-08 20:42:00.447 [WARN ] [g.discovery.internal.PersistentInbox] - bundle org.openhab.core.config.discovery:5.1.0 (170)[org.openhab.core.config.discovery.internal.PersistentInbox(158)] : DependencyManager : invokeBindMethod : Service not available from service registry for ServiceReference {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566} for reference ThingHandlerFactory
2026-01-08 20:42:00.449 [WARN ] [ml.internal.things.YamlThingProvider] - bundle org.openhab.core.model.yaml:5.1.0 (219)[org.openhab.core.model.yaml.internal.things.YamlThingProvider(177)] : Could not get service from ref {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566}
2026-01-08 20:42:00.450 [WARN ] [ml.internal.things.YamlThingProvider] - bundle org.openhab.core.model.yaml:5.1.0 (219)[org.openhab.core.model.yaml.internal.things.YamlThingProvider(177)] : DependencyManager : invokeBindMethod : Service not available from service registry for ServiceReference {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566} for reference ThingHandlerFactory
2026-01-08 20:42:00.453 [WARN ] [core.thing.internal.ThingManagerImpl] - bundle org.openhab.core.thing:5.1.0 (223)[org.openhab.core.thing.internal.ThingManagerImpl(239)] : Could not get service from ref {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566}
2026-01-08 20:42:00.454 [WARN ] [core.thing.internal.ThingManagerImpl] - bundle org.openhab.core.thing:5.1.0 (223)[org.openhab.core.thing.internal.ThingManagerImpl(239)] : DependencyManager : invokeBindMethod : Service not available from service registry for ServiceReference {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566} for reference ThingHandlerFactory
2026-01-08 20:42:00.456 [WARN ] [ore.thing.internal.ThingRegistryImpl] - bundle org.openhab.core.thing:5.1.0 (223)[org.openhab.core.thing.internal.ThingRegistryImpl(240)] : Could not get service from ref {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566}
2026-01-08 20:42:00.461 [WARN ] [ore.thing.internal.ThingRegistryImpl] - bundle org.openhab.core.thing:5.1.0 (223)[org.openhab.core.thing.internal.ThingRegistryImpl(240)] : DependencyManager : invokeBindMethod : Service not available from service registry for ServiceReference {org.openhab.core.thing.binding.ThingHandlerFactory}={service.id=769, service.bundleid=324, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.binding.homeassistant.internal.handler.HomeAssistantThingHandlerFactory, component.id=566} for reference ThingHandlerFactory