Varme: gør morgen/aften-tider konfigurerbare via input_datetime

- Ny input_datetime/varme.yaml med varme_morgen_tid og varme_aften_tid
- Automations trigger nu på input_datetime-entiteterne i stedet for hardkodede tider
- Script beregner nat dynamisk ud fra de to tider (string-sammenligning)
- View: tilføj morgen/aften-tider til tabellen + manuel Genberegn-knap
This commit is contained in:
2026-04-24 06:37:15 +02:00
parent 70d01bfabf
commit 72e0e583be
4 changed files with 25 additions and 424 deletions
-414
View File
@@ -1,414 +0,0 @@
title: Varme
path: varme
icon: mdi:radiator
type: sections
max_columns: 2
sections:
- type: grid
cards:
- type: custom:apexcharts-card
graph_span: 24h
header:
show: true
title: Andreas
show_states: true
colorize_states: true
now:
show: true
label: Nu
apex_config:
chart:
height: 240
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 1
tickAmount: 6
series:
- entity: sensor.sovevaerelse_stue_temperatur
name: Netatmo
- entity: sensor.hue_motion_sensor_2_temperature_2
name: Hue
- entity: climate.andreas
attribute: current_temperature
name: Roth aktuelt
- entity: climate.andreas
attribute: temperature
name: Roth mål
stroke_width: 1
curve: stepline
color: "#ff8800"
- type: grid
cards:
- type: custom:apexcharts-card
graph_span: 24h
header:
show: true
title: Daniel
show_states: true
colorize_states: true
now:
show: true
label: Nu
apex_config:
chart:
height: 240
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 1
tickAmount: 6
series:
- entity: sensor.sovevaerelse_daniel_temperatur
name: Netatmo
- entity: sensor.hue_motion_sensor_2_temperature
name: Hue
- entity: climate.daniel
attribute: current_temperature
name: Roth aktuelt
- entity: climate.daniel
attribute: temperature
name: Roth mål
stroke_width: 1
curve: stepline
color: "#ff8800"
- type: grid
cards:
- type: custom:apexcharts-card
graph_span: 24h
header:
show: true
title: Sovevaerelse
show_states: true
colorize_states: true
now:
show: true
label: Nu
apex_config:
chart:
height: 240
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 1
tickAmount: 6
series:
- entity: sensor.sovevaerelse_temperatur
name: Netatmo
- entity: sensor.hue_motion_sensor_1_temperature_2
name: Hue sovevaerelse
- entity: sensor.hue_motion_sensor_1_temperature
name: Skab Claus
- entity: sensor.temperature
name: Skab Anne
- entity: climate.sovev_prelse
attribute: current_temperature
name: Roth aktuelt
- entity: climate.sovev_prelse
attribute: temperature
name: Roth mål
stroke_width: 1
curve: stepline
color: "#ff8800"
- type: grid
cards:
- type: custom:apexcharts-card
graph_span: 24h
header:
show: true
title: Kontor
show_states: true
colorize_states: true
now:
show: true
label: Nu
apex_config:
chart:
height: 240
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 1
tickAmount: 6
series:
- entity: sensor.kontor_motion_temperatur
name: Hue
- entity: climate.kontor
attribute: current_temperature
name: Roth aktuelt
- entity: climate.kontor
attribute: temperature
name: Roth mål
stroke_width: 1
curve: stepline
color: "#ff8800"
- type: grid
cards:
- type: custom:apexcharts-card
graph_span: 24h
header:
show: true
title: Gang
show_states: true
colorize_states: true
now:
show: true
label: Nu
apex_config:
chart:
height: 240
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 1
tickAmount: 6
series:
- entity: sensor.gang_sensor_temperature
name: Hue
- entity: climate.fordelingsgang
attribute: current_temperature
name: Roth aktuelt
- entity: climate.fordelingsgang
attribute: temperature
name: Roth mål
stroke_width: 1
curve: stepline
color: "#ff8800"
- type: grid
cards:
- type: custom:apexcharts-card
graph_span: 24h
header:
show: true
title: Badeværelse
show_states: true
colorize_states: true
now:
show: true
label: Nu
apex_config:
chart:
height: 240
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 1
tickAmount: 6
series:
- entity: sensor.bad_motion_sensor_temperature
name: Hue
- entity: climate.badevarelse
attribute: current_temperature
name: Ally aktuelt
- entity: climate.badevarelse
attribute: temperature
name: Ally mål
stroke_width: 1
curve: stepline
color: "#ff8800"
- type: grid
cards:
- type: custom:apexcharts-card
graph_span: 24h
header:
show: true
title: Stue
show_states: true
colorize_states: true
now:
show: true
label: Nu
apex_config:
chart:
height: 240
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 1
tickAmount: 6
series:
- entity: sensor.stue_motion_temperatur
name: Hue
- entity: climate.stue
attribute: current_temperature
name: Ally aktuelt
- entity: climate.stue
attribute: temperature
name: Ally mål
stroke_width: 1
curve: stepline
color: "#ff8800"
- type: grid
cards:
- type: custom:apexcharts-card
graph_span: 24h
header:
show: true
title: Forgang
show_states: true
colorize_states: true
now:
show: true
label: Nu
apex_config:
chart:
height: 240
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 1
tickAmount: 6
series:
- entity: sensor.forgang_sensor_temperature
name: Hue
- entity: climate.forgang
attribute: current_temperature
name: Roth aktuelt
- entity: climate.forgang
attribute: temperature
name: Roth mål
stroke_width: 1
curve: stepline
color: "#ff8800"
- type: grid
cards:
- type: custom:apexcharts-card
graph_span: 24h
header:
show: true
title: Lille bad
show_states: true
colorize_states: true
now:
show: true
label: Nu
apex_config:
chart:
height: 240
grid:
strokeDashArray: 2
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
yaxis:
decimalsInFloat: 1
tickAmount: 6
series:
- entity: climate.lille_bad
attribute: current_temperature
name: Roth aktuelt
- entity: climate.lille_bad
attribute: temperature
name: Roth mål
stroke_width: 1
curve: stepline
color: "#ff8800"
# Indstillinger: Komforttemperaturer og sænkninger
- type: grid
cards:
- type: entities
title: Komforttemperaturer
entities:
- entity: input_number.varme_komfort_andreas
- entity: input_number.varme_komfort_daniel
- entity: input_number.varme_komfort_sovevaerelse
- entity: input_number.varme_komfort_kontor
- entity: input_number.varme_komfort_gang
- entity: input_number.varme_komfort_forgang
- entity: input_number.varme_komfort_lille_bad
- entity: input_number.varme_komfort_badevarelse
- entity: input_number.varme_komfort_stue
- type: entities
title: Sænkninger og ferie
entities:
- entity: input_number.varme_nat_saenkning
- entity: input_number.varme_vaek_saenkning
- entity: input_number.varme_ferie_temp
- entity: input_datetime.vacation_end
name: Hjemkomst (ferie slutter)
# Ventilposition
- type: grid
cards:
- type: gauge
entity: sensor.fjernvarme_ventil_anbefalet
name: Anbefalet ventilposition (15)
min: 1
max: 5
needle: true
segments:
- from: 1
color: "#44aa44" # grøn: lukket/sommer
- from: 2
color: "#aaaa00" # gul: mildt
- from: 3
color: "#dd8800" # orange: køligt
- from: 4
color: "#cc4400" # rød-orange: koldt
- from: 4.5
color: "#aa0000" # rød: frost
- type: markdown
content: |-
**{{ state_attr('sensor.fjernvarme_ventil_anbefalet', 'anbefaling') }}**
Udetemperatur: {{ state_attr('sensor.fjernvarme_ventil_anbefalet', 'udetemperatur') }}°C
Gælder for begge manuelle hoveddrejehaner:
- Roth-fordeler (sauna)
- Fjernvarme indstikning (bryggers)
+8 -8
View File
@@ -1,8 +1,8 @@
##################################################
# Varme: Triggers der kalder script.varme_recalculate
# Scenarierne der kræver genberegning:
# - Morgen (06:30) - nat slut → komforttemp
# - Aften (22:00) - nat start → natsænkning
# - Morgen (input_datetime.varme_morgen_tid) - nat slut → komforttemp
# - Aften (input_datetime.varme_aften_tid) - nat start → natsænkning
# - Tilstedeværelse - hjemme/væk skifter
# - Ferietilstand - ferie til/fra
# - HA genstart - genopret korrekt temp
@@ -10,19 +10,19 @@
- alias: "Varme - Genberegn: Morgen"
id: varme_recalc_morgen
description: "Slutter natsænkning kl. 06:00 - sætter komforttemperaturer"
description: "Slutter natsænkning - tidspunkt styret af input_datetime.varme_morgen_tid"
trigger:
- platform: time
at: "06:00:00"
at: input_datetime.varme_morgen_tid
action:
- service: script.varme_recalculate
- alias: "Varme - Genberegn: Nat"
id: varme_recalc_nat
description: "Starter natsænkning kl. 22:00"
description: "Starter natsænkning - tidspunkt styret af input_datetime.varme_aften_tid"
trigger:
- platform: time
at: "22:00:00"
at: input_datetime.varme_aften_tid
action:
- service: script.varme_recalculate
@@ -61,10 +61,10 @@
id: varme_ferie_forvarm
description: >
Slår vacation_mode fra 2 dage inden vacation_end så huset er
varmt ved hjemkomst. Kører dagligt kl. 06:00.
varmt ved hjemkomst. Kører dagligt ved morgen-tidspunktet.
trigger:
- platform: time
at: "06:00:00"
at: input_datetime.varme_morgen_tid
condition:
- condition: state
entity_id: input_boolean.vacation_mode
+11
View File
@@ -0,0 +1,11 @@
varme_morgen_tid:
name: Varme - Morgen (nat slut)
has_date: false
has_time: true
icon: mdi:weather-sunny
varme_aften_tid:
name: Varme - Aften (nat start)
has_date: false
has_time: true
icon: mdi:weather-night
+6 -2
View File
@@ -8,7 +8,7 @@
# Logik pr. rum:
# - Vindue åbent → skip (håndteres af vinduer.yaml)
# - Ferie → varme_ferie_temp (frostbeskyttelse)
# - Nat (2206:30) → komfort - varme_nat_saenkning
# - Nat (aften_tidmorgen_tid) → komfort - varme_nat_saenkning
# - Ingen hjemme → komfort - varme_vaek_saenkning
# - Ellers → rum-komforttemperatur
##################################################
@@ -19,7 +19,11 @@ varme_recalculate:
sequence:
- variables:
vacation: "{{ is_state('input_boolean.vacation_mode', 'on') }}"
night: "{{ now().hour >= 22 or now().hour < 7 }}"
night: >
{% set m = states('input_datetime.varme_morgen_tid') %}
{% set a = states('input_datetime.varme_aften_tid') %}
{% set t = now().strftime('%H:%M:%S') %}
{{ t >= a or t < m }}
home: "{{ is_state('binary_sensor.family_presence', 'on') }}"
nat_sænk: "{{ states('input_number.varme_nat_saenkning') | float(3) }}"
vaek_sænk: "{{ states('input_number.varme_vaek_saenkning') | float(3) }}"