Doorbell: tilføj sonos snapshot/restore for at undgå invalid auth-advarsler fra Sonos

This commit is contained in:
2026-07-29 19:50:46 +02:00
parent d541b331fd
commit fde477fb2e
10 changed files with 122 additions and 18 deletions
+15 -4
View File
@@ -434,6 +434,8 @@ sections:
name: Mål HB2 Kartofler name: Mål HB2 Kartofler
- entity: input_number.vanding_maal_fugtighed_hojbed_3 - entity: input_number.vanding_maal_fugtighed_hojbed_3
name: Mål HB3 Rabarber name: Mål HB3 Rabarber
- entity: input_number.vanding_maal_fugtighed_drivhus
name: Mål Drivhus
# 🌿 Zonekontrol # 🌿 Zonekontrol
- type: grid - type: grid
@@ -484,10 +486,19 @@ sections:
action: call-service action: call-service
service: script.vanding_toggle_hojbed_3 service: script.vanding_toggle_hojbed_3
- type: tile - type: vertical-stack
entity: switch.hojbed_3 cards:
name: Drivhus - type: entities
icon: mdi:greenhouse 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 # 🔋 Sensorbatterier
- type: grid - type: grid
@@ -5,5 +5,5 @@ panel: true
cards: cards:
- type: iframe - type: iframe
url: /local/snapshots/indkorsel_loader.html?v=20260705130716 url: /local/snapshots/indkorsel_loader.html?v=20260729191638
aspect_ratio: 100% aspect_ratio: 100%
+19
View File
@@ -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
+5
View File
@@ -59,3 +59,8 @@
5. Evt. lille deploy-script der kører `op inject` automatisk 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). **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
+2
View File
@@ -25,6 +25,7 @@
entity_id: entity_id:
- switch.hojbed_1 - switch.hojbed_1
- switch.hojbed_2 - switch.hojbed_2
- switch.hojbed_3
- switch.drivhus_drypvanding - switch.drivhus_drypvanding
- service: switch.turn_off - service: switch.turn_off
data: data:
@@ -43,6 +44,7 @@
entity_id: entity_id:
- switch.hojbed_1 - switch.hojbed_1
- switch.hojbed_2 - switch.hojbed_2
- switch.hojbed_3
- switch.drivhus_drypvanding - switch.drivhus_drypvanding
- service: switch.turn_off - service: switch.turn_off
data: data:
+18
View File
@@ -26,6 +26,15 @@ vanding_varighed_hojbed_3:
initial: 15 initial: 15
icon: mdi:timer 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: vanding_varighed_smart:
name: Varighed pr. cyklus smart vanding name: Varighed pr. cyklus smart vanding
min: 5 min: 5
@@ -71,3 +80,12 @@ vanding_maal_fugtighed_hojbed_3:
unit_of_measurement: "%" unit_of_measurement: "%"
initial: 40 initial: 40
icon: mdi:water-percent 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
+16
View File
@@ -13,6 +13,14 @@ doorbell:
denon_state: "{{ states('media_player.denon_avr_x2300w') }}" denon_state: "{{ states('media_player.denon_avr_x2300w') }}"
denon_source: "{{ state_attr('media_player.denon_avr_x2300w', 'source') }}" denon_source: "{{ state_attr('media_player.denon_avr_x2300w', 'source') }}"
denon_volume: "{{ state_attr('media_player.denon_avr_x2300w', 'volume_level') }}" 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: - parallel:
- sequence: - sequence:
- variables: - variables:
@@ -108,6 +116,14 @@ doorbell:
volume_level: "{{ volumennat }}" volume_level: "{{ volumennat }}"
target: target:
entity_id: media_player.andreas 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 # Gendan Denon-receiveren til praecis den kilde og volumen den stod paa foer ringningen
- choose: - choose:
- conditions: - conditions:
+11
View File
@@ -10,6 +10,12 @@ spil_paa_lille_bad:
sequence: sequence:
- variables: - variables:
gammel_volumen: "{{ state_attr('media_player.lille_badevaerelse', 'volume_level') | default(0.3) }}" 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 - service: media_player.volume_set
data: data:
volume_level: "{{ volumen }}" volume_level: "{{ volumen }}"
@@ -29,3 +35,8 @@ spil_paa_lille_bad:
volume_level: "{{ gammel_volumen }}" volume_level: "{{ gammel_volumen }}"
target: target:
entity_id: media_player.lille_badevaerelse 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
+34 -12
View File
@@ -56,6 +56,25 @@ vanding_toggle_hojbed_3:
entity_id: switch.drivhus_drypvanding entity_id: switch.drivhus_drypvanding
duration: "{{ states('input_number.vanding_varighed_hojbed_3') | int(15) }}" 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: vanding_hojbed_skiftevis:
alias: Smart vanding højbed 1, 2 og 3 efter fugtighed alias: Smart vanding højbed 1, 2 og 3 efter fugtighed
mode: single mode: single
@@ -85,18 +104,19 @@ vanding_hojbed_skiftevis:
- condition: template - condition: template
value_template: > value_template: >
{{ {{
states('sensor.annes_havesensor_soil_moisture_1') | float(100) < 40 or 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) < 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) < 40 states('sensor.annes_havesensor_soil_moisture_3') | float(100) < states('input_number.vanding_maal_fugtighed_hojbed_3') | float(40)
}} }}
- condition: template - condition: template
value_template: "{{ repeat.index <= 8 }}" value_template: "{{ repeat.index <= 8 }}"
sequence: sequence:
# HB1 Ærter (switch.hojbed_2) kun hvis tørt # HB1 Ærter (switch.hojbed_2) kun hvis tørt
- if: - if:
- condition: numeric_state - condition: template
entity_id: sensor.annes_havesensor_soil_moisture_1 value_template: >
below: 40 {{ states('sensor.annes_havesensor_soil_moisture_1') | float(100)
< states('input_number.vanding_maal_fugtighed_hojbed_1') | float(40) }}
then: then:
- service: rainbird.start_irrigation - service: rainbird.start_irrigation
data: data:
@@ -109,9 +129,10 @@ vanding_hojbed_skiftevis:
# HB2 Kartofler (switch.hojbed_1) kun hvis tørt # HB2 Kartofler (switch.hojbed_1) kun hvis tørt
- if: - if:
- condition: numeric_state - condition: template
entity_id: sensor.annes_havesensor_soil_moisture_2 value_template: >
below: 40 {{ states('sensor.annes_havesensor_soil_moisture_2') | float(100)
< states('input_number.vanding_maal_fugtighed_hojbed_2') | float(40) }}
then: then:
- service: rainbird.start_irrigation - service: rainbird.start_irrigation
data: data:
@@ -124,9 +145,10 @@ vanding_hojbed_skiftevis:
# HB3 Rabarber (switch.drivhus_drypvanding) kun hvis tørt # HB3 Rabarber (switch.drivhus_drypvanding) kun hvis tørt
- if: - if:
- condition: numeric_state - condition: template
entity_id: sensor.annes_havesensor_soil_moisture_3 value_template: >
below: 40 {{ states('sensor.annes_havesensor_soil_moisture_3') | float(100)
< states('input_number.vanding_maal_fugtighed_hojbed_3') | float(40) }}
then: then:
- service: rainbird.start_irrigation - service: rainbird.start_irrigation
data: data:
+1 -1
View File
@@ -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"}}]} {"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"}}]}