Compare commits
2 Commits
9718d9428a
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 52442c50f1 | |||
| 52d11bfff0 |
@@ -1 +1 @@
|
|||||||
2024.5.0
|
2026.7.2
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -14,5 +14,8 @@ node_modules
|
|||||||
/custom_components/hacs
|
/custom_components/hacs
|
||||||
/custom_components/scheduler
|
/custom_components/scheduler
|
||||||
/custom_components/pyscript
|
/custom_components/pyscript
|
||||||
|
/custom_components/homematicip_local
|
||||||
/themes
|
/themes
|
||||||
|
/node-red
|
||||||
/.storage/hacs/*.hacs
|
/.storage/hacs/*.hacs
|
||||||
|
/.cache
|
||||||
414
automations.yaml
414
automations.yaml
@@ -44,21 +44,22 @@
|
|||||||
- id: '1589377976830'
|
- id: '1589377976830'
|
||||||
alias: Alarm Martin Handy
|
alias: Alarm Martin Handy
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- entity_id: binary_sensor.gang_bewegungsmelder_schlafzimmer, binary_sensor.gang_bewegungsmelder_ost,
|
- entity_id: binary_sensor.gang_bewegungsmelder_schlafzimmer, binary_sensor.gang_bewegungsmelder_ost,
|
||||||
binary_sensor.gang_bewegungsmelder_mitte
|
binary_sensor.gang_bewegungsmelder_mitte
|
||||||
from: 'off'
|
from: 'off'
|
||||||
platform: state
|
|
||||||
to: 'on'
|
to: 'on'
|
||||||
condition: []
|
trigger: state
|
||||||
action:
|
conditions: []
|
||||||
- service: notify.mobile_app_iphone_von_martin
|
actions:
|
||||||
|
- action: notify.mobile_app_iphone16_von_martin
|
||||||
data:
|
data:
|
||||||
message: Bewegung im Gang
|
message: Bewegung im Gang
|
||||||
|
title: Alarm
|
||||||
- data:
|
- data:
|
||||||
message: Bewegung im Gang
|
message: Bewegung im Gang
|
||||||
title: Alarm
|
title: Alarm
|
||||||
service: notify.mobile_app_martins_ipad
|
action: notify.mobile_app_martins_ipad
|
||||||
- delay:
|
- delay:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 2
|
minutes: 2
|
||||||
@@ -68,94 +69,79 @@
|
|||||||
- id: '1598594894559'
|
- id: '1598594894559'
|
||||||
alias: KlingelknopfGartensäuleAufMobileGeräte
|
alias: KlingelknopfGartensäuleAufMobileGeräte
|
||||||
description: Push Notification auf Martin Handy, Rebecca Handy und iPad
|
description: Push Notification auf Martin Handy, Rebecca Handy und iPad
|
||||||
trigger:
|
triggers:
|
||||||
- entity_id:
|
- entity_id:
|
||||||
- binary_sensor.klingelknopfgartensaeule
|
- binary_sensor.klingelknopfgartensaeule
|
||||||
from: 'off'
|
from: 'off'
|
||||||
platform: state
|
|
||||||
to: 'on'
|
to: 'on'
|
||||||
condition: []
|
trigger: state
|
||||||
action:
|
conditions: []
|
||||||
- service: notify.mobile_app_iphone_von_martin
|
actions:
|
||||||
|
- action: notify.mobile_app_iphone_von_rebecca
|
||||||
metadata: {}
|
metadata: {}
|
||||||
data:
|
data:
|
||||||
message: Jemand hat an der Briefkastensäule geklingelt
|
message: Jemand hat an der Briefkastensäule geklingelt
|
||||||
title: "\U0001F514\U0001F4EA Klingel"
|
title: "\U0001F514\U0001F4EA Klingel"
|
||||||
- service: notify.mobile_app_rebeccahandysamsung
|
- action: notify.mobile_app_martin_ipadprom4
|
||||||
metadata: {}
|
metadata: {}
|
||||||
data:
|
data:
|
||||||
message: Jemand hat an der Briefkastensäule geklingelt
|
message: Jemand hat an der Briefkastensäule geklingelt
|
||||||
title: "\U0001F514\U0001F4EA Klingel"
|
title: "\U0001F514\U0001F4EA Klingel"
|
||||||
- service: notify.mobile_app_martins_ipad
|
- action: notify.mobile_app_martin_iphonepro16
|
||||||
metadata: {}
|
metadata: {}
|
||||||
data:
|
data:
|
||||||
title: "\U0001F514\U0001F4EA Klingel"
|
|
||||||
message: Jemand hat an der Briefkastensäule geklingelt
|
message: Jemand hat an der Briefkastensäule geklingelt
|
||||||
|
title: "\U0001F514\U0001F4EA Klingel"
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1606655282153'
|
- id: '1606655282153'
|
||||||
alias: Weihnachtslichter an morgens um 6
|
alias: Weihnachtslichter an morgens um 7
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: time
|
- at: 07:00:00
|
||||||
at: 06:00
|
trigger: time
|
||||||
condition: []
|
conditions: []
|
||||||
action:
|
actions:
|
||||||
- service: switch.turn_on
|
- data: {}
|
||||||
data: {}
|
entity_id: switch.weihnachtslichter_unten
|
||||||
entity_id:
|
action: switch.turn_on
|
||||||
- switch.tasmota02
|
|
||||||
- switch.tasmota04
|
|
||||||
- switch.tasmota05
|
|
||||||
- switch.tasmota06
|
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1607412098745'
|
- id: '1607412098745'
|
||||||
alias: Weihnachtslichter aus morgens
|
alias: Weihnachtslichter aus morgens
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: sun
|
- event: sunrise
|
||||||
event: sunrise
|
offset: 00:20:00
|
||||||
offset: 00:15:00
|
trigger: sun
|
||||||
condition: []
|
conditions: []
|
||||||
action:
|
actions:
|
||||||
- service: switch.turn_off
|
- data: {}
|
||||||
data: {}
|
entity_id: switch.weihnachtslichter_unten
|
||||||
entity_id:
|
action: switch.turn_off
|
||||||
- switch.tasmota02
|
|
||||||
- switch.tasmota04
|
|
||||||
- switch.tasmota05
|
|
||||||
- switch.tasmota06
|
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1607412144113'
|
- id: '1607412144113'
|
||||||
alias: Weihnachtslichter An Abends
|
alias: Weihnachtslichter An Abends
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: sun
|
- event: sunset
|
||||||
event: sunset
|
trigger: sun
|
||||||
condition: []
|
offset: -00:20:00
|
||||||
action:
|
conditions: []
|
||||||
- service: switch.turn_on
|
actions:
|
||||||
data: {}
|
- data: {}
|
||||||
entity_id:
|
entity_id: switch.weihnachtslichter_unten
|
||||||
- switch.tasmota02
|
action: switch.turn_on
|
||||||
- switch.tasmota04
|
|
||||||
- switch.tasmota05
|
|
||||||
- switch.tasmota06
|
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1607412210097'
|
- id: '1607412210097'
|
||||||
alias: Weihnachtslichter Aus Abends
|
alias: Weihnachtslichter Aus Abends
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: time
|
- at: '22:45:00'
|
||||||
at: '22:30'
|
trigger: time
|
||||||
condition: []
|
conditions: []
|
||||||
action:
|
actions:
|
||||||
- service: switch.turn_off
|
- data: {}
|
||||||
data: {}
|
entity_id: switch.weihnachtslichter_unten
|
||||||
entity_id:
|
action: switch.turn_off
|
||||||
- switch.tasmota02
|
|
||||||
- switch.tasmota04
|
|
||||||
- switch.tasmota05
|
|
||||||
- switch.tasmota06
|
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1612028092169'
|
- id: '1612028092169'
|
||||||
alias: Bewegungsmelder Schlafzimmer Nacht
|
alias: Bewegungsmelder Schlafzimmer Nacht
|
||||||
@@ -194,23 +180,27 @@
|
|||||||
entity_id: light.bett_martin, light.bett_rebecca
|
entity_id: light.bett_martin, light.bett_rebecca
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1632393568599'
|
- id: '1632393568599'
|
||||||
alias: Herd vorgeheizt -> iPad
|
alias: Herd vorgeheizt -> iPhoneMartin
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: numeric_state
|
- entity_id: sensor.backofen_verbrauch
|
||||||
entity_id: sensor.backofen_verbrauch
|
|
||||||
below: '20'
|
below: '20'
|
||||||
for:
|
for:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 0
|
minutes: 0
|
||||||
seconds: 5
|
seconds: 5
|
||||||
milliseconds: 0
|
milliseconds: 0
|
||||||
condition: []
|
trigger: numeric_state
|
||||||
action:
|
conditions: []
|
||||||
- service: notify.mobile_app_martins_ipad
|
actions:
|
||||||
|
- action: notify.mobile_app_martin_iphonepro16
|
||||||
|
metadata: {}
|
||||||
data:
|
data:
|
||||||
title: Herd vorgeheizt
|
message: Herd ist heiss
|
||||||
message: herd ist heiss :)
|
- action: notify.mobile_app_martin_ipadprom4
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
message: Herd ist heiss
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1633435293611'
|
- id: '1633435293611'
|
||||||
alias: Gang Bogen Nachtlicht
|
alias: Gang Bogen Nachtlicht
|
||||||
@@ -263,7 +253,7 @@
|
|||||||
description: ''
|
description: ''
|
||||||
trigger:
|
trigger:
|
||||||
- platform: time
|
- platform: time
|
||||||
at: 02:00:00
|
at: 04:00:00
|
||||||
condition: []
|
condition: []
|
||||||
action:
|
action:
|
||||||
- service: cover.close_cover
|
- service: cover.close_cover
|
||||||
@@ -276,123 +266,104 @@
|
|||||||
- id: '1669014477577'
|
- id: '1669014477577'
|
||||||
alias: Weihnachtslichter oben 01 morgens an um 7
|
alias: Weihnachtslichter oben 01 morgens an um 7
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: time
|
- at: 07:00:00
|
||||||
at: 07:00:00
|
trigger: time
|
||||||
condition: []
|
conditions: []
|
||||||
action:
|
actions:
|
||||||
- service: switch.turn_on
|
- data: {}
|
||||||
data: {}
|
action: switch.turn_on
|
||||||
target:
|
target:
|
||||||
entity_id: switch.tasmota06
|
entity_id: switch.tasmota01
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1669014568292'
|
- id: '1669014568292'
|
||||||
alias: Weihnachtslichter oben 02 morgens aus um 9
|
alias: Weihnachtslichter oben 02 morgens aus um 9
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: time
|
- at: 09:00:00
|
||||||
at: 09:00:00
|
trigger: time
|
||||||
condition: []
|
conditions: []
|
||||||
action:
|
actions:
|
||||||
- service: switch.turn_off
|
- data: {}
|
||||||
data: {}
|
action: switch.turn_off
|
||||||
target:
|
target:
|
||||||
entity_id: switch.tasmota06
|
entity_id: switch.tasmota01
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1669014612655'
|
- id: '1669014612655'
|
||||||
alias: Weihnachtslichter oben 03 abends an 16:30
|
alias: Weihnachtslichter oben 03 abends an 16:30
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: time
|
- at: '16:30:00'
|
||||||
at: '16:30:00'
|
trigger: time
|
||||||
condition: []
|
conditions: []
|
||||||
action:
|
actions:
|
||||||
- service: switch.turn_on
|
- data: {}
|
||||||
data: {}
|
action: switch.turn_on
|
||||||
target:
|
target:
|
||||||
entity_id: switch.tasmota06
|
entity_id: switch.tasmota01
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1669014682496'
|
- id: '1669014682496'
|
||||||
alias: Weihnachtslichter oben 04 abends aus 22:00
|
alias: Weihnachtslichter oben 04 abends aus 22:00
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: time
|
- at: '22:00:00'
|
||||||
at: '22:00:00'
|
trigger: time
|
||||||
condition: []
|
conditions: []
|
||||||
action:
|
actions:
|
||||||
- service: switch.turn_off
|
- data: {}
|
||||||
data: {}
|
action: switch.turn_off
|
||||||
target:
|
target:
|
||||||
entity_id: switch.tasmota06
|
entity_id: switch.tasmota01
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1693231134539'
|
- id: '1693231134539'
|
||||||
alias: Pool Pumpe ein um 9 und 17 Uhr
|
alias: 'Pool Pumpe ein: 5:00, 20:30'
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: time
|
- at: 05:00:00
|
||||||
at: 09:00:00
|
trigger: time
|
||||||
- platform: time
|
- at: '20:30:00'
|
||||||
at: '17:00:00'
|
trigger: time
|
||||||
condition: []
|
conditions: []
|
||||||
action:
|
actions:
|
||||||
- service: switch.turn_on
|
- data: {}
|
||||||
data: {}
|
|
||||||
target:
|
target:
|
||||||
entity_id: switch.poolpumpe_speed1
|
entity_id: switch.poolpumpe_speed1
|
||||||
|
action: switch.turn_on
|
||||||
- delay:
|
- delay:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 0
|
minutes: 0
|
||||||
seconds: 2
|
seconds: 2
|
||||||
milliseconds: 0
|
milliseconds: 0
|
||||||
- service: switch.turn_off
|
- data: {}
|
||||||
data: {}
|
|
||||||
target:
|
target:
|
||||||
entity_id: switch.poolpumpe_speed1
|
entity_id: switch.poolpumpe_speed1
|
||||||
|
action: switch.turn_off
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1693231202553'
|
- id: '1693231202553'
|
||||||
alias: Pool Pumpe aus um 10:15 und 18:15
|
alias: Pool Pumpe aus 8:00, 22:30, 1:00
|
||||||
description: ''
|
description: ''
|
||||||
trigger:
|
triggers:
|
||||||
- platform: time
|
- at: 08:00:00
|
||||||
at: '10:15:00'
|
trigger: time
|
||||||
- platform: time
|
- at: '22:30:00'
|
||||||
at: '18:15:00'
|
trigger: time
|
||||||
condition: []
|
- trigger: time
|
||||||
action:
|
at: 01:00:00
|
||||||
- service: switch.turn_on
|
conditions: []
|
||||||
data: {}
|
actions:
|
||||||
|
- data: {}
|
||||||
target:
|
target:
|
||||||
entity_id: switch.poolpumpe_speed_off
|
entity_id: switch.poolpumpe_speed_off
|
||||||
|
action: switch.turn_on
|
||||||
- delay:
|
- delay:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 0
|
minutes: 0
|
||||||
seconds: 2
|
seconds: 5
|
||||||
milliseconds: 0
|
milliseconds: 0
|
||||||
- service: switch.turn_off
|
- data: {}
|
||||||
data: {}
|
|
||||||
target:
|
target:
|
||||||
entity_id: switch.poolpumpe_speed_off
|
entity_id: switch.poolpumpe_speed_off
|
||||||
mode: single
|
action: switch.turn_off
|
||||||
- id: '1693845791544'
|
|
||||||
alias: Sprinkler alle 2 stunden
|
|
||||||
description: Sprinkler an für 3 minuten um 10,12,14,16,18,20 Uhr
|
|
||||||
trigger:
|
|
||||||
- platform: time
|
|
||||||
at:
|
|
||||||
- '10:00:00'
|
|
||||||
- '11:00:00'
|
|
||||||
- '12:00:00'
|
|
||||||
- '13:00:00'
|
|
||||||
- '14:00:00'
|
|
||||||
- '15:00:00'
|
|
||||||
- '16:00:00'
|
|
||||||
- '18:00:00'
|
|
||||||
- '20:00:00'
|
|
||||||
condition: []
|
|
||||||
action:
|
|
||||||
- service: script.sprinkler_an_5_minuten
|
|
||||||
data:
|
|
||||||
minutes: 3
|
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1693849132880'
|
- id: '1693849132880'
|
||||||
alias: Eingangslichter Beet an wenn Haustur licht an
|
alias: Eingangslichter Beet an wenn Haustur licht an
|
||||||
@@ -557,7 +528,7 @@
|
|||||||
description: ''
|
description: ''
|
||||||
trigger:
|
trigger:
|
||||||
- platform: time
|
- platform: time
|
||||||
at: '22:00:00'
|
at: 00:30:00
|
||||||
condition: []
|
condition: []
|
||||||
action:
|
action:
|
||||||
- service: switch.turn_off
|
- service: switch.turn_off
|
||||||
@@ -638,25 +609,25 @@
|
|||||||
- id: '1709737843307'
|
- id: '1709737843307'
|
||||||
alias: KlingelknopfHaustuerUntenAufMobileGeräte
|
alias: KlingelknopfHaustuerUntenAufMobileGeräte
|
||||||
description: Push Notification auf Martin Handy, Rebecca Handy und iPad
|
description: Push Notification auf Martin Handy, Rebecca Handy und iPad
|
||||||
trigger:
|
triggers:
|
||||||
- entity_id:
|
- entity_id:
|
||||||
- binary_sensor.klingelknopfhaustuerunten
|
- binary_sensor.klingelknopfhaustuerunten
|
||||||
from: 'off'
|
from: 'off'
|
||||||
platform: state
|
|
||||||
to: 'on'
|
to: 'on'
|
||||||
condition: []
|
trigger: state
|
||||||
action:
|
conditions: []
|
||||||
- service: notify.mobile_app_iphone_von_martin
|
actions:
|
||||||
|
- action: notify.mobile_app_iphone_von_rebecca
|
||||||
metadata: {}
|
metadata: {}
|
||||||
data:
|
data:
|
||||||
message: Jemand hat an der Haustür unten geklingelt
|
message: Jemand hat an der Haustür unten geklingelt
|
||||||
title: "\U0001F514 \U0001F6AA Klingel"
|
title: "\U0001F514 \U0001F6AA Klingel"
|
||||||
- service: notify.mobile_app_rebeccahandysamsung
|
- action: notify.mobile_app_martin_ipadprom4
|
||||||
metadata: {}
|
metadata: {}
|
||||||
data:
|
data:
|
||||||
message: Jemand hat an der Haustür unten geklingelt
|
message: Jemand hat an der Haustür unten geklingelt
|
||||||
title: "\U0001F514 \U0001F6AA Klingel"
|
title: "\U0001F514 \U0001F6AA Klingel"
|
||||||
- service: notify.mobile_app_martins_ipad
|
- action: notify.mobile_app_martin_iphonepro16
|
||||||
metadata: {}
|
metadata: {}
|
||||||
data:
|
data:
|
||||||
title: "\U0001F514 \U0001F6AA Klingel"
|
title: "\U0001F514 \U0001F6AA Klingel"
|
||||||
@@ -665,22 +636,123 @@
|
|||||||
- id: '1709738037256'
|
- id: '1709738037256'
|
||||||
alias: KlingelknopfInnentürAufMobileGeräte
|
alias: KlingelknopfInnentürAufMobileGeräte
|
||||||
description: Push Notification auf Martin Handy und iPad
|
description: Push Notification auf Martin Handy und iPad
|
||||||
trigger:
|
triggers:
|
||||||
- entity_id:
|
- entity_id:
|
||||||
- binary_sensor.klingelknopfinnentuer
|
- binary_sensor.klingelknopfinnentuer
|
||||||
from: 'off'
|
from: 'off'
|
||||||
platform: state
|
|
||||||
to: 'on'
|
to: 'on'
|
||||||
|
trigger: state
|
||||||
|
conditions: []
|
||||||
|
actions:
|
||||||
|
- action: notify.mobile_app_iphone_von_rebecca
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
message: Jemand hat an der Innentür geklingelt
|
||||||
|
title: Klingel Innen
|
||||||
|
- action: notify.mobile_app_martin_iphonepro16
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
message: Jemand hat an der Innentür geklingelt
|
||||||
|
title: Klingel Innen
|
||||||
|
mode: single
|
||||||
|
- id: '1715632353191'
|
||||||
|
alias: Kinderzimmer Rollo zu um 4 nachts
|
||||||
|
description: ''
|
||||||
|
trigger:
|
||||||
|
- platform: time
|
||||||
|
at: 04:00:00
|
||||||
condition: []
|
condition: []
|
||||||
action:
|
action:
|
||||||
- service: notify.mobile_app_iphone_von_martin
|
- service: cover.close_cover
|
||||||
metadata: {}
|
metadata: {}
|
||||||
data:
|
data: {}
|
||||||
message: Jemand hat an der Innentür geklingelt
|
target:
|
||||||
title: "\U0001F56D Klingel Innen"
|
entity_id: cover.kinderzimmer_rollo
|
||||||
- service: notify.mobile_app_martins_ipad
|
mode: single
|
||||||
metadata: {}
|
- id: '1718390440758'
|
||||||
data:
|
alias: Sprinkler Beet West aus 4min
|
||||||
title: "\U0001F56D Klingel Innen"
|
description: ''
|
||||||
message: Jemand hat an der Innentür geklingelt
|
use_blueprint:
|
||||||
|
path: homeassistant/auto_off.yaml
|
||||||
|
input:
|
||||||
|
the_device: switch.ventil_beet_west
|
||||||
|
duration_until_off:
|
||||||
|
hours: 0
|
||||||
|
minutes: 3
|
||||||
|
seconds: 0
|
||||||
|
- id: '1718390486813'
|
||||||
|
alias: Beete Eingang & Hochbeet Tropfschlauch nach 15min
|
||||||
|
description: ''
|
||||||
|
use_blueprint:
|
||||||
|
path: homeassistant/auto_off.yaml
|
||||||
|
input:
|
||||||
|
the_device: switch.ventil_giessanlage_vorne
|
||||||
|
duration_until_off:
|
||||||
|
hours: 0
|
||||||
|
minutes: 15
|
||||||
|
seconds: 0
|
||||||
|
- id: '1721931988033'
|
||||||
|
alias: Sprinkler Beet Süd aus 4min
|
||||||
|
description: ''
|
||||||
|
use_blueprint:
|
||||||
|
path: homeassistant/auto_off.yaml
|
||||||
|
input:
|
||||||
|
duration_until_off:
|
||||||
|
hours: 0
|
||||||
|
minutes: 3
|
||||||
|
seconds: 0
|
||||||
|
the_device: switch.ventil_beet_sued
|
||||||
|
- id: '1786086669295'
|
||||||
|
alias: Giessanlage um 21:30
|
||||||
|
description: ''
|
||||||
|
triggers:
|
||||||
|
- trigger: time
|
||||||
|
at: '21:30:00'
|
||||||
|
conditions: []
|
||||||
|
actions:
|
||||||
|
- action: switch.turn_on
|
||||||
|
metadata: {}
|
||||||
|
target:
|
||||||
|
entity_id: switch.ventil_sprinkler_sud
|
||||||
|
data: {}
|
||||||
|
- delay:
|
||||||
|
hours: 0
|
||||||
|
minutes: 7
|
||||||
|
seconds: 0
|
||||||
|
milliseconds: 0
|
||||||
|
- action: switch.turn_off
|
||||||
|
metadata: {}
|
||||||
|
target:
|
||||||
|
entity_id: switch.ventil_sprinkler_sud
|
||||||
|
data: {}
|
||||||
|
- action: switch.turn_on
|
||||||
|
metadata: {}
|
||||||
|
target:
|
||||||
|
entity_id: switch.ventil_giessanlage_vorne
|
||||||
|
data: {}
|
||||||
|
- delay:
|
||||||
|
hours: 0
|
||||||
|
minutes: 15
|
||||||
|
seconds: 0
|
||||||
|
milliseconds: 0
|
||||||
|
- action: switch.turn_off
|
||||||
|
metadata: {}
|
||||||
|
target:
|
||||||
|
entity_id: switch.ventil_giessanlage_vorne
|
||||||
|
data: {}
|
||||||
|
- action: switch.turn_on
|
||||||
|
metadata: {}
|
||||||
|
target:
|
||||||
|
entity_id: switch.ventil_beet_sued
|
||||||
|
data: {}
|
||||||
|
- delay:
|
||||||
|
hours: 0
|
||||||
|
minutes: 5
|
||||||
|
seconds: 0
|
||||||
|
milliseconds: 0
|
||||||
|
- action: switch.turn_off
|
||||||
|
metadata: {}
|
||||||
|
target:
|
||||||
|
entity_id: switch.ventil_beet_sued
|
||||||
|
data: {}
|
||||||
mode: single
|
mode: single
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ kids_room:
|
|||||||
- light.kinderzimmer_fluter
|
- light.kinderzimmer_fluter
|
||||||
- cover.kinderzimmer_rollo
|
- cover.kinderzimmer_rollo
|
||||||
- light.music_mouse_regal_licht
|
- light.music_mouse_regal_licht
|
||||||
|
- light.kinderzimmer_deckenlampe
|
||||||
|
|
||||||
bathroom:
|
bathroom:
|
||||||
name: Bad
|
name: Bad
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ def create_power_plug(device_info: List[DeviceInfo],
|
|||||||
postfix_counter_reset=" BSZ Neustart"):
|
postfix_counter_reset=" BSZ Neustart"):
|
||||||
result = {'switch': [],
|
result = {'switch': [],
|
||||||
'sensor': []}
|
'sensor': []}
|
||||||
template_sensors = {'sensor': []}
|
template_sensors = {'template': {'sensor': []}}
|
||||||
for entry in device_info:
|
for entry in device_info:
|
||||||
try:
|
try:
|
||||||
# Switching
|
# Switching
|
||||||
@@ -82,13 +82,11 @@ def create_power_plug(device_info: List[DeviceInfo],
|
|||||||
'type': 'DPT-9',
|
'type': 'DPT-9',
|
||||||
})
|
})
|
||||||
name = name_to_id(entry.display_name + " Verbrauch mA", 'sensor')
|
name = name_to_id(entry.display_name + " Verbrauch mA", 'sensor')
|
||||||
template_sensors['sensor'].append({
|
template_sensors['template']['sensor'].append({
|
||||||
'platform': 'template',
|
'unique_id': name_to_id(entry.display_name + " Verbrauch", None),
|
||||||
'sensors': {
|
'name': entry.display_name + " Verbrauch",
|
||||||
name_to_id(entry.display_name + " Verbrauch", None):
|
'unit_of_measurement': 'W',
|
||||||
{'friendly_name': entry.display_name + " Verbrauch",
|
'state': f"{{{{ (states('{name}') | float / 1000 * 230) | round(1) }}}}"
|
||||||
'unit_of_measurement': 'W',
|
|
||||||
'value_template': f"{{{{ (states('{name}') | float / 1000 * 230) | round(1) }}}}"}}
|
|
||||||
})
|
})
|
||||||
consumption_sum = csv_contents.get(entry.csv_name + postfix_consumption_sum, None)
|
consumption_sum = csv_contents.get(entry.csv_name + postfix_consumption_sum, None)
|
||||||
if consumption_sum:
|
if consumption_sum:
|
||||||
|
|||||||
@@ -263,6 +263,40 @@ def recorder_config(all_devices):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def merge_configs(base_config, override_config):
|
||||||
|
"""
|
||||||
|
Merge two configuration dictionaries by combining list-type entries.
|
||||||
|
|
||||||
|
For keys that exist in both configs and have list values in override_config,
|
||||||
|
the lists are concatenated. If base_config has a dict value for that key,
|
||||||
|
it's first converted to a single-element list before extending.
|
||||||
|
|
||||||
|
Keys with list values are moved from override_config to base_config.
|
||||||
|
Non-list entries in override_config remain unchanged.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
base_config: The base configuration dict to merge into (modified in place)
|
||||||
|
override_config: The override configuration dict (list entries are removed)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tuple: (base_config, override_config) after merging
|
||||||
|
"""
|
||||||
|
keys_to_merge = []
|
||||||
|
for key in override_config:
|
||||||
|
if isinstance(override_config[key], list):
|
||||||
|
keys_to_merge.append(key)
|
||||||
|
for key in keys_to_merge:
|
||||||
|
override_value = override_config[key]
|
||||||
|
if key not in base_config:
|
||||||
|
base_config[key] = []
|
||||||
|
# Handle case where base_config[key] is a dict (convert to list first)
|
||||||
|
if isinstance(base_config[key], dict):
|
||||||
|
base_config[key] = [base_config[key]]
|
||||||
|
base_config[key].extend(override_value)
|
||||||
|
del override_config[key]
|
||||||
|
return base_config, override_config
|
||||||
|
|
||||||
|
|
||||||
def create_config(target_directory, development=False):
|
def create_config(target_directory, development=False):
|
||||||
groups_yaml_path = os.path.join(script_path, 'groups.yaml')
|
groups_yaml_path = os.path.join(script_path, 'groups.yaml')
|
||||||
manual_config_path = os.path.join(script_path, 'manual_config.yaml')
|
manual_config_path = os.path.join(script_path, 'manual_config.yaml')
|
||||||
@@ -282,12 +316,20 @@ def create_config(target_directory, development=False):
|
|||||||
|
|
||||||
with open(os.path.join(target_directory, 'configuration.yaml'), 'w', encoding="utf-8") as output:
|
with open(os.path.join(target_directory, 'configuration.yaml'), 'w', encoding="utf-8") as output:
|
||||||
output.write("# Dont' edit manually! this is generated!\n\n")
|
output.write("# Dont' edit manually! this is generated!\n\n")
|
||||||
for key in ['sensor', 'switch', 'light', 'cover', 'binary_sensor']:
|
# Merge list-type configurations from manual_config into all_devices
|
||||||
if key in manual_config_dict:
|
keys_to_merge = []
|
||||||
if key not in all_devices:
|
for key in manual_config_dict:
|
||||||
all_devices[key] = []
|
if isinstance(manual_config_dict[key], list):
|
||||||
all_devices[key].extend(manual_config_dict[key])
|
keys_to_merge.append(key)
|
||||||
del manual_config_dict[key]
|
for key in keys_to_merge:
|
||||||
|
manual_value = manual_config_dict[key]
|
||||||
|
if key not in all_devices:
|
||||||
|
all_devices[key] = []
|
||||||
|
# Handle case where all_devices[key] is a dict (convert to list first)
|
||||||
|
if isinstance(all_devices[key], dict):
|
||||||
|
all_devices[key] = [all_devices[key]]
|
||||||
|
all_devices[key].extend(manual_value)
|
||||||
|
del manual_config_dict[key]
|
||||||
yaml.dump(manual_config_dict, output)
|
yaml.dump(manual_config_dict, output)
|
||||||
yaml.dump(all_devices, output)
|
yaml.dump(all_devices, output)
|
||||||
yaml.dump(logbook_config(all_devices), output)
|
yaml.dump(logbook_config(all_devices), output)
|
||||||
|
|||||||
@@ -226,27 +226,27 @@ octoprint:
|
|||||||
number_of_tools: 1
|
number_of_tools: 1
|
||||||
bed: true
|
bed: true
|
||||||
|
|
||||||
telegram_bot:
|
#telegram_bot:
|
||||||
- platform: webhooks
|
# - platform: webhooks
|
||||||
parse_mode: html
|
# parse_mode: html
|
||||||
url: https://ha.bauer.tech
|
# url: https://ha.bauer.tech
|
||||||
api_key: !secret telegram_token
|
# api_key: !secret telegram_token
|
||||||
allowed_chat_ids:
|
# allowed_chat_ids:
|
||||||
- !secret telegram_chatid_martin
|
# - !secret telegram_chatid_martin
|
||||||
trusted_networks:
|
# trusted_networks:
|
||||||
- 127.0.0.1/32
|
# - 127.0.0.1/32
|
||||||
- 192.168.178.80
|
# - 192.168.178.80
|
||||||
- 149.154.167.197/32
|
# - 149.154.167.197/32
|
||||||
- 149.154.167.198/31
|
# - 149.154.167.198/31
|
||||||
- 149.154.167.200/29
|
# - 149.154.167.200/29
|
||||||
- 149.154.167.208/28
|
# - 149.154.167.208/28
|
||||||
- 149.154.167.224/29
|
# - 149.154.167.224/29
|
||||||
- 149.154.167.232/31
|
# - 149.154.167.232/31
|
||||||
|
|
||||||
notify:
|
#notify:
|
||||||
- name: telegram_martin
|
# - name: telegram_martin
|
||||||
platform: telegram
|
# platform: telegram
|
||||||
chat_id: !secret telegram_chatid_martin
|
# chat_id: !secret telegram_chatid_martin
|
||||||
|
|
||||||
|
|
||||||
# Custom stuff
|
# Custom stuff
|
||||||
@@ -258,6 +258,7 @@ counter:
|
|||||||
initial: 0
|
initial: 0
|
||||||
step: 1
|
step: 1
|
||||||
|
|
||||||
|
|
||||||
#switch:
|
#switch:
|
||||||
# - platform: httpsispmctl
|
# - platform: httpsispmctl
|
||||||
# name: esszimmer_oben_radio_steckdose
|
# name: esszimmer_oben_radio_steckdose
|
||||||
@@ -297,52 +298,52 @@ logger:
|
|||||||
# Weather prediction
|
# Weather prediction
|
||||||
# - platform: yr
|
# - platform: yr
|
||||||
|
|
||||||
tts:
|
#tts:
|
||||||
- platform: watson_tts
|
# - platform: watson_tts
|
||||||
watson_apikey: !secret watson_api_key
|
# watson_apikey: !secret watson_api_key
|
||||||
watson_url: https://gateway-lon.watsonplatform.net/text-to-speech/api
|
# watson_url: https://gateway-lon.watsonplatform.net/text-to-speech/api
|
||||||
voice: de-DE_BirgitVoice
|
# voice: de-DE_BirgitVoice
|
||||||
output_format: audio/flac
|
# output_format: audio/flac
|
||||||
output_audio_rate: 44100
|
# output_audio_rate: 44100
|
||||||
|
|
||||||
alexa:
|
#alexa:
|
||||||
smart_home:
|
# smart_home:
|
||||||
locale: de-DE
|
# locale: de-DE
|
||||||
#endpoint: https://api.eu.amazonalexa.com/v3/events
|
# #endpoint: https://api.eu.amazonalexa.com/v3/events
|
||||||
#client_id: amzn1.application-oa2-client.a4de8a70130c4f9383b277044f07a3af
|
# #client_id: amzn1.application-oa2-client.a4de8a70130c4f9383b277044f07a3af
|
||||||
#client_secret: !secret alexa_client_secret
|
# #client_secret: !secret alexa_client_secret
|
||||||
filter:
|
# filter:
|
||||||
include_entities:
|
# include_entities:
|
||||||
# Light Groups
|
# # Light Groups
|
||||||
#- light.kuche_esszimmer_lichter
|
# #- light.kuche_esszimmer_lichter
|
||||||
#- light.arbeitszimmer_lichter
|
# #- light.arbeitszimmer_lichter
|
||||||
# Arbeitszimmer
|
# # Arbeitszimmer
|
||||||
- light.arbeitszimmer_deckenlampe
|
# - light.arbeitszimmer_deckenlampe
|
||||||
- light.arbeitszimmer_fluter
|
# - light.arbeitszimmer_fluter
|
||||||
- light.arbeitszimmer_stehlampe_unten
|
# - light.arbeitszimmer_stehlampe_unten
|
||||||
- light.arbeitszimmer_stehlampe_oben
|
# - light.arbeitszimmer_stehlampe_oben
|
||||||
- cover.arbeitszimmer_rollo
|
# - cover.arbeitszimmer_rollo
|
||||||
- scene.arbeitszimmer_orange
|
# - scene.arbeitszimmer_orange
|
||||||
- scene.arbeitszimmer_blau_grun
|
# - scene.arbeitszimmer_blau_grun
|
||||||
- scene.arbeitszimmer_hell
|
# - scene.arbeitszimmer_hell
|
||||||
# Gang
|
# # Gang
|
||||||
- light.gang_bogen
|
# - light.gang_bogen
|
||||||
- light.gang_licht
|
# - light.gang_licht
|
||||||
- light.gang_einganglicht
|
# - light.gang_einganglicht
|
||||||
# Wohnbereich
|
# # Wohnbereich
|
||||||
- cover.wohnzimmer_fenster_rollo
|
# - cover.wohnzimmer_fenster_rollo
|
||||||
- cover.wohnzimmer_terrassentur_rollo
|
# - cover.wohnzimmer_terrassentur_rollo
|
||||||
- cover.kuche_fenster_rollo
|
# - cover.kuche_fenster_rollo
|
||||||
- cover.esszimmer_fenster_rollo
|
# - cover.esszimmer_fenster_rollo
|
||||||
entity_config:
|
# entity_config:
|
||||||
cover.arbeitszimmer_rollo:
|
# cover.arbeitszimmer_rollo:
|
||||||
display_categories: EXTERIOR_BLIND
|
# display_categories: EXTERIOR_BLIND
|
||||||
cover.wohnzimmer_fenster_rollo:
|
# cover.wohnzimmer_fenster_rollo:
|
||||||
display_categories: EXTERIOR_BLIND
|
# display_categories: EXTERIOR_BLIND
|
||||||
cover.wohnzimmer_terrassentur_rollo:
|
# cover.wohnzimmer_terrassentur_rollo:
|
||||||
display_categories: EXTERIOR_BLIND
|
# display_categories: EXTERIOR_BLIND
|
||||||
cover.esszimmer_fenster_rollo:
|
# cover.esszimmer_fenster_rollo:
|
||||||
display_categories: EXTERIOR_BLIND
|
# display_categories: EXTERIOR_BLIND
|
||||||
|
|
||||||
homekit:
|
homekit:
|
||||||
name: !secret homekit_name
|
name: !secret homekit_name
|
||||||
@@ -396,6 +397,10 @@ homekit:
|
|||||||
- light.gartenhaus_deckenlicht_mitte
|
- light.gartenhaus_deckenlicht_mitte
|
||||||
- light.gartenhaus_deckenlicht_vorne
|
- light.gartenhaus_deckenlicht_vorne
|
||||||
- light.gartenhaus_wandlicht
|
- light.gartenhaus_wandlicht
|
||||||
|
- switch.pool_pumpe_switch
|
||||||
|
- switch.pool_pumpe_speed1
|
||||||
|
- switch.pool_pumpe_speed2
|
||||||
|
- switch.pool_pumpe_speed3
|
||||||
# -- Schlafzimmer
|
# -- Schlafzimmer
|
||||||
- light.schlafzimmer_deckenlampe
|
- light.schlafzimmer_deckenlampe
|
||||||
- light.schlafzimmer_fluter
|
- light.schlafzimmer_fluter
|
||||||
@@ -424,82 +429,88 @@ homekit:
|
|||||||
- light.kinderzimmer_deckenlampe
|
- light.kinderzimmer_deckenlampe
|
||||||
- cover.kinderzimmer_rollo
|
- cover.kinderzimmer_rollo
|
||||||
- light.music_mouse_regal_licht
|
- light.music_mouse_regal_licht
|
||||||
|
- light.kinderzimmer_fluter
|
||||||
|
# -- Arbeitszimmer Oben
|
||||||
|
- light.arbeitszimmer_oben_fluter
|
||||||
|
- cover.arbeitszimmer_oben_rollo_ost
|
||||||
|
- cover.arbeitszimmer_oben_rollo_west
|
||||||
|
|
||||||
google_assistant:
|
#google_assistant:
|
||||||
project_id: homeassistant-d3afc
|
# project_id: homeassistant-d3afc
|
||||||
service_account: !include google_assistant_service_account.json
|
# service_account: !include google_assistant_service_account.json
|
||||||
report_state: true
|
# report_state: true
|
||||||
expose_by_default: false
|
# expose_by_default: false
|
||||||
entity_config:
|
# entity_config:
|
||||||
# Arbeitszimmer
|
# # Arbeitszimmer
|
||||||
light.arbeitszimmer_deckenlampe:
|
# light.arbeitszimmer_deckenlampe:
|
||||||
room: Arbeitszimmer
|
# room: Arbeitszimmer
|
||||||
light.arbeitszimmer_fluter:
|
# light.arbeitszimmer_fluter:
|
||||||
room: Arbeitszimmer
|
# room: Arbeitszimmer
|
||||||
light.arbeitszimmer_stehlampe_unten:
|
# light.arbeitszimmer_stehlampe_unten:
|
||||||
room: Arbeitszimmer
|
# room: Arbeitszimmer
|
||||||
light.arbeitszimmer_stehlampe_oben:
|
# light.arbeitszimmer_stehlampe_oben:
|
||||||
room: Arbeitszimmer
|
# room: Arbeitszimmer
|
||||||
cover.arbeitszimmer_rollo:
|
# cover.arbeitszimmer_rollo:
|
||||||
room: Arbeitszimmer
|
# room: Arbeitszimmer
|
||||||
scene.arbeitszimmer_orange:
|
# scene.arbeitszimmer_orange:
|
||||||
room: Arbeitszimmer
|
# room: Arbeitszimmer
|
||||||
scene.arbeitszimmer_blau_grun:
|
# scene.arbeitszimmer_blau_grun:
|
||||||
room: Arbeitszimmer
|
# room: Arbeitszimmer
|
||||||
scene.arbeitszimmer_hell:
|
# scene.arbeitszimmer_hell:
|
||||||
room: Arbeitszimmer
|
# room: Arbeitszimmer
|
||||||
# Gang
|
# # Gang
|
||||||
light.gang_bogen:
|
# light.gang_bogen:
|
||||||
room: Gang
|
# room: Gang
|
||||||
light.gang_licht:
|
# light.gang_licht:
|
||||||
room: Gang
|
# room: Gang
|
||||||
light.gang_einganglicht:
|
# light.gang_einganglicht:
|
||||||
room: Gang
|
# room: Gang
|
||||||
# Wohnbereich
|
# # Wohnbereich
|
||||||
cover.wohnzimmer_fenster_rollo:
|
# cover.wohnzimmer_fenster_rollo:
|
||||||
room: Wohnbereich
|
# room: Wohnbereich
|
||||||
cover.wohnzimmer_terrassentur_rollo:
|
# cover.wohnzimmer_terrassentur_rollo:
|
||||||
room: Wohnbereich
|
# room: Wohnbereich
|
||||||
cover.kuche_fenster_rollo:
|
# cover.kuche_fenster_rollo:
|
||||||
room: Wohnbereich
|
# room: Wohnbereich
|
||||||
cover.esszimmer_fenster_rollo:
|
# cover.esszimmer_fenster_rollo:
|
||||||
room: Wohnbereich
|
# room: Wohnbereich
|
||||||
|
|
||||||
|
|
||||||
knx: !include knx_conf.yaml
|
knx: !include knx_conf.yaml
|
||||||
|
|
||||||
homematic:
|
#homematic:
|
||||||
interfaces:
|
# interfaces:
|
||||||
rf:
|
# rf:
|
||||||
host: de838cd8-raspberrymatic
|
# host: 127.0.0.1
|
||||||
port: 2001
|
# port: 2001
|
||||||
resolvenames: json
|
# resolvenames: json
|
||||||
username: homeassistant
|
# username: homeassistant
|
||||||
password: !secret homematic_pw
|
# password: !secret homematic_pw
|
||||||
wired:
|
# wired:
|
||||||
host: de838cd8-raspberrymatic
|
# host: 127.0.0.1
|
||||||
port: 2000
|
# port: 2000
|
||||||
resolvenames: json
|
# resolvenames: json
|
||||||
username: homeassistant
|
# username: homeassistant
|
||||||
password: !secret homematic_pw
|
# password: !secret homematic_pw
|
||||||
hmip:
|
# hmip:
|
||||||
host: de838cd8-raspberrymatic
|
# host: 127.0.0.1
|
||||||
port: 2010
|
# port: 2010
|
||||||
resolvenames: json
|
# resolvenames: json
|
||||||
username: homeassistant
|
# username: homeassistant
|
||||||
password: !secret homematic_pw
|
# password: !secret homematic_pw
|
||||||
groups:
|
# groups:
|
||||||
host: de838cd8-raspberrymatic
|
# host: 127.0.0.1
|
||||||
port: 9292
|
# port: 9292
|
||||||
resolvenames: json
|
# resolvenames: json
|
||||||
username: homeassistant
|
# username: homeassistant
|
||||||
password: !secret homematic_pw
|
# password: !secret homematic_pw
|
||||||
path: /groups
|
# path: /groups
|
||||||
hosts:
|
# hosts:
|
||||||
raspberrymatic:
|
# raspberrymatic:
|
||||||
host: de838cd8-raspberrymatic
|
# host: 127.0.0.1
|
||||||
username: homeassistant
|
# port: 2001
|
||||||
password: !secret homematic_pw
|
# username: homeassistant
|
||||||
|
# password: !secret homematic_pw
|
||||||
|
|
||||||
#zwave:
|
#zwave:
|
||||||
# usb_path: /dev/serial/by-id/usb-0658_0200-if00
|
# usb_path: /dev/serial/by-id/usb-0658_0200-if00
|
||||||
@@ -542,7 +553,7 @@ sysdweb:
|
|||||||
- irserver
|
- irserver
|
||||||
- squeezelite
|
- squeezelite
|
||||||
- shairport-sync
|
- shairport-sync
|
||||||
- dht22_sensing
|
#- dht22_sensing
|
||||||
- logitechmediaserver
|
- logitechmediaserver
|
||||||
|
|
||||||
lirc_network:
|
lirc_network:
|
||||||
@@ -573,21 +584,92 @@ media_player:
|
|||||||
- platform: squeezebox_telnet
|
- platform: squeezebox_telnet
|
||||||
host: musikserverWohnzimmerOben.fritz.box
|
host: musikserverWohnzimmerOben.fritz.box
|
||||||
|
|
||||||
|
template:
|
||||||
|
- sensor:
|
||||||
|
- unique_id: motion_combined
|
||||||
|
name: Bewegung
|
||||||
|
state: >
|
||||||
|
{%- set pirs = {'Gang Mitte': states.binary_sensor.gang_bewegungsmelder_mitte,
|
||||||
|
'Eingang': states.binary_sensor.gang_bewegungsmelder_ost,
|
||||||
|
'Gang Hinten': states.binary_sensor.gang_bewegungsmelder_schlafzimmer,
|
||||||
|
'Gang Wohnzimmer': states.binary_sensor.gang_bewegungsmelder_wohnzimmer} %}
|
||||||
|
{% for pir_name, pir in pirs.items() %}
|
||||||
|
{% if as_timestamp(pir.last_changed) == as_timestamp(pirs.values() | map(attribute='last_changed') | max) %}
|
||||||
|
{{ pir_name }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
- unique_id: oxilife_ph_filtered
|
||||||
|
name: Oxilify pH Filtered
|
||||||
|
unit_of_measurement: "{{ states.sensor.oxilife_ph.attributes.unit_of_measurement }}"
|
||||||
|
state: >
|
||||||
|
{% if 200 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float %}
|
||||||
|
{{ states('sensor.oxilife_ph') }}
|
||||||
|
{% else %}
|
||||||
|
unknown
|
||||||
|
{% endif %}
|
||||||
|
- unique_id: oxilife_redox_level_filtered
|
||||||
|
name: Oxilify Redox Filtered
|
||||||
|
unit_of_measurement: "{{ states.sensor.oxilife_redox_level.attributes.unit_of_measurement }}"
|
||||||
|
state: >
|
||||||
|
{% if 200 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float %}
|
||||||
|
{{ states('sensor.oxilife_redox_level') }}
|
||||||
|
{% else %}
|
||||||
|
unknown
|
||||||
|
{% endif %}
|
||||||
|
- unique_id: pool_temperatur_filtered
|
||||||
|
name: Oxilify Temperature Filtered
|
||||||
|
unit_of_measurement: "{{ states.sensor.pool_temperatur.attributes.unit_of_measurement }}"
|
||||||
|
state: >
|
||||||
|
{% if 200 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float %}
|
||||||
|
{{ states('sensor.pool_temperatur') }}
|
||||||
|
{% else %}
|
||||||
|
unknown
|
||||||
|
{% endif %}
|
||||||
|
- switch:
|
||||||
|
- unique_id: pool_pumpe_switch
|
||||||
|
state: "{{ 1 if 100 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float else 0 }}"
|
||||||
|
turn_on:
|
||||||
|
service: script.pool_pumpe_schalten
|
||||||
|
data:
|
||||||
|
value: 1
|
||||||
|
turn_off:
|
||||||
|
service: script.pool_pumpe_schalten
|
||||||
|
data:
|
||||||
|
value: 0
|
||||||
|
- unique_id: pool_pumpe_speed1
|
||||||
|
state: "{{ 200 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float < 650 }}"
|
||||||
|
turn_on:
|
||||||
|
service: script.pool_pumpe_schalten
|
||||||
|
data:
|
||||||
|
value: 1
|
||||||
|
turn_off:
|
||||||
|
service: script.pool_pumpe_schalten
|
||||||
|
data:
|
||||||
|
value: 0
|
||||||
|
- unique_id: pool_pumpe_speed2
|
||||||
|
state: "{{ 650 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float < 1100 }}"
|
||||||
|
turn_on:
|
||||||
|
service: script.pool_pumpe_schalten
|
||||||
|
data:
|
||||||
|
value: 2
|
||||||
|
turn_off:
|
||||||
|
service: script.pool_pumpe_schalten
|
||||||
|
data:
|
||||||
|
value: 0
|
||||||
|
- unique_id: pool_pumpe_speed3
|
||||||
|
state: "{{ 1100 <= states('sensor.gartenhaus_steckdose2_verbrauch') | float }}"
|
||||||
|
turn_on:
|
||||||
|
service: script.pool_pumpe_schalten
|
||||||
|
data:
|
||||||
|
value: 3
|
||||||
|
turn_off:
|
||||||
|
service: script.pool_pumpe_schalten
|
||||||
|
data:
|
||||||
|
value: 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sensor:
|
sensor:
|
||||||
- platform: template
|
|
||||||
sensors:
|
|
||||||
motion_combined:
|
|
||||||
friendly_name: Bewegung
|
|
||||||
value_template: >
|
|
||||||
{%- set pirs = {'Gang Mitte': states.binary_sensor.gang_bewegungsmelder_mitte,
|
|
||||||
'Eingang': states.binary_sensor.gang_bewegungsmelder_ost,
|
|
||||||
'Gang Hinten': states.binary_sensor.gang_bewegungsmelder_schlafzimmer,
|
|
||||||
'Gang Wohnzimmer': states.binary_sensor.gang_bewegungsmelder_wohnzimmer} %}
|
|
||||||
{% for pir_name, pir in pirs.items() %}
|
|
||||||
{% if as_timestamp(pir.last_changed) == as_timestamp(pirs.values() | map(attribute='last_changed') | max) %}
|
|
||||||
{{ pir_name }}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
- platform: time_date
|
- platform: time_date
|
||||||
display_options:
|
display_options:
|
||||||
- 'time'
|
- 'time'
|
||||||
@@ -682,5 +764,3 @@ light:
|
|||||||
entities:
|
entities:
|
||||||
- light.arbeitszimmer_oben_fluter_hinten
|
- light.arbeitszimmer_oben_fluter_hinten
|
||||||
- light.arbeitszimmer_oben_fluter_vorne
|
- light.arbeitszimmer_oben_fluter_vorne
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ async def async_setup(hass, config):
|
|||||||
async def async_set_half_service(service):
|
async def async_set_half_service(service):
|
||||||
entity_ids = await async_extract_entity_ids(hass, service, expand_group=True)
|
entity_ids = await async_extract_entity_ids(hass, service, expand_group=True)
|
||||||
for entity_id in entity_ids:
|
for entity_id in entity_ids:
|
||||||
|
if not entity_id.startswith(f"{COVER_DOMAIN}."):
|
||||||
|
continue
|
||||||
data = {
|
data = {
|
||||||
ATTR_ENTITY_ID: entity_id,
|
ATTR_ENTITY_ID: entity_id,
|
||||||
ATTR_POSITION: hass.states.get(entity_id).attributes.get(ATTR_HALF_POSITION, 20)
|
ATTR_POSITION: hass.states.get(entity_id).attributes.get(ATTR_HALF_POSITION, 20)
|
||||||
|
|||||||
@@ -9,14 +9,8 @@ from ..reconnecting_client import ReconnectingClient
|
|||||||
from .radio import find_local_radio_url_by_name, fill_station_cache_async
|
from .radio import find_local_radio_url_by_name, fill_station_cache_async
|
||||||
|
|
||||||
from homeassistant.components.media_player import (
|
from homeassistant.components.media_player import (
|
||||||
MediaPlayerEntity, PLATFORM_SCHEMA)
|
MediaPlayerEntity, PLATFORM_SCHEMA, MediaType, RepeatMode, ATTR_MEDIA_ENQUEUE)
|
||||||
from homeassistant.components.media_player.const import (
|
from homeassistant.components.media_player.const import DOMAIN
|
||||||
ATTR_MEDIA_ENQUEUE, DOMAIN, MEDIA_TYPE_MUSIC,
|
|
||||||
SUPPORT_CLEAR_PLAYLIST, SUPPORT_NEXT_TRACK, SUPPORT_PAUSE,
|
|
||||||
SUPPORT_PLAY, SUPPORT_PLAY_MEDIA, SUPPORT_PREVIOUS_TRACK, SUPPORT_SEEK,
|
|
||||||
SUPPORT_SHUFFLE_SET, SUPPORT_REPEAT_SET, SUPPORT_TURN_OFF, SUPPORT_TURN_ON,
|
|
||||||
SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, REPEAT_MODE_ALL, REPEAT_MODE_OFF,
|
|
||||||
REPEAT_MODE_ONE,)
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_COMMAND, CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME, ATTR_ENTITY_ID,
|
ATTR_COMMAND, CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME, ATTR_ENTITY_ID,
|
||||||
STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING)
|
STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING)
|
||||||
@@ -28,10 +22,6 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
|
|
||||||
DEFAULT_PORT = 9090
|
DEFAULT_PORT = 9090
|
||||||
|
|
||||||
SUPPORT_SQUEEZEBOX = SUPPORT_PAUSE | SUPPORT_VOLUME_SET | \
|
|
||||||
SUPPORT_VOLUME_MUTE | SUPPORT_PREVIOUS_TRACK | SUPPORT_NEXT_TRACK | \
|
|
||||||
SUPPORT_SEEK | SUPPORT_TURN_ON | SUPPORT_TURN_OFF | SUPPORT_PLAY_MEDIA | \
|
|
||||||
SUPPORT_PLAY | SUPPORT_SHUFFLE_SET | SUPPORT_CLEAR_PLAYLIST | SUPPORT_REPEAT_SET
|
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
vol.Required(CONF_HOST): cv.string,
|
vol.Required(CONF_HOST): cv.string,
|
||||||
@@ -255,6 +245,23 @@ class LogitechMediaServer(ReconnectingClient):
|
|||||||
class SqueezeBoxDevice(MediaPlayerEntity):
|
class SqueezeBoxDevice(MediaPlayerEntity):
|
||||||
"""Representation of a SqueezeBox device."""
|
"""Representation of a SqueezeBox device."""
|
||||||
|
|
||||||
|
_attr_supported_features = (
|
||||||
|
MediaPlayerEntityFeature.PAUSE
|
||||||
|
| MediaPlayerEntityFeature.VOLUME_SET
|
||||||
|
| MediaPlayerEntityFeature.VOLUME_MUTE
|
||||||
|
| MediaPlayerEntityFeature.PREVIOUS_TRACK
|
||||||
|
| MediaPlayerEntityFeature.NEXT_TRACK
|
||||||
|
| MediaPlayerEntityFeature.SEEK
|
||||||
|
| MediaPlayerEntityFeature.TURN_ON
|
||||||
|
| MediaPlayerEntityFeature.TURN_OFF
|
||||||
|
| MediaPlayerEntityFeature.PLAY_MEDIA
|
||||||
|
| MediaPlayerEntityFeature.PLAY
|
||||||
|
| MediaPlayerEntityFeature.REPEAT_SET
|
||||||
|
| MediaPlayerEntityFeature.SHUFFLE_SET
|
||||||
|
| MediaPlayerEntityFeature.CLEAR_PLAYLIST
|
||||||
|
| MediaPlayerEntityFeature.STOP
|
||||||
|
)
|
||||||
|
|
||||||
def __init__(self, lms, playerid, name, **attributes):
|
def __init__(self, lms, playerid, name, **attributes):
|
||||||
"""Initialize the SqueezeBox device."""
|
"""Initialize the SqueezeBox device."""
|
||||||
super(SqueezeBoxDevice, self).__init__()
|
super(SqueezeBoxDevice, self).__init__()
|
||||||
@@ -362,7 +369,7 @@ class SqueezeBoxDevice(MediaPlayerEntity):
|
|||||||
@property
|
@property
|
||||||
def media_content_type(self):
|
def media_content_type(self):
|
||||||
"""Content type of current playing media."""
|
"""Content type of current playing media."""
|
||||||
return MEDIA_TYPE_MUSIC
|
return MediaType.MUSIC
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def media_duration(self):
|
def media_duration(self):
|
||||||
@@ -446,11 +453,11 @@ class SqueezeBoxDevice(MediaPlayerEntity):
|
|||||||
def repeat(self):
|
def repeat(self):
|
||||||
repeat_status = self._status.get('playlist repeat', 0)
|
repeat_status = self._status.get('playlist repeat', 0)
|
||||||
if repeat_status == 1:
|
if repeat_status == 1:
|
||||||
return REPEAT_MODE_ONE
|
return RepeatMode.ONE
|
||||||
elif repeat_status == 2:
|
elif repeat_status == 2:
|
||||||
return REPEAT_MODE_ALL
|
return RepeatMode.ALL
|
||||||
else:
|
else:
|
||||||
return REPEAT_MODE_OFF
|
return RepeatMode.OFF
|
||||||
|
|
||||||
def set_repeat(self, repeat: str) -> None:
|
def set_repeat(self, repeat: str) -> None:
|
||||||
"""Set repeat mode."""
|
"""Set repeat mode."""
|
||||||
|
|||||||
21
influx.yaml
Normal file
21
influx.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
default_measurement: state
|
||||||
|
tags_attributes:
|
||||||
|
- unit_of_measurement
|
||||||
|
exclude:
|
||||||
|
entities:
|
||||||
|
- sensor.zone_presets # valetudo zones
|
||||||
|
- homematic.raspberrymatic
|
||||||
|
- sun.sun
|
||||||
|
entity_globs:
|
||||||
|
- sensor.*_sim_* # sim card info from mobile app
|
||||||
|
- sensor.*geokodierter*
|
||||||
|
- sensor.*geocoded*
|
||||||
|
- sensor.fritz_box*
|
||||||
|
ignore_attributes:
|
||||||
|
- BSSID
|
||||||
|
- Battery Level
|
||||||
|
- Carrier ID
|
||||||
|
- Carrier Name
|
||||||
|
- Cellular Technology
|
||||||
|
- Free internal storage
|
||||||
|
- last_knx_update
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
python3 config_creation/main.py
|
apk add py3-slugify py3-ruamel
|
||||||
|
|
||||||
|
python config_creation/main.py
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +1,6 @@
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime
|
||||||
|
|
||||||
from ir_helpers import *
|
from ir_helpers import *
|
||||||
|
|
||||||
TIMEOUT_REPEAT_PRESS = 5 # time to switch states when pressed shortly in sequence, in seconds
|
|
||||||
|
|
||||||
# --------------------------------- Helper functions ----------------------------------------------------
|
|
||||||
|
|
||||||
light_scene_helper_dict = {}
|
|
||||||
def scene_helper(scene_function):
|
|
||||||
"""Function to manage the repeated press of the same action
|
|
||||||
When pressed shortly in sequence, states are cycled
|
|
||||||
Otherwise light is toggled"""
|
|
||||||
unique_name_for_globals = id(scene_function)
|
|
||||||
is_on_func, scenes = scene_function()
|
|
||||||
last_called, call_idx = light_scene_helper_dict.get(unique_name_for_globals, (datetime.now(), -1))
|
|
||||||
now = datetime.now()
|
|
||||||
time_since_last_call = now - last_called
|
|
||||||
recently_called = (time_since_last_call < timedelta(seconds=TIMEOUT_REPEAT_PRESS))
|
|
||||||
light_already_on = is_on_func()
|
|
||||||
log.warning(f"{light_already_on=}")
|
|
||||||
if recently_called:
|
|
||||||
call_idx = (call_idx + 1)
|
|
||||||
else:
|
|
||||||
call_idx = -1
|
|
||||||
|
|
||||||
if light_already_on and call_idx == -1:
|
|
||||||
scenes[-1]()
|
|
||||||
call_idx = -1
|
|
||||||
elif not light_already_on:
|
|
||||||
scenes[0]()
|
|
||||||
call_idx = 0
|
|
||||||
else:
|
|
||||||
idx = call_idx % len(scenes)
|
|
||||||
scenes[idx]()
|
|
||||||
|
|
||||||
light_scene_helper_dict[unique_name_for_globals] = (now, call_idx)
|
|
||||||
|
|
||||||
# --------------------------------- "Scenes" for actions ----------------------------------------------------
|
# --------------------------------- "Scenes" for actions ----------------------------------------------------
|
||||||
|
|
||||||
@@ -69,7 +35,7 @@ def kz_regal_scenes():
|
|||||||
entity = "light.music_mouse_regal_licht"
|
entity = "light.music_mouse_regal_licht"
|
||||||
|
|
||||||
def fade_out_f(rgb_color, seconds):
|
def fade_out_f(rgb_color, seconds):
|
||||||
return multiple_f(cover_f("close_cover", "cover_kinderzimmer_rollo"),
|
return multiple_f(cover_f("close_cover", "cover.kinderzimmer_rollo"),
|
||||||
light_f("turn_on", entity, brightness=250, rgb_color=rgb_color, effect="side_0.5"),
|
light_f("turn_on", entity, brightness=250, rgb_color=rgb_color, effect="side_0.5"),
|
||||||
light_f("turn_on", entity, brightness= 10, rgb_color=rgb_color, effect="side_0.5_inc4", transition=int(0.8 * seconds)),
|
light_f("turn_on", entity, brightness= 10, rgb_color=rgb_color, effect="side_0.5_inc4", transition=int(0.8 * seconds)),
|
||||||
light_f("turn_on", entity, brightness= 10, rgb_color=rgb_color, effect="side_0.2_inc8", transition=int(0.2 * seconds))),
|
light_f("turn_on", entity, brightness= 10, rgb_color=rgb_color, effect="side_0.2_inc8", transition=int(0.2 * seconds))),
|
||||||
@@ -188,8 +154,10 @@ def on_ios_action_fired(actionName, **kwargs):
|
|||||||
if actionName == "az_oben_licht":
|
if actionName == "az_oben_licht":
|
||||||
scene_helper(az_oben_licht_scenes)
|
scene_helper(az_oben_licht_scenes)
|
||||||
elif actionName == "kz_regal":
|
elif actionName == "kz_regal":
|
||||||
|
log.info("KZ Regal action fired")
|
||||||
scene_helper(kz_regal_scenes)
|
scene_helper(kz_regal_scenes)
|
||||||
elif actionName == "az_unten_licht":
|
elif actionName == "az_unten_licht":
|
||||||
|
log.info("AZ unten Licht action fired")
|
||||||
scene_helper(az_unten_licht_scenes)
|
scene_helper(az_unten_licht_scenes)
|
||||||
elif actionName == "wz_deckenlampe":
|
elif actionName == "wz_deckenlampe":
|
||||||
scene_helper(wz_deckenlampe)
|
scene_helper(wz_deckenlampe)
|
||||||
@@ -239,17 +207,52 @@ def on_ios_shortcut_event(room, action, device, **kwargs):
|
|||||||
elif action == "hass_cover_half":
|
elif action == "hass_cover_half":
|
||||||
cover_half.set_half(entity_id="cover.arbeitszimmer_rollo")
|
cover_half.set_half(entity_id="cover.arbeitszimmer_rollo")
|
||||||
|
|
||||||
|
if room in ("küche", "esszimmer", "sofa", "wohnzimmer"):
|
||||||
|
if action == "hass_light_off":
|
||||||
|
light_f('turn_off', "group.living_area")()
|
||||||
|
elif action == "hass_light_orange":
|
||||||
|
scene_f("wohnbereich_orange")()
|
||||||
|
elif action == "hass_light_blue":
|
||||||
|
scene_f("wohnbereich_blau_grun")()
|
||||||
|
elif action == "hass_light_bright":
|
||||||
|
scene_f("wohnbereich_hell")()
|
||||||
|
elif action == "hass_light_darken":
|
||||||
|
dimmer.dim(entity_id="group.living_area", offset=-80)
|
||||||
|
elif action == "hass_light_brighten":
|
||||||
|
dimmer.dim(entity_id="group.living_area", offset=80)
|
||||||
|
elif action == "hass_light_off":
|
||||||
|
light.turn_off(entity_id="group.living_area")
|
||||||
|
elif action == "hass_cover_open":
|
||||||
|
cover.open_cover(entity_id="group.living_area")
|
||||||
|
elif action == "hass_cover_close":
|
||||||
|
cover.close_cover(entity_id="group.living_area")
|
||||||
|
elif action == "hass_cover_half":
|
||||||
|
cover_half.set_half(entity_id="group.living_area")
|
||||||
|
elif action == "hass_sun_blinds":
|
||||||
|
cover_half.set_half(entitiy_id="cover.wohnzimmer_fenster_rollo")
|
||||||
|
|
||||||
|
if room == "kinderzimmer":
|
||||||
|
if action == "hass_cover_open":
|
||||||
|
cover.open_cover(area_id="kinderzimmer")
|
||||||
|
elif action == "hass_cover_close":
|
||||||
|
cover.close_cover(area_id="kinderzimmer")
|
||||||
|
|
||||||
if room == "buero_oben":
|
if room == "buero_oben":
|
||||||
entity = "scene.arbeitszimmer_orange"
|
|
||||||
if action == "hass_light":
|
if action == "hass_light":
|
||||||
scene_helper(az_oben_licht_scenes)
|
scene_helper(az_oben_licht_scenes)
|
||||||
elif action == "hass_light_orange":
|
|
||||||
light_f("turn_on", entity, color_temp=470, brightness=100)()
|
|
||||||
elif action == "hass_light_blue":
|
|
||||||
light_f("turn_on", entity, color_temp=180, brightness=230)()
|
|
||||||
elif action == "hass_light_darken":
|
|
||||||
dimmer.dim(entity_id=entity, offset=-30)
|
|
||||||
elif action == "hass_light_brighten":
|
|
||||||
dimmer.dim(entity_id=entity, offset=30)
|
|
||||||
elif action == "hass_light_off":
|
elif action == "hass_light_off":
|
||||||
light.turn_off(entity_id=entity)
|
light.turn_off(entity_id="light.arbeitszimmer_oben_fluter")
|
||||||
|
elif action == "hass_light_orange":
|
||||||
|
scene_f("arbeitszimmer_oben_orange")()
|
||||||
|
elif action == "hass_light_blue":
|
||||||
|
scene_f("arbeitszimmer_oben_blau")()
|
||||||
|
elif action == "hass_light_darken":
|
||||||
|
dimmer.dim(entity_id="light.arbeitszimmer_oben_fluter", offset=-80)
|
||||||
|
elif action == "hass_light_brighten":
|
||||||
|
dimmer.dim(entity_id="light.arbeitszimmer_oben_fluter", offset=80)
|
||||||
|
elif action == "hass_light_off":
|
||||||
|
light.turn_off(entity_id="light.arbeitszimmer_oben_fluter")
|
||||||
|
elif action == "hass_cover_open":
|
||||||
|
cover.open_cover(area_id="arbeitszimmeroben")
|
||||||
|
elif action == "hass_cover_close":
|
||||||
|
cover.close_cover(area_id="arbeitszimmeroben")
|
||||||
|
|||||||
@@ -5,32 +5,36 @@ async def regal_licht_f(**kwargs):
|
|||||||
await hass.services.async_call('light', 'turn_on', {'entity_id': "light.music_mouse_regal_licht", 'effect': 'static', **kwargs})
|
await hass.services.async_call('light', 'turn_on', {'entity_id': "light.music_mouse_regal_licht", 'effect': 'static', **kwargs})
|
||||||
return f
|
return f
|
||||||
|
|
||||||
@event_trigger("ir_command_received", "host == 'musicmouse.fritz.box' and repeat_counter == 0 and remote == 'ir_led3'")
|
@event_trigger("ir_command_received", "host == 'musicmouse.fritz.box' and repeat_counter == 0 and remote == 'small_led_remote'")
|
||||||
def ir_remote_kinderzimmer(button_name=None, **kwargs):
|
def ir_remote_kinderzimmer(button_name=None, **kwargs):
|
||||||
|
def dim_offset_f(offset):
|
||||||
|
async def f():
|
||||||
|
await hass.services.async_call('dimmer', 'dim', {'entity_id': 'group.kids_room', 'offset': offset})
|
||||||
|
return f
|
||||||
|
|
||||||
mapping = {
|
mapping = {
|
||||||
'key_on': scene_f('kinderzimmer_hell'),
|
'on': scene_f('kinderzimmer_hell'),
|
||||||
'key_off': light_f("turn_off", entity_id="group.kids_room"),
|
'off': light_f("turn_off", entity_id="group.kids_room"),
|
||||||
'key_brightnessup': cover_f('open_cover', 'cover.kinderzimmer_rollo'),
|
'brightness_up': cover_f('open_cover', 'cover.kinderzimmer_rollo'),
|
||||||
'key_brightnessdown': cover_f('close_cover', 'cover.kinderzimmer_rollo'),
|
'brightness_down': cover_f('close_cover', 'cover.kinderzimmer_rollo'),
|
||||||
'key_white': scene_f('kinderzimmer_hell'),
|
'white': scene_f('kinderzimmer_hell'),
|
||||||
'key_red': scene_f('kinderzimmer_wickeln_nachts'),
|
'red': scene_f('kinderzimmer_wickeln_nachts'),
|
||||||
'key_pound': regal_licht_f(rgbw_color=[255, 30, 60, 0]),
|
'hash_pink': regal_licht_f(rgbw_color=[255, 30, 60, 0]),
|
||||||
'key_1': regal_licht_f(rgbw_color=[255, 30, 60, 0]),
|
'1_orange': regal_licht_f(rgbw_color=[255, 30, 60, 0]),
|
||||||
'key_2': regal_licht_f(rgbw_color=[28, 255, 35, 0]),
|
'2_green': regal_licht_f(rgbw_color=[28, 255, 35, 0]),
|
||||||
'key_3': regal_licht_f(rgbw_color=[0, 0, 255, 0]),
|
'3_light_blue': regal_licht_f(rgbw_color=[0, 0, 255, 0]),
|
||||||
'key_4': regal_licht_f(rgbw_color=[255, 156, 17, 0]),
|
'4_orange': regal_licht_f(rgbw_color=[255, 156, 17, 0]),
|
||||||
'key_5': regal_licht_f(rgbw_color=[12, 166, 255, 0]),
|
'5_blue': regal_licht_f(rgbw_color=[12, 166, 255, 0]),
|
||||||
'key_6': regal_licht_f(rgbw_color=[185, 10, 255, 0]),
|
'6_purple': regal_licht_f(rgbw_color=[185, 10, 255, 0]),
|
||||||
'key_7': regal_licht_f(rgbw_color=[255, 156, 17, 0], brightness=50, effect="side_0.2_inc8"),
|
'7_yellow': regal_licht_f(rgbw_color=[255, 156, 17, 0], brightness=50, effect="side_0.2_inc8"),
|
||||||
'key_8': regal_licht_f(rgbw_color=[0, 0, 255, 0], brightness=50, effect="side_0.2_inc8"),
|
'8_light_blue': regal_licht_f(rgbw_color=[0, 0, 255, 0], brightness=50, effect="side_0.2_inc8"),
|
||||||
'key_9': regal_licht_f(rgbw_color=[255, 30, 60, 0], brightness=50, effect="side_0.2_inc8"),
|
'9_pink': regal_licht_f(rgbw_color=[255, 30, 60, 0], brightness=50, effect="side_0.2_inc8"),
|
||||||
|
'star_yellow': scene_f('kinderzimmer_regal_dunkel'),
|
||||||
|
'fade': dim_offset_f(+30),
|
||||||
|
'smooth': dim_offset_f(-30),
|
||||||
}
|
}
|
||||||
if button_name in mapping:
|
if button_name in mapping:
|
||||||
mapping[button_name]()
|
mapping[button_name]()
|
||||||
elif button_name == 'key_smooth':
|
|
||||||
dimmer.dim(entity_id="light.music_mouse_regal_licht", offset=-30)
|
|
||||||
elif button_name == 'key_fade':
|
|
||||||
dimmer.dim(entity_id="light.music_mouse_regal_licht", offset=+30)
|
|
||||||
|
|
||||||
@event_trigger("ir_command_received", "host == 'musicmouse.fritz.box' and repeat_counter == 0 and remote == 'Hauppauge'")
|
@event_trigger("ir_command_received", "host == 'musicmouse.fritz.box' and repeat_counter == 0 and remote == 'Hauppauge'")
|
||||||
def ir_remote_hauppauge_kinderzimmer(button_name=None, **kwargs):
|
def ir_remote_hauppauge_kinderzimmer(button_name=None, **kwargs):
|
||||||
@@ -39,6 +43,16 @@ def ir_remote_hauppauge_kinderzimmer(button_name=None, **kwargs):
|
|||||||
**default_ir_light_control('group.kids_room'),
|
**default_ir_light_control('group.kids_room'),
|
||||||
**default_ir_cover_control('group.kids_room'),
|
**default_ir_cover_control('group.kids_room'),
|
||||||
**default_ir_music_control(**p),
|
**default_ir_music_control(**p),
|
||||||
|
|
||||||
|
'key_red': scene_f('kinderzimmer_regal_dunkel'),
|
||||||
|
'key_green': scene_f('kinderzimmer_orange'),
|
||||||
|
'key_yellow': scene_f('kinderzimmer_hell'),
|
||||||
|
'key_blue': scene_f('kinderzimmer_normal'),
|
||||||
|
|
||||||
|
'btn_1': playlist_f('Good Morning', **p),
|
||||||
|
'btn_2': playlist_f('Good Night Long', **p),
|
||||||
|
'btn_3': playlist_f('Good Night', **p),
|
||||||
|
'key_video': playlist_f('Good Night', **p),
|
||||||
}
|
}
|
||||||
if button_name in mapping:
|
if button_name in mapping:
|
||||||
mapping[button_name]()
|
mapping[button_name]()
|
||||||
@@ -71,15 +71,17 @@ def esszimmer_gangtuer(entity_id=None, event_type=None):
|
|||||||
covers = ['group.living_area']
|
covers = ['group.living_area']
|
||||||
|
|
||||||
if key == "arrow_down":
|
if key == "arrow_down":
|
||||||
if long_click:
|
cover_half.set_half(entity_id=covers)
|
||||||
vacuum("Esszimmer")
|
#if long_click:
|
||||||
else:
|
# vacuum("Esszimmer")
|
||||||
cover_half.set_half(entity_id=covers)
|
#else:
|
||||||
|
# cover_half.set_half(entity_id=covers)
|
||||||
elif key == "arrow_up":
|
elif key == "arrow_up":
|
||||||
if long_click:
|
cover.open_cover(entity_id=covers)
|
||||||
vacuum("Küche")
|
#if long_click:
|
||||||
else:
|
# vacuum("Küche")
|
||||||
cover.open_cover(entity_id=covers)
|
#else:
|
||||||
|
# cover.open_cover(entity_id=covers)
|
||||||
elif key == "bulb_orange":
|
elif key == "bulb_orange":
|
||||||
if long_click:
|
if long_click:
|
||||||
scene.kuche_essbereich_orange.turn_on()
|
scene.kuche_essbereich_orange.turn_on()
|
||||||
@@ -114,15 +116,17 @@ def wohnzimmer_gangtur(entity_id=None, event_type=None):
|
|||||||
covers = ['group.living_area']
|
covers = ['group.living_area']
|
||||||
|
|
||||||
if key == "arrow_down":
|
if key == "arrow_down":
|
||||||
if long_click:
|
cover_half.set_half(entity_id=covers)
|
||||||
vacuum("Wohnzimmer")
|
#if long_click:
|
||||||
else:
|
# vacuum("Wohnzimmer")
|
||||||
cover_half.set_half(entity_id=covers)
|
#else:
|
||||||
|
# cover_half.set_half(entity_id=covers)
|
||||||
elif key == "arrow_up":
|
elif key == "arrow_up":
|
||||||
if long_click:
|
cover.open_cover(entity_id=covers)
|
||||||
vacuum("Wohnzimmer")
|
#if long_click:
|
||||||
else:
|
# vacuum("Wohnzimmer")
|
||||||
cover.open_cover(entity_id=covers)
|
#else:
|
||||||
|
# cover.open_cover(entity_id=covers)
|
||||||
elif key == "bulb_orange":
|
elif key == "bulb_orange":
|
||||||
if long_click:
|
if long_click:
|
||||||
scene.wohnzimmer_orange.turn_on()
|
scene.wohnzimmer_orange.turn_on()
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
# unten: kurz: off, but 1 min bedlight
|
# unten: kurz: off, but 1 min bedlight
|
||||||
# lang: rollos zu: nur tagsueber wenn komplett offen
|
# lang: rollos zu: nur tagsueber wenn komplett offen
|
||||||
@event_trigger("homematic.keypress", "name == 'schlafzimmer_deckenlampe'")
|
@event_trigger("homematic.keypress", "name == 'schlafzimmer_deckenlampe'")
|
||||||
def schlafzimmer_licht(channel=None, param=None, **kwargs):
|
def schlafzimmer_licht(subtype=None, type=None, **kwargs):
|
||||||
up = (channel == 2)
|
up = (subtype == 2)
|
||||||
down = (channel == 1)
|
down = (subtype == 1)
|
||||||
long = (param == "PRESS_LONG")
|
long = (type == "press_long")
|
||||||
short = not long
|
short= (type == "press_short")
|
||||||
log.info(f"Schlafzimmer knopf up {up}, long {long}")
|
log.info(f"Schlafzimmer knopf up {up}, long {long}")
|
||||||
|
|
||||||
if up and short:
|
if up and short:
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from datetime import datetime, timedelta
|
||||||
# ---------------------------------- Music ---------------------------------------------
|
# ---------------------------------- Music ---------------------------------------------
|
||||||
|
|
||||||
URLS = {
|
URLS = {
|
||||||
@@ -60,6 +61,8 @@ def cover_half_f(entity_id):
|
|||||||
|
|
||||||
|
|
||||||
def light_f(name, entity_id, **kwargs):
|
def light_f(name, entity_id, **kwargs):
|
||||||
|
if 'color_temp' in kwargs:
|
||||||
|
kwargs['color_temp_kelvin'] = round(1_000_000 / kwargs.pop('color_temp'))
|
||||||
async def f():
|
async def f():
|
||||||
await hass.services.async_call('light', name, {'entity_id': entity_id, **kwargs})
|
await hass.services.async_call('light', name, {'entity_id': entity_id, **kwargs})
|
||||||
return f
|
return f
|
||||||
@@ -129,3 +132,39 @@ class CyclicCounter:
|
|||||||
def prev(self):
|
def prev(self):
|
||||||
self.idx = (self.idx - 1) % len(self.values)
|
self.idx = (self.idx - 1) % len(self.values)
|
||||||
self.func(self.values[self.idx])
|
self.func(self.values[self.idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TIMEOUT_REPEAT_PRESS = 3 # time to switch states when pressed shortly in sequence, in seconds
|
||||||
|
|
||||||
|
# --------------------------------- Helper functions ----------------------------------------------------
|
||||||
|
|
||||||
|
light_scene_helper_dict = {}
|
||||||
|
def scene_helper(scene_function):
|
||||||
|
"""Function to manage the repeated press of the same action
|
||||||
|
When pressed shortly in sequence, states are cycled
|
||||||
|
Otherwise light is toggled"""
|
||||||
|
unique_name_for_globals = id(scene_function)
|
||||||
|
is_on_func, scenes = scene_function()
|
||||||
|
last_called, call_idx = light_scene_helper_dict.get(unique_name_for_globals, (datetime.now(), -1))
|
||||||
|
now = datetime.now()
|
||||||
|
time_since_last_call = now - last_called
|
||||||
|
recently_called = (time_since_last_call < timedelta(seconds=TIMEOUT_REPEAT_PRESS))
|
||||||
|
light_already_on = is_on_func()
|
||||||
|
log.warning(f"{light_already_on=}")
|
||||||
|
if recently_called:
|
||||||
|
call_idx = (call_idx + 1)
|
||||||
|
else:
|
||||||
|
call_idx = -1
|
||||||
|
|
||||||
|
if light_already_on and call_idx == -1:
|
||||||
|
scenes[-1]()
|
||||||
|
call_idx = -1
|
||||||
|
elif not light_already_on:
|
||||||
|
scenes[0]()
|
||||||
|
call_idx = 0
|
||||||
|
else:
|
||||||
|
idx = call_idx % len(scenes)
|
||||||
|
scenes[idx]()
|
||||||
|
|
||||||
|
light_scene_helper_dict[unique_name_for_globals] = (now, call_idx)
|
||||||
|
|||||||
383
scenes.yaml
383
scenes.yaml
@@ -922,3 +922,386 @@
|
|||||||
entity_only: true
|
entity_only: true
|
||||||
light.gartenhaus_wandlicht:
|
light.gartenhaus_wandlicht:
|
||||||
entity_only: true
|
entity_only: true
|
||||||
|
- id: '1736186099938'
|
||||||
|
name: Kinderzimmer Regal Dunkel
|
||||||
|
entities:
|
||||||
|
light.music_mouse_regal_licht:
|
||||||
|
effect_list:
|
||||||
|
- static
|
||||||
|
- circular
|
||||||
|
- wipeup
|
||||||
|
- twocolor
|
||||||
|
- twocolorrandom
|
||||||
|
- side_0.2
|
||||||
|
- side_0.5
|
||||||
|
- side_0.2_inc4
|
||||||
|
- side_0.2_inc8
|
||||||
|
- side_0.5_inc4
|
||||||
|
- top_0.2
|
||||||
|
- top_0.5
|
||||||
|
- top_0.2_inc4
|
||||||
|
- top_0.5_inc4
|
||||||
|
supported_color_modes:
|
||||||
|
- rgbw
|
||||||
|
effect: side_0.2_inc8
|
||||||
|
color_mode: rgbw
|
||||||
|
brightness: 84
|
||||||
|
hs_color:
|
||||||
|
- 19.66
|
||||||
|
- 92.157
|
||||||
|
rgb_color:
|
||||||
|
- 255
|
||||||
|
- 97
|
||||||
|
- 20
|
||||||
|
xy_color:
|
||||||
|
- 0.643
|
||||||
|
- 0.342
|
||||||
|
rgbw_color:
|
||||||
|
- 255
|
||||||
|
- 97
|
||||||
|
- 20
|
||||||
|
- 0
|
||||||
|
friendly_name: Music Mouse Regal Licht
|
||||||
|
supported_features: 44
|
||||||
|
state: 'on'
|
||||||
|
light.kinderzimmer_deckenlampe:
|
||||||
|
supported_color_modes:
|
||||||
|
- brightness
|
||||||
|
color_mode:
|
||||||
|
brightness:
|
||||||
|
id: JEQ0199674
|
||||||
|
interface: rf
|
||||||
|
level: 0
|
||||||
|
working: 'No'
|
||||||
|
friendly_name: kinderzimmer_deckenlampe
|
||||||
|
supported_features: 32
|
||||||
|
state: 'off'
|
||||||
|
light.kinderzimmer_fluter:
|
||||||
|
min_color_temp_kelvin: 2000
|
||||||
|
max_color_temp_kelvin: 6535
|
||||||
|
min_mireds: 153
|
||||||
|
max_mireds: 500
|
||||||
|
effect_list:
|
||||||
|
- None
|
||||||
|
- candle
|
||||||
|
- fire
|
||||||
|
- prism
|
||||||
|
- sparkle
|
||||||
|
- opal
|
||||||
|
- glisten
|
||||||
|
- unknown
|
||||||
|
- unknown
|
||||||
|
- unknown
|
||||||
|
- unknown
|
||||||
|
- sunrise
|
||||||
|
- sunset
|
||||||
|
supported_color_modes:
|
||||||
|
- color_temp
|
||||||
|
- xy
|
||||||
|
effect:
|
||||||
|
color_mode:
|
||||||
|
brightness:
|
||||||
|
color_temp_kelvin:
|
||||||
|
color_temp:
|
||||||
|
hs_color:
|
||||||
|
rgb_color:
|
||||||
|
xy_color:
|
||||||
|
mode: normal
|
||||||
|
dynamics: none
|
||||||
|
icon: hue:beyond
|
||||||
|
friendly_name: Kinderzimmer Fluter
|
||||||
|
supported_features: 44
|
||||||
|
state: 'off'
|
||||||
|
icon: mdi:bookshelf
|
||||||
|
metadata:
|
||||||
|
light.music_mouse_regal_licht:
|
||||||
|
entity_only: true
|
||||||
|
light.kinderzimmer_deckenlampe:
|
||||||
|
entity_only: true
|
||||||
|
light.kinderzimmer_fluter:
|
||||||
|
entity_only: true
|
||||||
|
- id: '1750279587277'
|
||||||
|
name: Gartenstimmung
|
||||||
|
entities:
|
||||||
|
light.suedseite6:
|
||||||
|
supported_color_modes:
|
||||||
|
- rgb
|
||||||
|
color_mode: rgb
|
||||||
|
brightness: 255
|
||||||
|
hs_color:
|
||||||
|
- 321.094
|
||||||
|
- 50.196
|
||||||
|
rgb_color:
|
||||||
|
- 255
|
||||||
|
- 127
|
||||||
|
- 210
|
||||||
|
xy_color:
|
||||||
|
- 0.42
|
||||||
|
- 0.239
|
||||||
|
friendly_name: Garten Rs485 Controller2 suedseite6
|
||||||
|
supported_features: 40
|
||||||
|
state: 'on'
|
||||||
|
light.suedseite1:
|
||||||
|
supported_color_modes:
|
||||||
|
- rgb
|
||||||
|
color_mode: rgb
|
||||||
|
brightness: 214
|
||||||
|
hs_color:
|
||||||
|
- 53.913
|
||||||
|
- 54.118
|
||||||
|
rgb_color:
|
||||||
|
- 255
|
||||||
|
- 241
|
||||||
|
- 117
|
||||||
|
xy_color:
|
||||||
|
- 0.425
|
||||||
|
- 0.452
|
||||||
|
friendly_name: Garten Rs485 Controller2 suedseite1
|
||||||
|
supported_features: 40
|
||||||
|
state: 'on'
|
||||||
|
light.suedseite2:
|
||||||
|
supported_color_modes:
|
||||||
|
- rgb
|
||||||
|
color_mode: rgb
|
||||||
|
brightness: 214
|
||||||
|
hs_color:
|
||||||
|
- 53.913
|
||||||
|
- 54.118
|
||||||
|
rgb_color:
|
||||||
|
- 255
|
||||||
|
- 241
|
||||||
|
- 117
|
||||||
|
xy_color:
|
||||||
|
- 0.425
|
||||||
|
- 0.452
|
||||||
|
friendly_name: Garten Rs485 Controller2 suedseite2
|
||||||
|
supported_features: 40
|
||||||
|
state: 'on'
|
||||||
|
light.suedseite3:
|
||||||
|
supported_color_modes:
|
||||||
|
- rgb
|
||||||
|
color_mode: rgb
|
||||||
|
brightness: 214
|
||||||
|
hs_color:
|
||||||
|
- 64.099
|
||||||
|
- 63.137
|
||||||
|
rgb_color:
|
||||||
|
- 244
|
||||||
|
- 255
|
||||||
|
- 94
|
||||||
|
xy_color:
|
||||||
|
- 0.41
|
||||||
|
- 0.493
|
||||||
|
friendly_name: Garten Rs485 Controller2 suedseite3
|
||||||
|
supported_features: 40
|
||||||
|
state: 'on'
|
||||||
|
light.suedseite4:
|
||||||
|
supported_color_modes:
|
||||||
|
- rgb
|
||||||
|
color_mode: rgb
|
||||||
|
brightness: 214
|
||||||
|
hs_color:
|
||||||
|
- 67.187
|
||||||
|
- 75.294
|
||||||
|
rgb_color:
|
||||||
|
- 232
|
||||||
|
- 255
|
||||||
|
- 63
|
||||||
|
xy_color:
|
||||||
|
- 0.406
|
||||||
|
- 0.523
|
||||||
|
friendly_name: Garten Rs485 Controller2 suedseite4
|
||||||
|
supported_features: 40
|
||||||
|
state: 'on'
|
||||||
|
light.suedseite5:
|
||||||
|
supported_color_modes:
|
||||||
|
- rgb
|
||||||
|
color_mode: rgb
|
||||||
|
brightness: 214
|
||||||
|
hs_color:
|
||||||
|
- 54.824
|
||||||
|
- 100
|
||||||
|
rgb_color:
|
||||||
|
- 255
|
||||||
|
- 233
|
||||||
|
- 0
|
||||||
|
xy_color:
|
||||||
|
- 0.471
|
||||||
|
- 0.494
|
||||||
|
friendly_name: Garten Rs485 Controller2 suedseite5
|
||||||
|
supported_features: 40
|
||||||
|
state: 'on'
|
||||||
|
metadata:
|
||||||
|
light.suedseite6:
|
||||||
|
entity_only: true
|
||||||
|
light.suedseite1:
|
||||||
|
entity_only: true
|
||||||
|
light.suedseite2:
|
||||||
|
entity_only: true
|
||||||
|
light.suedseite3:
|
||||||
|
entity_only: true
|
||||||
|
light.suedseite4:
|
||||||
|
entity_only: true
|
||||||
|
light.suedseite5:
|
||||||
|
entity_only: true
|
||||||
|
- id: '1773408613570'
|
||||||
|
name: arbeitszimmer_oben_orange
|
||||||
|
entities:
|
||||||
|
light.arbeitszimmer_oben_fluter_vorne:
|
||||||
|
min_color_temp_kelvin: 2000
|
||||||
|
max_color_temp_kelvin: 6535
|
||||||
|
effect_list:
|
||||||
|
- 'off'
|
||||||
|
- candle
|
||||||
|
- fire
|
||||||
|
- prism
|
||||||
|
- sparkle
|
||||||
|
- opal
|
||||||
|
- glisten
|
||||||
|
- underwater
|
||||||
|
- cosmos
|
||||||
|
- sunbeam
|
||||||
|
- enchant
|
||||||
|
- sunrise
|
||||||
|
- sunset
|
||||||
|
supported_color_modes:
|
||||||
|
- color_temp
|
||||||
|
- xy
|
||||||
|
effect: 'off'
|
||||||
|
color_mode: color_temp
|
||||||
|
brightness: 36
|
||||||
|
color_temp_kelvin: 2386
|
||||||
|
hs_color:
|
||||||
|
- 29.192
|
||||||
|
- 76.816
|
||||||
|
rgb_color:
|
||||||
|
- 255
|
||||||
|
- 154
|
||||||
|
- 59
|
||||||
|
xy_color:
|
||||||
|
- 0.559
|
||||||
|
- 0.389
|
||||||
|
mode: normal
|
||||||
|
dynamics: none
|
||||||
|
icon: hue:beyond-up
|
||||||
|
friendly_name: Fluter vorne
|
||||||
|
supported_features: 44
|
||||||
|
state: 'on'
|
||||||
|
light.arbeitszimmer_oben_fluter_hinten:
|
||||||
|
min_color_temp_kelvin: 2000
|
||||||
|
max_color_temp_kelvin: 6535
|
||||||
|
effect_list:
|
||||||
|
- 'off'
|
||||||
|
- candle
|
||||||
|
- fire
|
||||||
|
- prism
|
||||||
|
- sparkle
|
||||||
|
- opal
|
||||||
|
- glisten
|
||||||
|
- underwater
|
||||||
|
- cosmos
|
||||||
|
- sunbeam
|
||||||
|
- enchant
|
||||||
|
- sunrise
|
||||||
|
- sunset
|
||||||
|
supported_color_modes:
|
||||||
|
- color_temp
|
||||||
|
- xy
|
||||||
|
effect:
|
||||||
|
color_mode:
|
||||||
|
brightness:
|
||||||
|
color_temp_kelvin:
|
||||||
|
hs_color:
|
||||||
|
rgb_color:
|
||||||
|
xy_color:
|
||||||
|
mode: normal
|
||||||
|
dynamics: none
|
||||||
|
icon: hue:beyond-down
|
||||||
|
friendly_name: Fluter Hinten
|
||||||
|
supported_features: 44
|
||||||
|
state: 'off'
|
||||||
|
metadata: {}
|
||||||
|
- id: '1773408671408'
|
||||||
|
name: arbeitszimmer_oben_blau
|
||||||
|
entities:
|
||||||
|
light.arbeitszimmer_oben_fluter_vorne:
|
||||||
|
min_color_temp_kelvin: 2000
|
||||||
|
max_color_temp_kelvin: 6535
|
||||||
|
effect_list:
|
||||||
|
- 'off'
|
||||||
|
- candle
|
||||||
|
- fire
|
||||||
|
- prism
|
||||||
|
- sparkle
|
||||||
|
- opal
|
||||||
|
- glisten
|
||||||
|
- underwater
|
||||||
|
- cosmos
|
||||||
|
- sunbeam
|
||||||
|
- enchant
|
||||||
|
- sunrise
|
||||||
|
- sunset
|
||||||
|
supported_color_modes:
|
||||||
|
- color_temp
|
||||||
|
- xy
|
||||||
|
effect: 'off'
|
||||||
|
color_mode: color_temp
|
||||||
|
brightness: 255
|
||||||
|
color_temp_kelvin: 6172
|
||||||
|
hs_color:
|
||||||
|
- 33.105
|
||||||
|
- 5.284
|
||||||
|
rgb_color:
|
||||||
|
- 255
|
||||||
|
- 249
|
||||||
|
- 242
|
||||||
|
xy_color:
|
||||||
|
- 0.334
|
||||||
|
- 0.336
|
||||||
|
mode: normal
|
||||||
|
dynamics: none
|
||||||
|
icon: hue:beyond-up
|
||||||
|
friendly_name: Fluter vorne
|
||||||
|
supported_features: 44
|
||||||
|
state: 'on'
|
||||||
|
light.arbeitszimmer_oben_fluter_hinten:
|
||||||
|
min_color_temp_kelvin: 2000
|
||||||
|
max_color_temp_kelvin: 6535
|
||||||
|
effect_list:
|
||||||
|
- 'off'
|
||||||
|
- candle
|
||||||
|
- fire
|
||||||
|
- prism
|
||||||
|
- sparkle
|
||||||
|
- opal
|
||||||
|
- glisten
|
||||||
|
- underwater
|
||||||
|
- cosmos
|
||||||
|
- sunbeam
|
||||||
|
- enchant
|
||||||
|
- sunrise
|
||||||
|
- sunset
|
||||||
|
supported_color_modes:
|
||||||
|
- color_temp
|
||||||
|
- xy
|
||||||
|
effect: 'off'
|
||||||
|
color_mode: color_temp
|
||||||
|
brightness: 255
|
||||||
|
color_temp_kelvin: 5649
|
||||||
|
hs_color:
|
||||||
|
- 28.456
|
||||||
|
- 11.075
|
||||||
|
rgb_color:
|
||||||
|
- 255
|
||||||
|
- 240
|
||||||
|
- 227
|
||||||
|
xy_color:
|
||||||
|
- 0.349
|
||||||
|
- 0.341
|
||||||
|
mode: normal
|
||||||
|
dynamics: none
|
||||||
|
icon: hue:beyond-down
|
||||||
|
friendly_name: Fluter Hinten
|
||||||
|
supported_features: 44
|
||||||
|
state: 'on'
|
||||||
|
metadata: {}
|
||||||
|
|||||||
@@ -28,12 +28,12 @@
|
|||||||
- 0.396
|
- 0.396
|
||||||
light.kuche_vorne:
|
light.kuche_vorne:
|
||||||
state: true
|
state: true
|
||||||
color_temp: 477
|
color_temp_kelvin: 2386
|
||||||
brightness: 114
|
brightness: 114
|
||||||
light.wohnzimmer_kugel:
|
light.wohnzimmer_kugel:
|
||||||
state: true
|
state: true
|
||||||
brightness: 229
|
brightness: 229
|
||||||
color_temp: 492
|
color_temp_kelvin: 2400
|
||||||
light.wohnzimmer_stehlampe:
|
light.wohnzimmer_stehlampe:
|
||||||
state: true
|
state: true
|
||||||
brightness: 191
|
brightness: 191
|
||||||
|
|||||||
@@ -218,12 +218,12 @@ pool_pumpe_schalten:
|
|||||||
roomtracker_learn_aktueller_raum:
|
roomtracker_learn_aktueller_raum:
|
||||||
alias: 'RoomTracker Learn: Aktueller Raum'
|
alias: 'RoomTracker Learn: Aktueller Raum'
|
||||||
sequence:
|
sequence:
|
||||||
- service: mqtt.publish
|
- metadata: {}
|
||||||
metadata: {}
|
|
||||||
data:
|
data:
|
||||||
qos: '0'
|
qos: '0'
|
||||||
topic: my_btmonitor/known_room
|
topic: my_btmonitor/known_room
|
||||||
payload_template: '{{real_room}}'
|
payload: '{{real_room}}'
|
||||||
|
action: mqtt.publish
|
||||||
mode: single
|
mode: single
|
||||||
icon: mdi:desk
|
icon: mdi:desk
|
||||||
fields:
|
fields:
|
||||||
|
|||||||
Reference in New Issue
Block a user