Gestion Chauffe Eau tous les deux jours et la nuit

Salut a tous,

Je vais essayer de me mettre doucement au automatisation yaml pour les trucs simples.

Je cherche a démarrer mon ballon d’eau chaude 1 fois tous les deux jours entre 00h et 06h.

J’ai utilisé Time Of The Day pour mon créneau horaire. Merci https://forum.hacf.fr/t/automatisation-ha-chauffe-eau-th16-sonde-temperature/1913/6

@ choses :
Comment lui dire seulement tous les deux jour ?

Est il possible de mettre l’extinction sur la même automatisation.

Voici les deux automatisations pour le moment.

  alias: Gestion Chauffe Eau
  description: ''
  trigger:
  - platform: state
    entity_id: binary_sensor.compteur_nuit
    attribute: friendly_name
    from: 'off'
    to: 'on'
  condition: []
  action:
  - type: turn_on
    device_id: 2981c65c301ba537ee6956be8b3ecd28
    entity_id: switch.on_off_chauffe_eau
    domain: switch
  mode: single
- id: '1609959651232'
  alias: Gestion Chauffe Eau extinction
  description: ''
  trigger:
  - platform: state
    entity_id: binary_sensor.compteur_nuit
    attribute: friendly_name
    from: 'on'
    to: 'off'
  condition: []
  action:
  - type: turn_off
    device_id: 2981c65c301ba537ee6956be8b3ecd28
    entity_id: switch.on_off_chauffe_eau
    domain: switch
  mode: single```
1 « J'aime »

Pour merger l’allumage et l’extinction. Ton trigger doit être déclenché sur un changement d’état quelqu’il soit. Ensuite tu utilises l’instruction choose pour gérer le cas allumage et le cas extinction.

Je réfléchi pour le « un jour sur deux »

1 « J'aime »

Choses ??

Oui, avec la fonction choose (plusieurs exemples sur le forum, fait une recherche si tu veux avoir des exemples d’utilisation).

Dans ton cas, ca donne :

Cliquez pour afficher l'automatisation
automation:
  alias: Gestion Chauffe Eau
  description: ''
  trigger:
  - platform: state
    entity_id: binary_sensor.compteur_nuit
  condition: []
  action:
    - choose:
      - conditions: #Premiere condition vérifiéee
          #Allumage du chauffe-eau
          - condition: state
            entity_id: binary_sensor.compteur_nuit
            attribute: friendly_name
            state: "on"
        sequence:
          - type: turn_on
            device_id: 2981c65c301ba537ee6956be8b3ecd28
            entity_id: switch.on_off_chauffe_eau
            domain: switch
      - conditions: #Deuxième condition vérifiée (si vérification de la première échouée)
          #Extinction du chauffe-eau
          - condition: state
            entity_id: binary_sensor.compteur_nuit
            attribute: friendly_name
            state: "off"
        sequence:
          - type: turn_off
            device_id: 2981c65c301ba537ee6956be8b3ecd28
            entity_id: switch.on_off_chauffe_eau
            domain: switch
  mode: single

PS : Je trouve très bizarre que ce soit le friendly_name qui contienne l’état de ton interrupteur, mais j’ai codé l’automatisation en face des informations que tu as fournis.

PPS: Concernant le fait de le faire tous les deux jours, le plus simple à mettre en place est d’utiliser un calendrier spécifique dans Google, de lui définir un évènement intervenant tous les deux jours et durant toute la journée. En faisant ainsi, c’est Google qui gère le calcul des jours, tu peux décaler tout rapidement sans ouvrir un modèle Jinja. Du côté de HA, tu utilises l’entité correspondante au calendrier (calendar.chauffe_eau par exemple) qui est à l’état on quand c’est un jour correspondant à l’allumage du chauffe-eau.

PPPS: Certaines personnes préfèreront (toi aussi, peut être) ne pas utiliser de service tiers. Sache que déterminer tous les deux jours avec la même robustesse dans HA ne va pas être simple. C’est faisable bien sûr. Mais peut être voir si ce n’est pas plus simple avec Node-Red par exemple qui peut lui être utilisé en local. Personnellement, si je ne devais pas utiliser de service tiers dépendant d’internet, j’utiliserais un serveur MQTT pour stocker la dernier date de mise en route.

PPPPS (le dernier :wink:): Voici des articles sur le forum parlant des calendriers :

1 « J'aime »

Il y a aussi ça que tu peux adapter pour avoir la date du dernier déclenchement de ton automatisation :
https://forum.hacf.fr/t/calcul-intervalle-de-temps-en-jour-pour-notification/1697/4?u=clemalex

Ensuite, tu fais une condition pour savoir si cela fait 2 jours.

C’est le truc le plus simple que je vois pour avoir un truc robuste (car dans HA, quand tu redémarres, les entités initialisent leur date, donc pas évident, tu pourrais ne pas chauffer une journée, et là, la douche va être froide… :cold_face:)

1 « J'aime »

Ok merci a vous deux pour vos informations je ne connaissais un pas choose en déclarant juste state dans le trigger sans lui donner de valeur il lancera l’automatisation à chaque changement ?

Oui je préfère éviter un service tiers en ligne mais par contre peut être via un calendrier hébergé en local.

Ou alors via une entité de garage collection je devrais pouvoir le faire.

J’ai pensé à NodeRed bien sûr mais je voulais essayer avec le yaml. Il va falloir s’y mettre un jour hahaha

Merci a vous deux si vous avez une autre solution pour les deux jours je suis preneur je regarderai dans les Blue print sur le forum officiel qu’il y a quelques choses d’existant

Partir sur l’intégration Garbage Collection est une bonne idée, pour le faire de façon interne. :+1:

Ben alors après avoir attendu 00H00 mes automatisations ne se sont pas déclenchées pourtant le binary_sensor est bien passé à 1 puis 0 et quand je teste avec executer mes automatisations cela marche.

Bizarre

Tu peux fournir les automatisations que tu utilises ?

Malheureusement c’est trop tard, mais la prochaine fois regardes la date du dernier déclenchement afin de nous aiguiller.

Enfin, il ne faut pas faire sa mise au point ainsi… Il te faut créer la même logique mais avec des valeurs différentes…

Fournis pour commencer ton automatisation, ensuite je te montrerai comment faire la mise au point sans attendre minuit :sleeping:

Il n’y a pas de possibilité de passer par un cron qui lance un script ?

Ce n’est pas le principe d’un Automation ? :smirk:

1 « J'aime »

Bonjour,

Excellent ce garbage Collection, je ne connaissais pas.

Sinon, j’avais déjà cherché et pour être complètement en interne J’avais trouvé 2 soluces que j’aimais bien, mais pas encore testées.

1 - en passant par une carte : en détournant un peu en mettant les booleens sur on quand on le souhaitait.

2- Avec un template qui soustrait l’attribut last_changed de l’entité concernée à un sensor.time et un input_number
En remettant en timestamp ca doit le faire :wink: et il n’y a plus d’attribut last_changed pour le sensor.time je crois. A verifier

automation:
  trigger:
    platform: template
    value_template: "{{ ((states.sensor.time.last_changed - states.YOUR.ENTITY.last_changed).total_seconds() / 3600) >  states('input_number.hours') }}"

La premiere solution ne fait pas du tous les 2 jours…sinon faut mettre à jour tous les dimanche avec une automatisation en plus à côté :+1:

La deuxième solution, faut faire attention avec le last_changed car il est réinitialisé à chaque redémarrage… Fais une recherche sur le forum, dans un article, j’ai expliqué ma manière de faire pour sauvegarder ce temps justement pour les entités critique et dont le modèle depend.

Je pense sincèrement qu’il faille partir sur Garbage.

Pour information l’automatisation s’est lancé hier bon après le sonoff a cramé mdr (j’ai supprimé le friendly name dans mon automatisation.

Ou passer par Nodered en stockant le précédent déclenchement sur un topic MQTT ou sur une variable global de NR.

1 « J'aime »

Je ne pense pas que les automatisations soient basées sur le principe « cron ».
Quand je dis « cron », c’est un peu à ça que je pense:

Sinon pour le 1 jour sur 2, tu calcules le numéro de jour dans l’année, et tu conditionnes sur les jours pairs, non ? :wink:

1 « J'aime »

Pas bête ben j’attends un autre relais lol je vais voir pour un 20A

@McFly, tu peux tester avec ce sensor pour valider que le numéro du jour de l’année soit pair (state= oui) ou impair (state=non)

- platform: template
  sensors:
    pair:
      friendly_name: jour pair
      value_template: >-
        {% if now().strftime('%j')|int is divisibleby 2 %}
        oui
        {%- else -%}
        non
        {%- endif %}

image

1 « J'aime »

Je viens de le mettre en place. Merci bien

Je vais voir comment il se comporte.

Ma question et comment il fait le calcul ? via le jour de l’année (0 a 365) ou je jour du mois (1 au 31) ?

Car sinon cela veut dire aue dans les mois de 31 jours il est deux fois d’affilé en off

non, le numéro du jour de l’année commence à 1 le 1er janvier et fini à 366 le 31 décembre
Donc le 1er février sera le 32 eme jour de l’année et sera donc pair.
Tu n’auras aucune bidouille à faire

1 « J'aime »