Merge remote-tracking branch 'origin/montana-black-shield' into merge-probe

* origin/montana-black-shield:
  docs(bulb-map): Montana-Black-Shield (f960) ergaenzt
  chore(tools): qconnex-Migrationswerkzeug und HA-Integration ins Repo
  feat(station): Montana-Black-Produkt-ID -> Ziel ledshield_rgb
  feat(board): ledshield_rgb — Montana Black RGB-LED-Shield (analoge RGB-Streifen)
  build: tools/podman.sh — docker.sh-Pendant für podman (gleiches Image, gleicher Mount)
  Überträgt lokale Änderungen (nl_crc8 unsigned-shift, docker.sh cd -P) in neuen Top-Level-Tree und entfernt altes ninlight-w600/
  Initial commit
This commit is contained in:
Michael Sauer
2026-09-26 17:18:27 +02:00
38 changed files with 1260 additions and 26 deletions
+1
View File
@@ -40,6 +40,7 @@ _BASE = [
("klyqa.lighting.cw-ww.e14", "e14_cw", "Klyqa E14 CW/WW"),
("klyqa.lighting.cw-ww.gu10", "gu10_cw", "Klyqa GU10 CW/WW"),
("klyqa.lighting.cw-ww.g95", "g95_cw", "Klyqa G95 Vintage CW/WW"),
("qcx.montana.black.ledshield.rgb", "ledshield_rgb", "Montana Black RGB LED Shield"),
]
_UNSAFE = re.compile(r"[^0-9A-Za-z+\-_.]")
+2 -1
View File
@@ -33,7 +33,8 @@ from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
import products
TARGETS = ("evk", "e27_rgb", "e14_rgb", "gu10_rgb", "e27_cw", "e14_cw", "gu10_cw", "g95_cw")
TARGETS = ("evk", "e27_rgb", "e14_rgb", "gu10_rgb", "e27_cw", "e14_cw", "gu10_cw", "g95_cw",
"ledshield_rgb")
PATH_RE = re.compile(r"^/ninlight_(" + "|".join(TARGETS) + r")_ota\.img$")
TRAILER_SIZE = 512
TRAILER_MAGIC = b"NINL"
+3 -3
View File
@@ -7,12 +7,12 @@ import products # noqa: E402
def test_table_is_complete():
"""Sieben Geraete in beiden Schreibweisen der Produkt-ID, plus das EVK, das nur eine
"""Acht Geraete in beiden Schreibweisen der Produkt-ID, plus das EVK, das nur eine
Produktions-ID hat."""
assert len(products.PRODUCTS) == 15
assert len(products.PRODUCTS) == 17
targets = {p.target for p in products.PRODUCTS.values()}
assert targets == {"evk", "e27_rgb", "e14_rgb", "gu10_rgb",
"e27_cw", "e14_cw", "gu10_cw", "g95_cw"}
"e27_cw", "e14_cw", "gu10_cw", "g95_cw", "ledshield_rgb"}
def test_table_carries_no_variant():