Přeskočit obsah

Websocket API

Integrace registruje tyto websocketové příkazy Home Assistantu. Používá je karta i editor a můžeš je použít i ze skriptů nebo z vývojářských nástrojů prohlížeče. Příkazy označené admin se uživatelům, kteří nejsou administrátoři, odmítnou.

Každý příkaz dodržuje obvyklou konvenci websocketu: pošli {"id": <n>, "type": "...", ...} a obdržíš {"id": <n>, "type": "result", "success": true, "result": ...} nebo "success": false s objektem error.

plan/get

Vrací uložený půdorys; před prvním uložením {}. Není omezen na administrátory.

{"id": 1, "type": "fns_floorplan/plan/get"}
{"id": 1, "type": "result", "success": true, "result": {"rev": 7, "rooms": [], "levels": []}}

plan/subscribe

Pošle půdorys okamžitě a znovu po každém uložení. Takto se otevřené karty samy překreslují.

{"id": 2, "type": "fns_floorplan/plan/subscribe"}
{"id": 2, "type": "result", "success": true, "result": null}
{"id": 2, "type": "event", "event": {"rev": 7, "rooms": []}}

plan/save

Admin. Nahradí celý půdorys. Vždy si nejdřív přečti aktuální půdorys a pošli ho zpět se svými změnami.

{"id": 3, "type": "fns_floorplan/plan/save", "plan": {"rooms": [], "levels": []}, "rev": 7}
{"id": 3, "type": "result", "success": true, "result": {"ok": true, "rev": 8}}

Revize a konflikty

Každé uložení zapíše půdorys s rev zvýšenou o jedna. Pokud požadavek obsahuje rev, uložení uspěje, jen když se rovná uložené revizi. Jinak dostaneš chybu a nic se nezapíše:

{"id": 3, "type": "result", "success": false,
 "error": {"code": "conflict", "message": "The plan changed meanwhile (revision 8)"}}

Bez rev uložení vždy přepíše (hodí se pro importy). Předchozí půdorys se nejdřív odešle do historie, pokud obsahoval místnosti. Pokud integrace není nastavená, kód chyby je not_loaded.

history/list

Admin. Vypíše posledních 20 uložených revizí, nejnovější první.

{"id": 4, "type": "fns_floorplan/history/list"}
{"id": 4, "type": "result", "success": true, "result": [
  {"rev": 7, "saved_at": "2026-10-04T12:00:00+00:00", "rooms": 3, "items": 12}
]}

items počítá nábytek, zařízení, senzory a texty.

history/get

Admin. Vrátí jeden uložený půdorys podle jeho revize, nebo chybu not_found.

{"id": 5, "type": "fns_floorplan/history/get", "rev": 7}

yaml/parse

Admin. Zpracuje text YAML pomocí vlastního loaderu Home Assistantu. Chyba má kód invalid_yaml.

{"id": 6, "type": "fns_floorplan/yaml/parse", "text": "- if:\n    - entity: light.x\n      state: 'on'\n  color: red"}
{"id": 6, "type": "result", "success": true, "result": {"data": [{"if": [{"entity": "light.x", "state": "on"}], "color": "red"}]}}

yaml/dump

Admin. Opak: data (seznam nebo objekt) na text YAML.

{"id": 7, "type": "fns_floorplan/yaml/dump", "data": [{"color": "red"}]}
{"id": 7, "type": "result", "success": true, "result": {"text": "- color: red\n"}}

Podkladové obrázky (HTTP)

Podkladové obrázky pater se nenahrávají přes websocket, ale přes HTTP endpoint integrace. Potřebuje přístupový token uživatele s právy administrátora.

Metoda URL Tělo Výsledek
POST /api/fns_floorplan/background formulář multipart: level (id patra), file (png, jpg, jpeg, webp nebo svg, nejvýše 15 MB) {"url": "/local/fns_floorplan/bg_<level>.<ext>?v=<timestamp>"}
DELETE /api/fns_floorplan/background?level=<id> žádné {"ok": true}

Soubor se ukládá do www/fns_floorplan/bg_<level>.<ext> (nové nahrání nahradí starý soubor daného patra). Chyby: 403 pro uživatele bez práv administrátora, 400 pro nepodporovaný typ, 413 pro příliš velký soubor. Vrácená url patří do backgrounds[level].url v půdorysu, který se pak uloží přes plan/save.

curl -X POST -H "Authorization: Bearer $TOKEN" \
  -F level=0 -F file=@floor.png \
  http://homeassistant.local:8123/api/fns_floorplan/background

Viz také Formát plánu.