diff --git a/grobro/ha/client.py b/grobro/ha/client.py index 92e2965..57091cc 100644 --- a/grobro/ha/client.py +++ b/grobro/ha/client.py @@ -641,6 +641,31 @@ def __publish_device_discovery(self, device_id: str, effective_max_bat: int | No "icon": "mdi:identifier", } + # Combined firmware version (NOAH = 3 parts, NEXA = 4 parts) + fw_version_parts = sorted( + name + for name in known_registers.input_registers + if name.startswith("fw_version_part_") + ) + + if fw_version_parts: + combined_name = "fw_version" + firmware_unique_id = f"grobro_{device_id}_{combined_name}" + + value_template = ".".join( + f"{{{{ value_json['{part}'] }}}}" + for part in fw_version_parts + ) + + payload["cmps"][firmware_unique_id] = { + "platform": "sensor", + "name": "Firmware Version", + "state_topic": f"{HA_BASE_TOPIC}/grobro/{device_id}/state", + "value_template": value_template, + "unique_id": firmware_unique_id, + "icon": "mdi:information", + } + # Serial Number Entity serial_unique_id = f"grobro_{device_id}_serial" payload["cmps"][serial_unique_id] = { diff --git a/grobro/model/growatt_nexa_registers.json b/grobro/model/growatt_nexa_registers.json index fc6e4bc..20d71ea 100644 --- a/grobro/model/growatt_nexa_registers.json +++ b/grobro/model/growatt_nexa_registers.json @@ -2242,6 +2242,74 @@ "state_class": "measurement", "icon": "mdi:thermometer" } + }, + "fw_version_part_1": { + "growatt": { + "position": { + "register_no": 119, + "offset": 0, + "size": 1 + }, + "data": { + "data_type": "INT" + } + }, + "homeassistant": { + "name": "Firmware Version Part 1", + "publish": false, + "icon": "mdi:information" + } + }, + "fw_version_part_2": { + "growatt": { + "position": { + "register_no": 119, + "offset": 1, + "size": 1 + }, + "data": { + "data_type": "INT" + } + }, + "homeassistant": { + "name": "Firmware Version Part 2", + "publish": false, + "icon": "mdi:information" + } + }, + "fw_version_part_3": { + "growatt": { + "position": { + "register_no": 120, + "offset": 0, + "size": 1 + }, + "data": { + "data_type": "INT" + } + }, + "homeassistant": { + "name": "Firmware Version Part 3", + "publish": false, + "icon": "mdi:information" + } + }, + "fw_version_part_4": { + "growatt": { + "position": { + "register_no": 120, + "offset": 1, + "size": 1 + }, + "data": { + "data_type": "INT" + } + }, + "homeassistant": { + "name": "Firmware Version Part 4", + "publish": false, + "icon": "mdi:information" + } } } } diff --git a/grobro/model/growatt_noah_registers.json b/grobro/model/growatt_noah_registers.json index 6349be0..1aa55f2 100644 --- a/grobro/model/growatt_noah_registers.json +++ b/grobro/model/growatt_noah_registers.json @@ -1920,6 +1920,57 @@ "publish": true, "icon": "mdi:counter" } + }, + "fw_version_part_1": { + "growatt": { + "position": { + "register_no": 119, + "offset": 0, + "size": 1 + }, + "data": { + "data_type": "INT" + } + }, + "homeassistant": { + "name": "Firmware Version Part 1", + "publish": false, + "icon": "mdi:information" + } + }, + "fw_version_part_2": { + "growatt": { + "position": { + "register_no": 119, + "offset": 1, + "size": 1 + }, + "data": { + "data_type": "INT" + } + }, + "homeassistant": { + "name": "Firmware Version Part 2", + "publish": false, + "icon": "mdi:information" + } + }, + "fw_version_part_3": { + "growatt": { + "position": { + "register_no": 120, + "offset": 0, + "size": 1 + }, + "data": { + "data_type": "INT" + } + }, + "homeassistant": { + "name": "Firmware Version Part 3", + "publish": false, + "icon": "mdi:information" + } } } }