diff --git a/server/collect.py b/server/collect.py index c21756e..139a637 100644 --- a/server/collect.py +++ b/server/collect.py @@ -84,7 +84,19 @@ def run(args: argparse.Namespace) -> None: log.info("Midnight UTC rotation → %s", out) try: - we_connect.update(wc) + ok = we_connect.update(wc) + # Re-select vehicle after every update: if doLogin() was triggered + # (rare token-expiry full re-login), the library rebuilds its vehicle + # list with new objects, making our old reference permanently stale. + vehicle, err = we_connect.select_vehicle(wc, args.vin) + if err: + log.warning("Vehicle re-selection after update failed: %s", err) + continue + log.debug( + "update ok=%s vehicle._states keys: %s", + ok, + list(vehicle.attrs.keys()), + ) snapshot = extract_all(vehicle) if snapshot is None: log.warning("extract_all returned None — skipping this cycle") @@ -95,7 +107,13 @@ def run(args: argparse.Namespace) -> None: payload = jay_diff_full(last_broadcast, snapshot, combine_upd_add=True) last_broadcast = snapshot network.broadcast(payload, push_clients, push_lock) - log.info("Record #%d saved at %s", len(store["records"]), snapshot["ts"]) + changed = [k for k in payload if k != "ts"] + log.info( + "Record #%d at %s changed=%s", + len(store["records"]), + snapshot["ts"], + changed or "none", + ) except KeyboardInterrupt: raise except AuthenticationError: diff --git a/server/we_connect.py b/server/we_connect.py index bda75de..d7f78e7 100644 --- a/server/we_connect.py +++ b/server/we_connect.py @@ -60,5 +60,11 @@ def select_vehicle(wc: _Session, vin: str | None): return vehicles[0], None -def update(wc: _Session) -> None: - wc.run(wc.connection.update()) +def update(wc: _Session) -> bool: + """Run one update cycle. Returns True if the library reported success.""" + ok = wc.run(wc.connection.update()) + if not ok: + log.warning("connection.update() returned False — data may not have refreshed") + else: + log.debug("connection.update() succeeded") + return bool(ok)