From fde477fb2ec0e7ffe91239ecb45845733129693b Mon Sep 17 00:00:00 2001 From: Claus Dethlefsen Date: Wed, 29 Jul 2026 19:50:46 +0200 Subject: [PATCH] =?UTF-8?q?Doorbell:=20tilf=C3=B8j=20sonos=20snapshot/rest?= =?UTF-8?q?ore=20for=20at=20undg=C3=A5=20invalid=20auth-advarsler=20fra=20?= =?UTF-8?q?Sonos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboards/views/05b_vanding.yaml | 19 ++++++-- dashboards/views/06c_indkorsel_snapshots.yaml | 2 +- docker/docker-compose.esphome.yml | 19 ++++++++ dokumenter/TODO.md | 5 ++ include/automations/vanding.yaml | 2 + include/input/number/vanding.yaml | 18 ++++++++ include/scripts/doorbell.yaml | 16 +++++++ include/scripts/spil_paa_lille_bad.yaml | 11 +++++ include/scripts/vanding.yaml | 46 ++++++++++++++----- www/mealie.json | 2 +- 10 files changed, 122 insertions(+), 18 deletions(-) create mode 100644 docker/docker-compose.esphome.yml diff --git a/dashboards/views/05b_vanding.yaml b/dashboards/views/05b_vanding.yaml index 027171a..0b61ced 100644 --- a/dashboards/views/05b_vanding.yaml +++ b/dashboards/views/05b_vanding.yaml @@ -434,6 +434,8 @@ sections: name: Mål HB2 – Kartofler - entity: input_number.vanding_maal_fugtighed_hojbed_3 name: Mål HB3 – Rabarber + - entity: input_number.vanding_maal_fugtighed_drivhus + name: Mål Drivhus # �🌿 Zonekontrol - type: grid @@ -484,10 +486,19 @@ sections: action: call-service service: script.vanding_toggle_hojbed_3 - - type: tile - entity: switch.hojbed_3 - name: Drivhus - icon: mdi:greenhouse + - type: vertical-stack + cards: + - type: entities + entities: + - entity: input_number.vanding_varighed_drivhus + name: Varighed Drivhus + - type: tile + entity: switch.hojbed_3 + name: Drivhus + icon: mdi:greenhouse + tap_action: + action: call-service + service: script.vanding_toggle_drivhus # 🔋 Sensorbatterier - type: grid diff --git a/dashboards/views/06c_indkorsel_snapshots.yaml b/dashboards/views/06c_indkorsel_snapshots.yaml index 320ae73..1c1f1f0 100644 --- a/dashboards/views/06c_indkorsel_snapshots.yaml +++ b/dashboards/views/06c_indkorsel_snapshots.yaml @@ -5,5 +5,5 @@ panel: true cards: - type: iframe - url: /local/snapshots/indkorsel_loader.html?v=20260705130716 + url: /local/snapshots/indkorsel_loader.html?v=20260729191638 aspect_ratio: 100% diff --git a/docker/docker-compose.esphome.yml b/docker/docker-compose.esphome.yml new file mode 100644 index 0000000..373be04 --- /dev/null +++ b/docker/docker-compose.esphome.yml @@ -0,0 +1,19 @@ +# Eget projektnavn så denne stak ikke ser de andre containere som "orphans" +name: esphome + +services: + esphome: + container_name: esphome + image: ghcr.io/esphome/esphome:latest + # host-netværk giver adgang til LAN (OTA til 10.0.0.190) + mDNS-discovery. + # Dashboard lytter på http://10.0.0.142:6052 + network_mode: host + restart: always + environment: + - TZ=Europe/Copenhagen + # Sæt en adgangskode på dashboardet (valgfrit – udkommentér for at aktivere) + # - USERNAME=claus + # - PASSWORD=changeme + volumes: + - /volume1/docker/esphome/config:/config + - /etc/localtime:/etc/localtime:ro diff --git a/dokumenter/TODO.md b/dokumenter/TODO.md index 497bf60..7472e04 100644 --- a/dokumenter/TODO.md +++ b/dokumenter/TODO.md @@ -59,3 +59,8 @@ 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). + + +## Idéer til udforskning + +- [ ] **Tjek `hass-scene_presets`** — HA-integration/tool til at generere lysscener (præsets) — https://github.com/Hypfer/hass-scene_presets diff --git a/include/automations/vanding.yaml b/include/automations/vanding.yaml index 370d650..4b71c02 100644 --- a/include/automations/vanding.yaml +++ b/include/automations/vanding.yaml @@ -25,6 +25,7 @@ entity_id: - switch.hojbed_1 - switch.hojbed_2 + - switch.hojbed_3 - switch.drivhus_drypvanding - service: switch.turn_off data: @@ -43,6 +44,7 @@ entity_id: - switch.hojbed_1 - switch.hojbed_2 + - switch.hojbed_3 - switch.drivhus_drypvanding - service: switch.turn_off data: diff --git a/include/input/number/vanding.yaml b/include/input/number/vanding.yaml index 35ed567..9302262 100644 --- a/include/input/number/vanding.yaml +++ b/include/input/number/vanding.yaml @@ -26,6 +26,15 @@ vanding_varighed_hojbed_3: initial: 15 icon: mdi:timer +vanding_varighed_drivhus: + name: Varighed – Drivhus + min: 0 + max: 60 + step: 5 + unit_of_measurement: min + initial: 15 + icon: mdi:timer + vanding_varighed_smart: name: Varighed pr. cyklus – smart vanding min: 5 @@ -71,3 +80,12 @@ vanding_maal_fugtighed_hojbed_3: unit_of_measurement: "%" initial: 40 icon: mdi:water-percent + +vanding_maal_fugtighed_drivhus: + name: Mål fugtighed – Drivhus + min: 0 + max: 100 + step: 5 + unit_of_measurement: "%" + initial: 40 + icon: mdi:water-percent diff --git a/include/scripts/doorbell.yaml b/include/scripts/doorbell.yaml index b2d86fa..5d3d887 100644 --- a/include/scripts/doorbell.yaml +++ b/include/scripts/doorbell.yaml @@ -13,6 +13,14 @@ doorbell: denon_state: "{{ states('media_player.denon_avr_x2300w') }}" denon_source: "{{ state_attr('media_player.denon_avr_x2300w', 'source') }}" denon_volume: "{{ state_attr('media_player.denon_avr_x2300w', 'volume_level') }}" + # Gem Sonos-tilstanden, saa doorbell-sporet ikke bliver liggende i koeen + # (undgaar "invalid authentication"-advarsler naar den signerede URL udloeber) + - service: sonos.snapshot + data: + entity_id: + - media_player.andreas + - media_player.daniel + with_group: true - parallel: - sequence: - variables: @@ -108,6 +116,14 @@ doorbell: volume_level: "{{ volumennat }}" target: entity_id: media_player.andreas + # Vent til doorbell-lyden er spillet faerdig, gendan derefter Sonos-koeen + - delay: "00:00:06" + - service: sonos.restore + data: + entity_id: + - media_player.andreas + - media_player.daniel + with_group: true # Gendan Denon-receiveren til praecis den kilde og volumen den stod paa foer ringningen - choose: - conditions: diff --git a/include/scripts/spil_paa_lille_bad.yaml b/include/scripts/spil_paa_lille_bad.yaml index 456f114..29bf661 100644 --- a/include/scripts/spil_paa_lille_bad.yaml +++ b/include/scripts/spil_paa_lille_bad.yaml @@ -10,6 +10,12 @@ spil_paa_lille_bad: sequence: - variables: gammel_volumen: "{{ state_attr('media_player.lille_badevaerelse', 'volume_level') | default(0.3) }}" + # Gem Sonos-tilstanden, saa lydfilen ikke bliver liggende i koeen + # (undgaar "invalid authentication"-advarsler naar den signerede URL udloeber) + - service: sonos.snapshot + data: + entity_id: media_player.lille_badevaerelse + with_group: true - service: media_player.volume_set data: volume_level: "{{ volumen }}" @@ -29,3 +35,8 @@ spil_paa_lille_bad: volume_level: "{{ gammel_volumen }}" target: entity_id: media_player.lille_badevaerelse + # Gendan Sonos-koeen, saa den lydfil ryddes ud af koeen + - service: sonos.restore + data: + entity_id: media_player.lille_badevaerelse + with_group: true diff --git a/include/scripts/vanding.yaml b/include/scripts/vanding.yaml index 34a73b1..700665b 100644 --- a/include/scripts/vanding.yaml +++ b/include/scripts/vanding.yaml @@ -56,6 +56,25 @@ vanding_toggle_hojbed_3: entity_id: switch.drivhus_drypvanding duration: "{{ states('input_number.vanding_varighed_hojbed_3') | int(15) }}" +vanding_toggle_drivhus: + alias: Toggle Drivhus + mode: single + sequence: + - choose: + - conditions: + - condition: state + entity_id: switch.hojbed_3 + state: "on" + sequence: + - service: switch.turn_off + target: + entity_id: switch.hojbed_3 + default: + - service: rainbird.start_irrigation + data: + entity_id: switch.hojbed_3 + duration: "{{ states('input_number.vanding_varighed_drivhus') | int(15) }}" + vanding_hojbed_skiftevis: alias: Smart vanding – højbed 1, 2 og 3 efter fugtighed mode: single @@ -85,18 +104,19 @@ vanding_hojbed_skiftevis: - condition: template value_template: > {{ - states('sensor.annes_havesensor_soil_moisture_1') | float(100) < 40 or - states('sensor.annes_havesensor_soil_moisture_2') | float(100) < 40 or - states('sensor.annes_havesensor_soil_moisture_3') | float(100) < 40 + states('sensor.annes_havesensor_soil_moisture_1') | float(100) < states('input_number.vanding_maal_fugtighed_hojbed_1') | float(40) or + states('sensor.annes_havesensor_soil_moisture_2') | float(100) < states('input_number.vanding_maal_fugtighed_hojbed_2') | float(40) or + states('sensor.annes_havesensor_soil_moisture_3') | float(100) < states('input_number.vanding_maal_fugtighed_hojbed_3') | float(40) }} - condition: template value_template: "{{ repeat.index <= 8 }}" sequence: # HB1 – Ærter (switch.hojbed_2) – kun hvis tørt - if: - - condition: numeric_state - entity_id: sensor.annes_havesensor_soil_moisture_1 - below: 40 + - condition: template + value_template: > + {{ states('sensor.annes_havesensor_soil_moisture_1') | float(100) + < states('input_number.vanding_maal_fugtighed_hojbed_1') | float(40) }} then: - service: rainbird.start_irrigation data: @@ -109,9 +129,10 @@ vanding_hojbed_skiftevis: # HB2 – Kartofler (switch.hojbed_1) – kun hvis tørt - if: - - condition: numeric_state - entity_id: sensor.annes_havesensor_soil_moisture_2 - below: 40 + - condition: template + value_template: > + {{ states('sensor.annes_havesensor_soil_moisture_2') | float(100) + < states('input_number.vanding_maal_fugtighed_hojbed_2') | float(40) }} then: - service: rainbird.start_irrigation data: @@ -124,9 +145,10 @@ vanding_hojbed_skiftevis: # HB3 – Rabarber (switch.drivhus_drypvanding) – kun hvis tørt - if: - - condition: numeric_state - entity_id: sensor.annes_havesensor_soil_moisture_3 - below: 40 + - condition: template + value_template: > + {{ states('sensor.annes_havesensor_soil_moisture_3') | float(100) + < states('input_number.vanding_maal_fugtighed_hojbed_3') | float(40) }} then: - service: rainbird.start_irrigation data: diff --git a/www/mealie.json b/www/mealie.json index 50d7243..b64324d 100644 --- a/www/mealie.json +++ b/www/mealie.json @@ -1 +1 @@ -{"count": 7, "items": [{"date": "2026-07-11", "recipe": {"name": "Dampede Bao med nakkekotelet", "slug": "dampede-bao-med-nakkekotelet"}}, {"date": "2026-07-10", "recipe": {"name": "Muslinger i hvidvin og fl\u00f8desauce \u2013 Moules Frites", "slug": "muslinger-i-hvidvin-og-flodesauce-moules-frites"}}, {"date": "2026-07-09", "recipe": {"name": "Clubsandwich med m\u00f8rt kyllingek\u00f8d og bacon", "slug": "clubsandwich-med-mort-kyllingekod-og-bacon"}}, {"date": "2026-07-08", "recipe": {"name": "One Pot Pasta med champignon og bacon", "slug": "one-pot-pasta-med-champignon-og-bacon"}}, {"date": "2026-07-07", "recipe": {"name": "Kylling i fad med pikant og gr\u00f8ntsager", "slug": "kylling-i-fad-med-pikant-og-grontsager"}}, {"date": "2026-07-06", "recipe": {"name": "One Pot Pasta med champignon og bacon", "slug": "one-pot-pasta-med-champignon-og-bacon"}}, {"date": "2026-07-05", "recipe": {"name": "Kylling i fad med pikant og gr\u00f8ntsager", "slug": "kylling-i-fad-med-pikant-og-grontsager"}}]} \ No newline at end of file +{"count": 7, "items": [{"date": "2026-08-04", "recipe": {"name": "P\u00f8lsegryde", "slug": "polsegryde"}}, {"date": "2026-08-03", "recipe": {"name": "One pot french onion pasta", "slug": "one-pot-french-onion-pasta"}}, {"date": "2026-08-02", "recipe": {"name": "P\u00f8lsegryde", "slug": "polsegryde"}}, {"date": "2026-08-01", "recipe": {"name": "Pho nudelsuppe med asiatisk ribbensteg", "slug": "pho-nudelsuppe-med-asiatisk-ribbensteg"}}, {"date": "2026-07-31", "recipe": {"name": "Banh Mi Burger", "slug": "banh-mi-burger"}}, {"date": "2026-07-30", "recipe": {"name": "Tex Mex Salat", "slug": "tex-mex-salat"}}, {"date": "2026-07-29", "recipe": {"name": "Marry Me Chicken Orzo med spinat", "slug": "marry-me-chicken-orzo-med-spinat"}}]} \ No newline at end of file