354 lines
12 KiB
YAML
354 lines
12 KiB
YAML
- id: banyo_humidity
|
|
alias: banyo_humidity
|
|
mode: single
|
|
triggers:
|
|
- trigger: template
|
|
value_template: '{{ states(''sensor.banyo_moisture_humidity'') | float(0) > 45
|
|
}}'
|
|
id: 'on'
|
|
- trigger: template
|
|
value_template: '{{ states(''sensor.banyo_moisture_humidity'') | float(0) <= 45
|
|
}}'
|
|
id: 'off'
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id:
|
|
- 'on'
|
|
sequence:
|
|
- action: fan.turn_on
|
|
metadata: {}
|
|
data: {}
|
|
target:
|
|
entity_id: fan.banyo_fan
|
|
- conditions: []
|
|
sequence:
|
|
- action: fan.turn_off
|
|
metadata: {}
|
|
data: {}
|
|
target:
|
|
entity_id: fan.banyo_fan
|
|
- id: climate_schedule
|
|
alias: climate_schedule
|
|
description: ''
|
|
triggers:
|
|
- trigger: calendar
|
|
entity_id: calendar.sercan
|
|
event: start
|
|
offset: 0:0:0
|
|
- trigger: calendar
|
|
entity_id: calendar.sercan
|
|
event: start
|
|
offset: +0:30:0
|
|
- trigger: calendar
|
|
entity_id: calendar.sercan
|
|
event: end
|
|
offset: 0:0:0
|
|
- trigger: calendar
|
|
entity_id: calendar.sercan
|
|
event: end
|
|
offset: -0:30:0
|
|
- trigger: calendar
|
|
entity_id: calendar.melike
|
|
event: start
|
|
offset: 0:0:0
|
|
- trigger: calendar
|
|
entity_id: calendar.melike
|
|
event: start
|
|
offset: +0:30:0
|
|
- trigger: calendar
|
|
entity_id: calendar.melike
|
|
event: end
|
|
offset: 0:0:0
|
|
- trigger: calendar
|
|
entity_id: calendar.melike
|
|
event: end
|
|
offset: -0:30:0
|
|
- trigger: calendar
|
|
entity_id: calendar.misafir
|
|
event: start
|
|
offset: 0:0:0
|
|
- trigger: calendar
|
|
entity_id: calendar.misafir
|
|
event: start
|
|
offset: +0:30:0
|
|
- trigger: calendar
|
|
entity_id: calendar.misafir
|
|
event: end
|
|
offset: 0:0:0
|
|
- trigger: calendar
|
|
entity_id: calendar.misafir
|
|
event: end
|
|
offset: -0:30:0
|
|
conditions: []
|
|
actions:
|
|
- variables:
|
|
event_time: "{% if trigger.event == 'start' %}\n {% set start_no_offset = trigger.calendar_event.start\
|
|
\ %}\n{% else %}\n {% set start_no_offset = trigger.calendar_event.end %}\n\
|
|
{% endif %} {{ as_local(as_datetime(start_no_offset)) + trigger.offset }}"
|
|
- action: calendar.get_events
|
|
target:
|
|
entity_id: '{{ states.calendar | map(attribute=''entity_id'') | list }}'
|
|
data:
|
|
start_date_time: '{{ event_time }}'
|
|
duration:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 1
|
|
response_variable: after_events
|
|
- action: calendar.get_events
|
|
target:
|
|
entity_id: '{{ states.calendar | map(attribute=''entity_id'') | list }}'
|
|
data:
|
|
start_date_time: '{{ (as_timestamp(event_time)-1) | timestamp_local }}'
|
|
duration:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 1
|
|
response_variable: before_events
|
|
- variables:
|
|
room_id: '{{ area_id((trigger.calendar_event.description | from_json)[''room_name''])
|
|
}}
|
|
|
|
'
|
|
room_temps: "{# before ve after icin temps, ikisinin birlikte tutuldugu yer\
|
|
\ ise temps_all #} {% set ns = namespace(temps=[], temps_all=[]) %} {% for\
|
|
\ seq, events in {'before': before_events, 'after': after_events}.items()\
|
|
\ %}\n {# Temps sifirlanir #}\n {% set ns.temps = [] %} \n {% set all_events\
|
|
\ = events.values() | map(attribute='events') | sum(start=[]) | list %}\n\
|
|
\ {% for event in all_events %}\n {% set desc = event.description | from_json\
|
|
\ %}\n {# sadece bu eventin odasiyla ilgileniyoruz #}\n {% if area_id(desc['room_name'])\
|
|
\ == room_id %}\n {% if 'sleep_temp' in desc and\n ((seq ==\
|
|
\ 'before' \n and as_timestamp(event.start) + 1800 < as_timestamp(event_time)\
|
|
\ \n and as_timestamp(event.end) - 1800 >= as_timestamp(event_time))\n\
|
|
\ or (seq == 'after' \n and as_timestamp(event.start) +\
|
|
\ 1800 <= as_timestamp(event_time) \n and as_timestamp(event.end)\
|
|
\ - 1800 > as_timestamp(event_time))) %}\n {% set ns.temps = ns.temps\
|
|
\ + [ desc['sleep_temp'] ] %}\n {% else %}\n {% set ns.temps =\
|
|
\ ns.temps + [desc['temp']] %}\n {% endif %}\n {% endif %}\n {% endfor\
|
|
\ %}\n {% set ns.temps_all = ns.temps_all + [ ns.temps ] %}\n{% endfor %}\
|
|
\ {{ ns.temps_all }}\n"
|
|
before: '{{ room_temps[0] | max if room_temps[0] else none }}'
|
|
after: '{{ room_temps[1] | max if room_temps[1] else none }}'
|
|
- if: '{{ before != after }}'
|
|
then:
|
|
- action: climate.set_temperature
|
|
data:
|
|
hvac_mode: '{{ ''heat'' if after else ''off'' }}'
|
|
temperature: '{{ after | int(7) }}'
|
|
target:
|
|
area_id: '{{ room_id }}'
|
|
- action: climate.set_hvac_mode
|
|
data:
|
|
hvac_mode: '{{ ''heat'' if after else ''off'' }}'
|
|
target:
|
|
area_id: '{{ room_id }}'
|
|
mode: queued
|
|
- id: cover_schedule
|
|
alias: cover_schedule
|
|
description: ''
|
|
triggers:
|
|
- trigger: sun
|
|
event: sunset
|
|
offset: 0
|
|
id: sunset
|
|
- trigger: sun
|
|
event: sunrise
|
|
offset: 0
|
|
id: sunrise
|
|
- trigger: calendar
|
|
entity_id: calendar.sercan
|
|
event: end
|
|
offset: 0:0:0
|
|
id: event_end
|
|
- trigger: calendar
|
|
entity_id: calendar.melike
|
|
event: end
|
|
offset: 0:0:0
|
|
id: event_end
|
|
- trigger: calendar
|
|
entity_id: calendar.misafir
|
|
event: end
|
|
offset: 0:0:0
|
|
id: event_end
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id:
|
|
- event_end
|
|
sequence:
|
|
- action: calendar.get_events
|
|
target:
|
|
entity_id: '{{ states.calendar | map(attribute=''entity_id'') | list }}'
|
|
data:
|
|
start_date_time: '{% set next_rising = as_datetime(state_attr(''sun.sun'',
|
|
''next_rising'')) %} {{next_rising - timedelta(days=1) }}
|
|
|
|
'
|
|
duration:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 1
|
|
response_variable: sunrise_events
|
|
- action: calendar.get_events
|
|
target:
|
|
entity_id: '{{ states.calendar | map(attribute=''entity_id'') | list }}'
|
|
data:
|
|
start_date_time: '{{ trigger.calendar_event.end }}'
|
|
duration:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 1
|
|
response_variable: after_events
|
|
- action: cover.open_cover
|
|
metadata: {}
|
|
data: {}
|
|
target: "{% set current_area_id = (trigger.calendar_event.description | from_json).room_name\
|
|
\ | area_id %} {# Check if current event is an sunrise event #} {% if sunrise_events.values()\
|
|
\ \n | map(attribute='events') \n | sum(start=[]) \n | selectattr('summary',\
|
|
\ 'eq', trigger.calendar_event.summary)\n | selectattr('description', 'eq',\
|
|
\ trigger.calendar_event.description)\n | selectattr('start', 'eq', trigger.calendar_event.start)\n\
|
|
\ | selectattr('end', 'eq', trigger.calendar_event.end)\n | list %}\n\
|
|
\ {# Search all after events, which are also a sunrise event #}\n {% set\
|
|
\ ns = namespace(after_sunrise_events=[]) %}\n {% for after_event in after_events.values()\
|
|
\ \n | map(attribute='events') \n | sum(start=[]) \n | list\
|
|
\ %}\n {% for sunrise_event in sunrise_events.values() \n | map(attribute='events')\
|
|
\ \n | sum(start=[]) \n | list %}\n {% set desc = after_event.description\
|
|
\ | from_json %}\n {% if desc.room_name | area_id == current_area_id\
|
|
\ \n and after_event.summary == sunrise_event.summary \n and\
|
|
\ after_event.description == sunrise_event.description \n and after_event.start\
|
|
\ == sunrise_event.end \n and after_event.end == sunrise_event.end\
|
|
\ %}\n {# Both after and sunrise events are found #}\n {%\
|
|
\ set ns.after_sunrise_events = ns.after_sunrise_events + [after_event]\
|
|
\ %}\n {% endif %}\n {% endfor %}\n {% endfor %}\n {{ { \"area_id\"\
|
|
: [] if ns.after_sunrise_events else [current_area_id] } }}\n{% else %}\n\
|
|
\ {{ { \"area_id\": [] } }}\n{% endif %}\n"
|
|
- conditions:
|
|
- condition: trigger
|
|
id:
|
|
- sunset
|
|
sequence:
|
|
- action: cover.close_cover
|
|
metadata: {}
|
|
data: {}
|
|
target: '{{ {''area_id'': areas() | list} }}'
|
|
- conditions:
|
|
- condition: trigger
|
|
id:
|
|
- sunrise
|
|
sequence:
|
|
- action: calendar.get_events
|
|
target:
|
|
entity_id: '{{ states.calendar | map(attribute=''entity_id'') | list }}'
|
|
data:
|
|
start_date_time: '{{ now() }}'
|
|
duration:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 1
|
|
response_variable: sunrise_events
|
|
- action: cover.open_cover
|
|
metadata: {}
|
|
data: {}
|
|
target: "{{ { \"area_id\": areas()\n | reject(\"in\", sunrise_events.values()\
|
|
\ \n | map(attribute='events') \n | sum(start=[]) \n \
|
|
\ | map(attribute='description')\n | map('from_json')\n \
|
|
\ | map(attribute='room_name')\n | map('area_id')\n | unique\
|
|
\ | list)\n | list } }}\n"
|
|
- delay: 120
|
|
mode: queued
|
|
- id: kat1_coverclose
|
|
alias: kat1_coverclose
|
|
description: ''
|
|
triggers:
|
|
- domain: mqtt
|
|
device_id: 1d49a19304191ce333202639e9ed74d5
|
|
type: action
|
|
subtype: 1_hold
|
|
trigger: device
|
|
id: button
|
|
- domain: mqtt
|
|
device_id: d3fd09e3b60a91f37e64b9137c1bba7b
|
|
type: action
|
|
subtype: 3_hold
|
|
trigger: device
|
|
id: button
|
|
- domain: mqtt
|
|
device_id: 3b076af749562b3dfa18416768178b40
|
|
type: action
|
|
subtype: 2_hold
|
|
trigger: device
|
|
id: button
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: template
|
|
value_template: '{{ devices | map(''states'') | reject(''eq'', ''closed'')
|
|
| list | count > 0 }}'
|
|
sequence:
|
|
- action: scene.create
|
|
metadata: {}
|
|
data:
|
|
scene_id: kat1_coverclose
|
|
snapshot_entities: '{{devices}}'
|
|
- action: cover.close_cover
|
|
metadata: {}
|
|
data: {}
|
|
target:
|
|
entity_id: '{{devices}}'
|
|
- conditions: []
|
|
sequence:
|
|
- action: scene.turn_on
|
|
metadata: {}
|
|
data: {}
|
|
target:
|
|
entity_id: scene.kat1_coverclose
|
|
variables:
|
|
devices: '{{ floor_areas(''1_kat'') | map(''area_entities'') | sum(start=[]) |
|
|
select(''in'', states.cover | map(attribute=''entity_id'')| list)| list}}'
|
|
mode: single
|
|
- alias: thermostat_switch
|
|
id: thermostat_switch
|
|
description: ''
|
|
triggers:
|
|
- value_template: "{{ ['number.sercan_climate_valve_opening_degree',\n 'number.yatak_climate_valve_opening_degree',\n\
|
|
\ 'number.melike_climate_valve_opening_degree',\n 'number.bebek_climate_valve_opening_degree',\n\
|
|
\ 'number.banyo_climate_valve_opening_degree',\n 'number.misafir_climate_valve_opening_degree']\
|
|
\ \n | map('states') \n | select('is_number')\n | map('float') | max > 0\
|
|
\ }}"
|
|
trigger: template
|
|
id: heat
|
|
- value_template: "{{ ['number.sercan_climate_valve_opening_degree',\n 'number.yatak_climate_valve_opening_degree',\n\
|
|
\ 'number.melike_climate_valve_opening_degree',\n 'number.bebek_climate_valve_opening_degree',\n\
|
|
\ 'number.banyo_climate_valve_opening_degree',\n 'number.misafir_climate_valve_opening_degree']\
|
|
\ \n | map('states') \n | select('is_number')\n | map('float') \n | max\
|
|
\ == 0 }}"
|
|
trigger: template
|
|
id: 'off'
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id:
|
|
- heat
|
|
sequence:
|
|
- action: switch.turn_on
|
|
metadata: {}
|
|
data: {}
|
|
target:
|
|
entity_id: switch.koridor2_switch
|
|
- conditions: []
|
|
sequence:
|
|
- action: switch.turn_off
|
|
metadata: {}
|
|
data: {}
|
|
target:
|
|
entity_id: switch.koridor2_switch
|
|
mode: restart
|