For the generic thermostat all you have to do is use the below code as a template in configuration.yaml: Generic Thermostat is built in to core.
#
#Create a generic Thermostat for family room fireplace
#Use Temperature sensor located on Family Room East wall
#
climate:
- platform: generic_thermostat
name: Family Room Fireplace
heater: switch.family_room_fireplace
target_sensor: sensor.multisensor_6_air_temperature
min_temp: 45
max_temp: 78
target_temp: 50
away_temp: 45
initial_hvac_mode: heat
Hacs can be complicated but is worth the effort. It opens up a lot of code written by others who are more knowledgeable.
I should have also answered your question - apologies:
Here is a solution by @123 that will work for both weekdays and weekends with different times. You will need to create a binary sensor in helpers that allows you to turn on/off the system.
alias: example
description: ''
trigger:
- id: 'schedule'
platform: time
at:
- '06:00'
- '08:00'
- '15:00'
- '20:00'
- '21:00'
- '22:00'
- id: 'override'
platform: state
entity_id: binary_sensor.tuer_balkon_onoff
to: 'on'
for: '00:01:00'
- id: 'disable'
platform: state
entity_id: binary_sensor.tuer_balkon_onoff
to: 'off'
for: '00:02:00'
condition: []
action:
- choose:
- conditions:
- "{{ trigger.id != 'disable' }}"
- "{{ is_state('binary_sensor.tuer_balkon_onoff', 'on') }}"
sequence:
- variables:
weekday:
6: 17
8: 24
15: 20
20: 22
22: 20
24: 17
weekend:
8: 17
21: 24
22: 20
24: 17
schedule: "{{ weekday if 1 <= now().isoweekday() <= 5 else weekend }}"
- service: climate.set_temperature
target:
entity_id: climate.thermostat_kueche
data:
hvac_mode: 'heat'
temperature: "{{ schedule.get(schedule.keys() | select('>', now().hour) | first, 21) }}"
- conditions:
- "{{ trigger.id == 'disable' }}"
sequence:
- service: climate.turn_off
target:
entity_id: climate.thermostat_kueche
default: []
mode: single
These are time (hour) and temperature (C)
weekday:
6: 17
8: 24
15: 20
20: 22
22: 20
24: 17
weekend:
8: 17
21: 24
22: 20
24: 17
the default temperature is 21.
temperature: "{{ schedule.get(schedule.keys() | select('>', now().hour) | first, 21) }}