LinkTap hovedhane: omdøb entities, dashboard-kort og automatik (åbn før zoner, luk efter, periodisk kapillærvanding)

This commit is contained in:
2026-06-18 22:16:32 +02:00
parent bdf294cc32
commit fb19d1d641
14 changed files with 201 additions and 63 deletions
+1 -1
View File
@@ -1 +1 @@
2026.5.4 2026.6.3
+1 -3
View File
@@ -80,9 +80,7 @@ frontend:
# Integrations # Integrations
################################################## ##################################################
duckdns: # duckdns: fjernet fra YAML i 2026.6 - konfigurer via UI (Settings > Integrations > DuckDNS)
domain: !secret duckdns_domain
access_token: !secret duckdns_access_token
sonoff: sonoff:
username: !secret sonoff_username username: !secret sonoff_username
+87 -1
View File
@@ -7,7 +7,93 @@ max_columns: 2
sections: sections:
# 💧 Jordfugt målere # Hovedhane (LinkTap) central afspærring før zonerne
- type: grid
cards:
- type: heading
heading: Hovedhane (LinkTap)
icon: mdi:water-pump
- type: tile
entity: valve.hovedhane_linktap
name: Hovedhane
icon: mdi:water
features:
- type: valve-open-close
- type: tile
entity: binary_sensor.hovedhane_linktap_is_watering
name: Vander nu
icon: mdi:sprinkler
- type: tile
entity: sensor.hovedhane_linktap_plan_mode_string
name: Vandingsplan
- type: tile
entity: sensor.hovedhane_linktap_remain_duration
name: Tilbageværende
- type: tile
entity: sensor.hovedhane_linktap_battery
name: Batteri
- type: tile
entity: sensor.hovedhane_linktap_signal
name: Signal
- type: entities
title: Manuel kørsel
entities:
- entity: number.hovedhane_linktap_watering_duration
name: Varighed (min)
- entity: number.hovedhane_linktap_watering_volume
name: Volumengrænse (0 = fra)
- entity: switch.hovedhane_linktap
name: Tænd/sluk vand
# Hovedhane flow & status
- type: grid
cards:
- type: heading
heading: Hovedhane flow & status
icon: mdi:gauge
- type: tile
entity: sensor.hovedhane_linktap_speed
name: Flowhastighed
- type: tile
entity: sensor.hovedhane_linktap_volume
name: Volumen denne kørsel
- type: tile
entity: sensor.hovedhane_linktap_total_duration
name: Samlet varighed
- type: glance
title: Alarmer & tilstand
show_state: true
columns: 3
entities:
- entity: binary_sensor.hovedhane_linktap_is_linked
name: Forbundet
- entity: binary_sensor.hovedhane_linktap_is_paused
name: Sat på pause
- entity: binary_sensor.hovedhane_linktap_is_manual_mode
name: Manuel
- entity: binary_sensor.hovedhane_linktap_is_leaking
name: Lækage
- entity: binary_sensor.hovedhane_linktap_is_clogged
name: Tilstoppet
- entity: binary_sensor.hovedhane_linktap_is_cutoff
name: Vandstop-fejl
- entity: binary_sensor.hovedhane_linktap_is_broken
name: Defekt
- entity: binary_sensor.hovedhane_linktap_is_fall
name: Faldet
# 💧 Jordfugt målere
- type: grid - type: grid
cards: cards:
- type: heading - type: heading
@@ -5,5 +5,5 @@ panel: true
cards: cards:
- type: iframe - type: iframe
url: /local/snapshots/indkorsel_loader.html?v=20260612061319 url: /local/snapshots/indkorsel_loader.html?v=20260618215329
aspect_ratio: 100% aspect_ratio: 100%
+13
View File
@@ -46,3 +46,16 @@
## Gitea External HTTPS Access ## Gitea External HTTPS Access
- [x] **gitea.anneclaus.dk via NPM** — CNAME oprettet hos One.com, NPM proxy host med Let's Encrypt + Force SSL, `.env.infrastructure` opdateret, container genstartet. HTTPS 200 OK (20. maj 2026). - [x] **gitea.anneclaus.dk via NPM** — CNAME oprettet hos One.com, NPM proxy host med Let's Encrypt + Force SSL, `.env.infrastructure` opdateret, container genstartet. HTTPS 200 OK (20. maj 2026).
## Hemmeligheder i 1Password (Mulighed A)
**Baggrund:** `secrets.yaml` indeholder brugernavne, tokens m.m. i fritekst. Home Assistant kræver plaintext på disk ved indlæsning, men kilden kan flyttes til 1Password så hemmeligheder fjernes fra git-historik.
**Mulighed A — Generér `secrets.yaml` fra 1Password ved deploy:**
1. Log selv ind i 1Password CLI: `op signin` (gøres manuelt — ingen master-password deles)
2. Opret `secrets.yaml.tpl` med `op://`-referencer i stedet for værdier, fx `tesla_token: "op://HomeAssistant/Tesla/credential"`
3. Generér den rigtige fil ved deploy: `op inject -i secrets.yaml.tpl -o secrets.yaml`
4. Tilføj `secrets.yaml` til `.gitignore` og commit kun `secrets.yaml.tpl` (med `op://`-referencer, ingen rigtige værdier)
5. Evt. lille deploy-script der kører `op inject` automatisk
**Reel gevinst:** Fjerner hemmeligheder fra git, ikke fra disken (HA kræver plaintext på disk uanset).
+2 -2
View File
@@ -29,9 +29,9 @@
event_cnt={{ new_cnt }} (old={{ old_cnt }}) event_cnt={{ new_cnt }} (old={{ old_cnt }})
battery={{ trigger.payload_json.battery | default('?') }}% battery={{ trigger.payload_json.battery | default('?') }}%
entity_id: input_number.shelly_bagdor_event_cnt entity_id: input_number.shelly_bagdor_event_cnt
# Stop hvis: foerste sync efter restart (old=-1) eller samme cnt (periodisk wake-up) # Stop kun hvis samme counter som sidst (duplikat/periodisk wake-up)
- condition: template - condition: template
value_template: "{{ old_cnt >= 0 and new_cnt != old_cnt }}" value_template: "{{ new_cnt != old_cnt }}"
# Bloker ringeklokke om natten (22-06) # Bloker ringeklokke om natten (22-06)
- condition: time - condition: time
after: '06:00:00' after: '06:00:00'
+2 -2
View File
@@ -30,9 +30,9 @@
event_cnt={{ new_cnt }} (old={{ old_cnt }}) event_cnt={{ new_cnt }} (old={{ old_cnt }})
battery={{ trigger.payload_json.battery | default('?') }}% battery={{ trigger.payload_json.battery | default('?') }}%
entity_id: input_number.shelly_fordor_event_cnt entity_id: input_number.shelly_fordor_event_cnt
# Stop hvis: foerste sync efter restart (old=-1) eller samme cnt (periodisk wake-up) # Stop kun hvis samme counter som sidst (duplikat/periodisk wake-up)
- condition: template - condition: template
value_template: "{{ old_cnt >= 0 and new_cnt != old_cnt }}" value_template: "{{ new_cnt != old_cnt }}"
# Bloker ringeklokke om natten (22-06) # Bloker ringeklokke om natten (22-06)
- condition: time - condition: time
after: '06:00:00' after: '06:00:00'
+87
View File
@@ -26,6 +26,9 @@
- switch.hojbed_1 - switch.hojbed_1
- switch.hojbed_2 - switch.hojbed_2
- switch.drivhus_drypvanding - switch.drivhus_drypvanding
- service: switch.turn_off
data:
entity_id: switch.hovedhane_linktap
- alias: 'Vanding sikkerhedsstop nat kl. 23' - alias: 'Vanding sikkerhedsstop nat kl. 23'
trigger: trigger:
@@ -41,4 +44,88 @@
- switch.hojbed_1 - switch.hojbed_1
- switch.hojbed_2 - switch.hojbed_2
- switch.drivhus_drypvanding - switch.drivhus_drypvanding
- service: switch.turn_off
data:
entity_id: switch.hovedhane_linktap
# --- Hovedhane (LinkTap) central afspærring før zonerne ---
- alias: 'Hovedhane åbn når en zone starter'
mode: queued
trigger:
- platform: state
entity_id:
- switch.hojbed_1
- switch.hojbed_2
- switch.hojbed_3
- switch.drivhus_drypvanding
to: 'on'
action:
# Åbn hovedhanen med lang sikkerhedsvarighed (120 min = maks) så LinkTap
# ikke selv lukker midt i en vanding. Lukkes eksplicit når alle zoner er
# slukket (eller af sikkerhedsstop-automationerne).
- service: linktap.start_watering
target:
entity_id: valve.hovedhane_linktap
data:
seconds: 7200
- alias: 'Hovedhane luk når alle zoner er slukket'
mode: queued
trigger:
- platform: state
entity_id:
- switch.hojbed_1
- switch.hojbed_2
- switch.hojbed_3
- switch.drivhus_drypvanding
to: 'off'
for: '00:00:25'
condition:
- condition: state
entity_id:
- switch.hojbed_1
- switch.hojbed_2
- switch.hojbed_3
- switch.drivhus_drypvanding
state: 'off'
action:
- service: switch.turn_off
data:
entity_id: switch.hovedhane_linktap
- alias: 'Hovedhane kapillærkasser periodisk vanding'
mode: single
trigger:
- platform: time
at: '12:00:00'
condition:
# Kør kun tirsdag og fredag
- condition: time
weekday:
- tue
- fri
# Spring over ved regn eller aktiv regn-forsinkelse
- condition: state
entity_id: binary_sensor.annes_vanding_rainsensor
state: 'off'
- condition: numeric_state
entity_id: number.annes_vanding_rain_delay
below: 1
# Kør kun hvis ingen zonevanding er i gang
- condition: state
entity_id:
- switch.hojbed_1
- switch.hojbed_2
- switch.hojbed_3
- switch.drivhus_drypvanding
state: 'off'
action:
# Åbn kun hovedhanen i 15 min fylder kapillærkassernes flydventiler.
# LinkTap lukker selv efter varigheden (instant mode).
- service: linktap.start_watering
target:
entity_id: valve.hovedhane_linktap
data:
seconds: 900
+1 -9
View File
@@ -1,9 +1 @@
- platform: command_line ## Migreret til include/command_line/infrastructure.yaml (2026.6 - platform: command_line fjernet fra binary_sensor)
name: Zigbee USB dongle tilsluttet
unique_id: zigbee_usb_dongle_connected
device_class: connectivity
command: >-
[ -c /dev/ttyUSB0 ] && echo ON || echo OFF
payload_on: "ON"
payload_off: "OFF"
scan_interval: 60
+1 -22
View File
@@ -1,22 +1 @@
## Set the dates in ~/.homeassistant/include/automations/countdown.yaml ## Migreret til include/templates/countdowns.yaml (2026.6 - platform: template fjernet)
- platform: template
sensors:
dage_til_jul:
friendly_name: "Dage til jul"
# unit_of_measurement: "dage"
value_template: >-
{{ states('sensor.nedtaelling_juleaften') }}
dage_til_nytaar:
friendly_name: "Dage til nytår"
# unit_of_measurement: "dage"
value_template: >-
{{ states('sensor.nedtaelling_nytaar') }}
dage_til_ferie:
friendly_name: "Dage til ferie"
# unit_of_measurement: "dage"
value_template: >-
{{ states('sensor.nedtaelling_ferie') }}
+1 -21
View File
@@ -1,21 +1 @@
- platform: template ## Migreret til include/templates/dishwasher.yaml (2026.6 - platform: template fjernet)
sensors:
dishwasher_remaining_minutes:
friendly_name: "Opvask tid tilbage"
unit_of_measurement: "min"
value_template: >
{% set val = states('sensor.dishwasher_remaining_time_2') %}
{% if val in ['unknown','unavailable',''] %}
0
{% elif ':' in val %}
{% set parts = val.split(':') %}
{{ (parts[0] | int * 60) + (parts[1] | int) }}
{% elif 'min' in val %}
{{ val.replace('min','') | int }}
{% else %}
{{ val | int(0) }}
{% endif %}
+1
View File
@@ -0,0 +1 @@
## Sensorer allerede i include/templates/legacy_sensors.yaml - ingen duplikering
+2
View File
@@ -28,6 +28,8 @@ duckdns_domain: "anneclaus"
duckdns_access_token: "91a5b5a9-7aaf-4135-b13c-a672c0000a7d" duckdns_access_token: "91a5b5a9-7aaf-4135-b13c-a672c0000a7d"
# https://www.splitbrain.org/blog/2017-08/10-homeassistant_duckdns_letsencrypt # https://www.splitbrain.org/blog/2017-08/10-homeassistant_duckdns_letsencrypt
tesla_username: claus.dethlefsen@gmail.com
tesla_password: frup-REY3jut
# ######################################## # ########################################
synology_url: 10.0.0.142:5000 synology_url: 10.0.0.142:5000
+1 -1
View File
@@ -1 +1 @@
{"count": 7, "items": [{"date": "2026-06-16", "recipe": {"name": "Hotdogs", "slug": "hotdogs"}}, {"date": "2026-06-14", "recipe": {"name": "Koteletter i fad", "slug": "koteletter-i-fad"}}, {"date": "2026-06-13", "recipe": {"name": "Ribeye og kartofler og salat", "slug": ""}}, {"date": "2026-06-12", "recipe": {"name": "Pasta aglio e olio \u2013 pasta med hvidl\u00f8g og olie", "slug": "pasta-aglio-e-olio-pasta-med-hvidlog-og-olie"}}, {"date": "2026-06-17", "recipe": {"name": "Rester fra mandag (One pot pasta)", "slug": ""}}, {"date": "2026-06-16", "recipe": {"name": "Rester fra s\u00f8ndag (Indisk curry)", "slug": ""}}, {"date": "2026-06-15", "recipe": {"name": "One Pot Pasta med K\u00f8dsovs", "slug": "one-pot-pasta-med-kodsovs"}}]} {"count": 8, "items": [{"date": "2026-06-19", "recipe": {"name": "Okse tacos", "slug": "okse-tacos"}}, {"date": "2026-06-20", "recipe": {"name": "Bagte s\u00f8de kartofler med fyld", "slug": "bagte-sode-kartofler-med-fyld"}}, {"date": "2026-06-20", "recipe": {"name": "Engelsk b\u00f8f ", "slug": ""}}, {"date": "2026-06-18", "recipe": {"name": "M\u00f8rbradb\u00f8ffer med bl\u00f8de l\u00f8g og fl\u00f8desauce", "slug": "morbradboffer-med-blode-log-og-flodesauce"}}, {"date": "2026-06-24", "recipe": {"name": "Rester fra mandag (Tortellini i fad)", "slug": ""}}, {"date": "2026-06-23", "recipe": {"name": "Rester fra s\u00f8ndag (Kylling med cornflakes)", "slug": ""}}, {"date": "2026-06-22", "recipe": {"name": "Tortellini i fad", "slug": "tortellini-i-fad"}}, {"date": "2026-06-21", "recipe": {"name": "Kylling med cornflakes", "slug": "kylling-med-cornflakes"}}]}