From 423b9f91be5b8fb20c99d7d4a73e2a84a615a26b Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Tue, 21 Apr 2026 21:15:10 +0200 Subject: [PATCH] OpenCode experiments... --- gauge.py | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/gauge.py b/gauge.py index f2dd320..ab627d1 100644 --- a/gauge.py +++ b/gauge.py @@ -25,19 +25,10 @@ import network import utime import ujson import gc +import usocket from umqtt.robust import MQTTClient from machine import UART -# Activate WiFi driver before any heavy heap allocation so it can claim its -# contiguous DRAM block before the Python heap fragments the address space. -# Only activate if not already running (e.g. boot.py may have started it). -gc.collect() -_early_wlan = network.WLAN(network.STA_IF) -if not _early_wlan.active(): - _early_wlan.active(True) -del _early_wlan -gc.collect() - # --------------------------------------------------------------------------- # Logging # --------------------------------------------------------------------------- @@ -577,6 +568,22 @@ def connect_wifi(ssid, password, timeout_s=15, force_reconnect=False): info(f" MAC : {mac}") info(f" IP : {ip} mask:{mask} gw:{gw} dns:{dns}") utime.sleep_ms(500) + if dns in ("0.0.0.0", ""): + info("DNS not yet from DHCP — waiting ...") + for _ in range(30): + utime.sleep_ms(200) + ip, mask, gw, dns = _wifi_sta.ifconfig() + if dns not in ("0.0.0.0", ""): + info(f"DHCP settled: DNS={dns}") + break + info(" still waiting ...") + utime.sleep_ms(1000) + info(f"Testing DNS for {MQTT_BROKER} ...") + try: + ai = usocket.getaddrinfo(MQTT_BROKER, MQTT_PORT) + info(f"DNS resolved: {ai[0][4][0]}") + except Exception as e: + warn(f"DNS test failed: {e}") return ip except Exception as e: last_error = e @@ -894,16 +901,25 @@ def connect_mqtt(): except Exception: pass + broker_ip = MQTT_BROKER + try: + ai = usocket.getaddrinfo(MQTT_BROKER, MQTT_PORT) + broker_ip = ai[0][4][0] + info(f"Resolved {MQTT_BROKER} → {broker_ip}") + except Exception as e: + warn(f"Could not resolve {MQTT_BROKER}: {e} — using hostname as-is") client = MQTTClient( client_id=MQTT_CLIENT_ID, - server=MQTT_BROKER, + server=broker_ip, port=MQTT_PORT, user=MQTT_USER, password=MQTT_PASSWORD, keepalive=30, ) client.set_callback(on_message) + client.sock.settimeout(15) client.connect() + client.sock.settimeout(0) client_ref = client _mqtt_connected = True info(f"MQTT connected client_id={MQTT_CLIENT_ID}") @@ -1311,6 +1327,11 @@ def apply_motion_defaults(): def main(): + gc.collect() + _w = network.WLAN(network.STA_IF) + if not _w.active(): + _w.active(True) + del _w gc.collect() info("=" * 48) info("Gauge MQTT controller starting")