Nettoyage 1 seule fois par jour Robot Aspirateur

Bonjour,

Mon problème me semble assez simple, mais je n’ai pas trouvé seul.
J’ai une automatisation qui lance mon Robo aspirateur lorsque j’active mon alarme et repart à la base lorsque je désactive l’alarme.
Ça marche parfaitement

Mais j’aimerais que l’automatisation (si le robot a nettoyé plus d’une heure) ne puisse pas se relancer de la journée.

J’ai mis un délai de 12h, mais ça ne me convient pas, j’aimerais que ce soit une fois par jour.

alias: "Alarme Ajax: Activé: Lancer Roborock"
description: ""
trigger:
  - platform: state
    entity_id:
      - alarm_control_panel.etats_alarme_ajax
    to: armed_away
    for:
      hours: 0
      minutes: 0
      seconds: 0
    from: disarmed
condition: []
action:
  - service: vacuum.start
    data: {}
    target:
      entity_id: vacuum.roborock_s5_4314_robot_cleaner
  - delay:
      hours: 12
      minutes: 0
      seconds: 0
      milliseconds: 0
mode: single

EDIT: Je viens d’avoir une idée. Je vous la poste ce soir pour avoir vos avis :ok_hand:

Voilà ma solution.
J’ai fait des tests, elle semble fonctionner.

Je lance le robot lorsque l’alarme est activée si l’interrupteur virtuel « input_boolean.activation_aspirateur » est sur Off. Ce qui veut dire que l’aspirateur n’est pas passé de la journée.
J’ajoute un délai de 1h30 puis je mets sur OFF l’interrupteur « input_boolean.activation_aspirateur ».
J’ai mis l’automatisation en mode Restart. Comme ça, si je rentre à la maison avant le délai de 1h30 l’interrupteur ne se met pas sur OFF et l’aspirateur peut redémarrer.

alias: "Aspirateur: Lancer Nettoyage Auto"
description: ""
trigger:
  - platform: state
    entity_id:
      - alarm_control_panel.etats_alarme_ajax
    to: armed_away
    for:
      hours: 0
      minutes: 0
      seconds: 0
    from: disarmed
condition:
  - condition: state
    entity_id: input_boolean.activation_aspirateur
    state: "off"
action:
  - service: vacuum.start
    data: {}
    target:
      entity_id: vacuum.roborock_s5_4314_robot_cleaner
  - delay:
      hours: 1
      minutes: 30
      seconds: 0
      milliseconds: 0
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.activation_aspirateur
mode: restart

J’ai une deuxième automatisation, qui me passe l’interrupteur sur OFF à 6h30 chaque matin pour permettre à l’aspirateur de lancer un cycle à mon départ.

alias: "Aspirateur: Passage OFF Aspirateur Passe"
description: ""
trigger:
  - platform: time
    at: "06:30:00"
condition: []
action:
  - service: input_boolean.turn_off
    data: {}
    target:
      entity_id: input_boolean.activation_aspirateur
mode: single


Puis une 3eme automatisation pour le retour à la base à mon retour (arrêt d’alarme).
Je le mets dans un premier temps en pause pendant 7min.
Si l’alarme est encore désactivée après les 7 min l’aspirateur rentre à la base sinon il continue le nettoyage.
Ça me permet de ne pas perdre le cycle de nettoyage si je dois revenir à la maison un court instant.

alias: "Aspirateur: Retour Base Roborock"
description: ""
trigger:
  - platform: state
    entity_id:
      - alarm_control_panel.etats_alarme_ajax
    to: disarmed
    for:
      hours: 0
      minutes: 0
      seconds: 0
condition: []
action:
  - service: vacuum.stop
    data: {}
    target:
      entity_id: vacuum.roborock_s5_4314_robot_cleaner
  - delay:
      hours: 0
      minutes: 7
      seconds: 0
      milliseconds: 0
  - if:
      - condition: state
        entity_id: alarm_control_panel.etats_alarme_ajax
        state: armed_away
    then:
      - service: vacuum.start
        data: {}
        target:
          entity_id: vacuum.roborock_s5_4314_robot_cleaner
    else:
      - service: vacuum.return_to_base
        data: {}
        target:
          entity_id: vacuum.roborock_s5_4314_robot_cleaner
mode: single

Vous voyez des choses à améliorer ?

Merci :smiley:

Salut,

Sur le principe, le booleen, c’est le meilleur moyen.
Par contre ta 3ème automatisation est étonnante… Pourquoi attendre 7 minutes et vérifier si l’alame a changé d’état (depuis le déclenchement) ?

1 « J'aime »

Salut,

Dans ton premier message tu parlais de voir 'il avait tourné pendant une certaine durée.
Au cas où, ça se fait avec history_stats. Ca te permet de créer une entité qui garde en mémoire par exemple dans ton cas pendant combien de temps ton robot était en état nettoyage sur les 24 dernières heures.
Tout est expliqué dedans.

1 « J'aime »

Vos deux messages sont intéressants, merci.

la 3eme automatisation:

À mon arrivée, l’alarme se désactive et le robot se met en pause.
Il attend 7 min et si l’alarme est encore désactivée (ce qui veut dire que je suis là), alors il repart à sa base.
Si par contre l’alarme est de nouveau armée avant ces 7min (ce qui veut dire que je ne suis repartie), alors il reprend son nettoyage ou il en etait.

Les 7 min d’attente, me permet de faire attendre mon robot sur place pour ne pas perdre son cycle de nettoyage en repartant direct a sa base. Comme ca, si je suis juste revenu a la maison 5 min, il reprend où il c’est arrêté a mon départ.

Tu vois une autre solution plus pratique?

Merci Alex, je ne connaissais pas.
Du coup j’ai mis un timer de 1h30 qui pour le coup me convient tout autant :wink:

1 « J'aime »

Oui effectivement, l’history_stat est intéressant par exemple au démarrage d’une automatisation, si tu ne veux éviter de relancer un appareil qui a déjà fait son bouleau.

Attention à tout ce qui est délais trop longs dans les automatisations.
Car durant tout ce temps l’automatisation reste active, dans ton cas ça ne pose surement pas de soucis vu que tu ne sera pas à la maison, mais si par exemple tu redémarres HA en plein milieu, c’est perdu.

1 « J'aime »

Tu peux aussi utiliser un inputdatetime.

Conditions:

{{
  not is_state_attr('input_datetime. Robot_last_notification_sent', 'day', now().day) 
}}

Puis dans action:

service: input_datetime.set_datetime
entity_id: input_datetime.robot_last_notification_sent
data_template:
  date: "{{ now().strftime('%Y-%m-%d') }}"

Traduction tu inscrit que le robot est déjà passé a un moment donné et l’heure est inscrit.
La condition vérifie si le passage du robot a déjà eu lieu ce jour et refuse le déclenchement de l’action a nouveau.
C’est a modifier a ta guise l’avantage c’est la connaissance précise de son dernier passage😉

1 « J'aime »

Merci pour votre aide! :kissing_heart:

Ça commence à être compliqué pour mon petit niveau :sweat_smile:.
Je suis en train de creuser le sujet, mais j’ai un peu de mal. Le code et moi … :face_with_peeking_eye:

@AlexHass Tu viens de m’alerter sur le fait que j’ai utilisé un delay ultra long sur une automatisation de poubelle…
Je vais créer un second sujet pour ne pas polluer celui-là :wink: