Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 41 additions & 9 deletions custom_components/goecharger_mqtt/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
ATTR_KEY,
ATTR_SERIAL_NUMBER,
ATTR_VALUE,
CONF_SERIAL_NUMBER,
CONF_TOPIC_PREFIX,
DEFAULT_TOPIC_PREFIX,
DOMAIN,
)
Expand Down Expand Up @@ -41,15 +43,24 @@
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up go-eCharger (MQTT) from a config entry."""
hass.data.setdefault(DOMAIN, {})

# Store config entries for service access
if DOMAIN not in hass.data:
hass.data[DOMAIN] = {}
hass.data[DOMAIN][entry.data[CONF_SERIAL_NUMBER]] = entry

await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

return True


async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)


# Remove config entry from storage
if unload_ok:
hass.data[DOMAIN].pop(entry.data[CONF_SERIAL_NUMBER], None)

return unload_ok


Expand All @@ -58,20 +69,41 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:

@callback
async def set_config_key_service(call: ServiceCall) -> None:
serial_number = call.data.get("serial_number")
key = call.data.get("key")
# @FIXME: Retrieve the topic_prefix from config_entry
topic = f"{DEFAULT_TOPIC_PREFIX}/{serial_number}/{key}/set"
value = call.data.get("value")

serial_number = call.data.get(ATTR_SERIAL_NUMBER)
key = call.data.get(ATTR_KEY)
value = call.data.get(ATTR_VALUE)

# Retrieve the topic_prefix from config_entry
topic_prefix = DEFAULT_TOPIC_PREFIX
if DOMAIN in hass.data and serial_number in hass.data[DOMAIN]:
entry = hass.data[DOMAIN][serial_number]
topic_prefix = entry.data.get(CONF_TOPIC_PREFIX, DEFAULT_TOPIC_PREFIX)
else:
_LOGGER.warning(
"No config entry found for serial number %s, using default topic prefix %s",
serial_number,
DEFAULT_TOPIC_PREFIX,
)

topic = f"{topic_prefix}/{serial_number}/{key}/set"

# Handle value formatting
if not value.isnumeric():
if value in ["true", "True"]:
value = "true"
elif value in ["false", "False"]:
value = "false"
else:
value = f'"{value}"'


_LOGGER.debug(
"Publishing to topic %s with value %s (serial: %s, key: %s)",
topic,
value,
serial_number,
key,
)

await mqtt.async_publish(hass, topic, value)

hass.services.async_register(
Expand Down
Loading