Formát plánu¶
Půdorys je jeden objekt JSON uložený v .storage/fns_floorplan. Editor ho čte a zapisuje; můžeš ho také přečíst příkazem fns_floorplan/plan/get a nahradit příkazem fns_floorplan/plan/save (Websocket API).
- Souřadnice jsou v metrech,
xdoprava,zdolů. revje počítadlo revizí, spravuje ho integrace; nenastavuj ho ručně.- Místnosti a prvky prvního patra nemají
level.
Nejvyšší úroveň¶
| Klíč | Typ | Výchozí | Popis |
|---|---|---|---|
rev |
integer | 0 | Revize, zvyšuje se každým uložením |
levels |
list | jedno patro | Patra [{id, name}]. Bez něj má půdorys jedno patro |
rooms |
list | [] |
Místnosti |
openings |
list | [] |
Dveře a okna |
furniture |
list | [] |
Nábytek a světla |
sensors |
list | [] |
Binární senzory |
devices |
list | [] |
Spotřebiče |
texts |
list | [] |
Textové položky |
labels |
object | {} |
{room_id: [x, z]}: ruční poloha jmenovky místnosti |
outdoor |
string | žádné | Id místnosti, jejíž teplota se zobrazuje jako venkovní teplota |
backgrounds |
object | {} |
Podkladový obrázek pro každé patro {level_id: {url, left, top, width, opacity}}, jen v editoru |
vacuum |
object | žádné | Zastaralé: entity, room_sensor; editor ho převede na dok |
style |
object | {} |
Barvy půdorysu ze záložky Vzhled v editoru, viz Vzhled |
Styl¶
Barvy půdorysu ze záložky Vzhled v editoru. Každý klíč je volitelný a obsahuje "#rrggbb"; nenastavený klíč si ponechá výchozí hodnotu.
| Klíč | Co obarvuje | Výchozí |
|---|---|---|
wall_day / wall_night |
Stěny (den / noc) | primární barva motivu |
floor_day / floor_night |
Podlaha (den / noc) | bílá / tmavě modrá |
text_day / text_night |
Jmenovky místností a texty (den / noc) | tmavá / světlá |
accent |
Akcent tlačítek a zvýraznění | primární barva motivu |
lamp |
Světlo, které nehlásí vlastní barvu | barva aktivního světla z motivu, zesvětlená |
open |
Otevřené dveře nebo okno, odemčený zámek, čekající alarm | barva aktivního binárního senzoru z motivu, jinak oranžová |
alarm |
Spuštěný alarm | barva spuštěného alarmu z motivu, jinak červená |
blind |
Rolety | barva zavřeného krytu z motivu, jinak akcent |
cold / hot |
Chladná a teplá teplota na jmenovkách místností | modrá / oranžová |
Patra¶
| Klíč | Typ | Popis |
|---|---|---|
id |
string | Id patra |
name |
string | Název zobrazený na záložkách |
Místnosti, nábytek, zařízení, senzory a texty berou level s id patra; bez něj patří k prvnímu patru. Dveře a okna následují svou místnost.
Místnosti¶
| Klíč | Typ | Výchozí | Popis |
|---|---|---|---|
id |
string | Jedinečné id | |
name |
string | Název | |
points |
list of [x, z] |
Rohy mnohoúhelníku, nejméně 3 | |
level |
string | první patro | Id patra |
icon |
string | žádná | Ikona mdi: pro hlavičku panelu místnosti |
temperature |
entity | null | Senzor teploty |
humidity |
entity | null | Senzor vlhkosti |
sheet_extra |
list of entities | [] |
Další entity pro panel místnosti; záznam může být šablona, která vypíše id entit (Místnosti) |
label_info |
list | temperature, humidity |
Co jmenovka ukazuje: temperature, humidity, id entit nebo šablony |
label_name |
boolean | true |
false skryje název |
label_hidden |
boolean | false |
true skryje jmenovku |
label_rotation |
number | 0 | Otočení jmenovky ve stupních |
label_size |
string | m |
Velikost jmenovky: xs, s, m, l, xl, xxl |
rules |
list | [] |
Pravidla |
Otvory (dveře a okna)¶
| Klíč | Typ | Výchozí | Popis |
|---|---|---|---|
id |
string | Jedinečné id | |
room_id |
string | Místnost, na jejíž stěně otvor je | |
edge |
integer | Index stěny: od points[edge] k dalšímu bodu |
|
offset |
number | Střed otvoru, metry od začátku stěny | |
width |
number | Šířka v metrech | |
type |
door / window |
||
style |
string | běžné | passage = jen otvor (dveře) |
hinge |
left / right |
Při pohledu z místnosti | |
swing |
in / out |
||
contact |
entity | null | Kontaktní senzor. Bez něj jsou dveře pootevřené o 45 stupňů, okno zavřené |
lock |
entity | null | Entita lock zobrazená u dveří |
lock_size |
size | s |
Velikost odznaku zámku |
blind |
entity | null | Entita cover vykreslená podél okna |
blind_side |
in / out |
in |
out = vně zdi |
blind_invert |
boolean | false |
Cover hlásí pro zavřeno 100 |
tap_action, double_tap_action, hold_action |
action | detail kontaktu | Akce |
sheet_hide |
boolean | false |
Vynechat z panelu místnosti |
Nábytek¶
Nábytek, světla a dok robota sdílejí tento seznam.
| Klíč | Typ | Výchozí | Popis |
|---|---|---|---|
id |
string | Jedinečné id | |
type |
string | Typ nábytku (seznam), typ světla (lamp_ceiling, lamp_pendant, lamp_panel, lamp_spot, lamp_table, lamp_wall, led_strip), nebo robot_vacuum |
|
x, z |
number | Střed v metrech | |
rotation |
number | 0 | Stupně; 0 = doprava, 90 = dolů |
w, d |
number | Šířka a hloubka v metrech | |
level |
string | první patro | Id patra |
entity |
entity | null | Entita světla (světla), přehrávač (tv_wall), vysavač (dok) |
room_light |
number / false | podíl | Podíl záře světla v místnosti, 1 = 100 %, false = téměř nic |
beam |
number | 40 | lamp_spot: šířka kužele ve stupních |
glow_side |
1 / -1 |
všemi směry | led_strip: svítí na jednu stranu |
color |
colour | Výchozí barva nábytku (pravidlo má přednost) | |
icon, size, layer |
Společná pole položek | ||
group |
string | Id skupiny (nastavuje tlačítko Seskupit) | |
room_sensor, room_map, battery |
Dok: viz Robotický vysavač | ||
color_on, fx, progress, progress_total |
Dok: vzhled při úklidu | ||
rules, tap_action, double_tap_action, hold_action, sheet_hide |
Senzory¶
| Klíč | Typ | Popis |
|---|---|---|
entity |
entity | Binární senzor; motion, occupancy, presence = vlnky, moisture = červený puls |
x, z |
number | Pozice |
layer |
integer | Pořadí vůči senzorům a nábytku v editoru |
level |
string | Id patra |
Zařízení¶
| Klíč | Typ | Výchozí | Popis |
|---|---|---|---|
id |
string | Jedinečné id | |
kind |
string | fan, purifier, dehumidifier, dishwasher, dryer, boiler, radiator, alarm, media, aquarium, camera, fridge, fireplace, lock, generic |
|
name |
string | Název (tooltip) | |
entity |
entity | Entita | |
x, z |
number | Pozice | |
level |
string | první patro | Id patra |
active |
list / {"above": n} |
podle druhu / domény | Stavy, které se počítají jako „běží“ |
text |
string | Text pod ikonou, vždy; může být šablona | |
text_on |
string | Text, když běží; může být šablona, {left:timer.x} = zbývající čas té entity, {left} = odpočtu |
|
label_position |
string | bottom |
Pozice popisku: bottom (výchozí), top, left, right |
label_vertical |
bool | false |
Otočí popisek o 90 stupňů (čte se zdola nahoru) |
color, color_on |
colour | barva stavu | Barva v klidu / za běhu |
fx |
string | podle druhu | Animace kruhu |
pipe |
list | Jen radiátor (i nábytek type: radiator, ten teče podle animate z pravidla): rohy [[x, z], …] trubky topení mezi kotlem na podlaží a radiátorem ([] = rovně). Teče, když běží kotel i radiátor, v barvě wave |
|
progress, progress_total |
entity / minutes | Zdroj odpočtu | |
cover |
boolean | true |
media: false vypne obal alba |
battery |
entity | baterie zařízení | Zařízení typu vysavač |
icon, size, layer |
Společná pole položek | ||
rules, tap_action, double_tap_action, hold_action, sheet_hide |
Texty¶
| Klíč | Typ | Výchozí | Popis |
|---|---|---|---|
id |
string | Jedinečné id | |
entity |
entity | Zobrazí se její stav | |
text |
string | Pevný text nebo šablona {{ }} |
|
x, z |
number | Pozice | |
rotation |
number | 0 | Stupně |
size |
size | m |
xs až xxl |
color |
colour | Barva textu | |
background |
string | styl odznaku | none = bez pozadí |
level |
string | první patro | Id patra |
rules, actions |
Společná pole položek¶
| Klíč | Typ | Popis |
|---|---|---|
icon |
string | Libovolná ikona mdi:; none = bez ikony |
size |
string | xs, s, m, l, xl, xxl |
layer |
integer | Pořadí překrytí v rámci druhu |
sheet_hide |
boolean | Vynechat z panelu místnosti |
tap_action, double_tap_action, hold_action |
object | action: toggle, more-info, perform-action (perform_action, data), navigate (navigation_path), url (url_path), none |
Pravidla¶
Uspořádaný seznam u místností, nábytku, zařízení, textů a světel. U každého výstupního pole vyhrává první odpovídající pravidlo; viz Pravidla.
| Klíč | Typ | Popis |
|---|---|---|
if |
list | Podmínky (musí platit všechny); pravidlo bez if je výchozí |
color, glow, animate, wave, text, tint, opacity, hide, icon, background |
Výstupy | |
fx, progress, progress_total |
Animace kruhu a odpočet |
Podmínka má jednu z těchto podob:
| Podoba | Popis |
|---|---|
{entity, attribute?, state} |
state může být seznam |
{entity, attribute?, state_not} |
Negace, může být seznam |
{entity, attribute?, above} / below |
Číselné porovnání |
{template: "{{ ... }}"} |
Jinja, platí pro true, on, yes, 1, nenulová čísla |
{any: [conditions]} |
OR |
Úplný příklad¶
Malý byt se třemi místnostmi.
{
"levels": [{"id": "0", "name": "Přízemí"}],
"outdoor": "balcony",
"rooms": [
{"id": "living_room", "name": "Obývací pokoj", "icon": "mdi:sofa",
"points": [[0, 0], [5, 0], [5, 4], [0, 4]],
"temperature": "sensor.living_room_temperature", "humidity": "sensor.living_room_humidity",
"sheet_extra": ["media_player.tv"]},
{"id": "kitchen", "name": "Kuchyň",
"points": [[5, 0], [8, 0], [8, 4], [5, 4]],
"temperature": "sensor.kitchen_temperature",
"rules": [{"if": [{"entity": "binary_sensor.kitchen_leak", "state": "on"}], "tint": "red", "opacity": 0.3}]},
{"id": "bedroom", "name": "Ložnice",
"points": [[0, 4], [5, 4], [5, 7], [0, 7]],
"temperature": "sensor.bedroom_temperature"}
],
"openings": [
{"id": "d_front", "room_id": "living_room", "edge": 3, "offset": 2.0, "width": 0.9, "type": "door",
"hinge": "left", "swing": "in", "contact": "binary_sensor.front_door", "lock": "lock.front_door"},
{"id": "d_kitchen", "room_id": "living_room", "edge": 1, "offset": 2.0, "width": 0.8, "type": "door",
"style": "passage"},
{"id": "d_bedroom", "room_id": "living_room", "edge": 2, "offset": 2.5, "width": 0.8, "type": "door",
"hinge": "right", "swing": "in"},
{"id": "w_living", "room_id": "living_room", "edge": 0, "offset": 2.5, "width": 1.6, "type": "window",
"contact": "binary_sensor.living_room_window", "blind": "cover.living_room_blind"}
],
"furniture": [
{"id": "f_sofa", "type": "sofa", "x": 2.5, "z": 3.1, "rotation": 0, "w": 2.0, "d": 0.9},
{"id": "f_tv", "type": "tv_wall", "x": 2.5, "z": 0.1, "rotation": 0, "w": 1.4, "d": 0.1, "entity": "media_player.tv"},
{"id": "f_bed", "type": "bed", "x": 2.5, "z": 5.6, "rotation": 0, "w": 1.8, "d": 2.0},
{"id": "l_living", "type": "lamp_ceiling", "x": 2.5, "z": 2.0, "entity": "light.living_room", "room_light": 1},
{"id": "l_strip", "type": "led_strip", "x": 2.5, "z": 3.9, "w": 3.0, "d": 0.05, "entity": "light.living_room_strip"},
{"id": "dock", "type": "robot_vacuum", "x": 0.4, "z": 3.4, "entity": "vacuum.robot",
"room_sensor": "sensor.robot_current_room", "room_map": {"Obývací pokoj": "living_room"}}
],
"sensors": [
{"id": "s_motion", "entity": "binary_sensor.living_room_motion", "x": 4.6, "z": 0.4}
],
"devices": [
{"id": "dev_radiator", "kind": "radiator", "entity": "climate.living_room", "x": 4.7, "z": 2.0},
{"id": "dev_dishwasher", "kind": "dishwasher", "name": "Myčka", "entity": "sensor.dishwasher_state",
"x": 7.4, "z": 0.8, "active": ["run"], "text_on": "{{ states('sensor.dishwasher_remaining') }} min"}
],
"texts": [
{"id": "t_out", "text": "{{ states('sensor.outdoor_temperature') }} °C", "x": 6.5, "z": 5.0, "background": "none"}
],
"labels": {"kitchen": [6.5, 3.4]}
}