bob1de / hass-apps

Some useful apps and snippets to empower Home Assistant and AppDaemon even more.
Apache License 2.0
85 stars 23 forks source link

[schedy] HVAC mode of Bosch thermostat get set to automatic mode automatically #78

Open u20p17 opened 1 year ago

u20p17 commented 1 year ago

Hi all, I am using Schedy (https://hass-apps.readthedocs.io/en/stable/apps/schedy/) for my heating schedule and it is working fine except one issue with the setting of the HVAC mode. As thermostats I am using the Bosch ones: https://www.bosch-smarthome.com/de/de/produkte/vorgaengermodelle/heizkoerper-thermostat/

image

As you can see in the image schedy changes the temperature to 17 deg. The HVAC mode get changed to automatic, then back to heat (what I would like to have) and finally back to automatic. Why?

Furthermore it seems that the thermostat are only listening to the values send by Schedy if they are in the Heat HVAC mode. What values the thermostat is using when it is in automatic mode? I haven't defined any schedule in the Bosch app.

The schedy config file looks the following:

schedy:  
  module: hass_apps_loader
  class: SchedyApp

  #debug: false
  #reset_at_startup: false
  #expressions_from_events: false

  expression_environment: | 
     def heating_mode():
        return state("input_select.heating_mode")

  actor_type: thermostat

  actor_templates:
    default:
      #delta: 0.0
      min_temp: 5
      max_temp: 30
      off_temp: "OFF"
      supports_hvac_modes: true
      hvac_mode_on: heat
      hvac_mode_off: 'off'

  schedule_prepend:
    - x: "Mark(OFF, Mark.OVERLAY) if not is_empty(filter_entities('binary_sensor', state='on', window_room=room_name)) else Next()"

  schedule_append:
    - v: "OFF"

  schedule_snippets:
    bedroom:
    - { v: 17, start: "07:00", end: "20:00" }
    - { v: 21, start: "20:00", end: "22:00" }
    - { v: 20, start: "22:00", end: "07:00" }
    homeOffice: # Used with rules - x: "IncludeSchedule(schedule_snippets['homeOffice']) if heating_mode() == 'HomeOffice' else Next()"
    - { v: 20, start: "00:00", end: "08:00" }
    - { v: 22, start: "08:00", end: "20:00" }
    - { v: 20, start: "20:00", end: "00:00" }
    holiday: # Used with rules - x: "IncludeSchedule(schedule_snippets['holiday']) if heating_mode() == 'Holiday' else Next()"
    - v: 17
    default: # Used with rules -x: { "IncludeSchedule(schedule_snippets['default']) }
    - v: 19
    livingroom:
    - { v: 18, start: "00:00", end: "06:00" }
    - { v: 22, start: "06:00", end: "08:00" }
    - { v: 18, start: "08:00", end: "16:00" }
    - { v: 22, start: "16:00", end: "00:00" }
    bathroom:
    - { v: 18, start: "00:00", end: "06:00" }
    - { v: 24, start: "06:00", end: "08:00" }
    - { v: 18, start: "08:00", end: "20:00" }
    - { v: 24, start: "20:00", end: "00:00" }

  watched_entities:
  - input_select.heating_mode

  # Configure your rooms here.
  rooms:
    living:
      #friendly_name: ...
      allow_manual_changes: true
      #replicate_changes: true
      rescheduling_delay: 120
      actors:
        climate.room_climate_wohnzimmer:  #Wohnzimmer
      schedule:
      - weekdays: 1-7
        rules:
        - x: "OFF if is_on('binary_sensor.wohnzimmerfenster') else Next()"
        - x: "OFF if is_on('binary_sensor.wohnzimmerbalkontur') else Next()"
        - x: "OFF if is_on('binary_sensor.kuchenfenster') else Next()"
        - x: "OFF if is_on('binary_sensor.heizung_in_wohnkueche_deaktivieren_wegen_klimaanlage') else Next()"
        - x: "IncludeSchedule(schedule_snippets['livingroom']) if heating_mode() == 'Default' else Next()"
        - x: "IncludeSchedule(schedule_snippets['livingroom']) if heating_mode() == 'HomeOffice' else Next()"
        - x: "IncludeSchedule(schedule_snippets['holiday']) if heating_mode() == 'Holiday' else Next()"
      watched_entities:
          - binary_sensor.wohnzimmerfenster
          - binary_sensor.wohnzimmerbalkontur
          - binary_sensor.kuchenfenster
          - binary_sensor.heizung_in_wohnkueche_deaktivieren_wegen_klimaanlage
    bed:
      #friendly_name: ...
      allow_manual_changes: true
      #replicate_changes: true
      rescheduling_delay: 120
      actors:
        climate.room_climate_schlafzimmer:
      schedule:
      - weekdays: 1-7
        rules:
        - x: "OFF if is_on('binary_sensor.schlafzimmerfenster_rechts') else Next()"
        - x: "OFF if is_on('binary_sensor.schlafzimmerfenster_links') else Next()"
        - x: "OFF if is_on('binary_sensor.heizung_in_schlafzimmer_deaktivieren_wegen_klimaanlage') else Next()"
        - x: "IncludeSchedule(schedule_snippets['bedroom']) if heating_mode() == 'Default' else Next()"
        - x: "IncludeSchedule(schedule_snippets['bedroom']) if heating_mode() == 'HomeOffice' else Next()"
        - x: "IncludeSchedule(schedule_snippets['holiday']) if heating_mode() == 'Holiday' else Next()"
      watched_entities:
        - binary_sensor.schlafzimmerfenster_rechts
        - binary_sensor.schlafzimmerfenster_links
        - binary_sensor.heizung_in_schlafzimmer_deaktivieren_wegen_klimaanlage
    guest:
      #friendly_name: ...
      allow_manual_changes: true
      #replicate_changes: true
      rescheduling_delay: 120
      actors:
        climate.room_climate_gastezimmer:
      schedule:
      - weekdays: 1-7
        rules:
        - x: "OFF if is_on('binary_sensor.gastezimmerfenster_links') else Next()"
        - x: "IncludeSchedule(schedule_snippets['default']) if heating_mode() == 'Default' else Next()"
        - x: "IncludeSchedule(schedule_snippets['default']) if heating_mode() == 'HomeOffice' else Next()"
        - x: "IncludeSchedule(schedule_snippets['holiday']) if heating_mode() == 'Holiday' else Next()"
      watched_entities:
        - binary_sensor.gastezimmerfenster_links
    buero:
      #friendly_name: ...
      allow_manual_changes: true
      #replicate_changes: true
      rescheduling_delay: 120
      actors:
        climate.room_climate_buro:
      schedule:
      - weekdays: 1-7
        rules:
        - x: "OFF if is_on('binary_sensor.burobalkontur') else Next()"
        - x: "OFF if is_on('binary_sensor.heizung_in_buero_deaktivieren_wegen_klimaanlage') else Next()"
        - x: "IncludeSchedule(schedule_snippets['default']) if heating_mode() == 'Default' else Next()"
        - x: "IncludeSchedule(schedule_snippets['homeOffice']) if heating_mode() == 'HomeOffice' else Next()"
        - x: "IncludeSchedule(schedule_snippets['holiday']) if heating_mode() == 'Holiday' else Next()"
      watched_entities:
        - binary_sensor.burobalkontur
        - binary_sensor.heizung_in_buero_deaktivieren_wegen_klimaanlage
    badezimmer:
      #friendly_name: ...
      allow_manual_changes: true
      #replicate_changes: true
      rescheduling_delay: 120
      actors:
        climate.room_climate_badezimmer:
      schedule:
      - weekdays: 1-7
        rules:
        - x: "IncludeSchedule(schedule_snippets['bathroom']) if heating_mode() == 'Default' else Next()"
        - x: "IncludeSchedule(schedule_snippets['bathroom']) if heating_mode() == 'HomeOffice' else Next()"
        - x: "IncludeSchedule(schedule_snippets['holiday']) if heating_mode() == 'Holiday' else Next()"
      watched_entities:
    vorzimmer:
      #friendly_name: ...
      allow_manual_changes: true
      #replicate_changes: true
      rescheduling_delay: 120
      actors:
        climate.room_climate_vorzimmer:
      schedule:
      - weekdays: 1-7
        rules:
        - x: "OFF if is_on('binary_sensor.eingangstur') else Next()"
        - x: "IncludeSchedule(schedule_snippets['default']) if heating_mode() == 'Default' else Next()"
        - x: "IncludeSchedule(schedule_snippets['default']) if heating_mode() == 'HomeOffice' else Next()"
        - x: "IncludeSchedule(schedule_snippets['holiday']) if heating_mode() == 'Holiday' else Next()"
      watched_entities:
        - binary_sensor.eingangstur

BR