fix(spoolman): Slot-Spool-Zuordnung in config.ini persistieren + beim Start laden; API-Feldname-Kompatibilität (slot_spools/slot_map)
All checks were successful
Nightly Build / build (push) Successful in 10m48s

This commit is contained in:
2026-06-30 15:43:20 +02:00
parent 44383fabec
commit 6e9ba0672f

View File

@@ -911,7 +911,23 @@ class KobraXBridge:
SpoolmanClient(_sm_url, getattr(args, "spoolman_sync_rate", 0))
if _sm_url else None
)
self._spoolman_slot_spools: dict[int, int] = {} # {ams_slot_idx: spoolman_spool_id}
# Persistierte Spool-Zuordnung aus config.ini laden
_slot_spools_init: dict[int, int] = {}
try:
import configparser as _cp2
_cfg_path2 = config_loader._find_config_file()
if _cfg_path2:
_cfg2 = _cp2.ConfigParser()
_cfg2.read(_cfg_path2, encoding="utf-8")
_raw = _cfg2.get("spoolman", "slot_spools", fallback="")
for _pair in _raw.split(","):
if ":" in _pair:
_k, _v = _pair.strip().split(":", 1)
if _k.isdigit() and _v.isdigit():
_slot_spools_init[int(_k)] = int(_v)
except Exception:
pass
self._spoolman_slot_spools: dict[int, int] = _slot_spools_init # {ams_slot_idx: spoolman_spool_id}
self._spoolman_slot_usage: dict[int, float] = {} # per-slot accumulated mm this print
self._spoolman_slot_reported: dict[int, float] = {} # per-slot mm already sent to Spoolman
self._spoolman_last_usage: float = 0.0 # supplies_usage at last attribution tick
@@ -1058,11 +1074,26 @@ class KobraXBridge:
data = await request.json()
except Exception:
return self._json_cors({"error": "invalid JSON"}, status=400)
slot_map = data.get("slot_map") or {}
slot_map = data.get("slot_map") or data.get("slot_spools") or {}
self._spoolman_slot_spools = {
int(k): int(v) for k, v in slot_map.items()
if str(v).isdigit() and int(v) > 0
}
# Persistieren in config.ini damit die Zuordnung Bridge-Neustart überlebt
try:
import configparser as _cp
_cfg_path = config_loader._find_config_file()
if _cfg_path:
_cfg = _cp.ConfigParser()
_cfg.read(_cfg_path, encoding="utf-8")
if not _cfg.has_section("spoolman"):
_cfg.add_section("spoolman")
_cfg.set("spoolman", "slot_spools", ",".join(
f"{k}:{v}" for k, v in self._spoolman_slot_spools.items()))
with open(_cfg_path, "w", encoding="utf-8") as _f:
_cfg.write(_f)
except Exception as _e:
log.debug(f"Spoolman slot_spools persist error: {_e}")
self._spoolman_slot_usage = {}
self._spoolman_slot_reported = {}
self._spoolman_last_usage = 0.0