diff --git a/configuration.yaml b/configuration.yaml
index 6d8cab0..b5235b4 100755
--- a/configuration.yaml
+++ b/configuration.yaml
@@ -70,6 +70,20 @@ utility_meter:
source: input_number.nattis
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:
diff --git a/dashboards/views/01_home.yaml b/dashboards/views/01_home.yaml
index c46cb84..8b94e64 100644
--- a/dashboards/views/01_home.yaml
+++ b/dashboards/views/01_home.yaml
@@ -463,7 +463,110 @@ cards:
target:
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')}`
+ + `
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')}`
+ + `
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
cards:
- type: tile
diff --git a/include/automations/vanding.yaml b/include/automations/vanding.yaml
index 72715c3..370d650 100644
--- a/include/automations/vanding.yaml
+++ b/include/automations/vanding.yaml
@@ -130,9 +130,64 @@
action:
# Åbn kun hovedhanen i 15 min – fylder kapillærkassernes flydventiler.
# LinkTap lukker selv efter varigheden (instant mode).
+ - service: select.select_option
+ target:
+ entity_id: select.vanding_liter
+ data:
+ option: kapillaer
- service: linktap.start_watering
target:
entity_id: valve.hovedhane_linktap
data:
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 }}"
+
diff --git a/include/input/datetime/vanding.yaml b/include/input/datetime/vanding.yaml
index 563bf98..03b32ff 100644
--- a/include/input/datetime/vanding.yaml
+++ b/include/input/datetime/vanding.yaml
@@ -26,3 +26,9 @@ vanding_sikkerhedsstop_nat:
has_time: true
initial: "23:59:00"
icon: mdi:alarm-off
+
+vanding_sidst_vandet:
+ name: Vanding – sidst vandet
+ has_date: true
+ has_time: true
+ icon: mdi:sprinkler-variant
diff --git a/include/input/number/vanding.yaml b/include/input/number/vanding.yaml
index 91f8917..884c88b 100644
--- a/include/input/number/vanding.yaml
+++ b/include/input/number/vanding.yaml
@@ -41,7 +41,7 @@ vanding_kapillaer_antal:
min: 0
max: 10
step: 1
- initial: 3
+ initial: 6
icon: mdi:counter
# Fugtigheds-mål per højbed (%)
diff --git a/include/sensors/vanding.yaml b/include/sensors/vanding.yaml
index 3bd28c3..c094f82 100644
--- a/include/sensors/vanding.yaml
+++ b/include/sensors/vanding.yaml
@@ -29,3 +29,12 @@
type: time
start: "{{ today_at() }}"
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() }}"
\ No newline at end of file
diff --git a/include/templates/vanding.yaml b/include/templates/vanding.yaml
new file mode 100644
index 0000000..5e3bca2
--- /dev/null
+++ b/include/templates/vanding.yaml
@@ -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) }}