From 665b0c43aff5b5ba28ce75be4cd419d382edd673 Mon Sep 17 00:00:00 2001 From: henry Date: Sat, 10 Jan 2026 13:24:35 +0200 Subject: [PATCH 1/3] add hub version and url to repo --- hub-server/mqtt_manager.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/hub-server/mqtt_manager.py b/hub-server/mqtt_manager.py index 6a7029d..64a771e 100644 --- a/hub-server/mqtt_manager.py +++ b/hub-server/mqtt_manager.py @@ -2,6 +2,7 @@ import logging import time import paho.mqtt.client as mqtt +from __version__ import __version__ from config import ( MQTT_ENABLED, MQTT_BROKER, MQTT_PORT, MQTT_USER, MQTT_PASS, MQTT_BASE_TOPIC, HA_DISCOVERY, HA_DISCOVERY_PREFIX, @@ -24,6 +25,10 @@ def get_topic(label, sensor_type="power"): return f"{MQTT_BASE_TOPIC}/{label}/energy" +GITHUB_REPO = "https://github.com/DevOldSchool/powermeter_hub_server" +SW_VERSION = __version__ + + class MQTTManager: def __init__(self, max_retries: int = 10, retry_interval: int = 5): self.enabled = MQTT_ENABLED @@ -145,7 +150,9 @@ def publish_power_discovery(self, label: str, sid: str, topic: str, hub_version: "name": DEVICE_NAME, "identifiers": DEVICE_IDENTIFIERS, "manufacturer": DEVICE_MANUFACTURER, - "model": DEVICE_MODEL + "model": DEVICE_MODEL, + "sw_version": SW_VERSION, + "configuration_url": GITHUB_REPO } } @@ -175,7 +182,9 @@ def publish_energy_discovery(self, topic: str): "name": DEVICE_NAME, "identifiers": DEVICE_IDENTIFIERS, "manufacturer": DEVICE_MANUFACTURER, - "model": DEVICE_MODEL + "model": DEVICE_MODEL, + "sw_version": SW_VERSION, + "configuration_url": GITHUB_REPO } } From cfdfc89ca29cab05389e6935c947dcdbc7d6fa9c Mon Sep 17 00:00:00 2001 From: henry Date: Sun, 11 Jan 2026 22:30:58 +0200 Subject: [PATCH 2/3] Address review feedback: add hw_version and DEVICE_URL --- hub-server/config.py | 1 + hub-server/mqtt_manager.py | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/hub-server/config.py b/hub-server/config.py index 9b6bc11..9e81ec6 100644 --- a/hub-server/config.py +++ b/hub-server/config.py @@ -63,3 +63,4 @@ DEVICE_IDENTIFIERS = os.getenv("DEVICE_IDENTIFIERS", ["efergy"]) DEVICE_MANUFACTURER = os.getenv("DEVICE_MANUFACTURER", "Efergy") DEVICE_MODEL = os.getenv("DEVICE_MODEL", "Hub") +DEVICE_URL = os.getenv("DEVICE_URL", "https://github.com/DevOldSchool/powermeter_hub_server") diff --git a/hub-server/mqtt_manager.py b/hub-server/mqtt_manager.py index 64a771e..203b228 100644 --- a/hub-server/mqtt_manager.py +++ b/hub-server/mqtt_manager.py @@ -12,12 +12,12 @@ POWER_UNIT_OF_MEASUREMENT_H3, POWER_VALUE_TEMPLATE_H3, ENERGY_NAME, ENERGY_ICON, ENERGY_DEVICE_CLASS, ENERGY_STATE_CLASS, ENERGY_UNIT_OF_MEASUREMENT, ENERGY_VALUE_TEMPLATE, - DEVICE_NAME, DEVICE_MODEL, DEVICE_IDENTIFIERS, DEVICE_MANUFACTURER + DEVICE_NAME, DEVICE_MODEL, DEVICE_IDENTIFIERS, DEVICE_MANUFACTURER, + DEVICE_URL ) ENERGY_SENSOR_LABEL = "energy_consumption" - def get_topic(label, sensor_type="power"): if sensor_type == "power": return f"{MQTT_BASE_TOPIC}/{label}/power" @@ -25,7 +25,6 @@ def get_topic(label, sensor_type="power"): return f"{MQTT_BASE_TOPIC}/{label}/energy" -GITHUB_REPO = "https://github.com/DevOldSchool/powermeter_hub_server" SW_VERSION = __version__ @@ -37,6 +36,7 @@ def __init__(self, max_retries: int = 10, retry_interval: int = 5): self.max_retries = max_retries self.retry_interval = retry_interval self.connected = False + self.hub_version: str | None = None if not self.enabled: logging.debug("MQTT disabled via config.") @@ -118,6 +118,9 @@ def publish(self, topic: str, payload: dict, retain: bool = False): def publish_power_discovery(self, label: str, sid: str, topic: str, hub_version: str): if not self.enabled or not HA_DISCOVERY: return + if self.hub_version is None: + logging.warning("Energy discovery attempted without hub_version – skipped") + return config_topic = f"{HA_DISCOVERY_PREFIX}/sensor/{label}/config" @@ -152,7 +155,8 @@ def publish_power_discovery(self, label: str, sid: str, topic: str, hub_version: "manufacturer": DEVICE_MANUFACTURER, "model": DEVICE_MODEL, "sw_version": SW_VERSION, - "configuration_url": GITHUB_REPO + "hw_version": f"{hub_version}", + "configuration_url": DEVICE_URL } } @@ -164,6 +168,7 @@ def publish_energy_discovery(self, topic: str): """ Home Assistant discovery for energy sensor. """ + #logging.warning(f"Energy discovery using hub_version={self.hub_version}") if not self.enabled or not HA_DISCOVERY: return @@ -184,7 +189,7 @@ def publish_energy_discovery(self, topic: str): "manufacturer": DEVICE_MANUFACTURER, "model": DEVICE_MODEL, "sw_version": SW_VERSION, - "configuration_url": GITHUB_REPO + "configuration_url": DEVICE_URL } } @@ -197,6 +202,11 @@ def publish_power(self, label: str, sid: str, hub_version: str, value: float): if not self.enabled: return + # Store hub version once + if self.hub_version is None: + self.hub_version = hub_version + logging.info(f"Detected hub version: {hub_version}") + logging.debug(f"Publishing power for {label} with value {value}") topic = get_topic(label, sensor_type="power") From c7c5ffbcd55da8180ba321d67b3a4fcb69019a6f Mon Sep 17 00:00:00 2001 From: henry Date: Mon, 12 Jan 2026 17:12:05 +0200 Subject: [PATCH 3/3] Address review feedback: removed SW_VERSION --- hub-server/mqtt_manager.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/hub-server/mqtt_manager.py b/hub-server/mqtt_manager.py index 203b228..0099951 100644 --- a/hub-server/mqtt_manager.py +++ b/hub-server/mqtt_manager.py @@ -25,8 +25,6 @@ def get_topic(label, sensor_type="power"): return f"{MQTT_BASE_TOPIC}/{label}/energy" -SW_VERSION = __version__ - class MQTTManager: def __init__(self, max_retries: int = 10, retry_interval: int = 5): @@ -154,7 +152,6 @@ def publish_power_discovery(self, label: str, sid: str, topic: str, hub_version: "identifiers": DEVICE_IDENTIFIERS, "manufacturer": DEVICE_MANUFACTURER, "model": DEVICE_MODEL, - "sw_version": SW_VERSION, "hw_version": f"{hub_version}", "configuration_url": DEVICE_URL } @@ -168,7 +165,6 @@ def publish_energy_discovery(self, topic: str): """ Home Assistant discovery for energy sensor. """ - #logging.warning(f"Energy discovery using hub_version={self.hub_version}") if not self.enabled or not HA_DISCOVERY: return @@ -188,7 +184,6 @@ def publish_energy_discovery(self, topic: str): "identifiers": DEVICE_IDENTIFIERS, "manufacturer": DEVICE_MANUFACTURER, "model": DEVICE_MODEL, - "sw_version": SW_VERSION, "configuration_url": DEVICE_URL } }