From 4dcf2ee6aab5ca14db5ff66cd658ec68a972f999 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Wed, 27 May 2026 21:40:47 +0200 Subject: [PATCH] =?UTF-8?q?data=5Fmodel:=20fix=20extract=5Fdoors=20?= =?UTF-8?q?=E2=80=94=20filter=20None=20values,=20fix=20structure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Don't store attributes whose .value is None; avoids spurious "None" strings in the snapshot (lock_state, open_state were unset) - Flatten the structure: overall lock_state/open_state now live directly under 'doors' instead of the double-nested 'doors.doors.overallState' - Give vehicle.windows its own try/except, independent of vehicle.doors - Capture doors.open_state (overall open state) which was missing before Co-Authored-By: Claude Sonnet 4.6 --- server/data_model.py | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/server/data_model.py b/server/data_model.py index e55c409..8b83eb1 100644 --- a/server/data_model.py +++ b/server/data_model.py @@ -180,23 +180,34 @@ def extract_doors(vehicle) -> dict | None: try: doors = vehicle.doors - result["doors"] = { - "overallState": _str(doors.lock_state), - "doors": { - name: { - "lockState": _str(door.lock_state), - "openState": _str(door.open_state), - } - for name, door in doors.doors.items() - }, - "windows": { - name: {"openState": _str(win.open_state)} - for name, win in vehicle.windows.windows.items() - }, - } + if doors.lock_state.value is not None: + result["lock_state"] = _str(doors.lock_state) + if doors.open_state.value is not None: + result["open_state"] = _str(doors.open_state) + door_entries = {} + for name, door in doors.doors.items(): + entry = {} + if door.lock_state.value is not None: + entry["lock_state"] = _str(door.lock_state) + if door.open_state.value is not None: + entry["open_state"] = _str(door.open_state) + if entry: + door_entries[name] = entry + if door_entries: + result["doors"] = door_entries except Exception: log.debug("vehicle.doors unavailable", exc_info=True) + try: + window_entries = {} + for name, win in vehicle.windows.windows.items(): + if win.open_state.value is not None: + window_entries[name] = {"open_state": _str(win.open_state)} + if window_entries: + result["windows"] = window_entries + except Exception: + log.debug("vehicle.windows unavailable", exc_info=True) + return result or None