Vanding: forsiderække med sidst vandet, smart-knap, liter og tid pr. bed; kapillær default 6

This commit is contained in:
2026-06-20 18:38:06 +02:00
parent 94d94a7d40
commit 9c5da39bf5
7 changed files with 264 additions and 2 deletions
+14
View File
@@ -70,6 +70,20 @@ utility_meter:
source: input_number.nattis source: input_number.nattis
cycle: daily cycle: daily
# Liter vandet i dag fordelt på zoner via tariffer.
# Hovedhanen (LinkTap) er eneste flowmåler, og zonerne kører skiftevis,
# så den aktive tarif sættes når en zone (eller kapillærkasse) starter.
vanding_liter:
name: "Vanding liter i dag"
source: sensor.hovedhane_linktap_volume
cycle: daily
tariffs:
- hb1
- hb2
- hb3
- drivhus
- kapillaer
python_script: python_script:
+104 -1
View File
@@ -463,7 +463,110 @@ cards:
target: target:
entity_id: lawn_mower.husqvarna_automower entity_id: lawn_mower.husqvarna_automower
# 💡 Lys kontrol # Vanding
- type: horizontal-stack
cards:
- type: custom:button-card
entity: sensor.vanding_sidst_vandet_compact
show_icon: false
show_name: true
show_state: true
name: Sidst vandet
tap_action:
action: none
hold_action:
action: none
styles:
card:
- padding: 8px
name:
- font-size: 11px
- color: var(--secondary-text-color)
- padding-bottom: 4px
state:
- white-space: normal
- word-break: break-word
- line-height: 1.2
- font-size: 13px
- text-align: center
- type: button
name: Smart vanding
icon: mdi:sprinkler-variant
entity: script.vanding_hojbed_skiftevis
tap_action:
action: toggle
- type: custom:button-card
entity: sensor.vanding_liter_i_dag_total
icon: mdi:water
show_icon: true
show_name: true
show_state: true
name: Liter i dag
tap_action:
action: none
hold_action:
action: none
custom_fields:
breakdown: |
[[[
const n = (id) => { const s = states[id]; return s ? Math.round(parseFloat(s.state) || 0) : 0; };
return `Ærter ${n('sensor.vanding_liter_hb1')} · Kart. ${n('sensor.vanding_liter_hb2')} · Rab. ${n('sensor.vanding_liter_hb3')}`
+ `<br>Drivhus ${n('sensor.vanding_liter_drivhus')} · Kapillær ${n('sensor.vanding_liter_kapillaer')}`;
]]]
styles:
card:
- padding: 8px
name:
- font-size: 11px
- color: var(--secondary-text-color)
state:
- font-size: 15px
- font-weight: bold
custom_fields:
breakdown:
- font-size: 9px
- color: var(--secondary-text-color)
- padding-top: 3px
- line-height: 1.3
- type: custom:button-card
entity: sensor.vanding_tid_i_dag_total
icon: mdi:timer-sand
show_icon: true
show_name: true
show_state: true
name: Tid i dag
tap_action:
action: none
hold_action:
action: none
custom_fields:
breakdown: |
[[[
const m = (id) => { const s = states[id]; return s ? Math.round((parseFloat(s.state) || 0) * 60) : 0; };
const cap = () => { const s = states['sensor.vanding_kapillaer_tid_i_dag']; return s ? Math.round(parseFloat(s.state) || 0) : 0; };
return `Ærter ${m('sensor.vanding_hojbed_1_i_dag')} · Kart. ${m('sensor.vanding_hojbed_2_i_dag')} · Rab. ${m('sensor.vanding_hojbed_3_i_dag')}`
+ `<br>Drivhus ${m('sensor.vanding_drivhus_i_dag')} · Kapillær ${cap()}`;
]]]
styles:
card:
- padding: 8px
name:
- font-size: 11px
- color: var(--secondary-text-color)
state:
- font-size: 15px
- font-weight: bold
custom_fields:
breakdown:
- font-size: 9px
- color: var(--secondary-text-color)
- padding-top: 3px
- line-height: 1.3
# 💡 Lys kontrol
- type: horizontal-stack - type: horizontal-stack
cards: cards:
- type: tile - type: tile
+55
View File
@@ -130,9 +130,64 @@
action: action:
# Åbn kun hovedhanen i 15 min fylder kapillærkassernes flydventiler. # Åbn kun hovedhanen i 15 min fylder kapillærkassernes flydventiler.
# LinkTap lukker selv efter varigheden (instant mode). # LinkTap lukker selv efter varigheden (instant mode).
- service: select.select_option
target:
entity_id: select.vanding_liter
data:
option: kapillaer
- service: linktap.start_watering - service: linktap.start_watering
target: target:
entity_id: valve.hovedhane_linktap entity_id: valve.hovedhane_linktap
data: data:
seconds: 900 seconds: 900
# --- Forside: sidst vandet & liter-måler pr. zone ---
- alias: 'Vanding opdater sidst vandet'
description: 'Sætter tidsstempel når en zone eller hovedhanen begynder at vande'
mode: queued
trigger:
- platform: state
entity_id:
- switch.hojbed_1
- switch.hojbed_2
- switch.hojbed_3
- switch.drivhus_drypvanding
to: 'on'
- platform: state
entity_id: binary_sensor.hovedhane_linktap_is_watering
to: 'on'
action:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.vanding_sidst_vandet
data:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
- alias: 'Vanding vælg liter-tarif efter aktiv zone'
description: 'Skifter utility_meter-tarif så liter bogføres på det rette bed'
mode: queued
trigger:
- platform: state
entity_id: switch.hojbed_2 # Højbed 1 Ærter
to: 'on'
id: hb1
- platform: state
entity_id: switch.hojbed_1 # Højbed 2 Kartofler
to: 'on'
id: hb2
- platform: state
entity_id: switch.drivhus_drypvanding # Højbed 3 Rabarber
to: 'on'
id: hb3
- platform: state
entity_id: switch.hojbed_3 # Drivhus
to: 'on'
id: drivhus
action:
- service: select.select_option
target:
entity_id: select.vanding_liter
data:
option: "{{ trigger.id }}"
+6
View File
@@ -26,3 +26,9 @@ vanding_sikkerhedsstop_nat:
has_time: true has_time: true
initial: "23:59:00" initial: "23:59:00"
icon: mdi:alarm-off icon: mdi:alarm-off
vanding_sidst_vandet:
name: Vanding sidst vandet
has_date: true
has_time: true
icon: mdi:sprinkler-variant
+1 -1
View File
@@ -41,7 +41,7 @@ vanding_kapillaer_antal:
min: 0 min: 0
max: 10 max: 10
step: 1 step: 1
initial: 3 initial: 6
icon: mdi:counter icon: mdi:counter
# Fugtigheds-mål per højbed (%) # Fugtigheds-mål per højbed (%)
+9
View File
@@ -29,3 +29,12 @@
type: time type: time
start: "{{ today_at() }}" start: "{{ today_at() }}"
end: "{{ now() }}" end: "{{ now() }}"
# Samlet tid hovedhanen (LinkTap) har vandet i dag dækker både zoner og
# kapillærkasser, da alt vand passerer hovedhanen.
- platform: history_stats
name: vanding_hovedhane_i_dag
entity_id: binary_sensor.hovedhane_linktap_is_watering
state: "on"
type: time
start: "{{ today_at() }}"
end: "{{ now() }}"
+75
View File
@@ -0,0 +1,75 @@
# Vanding afledte sensorer til forside-rækken
# Kompakt "sidst vandet" (samme stil som støvsugerens "Sidst kørt")
- trigger:
- platform: homeassistant
event: start
- platform: state
entity_id: input_datetime.vanding_sidst_vandet
- platform: time_pattern
hours: "/1"
sensor:
- name: "Vanding sidst vandet compact"
unique_id: vanding_sidst_vandet_compact
icon: mdi:sprinkler-variant
state: >
{% set raw = states('input_datetime.vanding_sidst_vandet') %}
{% if raw in ['unknown', 'unavailable', '', none] %}
Aldrig
{% else %}
{% set dt = as_local(as_datetime(raw)) %}
{% if dt is none %}
Ukendt
{% elif dt.date() == now().date() %}
i dag {{ dt.strftime('%H:%M') }}
{% elif dt.date() == (now() - timedelta(days=1)).date() %}
i går {{ dt.strftime('%H:%M') }}
{% else %}
{% set weekdays = ['man', 'tir', 'ons', 'tor', 'fre', 'lør', 'søn'] %}
{{ weekdays[dt.weekday()] }} {{ dt.strftime('%d/%m %H:%M') }}
{% endif %}
{% endif %}
# Kumuleret vandingstid og liter i dag
- sensor:
# Samlet vandingstid i dag (minutter) = hovedhanens vandetid
- name: "Vanding tid i dag total"
unique_id: vanding_tid_i_dag_total
unit_of_measurement: "min"
icon: mdi:timer-sand
state: >
{{ (states('sensor.vanding_hovedhane_i_dag') | float(0) * 60) | round(0) }}
# Kapillærkasser i dag (minutter) = hovedhane minus de fire zoner
- name: "Vanding kapillaer tid i dag"
unique_id: vanding_kapillaer_tid_i_dag
unit_of_measurement: "min"
icon: mdi:cup-water
state: >
{% set hovedhane = states('sensor.vanding_hovedhane_i_dag') | float(0) %}
{% set zoner = (states('sensor.vanding_hojbed_1_i_dag') | float(0))
+ (states('sensor.vanding_hojbed_2_i_dag') | float(0))
+ (states('sensor.vanding_hojbed_3_i_dag') | float(0))
+ (states('sensor.vanding_drivhus_i_dag') | float(0)) %}
{% set cap = [hovedhane - zoner, 0] | max %}
{{ (cap * 60) | round(0) }}
# Samlet liter i dag = summen af tarif-tællerne
- name: "Vanding liter i dag total"
unique_id: vanding_liter_i_dag_total
unit_of_measurement: "L"
device_class: water
state_class: total
icon: mdi:water
state: >
{% set ns = namespace(t=0) %}
{% set kilder = [
'sensor.vanding_liter_hb1',
'sensor.vanding_liter_hb2',
'sensor.vanding_liter_hb3',
'sensor.vanding_liter_drivhus',
'sensor.vanding_liter_kapillaer'] %}
{% for s in kilder %}
{% set ns.t = ns.t + (states(s) | float(0)) %}
{% endfor %}
{{ ns.t | round(1) }}