"""Setzt [homeassistant] aktiv in config/secrets.toml auf true oder false. Gibt nie einen Wert der Datei aus. Aufruf: python ha_aktiv_setzen.py Geaendert wird genau eine Zeile im Abschnitt [homeassistant]; alles andere bleibt Byte fuer Byte stehen. """ import sys import tomllib from pathlib import Path pfad = Path(sys.argv[1]) ziel = sys.argv[2] assert ziel in ("true", "false") roh = pfad.read_bytes() text = roh.decode("utf-8") zeilenende = "\r\n" if "\r\n" in text else "\n" zeilen = text.split(zeilenende) im_abschnitt = False treffer = [] for nummer, zeile in enumerate(zeilen): kern = zeile.strip() if kern.startswith("["): im_abschnitt = kern == "[homeassistant]" continue if im_abschnitt and kern.split("=")[0].strip() == "aktiv": treffer.append(nummer) if len(treffer) != 1: print(f"ABBRUCH: {len(treffer)} Zeilen 'aktiv' im Abschnitt [homeassistant] gefunden, erwartet genau eine") sys.exit(2) vorher = tomllib.loads(text)["homeassistant"]["aktiv"] zeilen[treffer[0]] = f"aktiv = {ziel}" neu = zeilenende.join(zeilen) nachher = tomllib.loads(neu) # Die Probe vor dem Schreiben: Die Datei bleibt gueltiges TOML, und nur dieser eine Wert aendert sich. alt = tomllib.loads(text) alt["homeassistant"]["aktiv"] = nachher["homeassistant"]["aktiv"] assert alt == nachher, "mehr als ein Wert haette sich geaendert" pfad.write_bytes(neu.encode("utf-8")) print(f"[homeassistant] aktiv: {vorher} -> {nachher['homeassistant']['aktiv']}; Abschnitte {sorted(nachher)}; " f"Laenge der Adresse {len(nachher['homeassistant'].get('webhook_url', ''))}")