From 2e5e410897939514ed47a4ff2d55e371971afd02 Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Tue, 21 Apr 2026 01:43:57 +0200 Subject: [PATCH] More garbage collection --- gauge.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/gauge.py b/gauge.py index 77d3f7c..a859b45 100644 --- a/gauge.py +++ b/gauge.py @@ -917,7 +917,20 @@ _last_mqtt_check = 0 _discovery_queue = [] _discovery_idx = 0 _last_discovery_ms = 0 -_DISCOVERY_INTERVAL_MS = 200 +_DISCOVERY_INTERVAL_MS = 350 + + +def _compact_discovery_payload(payload): + """Trim optional HA discovery fields when RAM is tight.""" + compact = dict(payload) + + # Light entities are the largest payloads because they repeat effect metadata. + # Keep core functionality, but omit optional effect declarations to reduce heap use. + if compact.get("schema") == "json": + compact.pop("effect", None) + compact.pop("effect_list", None) + + return compact def check_mqtt(): @@ -968,7 +981,8 @@ def check_mqtt(): def _publish_discovery_entity(client, topic, payload, log_msg): - client.publish(topic, ujson.dumps(payload), retain=True) + gc.collect() + client.publish(topic, ujson.dumps(_compact_discovery_payload(payload)), retain=True) info(log_msg) @@ -1241,6 +1255,7 @@ def service_discovery(): if _last_discovery_ms and utime.ticks_diff(now, _last_discovery_ms) < _DISCOVERY_INTERVAL_MS: return + gc.collect() topic, payload, log_msg = _discovery_queue[_discovery_idx] try: if isinstance(payload, bytes): @@ -1251,8 +1266,7 @@ def service_discovery(): log_err(f"Discovery publish failed for {topic}: {e}") _discovery_idx += 1 _last_discovery_ms = utime.ticks_ms() - if (_discovery_idx & 3) == 0: - gc.collect() + gc.collect() def publish_online(client):