Skip to content

Instantly share code, notes, and snippets.

@Styx85
Last active June 8, 2022 18:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Styx85/37357b1a007ed84002e3efb94f88758a to your computer and use it in GitHub Desktop.
Save Styx85/37357b1a007ed84002e3efb94f88758a to your computer and use it in GitHub Desktop.
heizung: # This is our app instance name.
module: hass_apps_loader
class: SchedyApp
actor_type: thermostat
actor_templates:
default:
## off_temp: 5
supports_hvac_modes: true
hvac_mode_on: 'auto'
hvac_mode_off: 'off'
schedule_prepend:
# Valve maintenance
# don't turn on when it's > 24 degrees outside
- x: "IncludeSchedule(schedule_snippets['snippet_wartung']) if heizung_wartung() == 'on' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.vicare_outside_temperature') or 0) > 23 else Next()"
- x: "Mark(OFF, Mark.OVERLAY) if not (is_empty(filter_entities('binary_sensor', state='on', window_room=room_name))) else Next()"
- x: "Mark(OFF, Mark.OVERLAY) if not (is_empty(filter_entities('binary_sensor', state='on', window_room2=room_name))) else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_abwesend']) if heating_mode() == 'abwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if heating_mode() == 'aus' else Next()"
rescheduling_delay: 10
expression_environment: |
def heating_mode():
return state("input_select.heating_mode")
def heizung_wartung():
return state("input_boolean.heizung_wartung")
schedule_snippets:
snippet_aus:
- value: 5
snippet_durchgehend_wohnen:
- value: 21
snippet_wartung:
- v: 20
weeks: "*/2"
rules:
- weekdays: 4
rules:
- { start: "10:29", end: "10:30", v: 35 }
- { start: "10:30", end: "10:31", v: 5 }
- { start: "0:00", end: "0:00+1d" }
snippet_schlafen:
## Winter ##
- v: 18
months: "!5-8"
rules:
- { start: "06:00", end: "06:15", v: 19 }
- { start: "06:15", end: "07:00", v: 20 }
- { start: "07:00", end: "20:00", v: 18.5 }
- { start: "20:00", end: "21:29", v: 19 }
- { start: "21:29", end: "21:30", v: 17 }
- { start: "0:00", end: "0:00+1d" }
## Sommer ##
- v: 5
months: 5-8
rules:
- { start: "08:00", end: "20:00", v: 17 }
- { start: "0:00", end: "0:00+1d" }
snippet_wc:
## Winter ##
- v: 17
months: "!5-8"
rules:
- { start: "07:00", end: "19:00", v: 20 }
- { start: "0:00", end: "0:00+1d" }
## Sommer ##
- v: 5
months: 5-8
rules:
- { start: "07:00", end: "19:00", v: 18 }
- { start: "0:00", end: "0:00+1d" }
snippet_baby:
- v: 18
rules:
- { start: "07:00", end: "08:00", v: 21 }
- { start: "08:00", end: "18:00", v: 20 }
- { start: "18:00", end: "21:00", v: 21 }
- { start: "0:00", end: "0:00+1d" }
snippet_kinder:
## Winter ##
- v: 18
months: "!5-8"
rules:
- { start: "07:00", end: "20:00", v: 20 }
- { start: "20:00", end: "21:29", v: 19 }
- { start: "21:29", end: "21:30", v: 17 }
- { start: "0:00", end: "0:00+1d" }
## Sommer ##
- v: 5
months: 5-8
rules:
- { start: "07:00", end: "20:00", v: 20 }
- { start: "0:00", end: "0:00+1d" }
snippet_keller:
## Winter ##
- v: 16
months: "!5-8"
rules:
- { start: "10:00", end: "19:00", v: 18 }
- { start: "0:00", end: "0:00+1d" }
## Sommer ##
- v: 5
months: 5-8
rules:
- { start: "10:00", end: "18:00", v: 16 }
- { start: "0:00", end: "0:00+1d" }
snippet_abwesend:
## Winter ##
- v: 16
months: "!5-8"
rules:
- { start: "10:00", end: "20:00", v: 18 }
- { start: "0:00", end: "0:00+1d" }
## Sommer ##
- v: 5
months: 5-8
snippet_standard:
## Winter ##
- v: 17
months: "!5-8"
rules:
- { start: "06:15", end: "23:00", weekdays: "1-5", v: 20 }
- { start: "07:30", end: "23:30", weekdays: "!1-5", v: 20 }
- { start: "0:00", end: "0:00+1d" }
## Sommer ##
- v: 5
months: 5-8
rules:
- { start: "07:00", end: "22:00", v: 20 }
- { start: "0:00", end: "0:00+1d" }
snippet_standard_2:
## Winter ##
- v: 17
months: "!5-8"
rules:
- { start: "07:00", end: "21:00", weekdays: "1-5", v: 20 }
- { start: "07:30", end: "22:00", weekdays: "!1-5", v: 20 }
- { start: "0:00", end: "0:00+1d" }
## Sommer ##
- v: 5
months: 5-8
rules:
- { start: "07:00", end: "22:00", v: 20 }
- { start: "0:00", end: "0:00+1d" }
snippet_gast:
## Winter ##
- v: 17
months: "!5-8"
rules:
- { start: "07:00", end: "21:00", weekdays: "1-5", v: 20 }
- { start: "07:30", end: "22:00", weekdays: "!1-5", v: 20 }
- { start: "0:00", end: "0:00+1d" }
## Sommer ##
- v: 5
months: 5-8
rules:
- { start: "07:00", end: "20:00", v: 20 }
- { start: "0:00", end: "0:00+1d" }
watched_entities:
- input_select.heating_mode
- sensor.vicare_outside_temperature
- input_boolean.heizung_wartung
#################
rooms:
####### #########
Arbeitszimmer:
rescheduling_delay: 15
watched_entities:
- sensor.arbeitszimmer_sensor_temperature
- binary_sensor.arbeitszimmer_sensor_fenster_links_contact
- binary_sensor.arbeitszimmer_sensor_fenster_mitte_contact
- binary_sensor.arbeitszimmer_sensor_fenster_rechts_contact
- binary_sensor.wc_sensor_fenster_contact
actors:
climate.arbeitszimmer_heizung:
min_temp: 5
max_temp: 30
delta: 1.0
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.arbeitszimmer_sensor_temperature') or 0) > 22 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_standard_2']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_standard_2']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
Bibliothek:
rescheduling_delay: 15
watched_entities:
- sensor.bibliothek_sensor_temperature
- binary_sensor.bibliothek_sensor_dachfenster_contact
- binary_sensor.gastezimmer_fenster_links_contact
- binary_sensor.gastezimmer_fenster_links_contact
- binary_sensor.gastezimmer_dachfenster_gross_contact
- binary_sensor.gastezimmer_dachfenster_klein_contact
actors:
climate.bibliothek_heizung:
hvac_mode_on: 'heat'
min_temp: 5
max_temp: 35
# delta: 1
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.bibliothek_sensor_temperature') or 0) > 22 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_gast']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_abwesend']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
Gästezimmer:
rescheduling_delay: 15
watched_entities:
- sensor.mobiler_sensor_temperature
- binary_sensor.bibliothek_sensor_dachfenster_contact
- binary_sensor.gastezimmer_fenster_links_contact
- binary_sensor.gastezimmer_fenster_links_contact
- binary_sensor.gastezimmer_dachfenster_gross_contact
- binary_sensor.gastezimmer_dachfenster_klein_contact
actors:
climate.gastezimmer_heizung:
min_temp: 5
max_temp: 35
# delta: 1
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.mobiler_sensor_temperature') or 0) > 22 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_gast']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_abwesend']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
Gästebad:
rescheduling_delay: 15
watched_entities:
- sensor.mobiler_sensor_temperature
actors:
climate.gastebad_heizung:
hvac_mode_on: 'heat'
min_temp: 5
max_temp: 35
# delta: 1
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.mobiler_sensor_temperature') or 0) > 22 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_gast']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_abwesend']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
Wohnzimmer:
rescheduling_delay: 10
watched_entities:
- sensor.wohnzimmer_sensor_temperature
- binary_sensor.wohnzimmer_sensor_fenster_contact
- binary_sensor.esszimmer_sensor_fenster_links_contact
- binary_sensor.esszimmer_sensor_fenster_rechts_contact
actors:
climate.wohnzimmer_heizung_fenster:
min_temp: 5
max_temp: 35
# delta: 1
climate.wohnzimmer_heizung_wand:
min_temp: 5
max_temp: 35
# delta: 1
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.wohnzimmer_sensor_temperature') or 0) > 22 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_standard']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_standard']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
Esszimmer:
rescheduling_delay: 10
watched_entities:
- sensor.ble_temperature_esszimmer_sensor
- binary_sensor.esszimmer_sensor_fenster_links_contact
- binary_sensor.esszimmer_sensor_fenster_rechts_contact
- binary_sensor.wohnzimmer_sensor_fenster_contact
actors:
climate.esszimmer_heizung:
min_temp: 5
max_temp: 35
# delta: 1
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.ble_temperature_esszimmer_sensor') or 0) > 22 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_standard']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_standard']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
Schlafzimmer:
rescheduling_delay: 20
watched_entities:
- sensor.schlafzimmer_sensor_temperature
- binary_sensor.schlafzimmer_sensor_fenster_links_contact
- binary_sensor.schlafzimmer_sensor_fenster_rechts_contact
actors:
climate.schlafzimmer_heizung:
min_temp: 5
max_temp: 35
off_temp: 5
supports_hvac_modes: false
# delta: 1.0
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.schlafzimmer_sensor_temperature') or 0) > 21 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_schlafen']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_schlafen']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
Kinderzimmer:
rescheduling_delay: 20
watched_entities:
- binary_sensor.kinderzimmer_sensor_fenster_links_contact
- binary_sensor.kinderzimmer_sensor_fenster_rechts_contact
- sensor.kinderzimmer_sensor_temperature
actors:
climate.kinderzimmer_heizung:
min_temp: 5
max_temp: 35
off_temp: 5
supports_hvac_modes: false
# delta: 1.0
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.kinderzimmer_sensor_temperature') or 0) > 22 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_kinder']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_kinder']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
WC:
rescheduling_delay: 10
watched_entities:
- binary_sensor.wc_sensor_fenster_contact
- binary_sensor.arbeitszimmer_sensor_fenster_links_contact
- binary_sensor.arbeitszimmer_sensor_fenster_mitte_contact
- binary_sensor.arbeitszimmer_sensor_fenster_rechts_contact
actors:
climate.wc_heizung:
min_temp: 5
max_temp: 35
# delta: 1.0
climate.diele_heizung:
min_temp: 5
max_temp: 35
# delta: 1.0
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.vicare_outside_temperature') or 0) > 21 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_wc']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_wc']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
Werkstatt:
rescheduling_delay: 10
# watched_entities:
actors:
climate.werkstatt_flur_heizung:
min_temp: 5
max_temp: 35
off_temp: 5
supports_hvac_modes: false
# delta: 1.0
climate.werkstatt_heizung:
min_temp: 5
max_temp: 35
off_temp: 5
supports_hvac_modes: false
# delta: 1.0
schedule:
- x: "IncludeSchedule(schedule_snippets['snippet_aus']) if float(state('sensor.vicare_outside_temperature') or 0) > 21 else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_keller']) if heating_mode() == 'anwesend/gast' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_keller']) if heating_mode() == 'anwesend/zeitgesteuert' else Next()"
- x: "IncludeSchedule(schedule_snippets['snippet_durchgehend_wohnen']) if heating_mode() == 'durchgehend aktiv' else Next()"
####### #########
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment