blueprint:
  name: Thermostat TPI
  description: Thermostat TPI (Time Propertional & Integral)
  domain: automation
  input:
    coeff_c:
      name: Coefficient C
      description: coefficient multiplicateur de la différence entre la consigne et
        éa température intérieure pour le calcul de la puissance (0.6 conseillé)
      selector:
        number:
          min: 0.0
          max: 1.0
          step: 0.01
          mode: slider
    coeff_t:
      name: Coefficient T
      description: coefficient multiplicateur de la différence entre la consigne et
        éa température extérieure pour le calcul de la puissance (0.01 conseillé)
      selector:
        number:
          min: 0.0
          max: 0.1
          step: 0.001
          mode: slider
    entity_consigne:
      name: Consigne
      description: Champs d'entrée de la température de consigne (input number).
      selector:
        entity:
          domain: input_number
    entity_temp_ext:
      name: Température extérieure
      description: Sonde de mesure de la température extérieure (sensor)
      selector:
        entity:
          domain: sensor
          device_class: temperature
    entity_temp_int:
      name: Température intérieure
      description: Sonde de mesure de la température intérieure (sensor)
      selector:
        entity:
          domain: sensor
          device_class: temperature
    entity_fenetre:
      name: Fenètre
      description: Capteur d'ouverture de fenêtre (sensor)
      selector:
        entity:
          domain: binary_sensor
          device_class: opening
    entity_puissance:
      name: Puissance
      description: Champs d'affichage de la puissance (input_number)
      selector:
        entity:
          domain: input_number
    entity_chauffage:
      name: Chauffage
      description: Interrupteur marche / arrêt du chauffage (switch)
      selector:
        entity:
          domain: switch
  source_url: https://github.com/argonaute199/chauffage-home-assistant/blob/main/blueprint/thermostat_tpi.yaml
variables:
  coeff_c: !input 'coeff_c'
  coeff_t: !input 'coeff_t'
  entity_temp_int: !input 'entity_temp_int'
  entity_temp_ext: !input 'entity_temp_ext'
  entity_fenetre: !input 'entity_fenetre'
trigger:
- platform: time_pattern
  minutes: /10
- platform: state
  entity_id: !input 'entity_consigne'
- platform: state
  entity_id: !input 'entity_fenetre'
action:
- alias: récupération des données
  variables:
    entity_consigne: !input 'entity_consigne'
    consigne: '{{states(entity_consigne)}}'
    temp_ext: '{{ states(entity_temp_ext) }}'
    temp_int: '{{ states(entity_temp_int) }}'
    fenetre: '{{states(entity_fenetre)}}'
    puissance: '{%set val = coeff_c * (consigne - temp_int) + coeff_t * (consigne
      - temp_ext) %}  {% if val > 1 and fenetre == ''off'' %} {% set val = 100 %}  {%
      elif val < 0 or fenetre == ''on'' %} {% set val = 0 %}  {% else %} {% set val
      = ( (val * 100) | round(0)) %} {% endif %} {{val}}'
    temps_chauffe: '{{ puissance * 6 }}'
- alias: Met à jour l'indicateur de puissance
  service: input_number.set_value
  target:
    entity_id: !input 'entity_puissance'
  data:
    value: '{{puissance}}'
- choose:
  - conditions:
    - condition: template
      value_template: '{{puissance == 0}}'
    sequence:
    - service: switch.turn_off
      target:
        entity_id: !input 'entity_chauffage'
  - conditions:
    - condition: template
      value_template: '{{ puissance > 99}}'
    sequence:
    - service: switch.turn_on
      target:
        entity_id: !input 'entity_chauffage'
  default:
  - service: switch.turn_on
    target:
      entity_id: !input 'entity_chauffage'
  - delay: '{{temps_chauffe}}'
  - service: switch.turn_off
    target:
      entity_id: !input 'entity_chauffage'
mode: restart
