Vanding: forsiderække med sidst vandet, smart-knap, liter og tid pr. bed; kapillær default 6
This commit is contained in:
@@ -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:
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 }}"
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 (%)
|
||||||
|
|||||||
@@ -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() }}"
|
||||||
@@ -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) }}
|
||||||
Reference in New Issue
Block a user