Files
N22/dashboards/views/01_home.yaml
T

481 lines
13 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
title: Overblik
path: home
icon: mdi:home
cards:
# 🌤️ Vejr + dato + sol
- type: vertical-stack
cards:
- type: weather-forecast
entity: weather.norgardsvej
show_forecast: true
- type: glance
columns: 5
show_icon: true
show_name: true
show_state: true
entities:
- entity: sensor.dato
name: Dato
icon: mdi:calendar
- entity: sensor.solopgang
name: Sol op
icon: mdi:weather-sunset-up
- entity: sensor.solnedgang
name: Sol ned
icon: mdi:weather-sunset-down
- entity: binary_sensor.arbejdsdag
name: I dag
icon: mdi:briefcase
- entity: binary_sensor.arbejdsdagimorgen
name: I morgen
icon: mdi:briefcase-outline
# 👨‍👩‍👧‍👦 Familien
- type: glance
entities:
- entity: person.daniel_schusler_dethlefsen
name: Daniel
- entity: person.claus_dethlefsen
name: Claus
- entity: person.anne_schusler_dethlefsen
name: Anne
- entity: person.andreas_schusler_dethlefsen
name: Andreas
# 🗑️ Affald
- type: glance
columns: 3
show_icon: true
show_name: false
show_state: true
entities:
- entity: sensor.affalddk_norgardsvej_22_restaffald
icon: mdi:trash-can-outline
- entity: sensor.affalddk_norgardsvej_22_papir_plast
icon: mdi:recycle
- entity: sensor.affalddk_norgardsvej_22_haveaffald
icon: mdi:leaf
# 🏠 Hus kontrol
- type: entities
title: Modes
entities:
- entity: input_boolean.guests_mode
name: Vi har gæster
icon: mdi:account-group
- entity: input_boolean.vacation_mode
name: 🌴 Vacation Mode
- entity: input_datetime.vacation_end
name: Slutter
# 🔊 Receiver presets
- type: grid
columns: 4
square: false
cards:
- type: button
name: Sonos
icon: mdi:speaker-multiple
tap_action:
action: call-service
service: script.receiver_sonos_mch_stereo
- type: button
name: TV Dolby
icon: mdi:television-speaker
tap_action:
action: call-service
service: script.receiver_tv_dolby_digital
- type: button
name: TV Stereo
icon: mdi:surround-sound
tap_action:
action: call-service
service: script.receiver_tv_mch_stereo
- type: horizontal-stack
cards:
- type: vertical-stack
cards:
- type: button
name: ""
icon: mdi:power
tap_action:
action: call-service
service: media_player.turn_off
target:
entity_id: media_player.denon_avr_x2300w
- type: button
name: ""
icon: mdi:volume-plus
tap_action:
action: call-service
service: script.receiver_volume_up_5
- type: button
name: ""
icon: mdi:volume-minus
tap_action:
action: call-service
service: script.receiver_volume_down_5
# 🪟 Gardiner
- type: grid
columns: 5
square: false
cards:
- type: button
name: ""
icon: mdi:blinds-open
tap_action:
action: call-service
service: scene.turn_on
target:
entity_id: scene.alle_lidt_nede
- type: button
name: ""
icon: mdi:blinds
tap_action:
action: call-service
service: scene.turn_on
target:
entity_id: scene.n22_alt_ned
- type: button
name: ""
icon: mdi:blinds-horizontal
tap_action:
action: call-service
service: scene.turn_on
target:
entity_id: scene.morgen
- type: button
name: ""
icon: mdi:window-shutter
tap_action:
action: call-service
service: scene.turn_on
target:
entity_id: scene.syd_ned_venstre_halvt_ned
- type: button
name: ""
icon: mdi:television-ambient-light
tap_action:
action: call-service
service: scene.turn_on
target:
entity_id: scene.n22_tv
# 💡 Lys kontrol
- type: horizontal-stack
cards:
- type: tile
entity: light.indendorslamper
name: Indenfor
icon: mdi:lightbulb-group
tap_action:
action: toggle
hold_action:
action: more-info
show_state: true
- type: tile
entity: light.udendorslamper
name: Udenfor
icon: mdi:outdoor-lamp
tap_action:
action: toggle
hold_action:
action: more-info
show_state: true
- type: tile
entity: cover.anne
name: Garage
icon: mdi:garage
features_position: bottom
vertical: false
tap_action:
action: toggle
show_state: true
# 🌡️ Temperatur + CO2 + Fugt (grupperet pr type)
- type: vertical-stack
cards:
# Temperatur
- type: horizontal-stack
cards:
- type: gauge
entity: sensor.sovevaerelse_temperatur
name: Soveværelse
min: 15
max: 30
unit: '°C'
- type: gauge
entity: sensor.sovevaerelse_stue_temperatur
name: Andreas
min: 15
max: 30
unit: '°C'
- type: gauge
entity: sensor.sovevaerelse_daniel_temperatur
name: Daniel
min: 15
max: 30
unit: '°C'
# CO2
- type: horizontal-stack
cards:
- type: gauge
entity: sensor.sovevaerelse_carbon_dioxide
name: Soveværelse
min: 0
max: 2000
unit: 'ppm'
severity:
green: 800
yellow: 1200
red: 2000
- type: gauge
entity: sensor.sovevaerelse_stue_carbon_dioxide
name: Andreas
min: 0
max: 2000
unit: 'ppm'
severity:
green: 800
yellow: 1200
red: 2000
- type: gauge
entity: sensor.sovevaerelse_daniel_carbon_dioxide
name: Daniel
min: 0
max: 2000
unit: 'ppm'
severity:
green: 800
yellow: 1200
red: 2000
# Luftfugtighed
- type: horizontal-stack
cards:
- type: gauge
entity: sensor.sovevaerelse_luftfugtighed
name: Soveværelse
min: 20
max: 80
unit: '%'
severity:
green: 60
yellow: 70
red: 80
- type: gauge
entity: sensor.sovevaerelse_stue_luftfugtighed
name: Andreas
min: 20
max: 80
unit: '%'
severity:
green: 60
yellow: 70
red: 80
- type: gauge
entity: sensor.sovevaerelse_daniel_luftfugtighed
name: Daniel
min: 20
max: 80
unit: '%'
severity:
green: 60
yellow: 70
red: 80
# ⚡ El-priser + 🍽️ Opvaskemaskine
- type: vertical-stack
cards:
- type: custom:apexcharts-card
graph_span: 24h
span:
start: hour
stacked: false
header:
show: true
title: El-priser næste 24 timer
show_states: true
colorize_states: true
now:
show: true
label: Nu
all_series_config:
stroke_width: 0
apex_config:
chart:
height: 260
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 2
tickAmount: 5
plotOptions:
bar:
columnWidth: 82%
borderRadius: 3
series:
- entity: sensor.energi_data_service
name: Pris
type: column
float_precision: 2
unit: ' kr/kWh'
show:
in_header: raw
in_chart: true
data_generator: |
const startOfHour = new Date();
startOfHour.setMinutes(0, 0, 0);
const endTime = startOfHour.getTime() + (24 * 60 * 60 * 1000);
const rawToday = entity.attributes.raw_today || [];
const rawTomorrow = entity.attributes.tomorrow_valid ? (entity.attributes.raw_tomorrow || []) : [];
const forecast = entity.attributes.forecast || [];
const allKnown = [...rawToday, ...rawTomorrow];
const data = [];
const seen = new Set();
const pushPoint = (item) => {
const timestamp = new Date(item.hour).getTime();
if (Number.isNaN(timestamp) || timestamp < startOfHour.getTime() || timestamp >= endTime || seen.has(timestamp)) {
return;
}
const price = Number(item.price);
if (Number.isNaN(price)) {
return;
}
seen.add(timestamp);
data.push({ x: timestamp, y: price });
};
allKnown.forEach(pushPoint);
if (data.length < 24) {
forecast.forEach(pushPoint);
}
data.sort((left, right) => left.x - right.x);
const trimmed = data.slice(0, 24);
if (!trimmed.length) {
return [];
}
const prices = trimmed.map((item) => item.y);
const minPrice = Math.min(...prices);
const maxPrice = Math.max(...prices);
const mix = (start, end, ratio) => Math.round(start + ((end - start) * ratio));
const toHex = (value) => value.toString(16).padStart(2, '0');
const rgbToHex = (red, green, blue) => `#${toHex(red)}${toHex(green)}${toHex(blue)}`;
const colorByValue = (value) => {
if (maxPrice === minPrice) {
return '#16a34a';
}
const normalized = (value - minPrice) / (maxPrice - minPrice);
if (normalized <= 0.5) {
const ratio = normalized / 0.5;
return rgbToHex(
mix(22, 250, ratio),
mix(163, 204, ratio),
mix(74, 21, ratio)
);
}
const ratio = (normalized - 0.5) / 0.5;
return rgbToHex(
mix(250, 220, ratio),
mix(204, 38, ratio),
mix(21, 38, ratio)
);
};
return trimmed.map((item) => ({
x: item.x,
y: item.y,
fillColor: colorByValue(item.y)
}));
- type: horizontal-stack
cards:
- type: tile
entity: sensor.dishwasher_next_start_compact
name: Næste opvask
- type: tile
entity: sensor.opvask_tid_tilbage
name: Tid tilbage
# 🧹 Støvsuger (forenklet mindre støj)
- type: entities
title: Støvsuger
entities:
- vacuum.roborock_s8_pro_ultra
- sensor.roborock_s8_pro_ultra_status
# 🎵 Sonos
- type: glance
title: Sonos
entities:
- media_player.stue
- media_player.andreas
- media_player.daniel
- media_player.kokken
- media_player.alrum
- media_player.badevaerelse
- media_player.sovevaerelse
- media_player.lille_badevaerelse
# 📡 Kamera indikator
- type: glance
title: Kamera
entities:
- binary_sensor.indkoersel_person
- binary_sensor.indkoersel_vehicle
- binary_sensor.terrasse_person
# 🌐 System (let trimmet)
- type: horizontal-stack
cards:
- type: sensor
entity: sensor.home_assistant_website
name: HA Version
- type: entity
entity: binary_sensor.home_assistant_website_update_available
name: Opdatering
icon: mdi:update
- type: gauge
entity: sensor.speedtest_download
name: Download
min: 0
max: 1000
unit: 'Mbit/s'
- type: gauge
entity: sensor.speedtest_upload
name: Upload
min: 0
max: 500
unit: 'Mbit/s'