Skip to content

feat(smarthome): Sensoren read-only im Portal - #212

Merged
CallMeTechie merged 5 commits into
masterfrom
feat/smarthome-portal-sensors
Jul 1, 2026
Merged

feat(smarthome): Sensoren read-only im Portal#212
CallMeTechie merged 5 commits into
masterfrom
feat/smarthome-portal-sensors

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

Ziel

Sensoren read-only im Portal — Folge-Teilprojekt nach TP1/TP2/TP3. Ein Admin weist Sensoren einzelnen Nutzern zu (wie Geräte); eingeloggte und Trust-Nutzer sehen im Portal-Widget c-smarthome ihre zugewiesenen Sensoren als read-only Karten mit formatiertem Messwert. Keine Steuerung. Hinter Pro-Key smarthome.

Spec: docs/superpowers/specs/2026-07-01-smarthome-portal-sensors-design.md (§1–§9)

Änderungen

  • Owner-Service (smarthomeOwners.js): ASSIGNABLE += sensor. switch bleibt nicht-zuweisbar. resourcesOwnedBy unverändert.
  • Portal-API (routes/api/portal.js): GET /smarthome liefert redigiertes sensors[] neben devices; SH_STATE_KEYS += type,value; no_data nur noch wenn devices und sensors leer (frühes Return entfernt → Sensor-only-Owner korrekt); POST /smarthome/:id/state lehnt sensor/switch hart mit 400 SMARTHOME_NOT_CONTROLLABLE ab (vor jeder Mutation).
  • Portal-Widget (portal.njk, portal.js, portal.css, en/de.json): read-only Sensoren-Sektion + formatSensor (Unknown-Type → „—"); portal-i18n-Keys en+de.
  • Admin-UI (smarthome.js): Owner-Picker (Chips + „verwalten") auf Sensorkarten; Schalter bleiben außen vor.

Sicherheit

  • Redaktion: Payload nur {id,kind,name,capabilities,state}, state-Allowlist {on,bri,reachable,type,value} — keine Gateway-/deCONZ-/Route-Internas.
  • Sensoren nie steuerbar (Defense-in-Depth-Reject vor setResourceState).
  • Owner-Scope nur aus req.portalOwnerId (Middleware) — kein IDOR.
  • Trust darf Sensoren sehen (bewusste Parität mit Geräten, §6).

Tests

  • tests/smarthome_owners.test.js: setOwners akzeptiert sensor; switch wirft weiterhin.
  • tests/smarthome_portal_api.test.js: Sensor im sensors[] (redigiert), nicht-besessener Sensor ausgeschlossen, Sensor-only-Owner ≠ no_data, POST auf Sensor → 400. Bestands-devices-Assertions ungebrochen.

Nicht enthalten (bewusst)

Schalter im Portal (TP3-Thema), WebSocket-Live-Push, Sensor-Steuerung/Schwellen-Alarme (YAGNI).

Hinweis

Portal-Routen ohne CSRF ist bekannt/bewusst (CodeQL Alert #6, non-blocking — Widget sendet keinen Token, wie TP2/midea).

@CallMeTechie
CallMeTechie merged commit 78bb972 into master Jul 1, 2026
8 checks passed
@CallMeTechie
CallMeTechie deleted the feat/smarthome-portal-sensors branch July 1, 2026 13:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant