From d82073c5e2c56289a352ac5e2d4351043d3758a7 Mon Sep 17 00:00:00 2001 From: Craig Callender Date: Fri, 13 Mar 2026 16:10:16 +0000 Subject: [PATCH] Adding sensor which denotes the timestamp of when SolisCloud last retreived data from the user's inverter. --- apps/predbat/solis.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/apps/predbat/solis.py b/apps/predbat/solis.py index a39cc1900..172654000 100644 --- a/apps/predbat/solis.py +++ b/apps/predbat/solis.py @@ -1982,6 +1982,24 @@ async def publish_entities(self): except (ValueError, TypeError): self.log("Warn: Failed to convert battery capacity for {}: {}".format(inverter_sn, battery_capacity_ah)) # Debug log + # Data logger timestamp from inverterDetail API (shows when the data logger last reported to SolisCloud) + data_timestamp_ms = detail.get("dataTimestamp") + if data_timestamp_ms is not None: + try: + data_timestamp_dt = datetime.fromtimestamp(int(data_timestamp_ms) / 1000, tz=UTC) + self.dashboard_item( + f"sensor.{prefix}_solis_{inverter_sn_lower}_data_timestamp", + state=data_timestamp_dt.isoformat(), + attributes={ + "friendly_name": f"Solis {inverter_name} Data Logger Timestamp", + "device_class": "timestamp", + "icon": "mdi:clock-check-outline", + }, + app="solis" + ) + except (ValueError, TypeError, OSError): + self.log(f"Warn: Failed to parse dataTimestamp for {inverter_sn}: {data_timestamp_ms}") + # ==================== Control Methods ==================== async def set_storage_mode_if_needed(self, inverter_sn, mode):