HACS Fehler seit kurzem

Habe seit ein paar Minuten einen Fehler bei der HACS Integration. Geändert habe ich dabei aber nichts und die über HACS installierten Komponenten laufen.
HA und VM Neustart bringt nichts. HACS löschen und neu integrieren und authorisieren funktioniert, endet danach aber im selben Fehler.
Hat das vielleicht noch jemand oder wird jemand aus dem Log schlau?

Logger: homeassistant.config_entries
Quelle: config_entries.py:749
Erstmals aufgetreten: 09:51:34 (1 Vorkommnis)
Zuletzt protokolliert: 09:51:34

Error setting up entry for hacs
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 749, in __async_setup_with_context
    result = await component.async_setup_entry(hass, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/hacs/__init__.py", line 246, in async_setup_entry
    setup_result = await async_initialize_integration(hass=hass, config_entry=config_entry)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/hacs/__init__.py", line 214, in async_initialize_integration
    await async_try_startup()
  File "/config/custom_components/hacs/__init__.py", line 201, in async_try_startup
    startup_result = await async_startup()
                     ^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/hacs/__init__.py", line 170, in async_startup
    async_register_frontend(hass, hacs)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/config/custom_components/hacs/frontend.py", line 68, in async_register_frontend
    hass.components.frontend.async_register_built_in_panel(
    ^^^^^^^^^^^^^^^
AttributeError: 'HomeAssistant' object has no attribute 'components'

Moin

sicher das Du die aktuelle HACS Version installiert hast, weil:

VG Jim

1 „Gefällt mir“

Ein Update wird/wurde bei mir nicht angezeigt.
Ich habe in der Zwischenzeit HACS neu heruntergeladen und komplett neu installiert, die Integration läuft jetzt wieder.

Hmm.. schade, ich habe ein ähnliches Problem mit einer HACS integration (openwbmqtt), die ein paar scripte bereitstellt, um die Einstellungen der Wallbox per MQTT neu zu setzen.

Diese scripte enden seit kurzem auch in einem

Fehler: ‘HomeAssistant’ object has no attribute ‘components’
:frowning:
HACS 2.05.ist bereits installiert. Ansonsten klappt die Integration und auch der MQTT Server…

@Cholera - ich habe exakt das gleich Problem mit der openwbmqqt Integration.
Wie hast Du das Problem gelöst?

Ich antworte mir mal selber :slight_smile:

ChatGPT hat den Fehler gefunden und auch gelöst. Der Fehler liegt nicht an HACS, sondern an der Nutzung einer alten MQTT-Funktion, die nun nicht mehr von HA unterstützt wird.

ChatGPT hat sogar den Code korrigiert und nun läuft openwbmqqt wieder.

Möchtest Du dem nächsten Suchenden vielleicht auch mitteilen, was der Fehler war und wie man ihn beheben kann? :thinking: :wink:

1 „Gefällt mir“

Gerne: Hier der primäre Fehler in der Integration:

In deinem Code wird noch self.hass.components.mqtt.publish(...) verwendet.
:right_arrow: Diese alte API gibt es in Home Assistant schon länger nicht mehr. Früher konnte man so den internen MQTT-Service aufrufen, inzwischen geht das nur noch über den offiziellen Service-Call.

Ich weiss nicht, ob hier wirklich den ganzen neuen Code der Datei select.py schreiben sollte (sind knapp 200 Zeilen). Ich kann gerne den neuen Code zur Verfügung stellen - einfach per PN melden.

2 „Gefällt mir“

Hi @adahmen !
will das Forum nicht zu spammen, allerdings habe ich nach 5 Minuten suchen keine Möglichkeit gefunden, die direkt eine PM zu schicken.
Wäre sehr an der Lösung und dem Code interessiert :wink: - gerne auch per PM, oder hier, dann auch für andere sichtbar :slight_smile:
PS: ich hatte leider vorher auch keine Lösung gefunden, und auch keine Zeit vorher zu schreiben :frowning:

Warum über PM, hier im Forum ist doch okay?

Falls Du wirklich mal eine PM schreiben möchtest, dann einfach auf den User “klicken”:


und dann auf “Nachricht” klicken - fertig! :wink:

Wenn es so einfach wäre:

:wink: ?

Probier es jetzt mal. :wink:

(Du warst mit 3 Beiträgen noch zu neu, um PM’s schreiben zu dürfen - habe Dich gerade um eine Stufe “befördert”, jetzt sollte es gehen :grinning: ).

Also, hier die korrigierte select.py der Integration openwbmqtt, mit welcher bei mir nun wieder funktioniert (in Kombination mit meiner OpenWB-Software 1.9.303):

"""OpenWB Selector."""
from __future__ import annotations

import copy
import logging

from homeassistant.components import mqtt
from homeassistant.components.select import DOMAIN, SelectEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util import slugify

from .common import OpenWBBaseEntity
from .const import (
    CHARGE_POINTS,
    MQTT_ROOT_TOPIC,
    SELECTS_GLOBAL,
    SELECTS_PER_LP,
    openwbSelectEntityDescription,
)

_LOGGER = logging.getLogger(__name__)


async def async_setup_entry(
    hass: HomeAssistant,
    config_entry: ConfigEntry,
    async_add_entities: AddEntitiesCallback,
) -> None:
    """Return selectors."""

    integrationUniqueID = config_entry.unique_id
    mqttRoot = config_entry.data[MQTT_ROOT_TOPIC]
    nChargePoints = config_entry.data[CHARGE_POINTS]

    selectList = []
    global_selects = copy.deepcopy(SELECTS_GLOBAL)
    for description in global_selects:
        description.mqttTopicCommand = f"{mqttRoot}/{description.mqttTopicCommand}"
        description.mqttTopicCurrentValue = (
            f"{mqttRoot}/{description.mqttTopicCurrentValue}"
        )
        selectList.append(
            openwbSelect(
                unique_id=integrationUniqueID,
                description=description,
                device_friendly_name=integrationUniqueID,
                mqtt_root=mqttRoot,
            )
        )
    for chargePoint in range(1, nChargePoints + 1):
        local_selects_per_lp = copy.deepcopy(SELECTS_PER_LP)
        for description in local_selects_per_lp:
            description.mqttTopicCommand = f"{mqttRoot}/config/set/sofort/lp/{str(chargePoint)}/{description.mqttTopicCommand}"
            description.mqttTopicCurrentValue = f"{mqttRoot}/config/get/sofort/lp/{str(chargePoint)}/{description.mqttTopicCurrentValue}"
            selectList.append(
                openwbSelect(
                    unique_id=integrationUniqueID,
                    description=description,
                    nChargePoints=int(nChargePoints),
                    currentChargePoint=chargePoint,
                    device_friendly_name=integrationUniqueID,
                    mqtt_root=mqttRoot,
                )
            )
    async_add_entities(selectList)


class openwbSelect(OpenWBBaseEntity, SelectEntity):
    """Entity representing the inverter operation mode."""

    entity_description: openwbSelectEntityDescription

    def __init__(
        self,
        unique_id: str,
        device_friendly_name: str,
        description: openwbSelectEntityDescription,
        mqtt_root: str,
        currentChargePoint: int | None = None,
        nChargePoints: int | None = None,
    ) -> None:
        """Initialize the sensor and the openWB device."""
        super().__init__(
            device_friendly_name=device_friendly_name,
            mqtt_root=mqtt_root,
        )
        # Initialize the inverter operation mode setting entity
        self.entity_description = description

        if nChargePoints:
            self._attr_unique_id = slugify(
                f"{unique_id}-CP{currentChargePoint}-{description.name}"
            )
            self.entity_id = (
                f"{DOMAIN}.{unique_id}-CP{currentChargePoint}-{description.name}"
            )
            self._attr_name = f"{description.name} (LP{currentChargePoint})"
        else:
            self._attr_unique_id = slugify(f"{unique_id}-{description.name}")
            self.entity_id = f"{DOMAIN}.{unique_id}-{description.name}"
            self._attr_name = description.name

        self._attr_options = description.modes
        self._attr_current_option = None

    async def async_added_to_hass(self):
        """Subscribe to MQTT events."""

        @callback
        def message_received(message):
            """Handle new MQTT messages."""
            try:
                self._attr_current_option = (
                    self.entity_description.valueMapCurrentValue.get(
                        int(message.payload)
                    )
                )
            except ValueError:
                self._attr_current_option = None

            self.async_write_ha_state()

        # Subscribe to MQTT topic and connect callback message
        if self.entity_description.mqttTopicCurrentValue is not None:
            await mqtt.async_subscribe(
                self.hass,
                self.entity_description.mqttTopicCurrentValue,
                message_received,
                1,
            )

    async def async_select_option(self, option: str) -> None:
        """Change the selected option.

        After select --> the result is published to MQTT.
        But the HA sensor shall only change when the MQTT message on the /get/ topic is received.
        Only then, openWB has changed the setting as well.
        """
        await self.publishToMQTT(option)

    async def publishToMQTT(self, commandValueToPublish):
        """Publish data to MQTT."""
        topic = f"{self.entity_description.mqttTopicCommand}"
        _LOGGER.debug("MQTT topic: %s", topic)
        try:
            payload = self.entity_description.valueMapCommand.get(commandValueToPublish)
            _LOGGER.debug("MQTT payload: %s", payload)
            publish_mqtt_message = True
        except ValueError:
            publish_mqtt_message = False

        if publish_mqtt_message:
            await self.hass.services.async_call(
                "mqtt",
                "publish",
                {
                    "topic": topic,
                    "payload": payload,
                }
            )

Hi!
Ich musste bei mir noch in der /homeassistant/custom_components/openwbmqtt/__init__.py

Die Aufrufe von
hass.components.mqtt.publish(hass, topic, payload)

in
hass.services.call( "mqtt", "publish", {"topic": topic, "payload": payload}, )

ändern.

Hallo,

ich habe OpenWB 2.1.7-Patch.1 und aktuelles openwb2mqtt.
Ich sehe alle Werte.

Leider bekomme ich auch den Fehler “object has no attribute ‘components’“.

Ich habe versucht wie oben beschrieben (ist ja leider “nur” für 1.9) heranzugehen, bekomme es aber nicht gelöst.

Irgendeine Idee was ich bei OpenWB2 und openwb2mqtt machen kann?

Hallo, scheinbar wird laut openwb-Forum die Einbindung von MQTT und HA in der aktuellsten SW-Version nicht mehr unterstützt. Es wurde seitens Programmierer deaktiviert. In den kommenden SW-Updtaes soll es erst wieder funktionieren. Die alte Version 1.9.x wird nicht mehr weiterentwickelt.