Google Calendar - Lancer une action selon le libellé et l'heure d'un événement

Mon problème

Débutant en HA, j’ai pas encore le bon niveau côté syntaxe du yaml.
Je souhaite activer le chauffage netatmo en fonction d’un événement dans le calendrier (google calendar).
J’ai essayé de créer une automatisation via l’appli HA , j’ai identifié le déclencheur (calendar trigger), mis la bonne action (changé le mode de HAVC sur heat) mais je bloque sur la partie conditions
HA n’a pas l’air d’aimer mon code yaml

description: ""
mode: single
trigger:
  - platform: calendar
    event: start
    offset: "-0:30:0"
    entity_id: calendar.xxxxxxxxxxxxxx_gmail_com
condition:
  - condition: state
    entity_id:  calendar.device_automation_schedules
    state: 
   {{
       (state(summary) == "on") | iif("Travail")
   }}
action:
  - device_id: 13456789123456879123456789
    domain: climate
    entity_id: climate.rez_de_chaussee
    type: set_hvac_mode
    hvac_mode: heat
alias: "Chauffage si Travail"

et j’aurai donc besoin d’avis ou de conseil

Ma configuration

HA sous docker sous synology DSM7 sur un DS420+
Thermostat netatmo


[center]## System Information

version core-2023.1.4
installation_type Home Assistant Container
dev false
hassio false
docker true
user root
virtualenv false
python_version 3.10.7
os_name Linux
os_version 4.4.180+
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Dashboards
dashboards 1
resources 0
views 1
mode storage
Recorder
oldest_recorder_run 13 janvier 2023 à 18:32
current_recorder_run 17 janvier 2023 à 16:01
estimated_db_size 5.14 MiB
database_engine sqlite
database_version 3.38.5
[/center]

Hello

Regarde ici , cela te mettra sur la voie

Merci !
ceci dit, j’ai bien le calendrier , mais je n’ai pas le fichier google_calendars.yaml correspondant
j’ai donc essayé de rajouter ces 4 lignes dans mon fichier configuration.yaml
google:
client_id: !secret google_api_id
client_secret: !secret google_api_secret
track_new_calendar: true

Mais ça me met une erreur, que je mette les bonnes valeurs à la place de google_api_id et google_api_secret (avec ou sans guillemet) ou que je laisse les variables telles quelles, que je laisse !secret ou pas
Bref, suis-je une burne ? :slight_smile:

Avec la mise en forme tu devrais avoir

google:
  client_id: !secret google_api_id
  client_secret: !secret google_api_secret
  track_new_calendar: true

et ça veut pas dire la même chose.

oui, j’ai bien ça. Je connais un peu le python et son indentation :slight_smile:
Ce qui est en rouge, je le remplace par les valeurs ou je laisse telle quel ?
Si je laisse le code intact, j’ai l’erreur de vérif: Error loading /config/configuration.yaml: Secret google_api_id not defined

je me réponds à moi même:
Il y a un fichier secret.yaml dans lequel on peut définir des valeurs pour google_api_id et google_api_secret
J’ai donc mis les valeurs attendues …
J’ai pas la même erreur, mais ça fonctionne toujours pas !!

Si tu a déjà le calendrier :

je ne suis pas certain que tu ais besoin d’ajouter cette partie de la config

Perso ça, ça ne me plait pas:

  • l’indentation n’est pas bonne
  • la fonction state est mal écrite il manque les " sur summary
  • summary je suis pas certain que ça existe ici, c’est normalement une entité

Merci Pulpy
Vu que j’ai déjà le calendrier, je vais arrêter d’investiguer sur la partie config
Et revoir ma copie sur les conditions !

J’ai avancé
Plus d’erreur et ça a l’air de fonctionner … mais reste à circonscrire l’event à une heure donnée !
Voici le code yaml:

alias: Chauffage si travail
description: ""
trigger:
  - platform: calendar
    event: start
    offset: "-0:30:0"
    entity_id: calendar.xxxxxxxxxxxxxx_gmail_com
condition:
  - condition: template
    value_template: "{{ 'Travail' in trigger.calendar_event.summary }}"
action:
  - device_id: 21997295cec9b621e85f1e9276c8ad88
    domain: climate
    entity_id: climate.rez_de_chaussee
    type: set_hvac_mode
    hvac_mode: heat
mode: queued

Ceci dit, il me met la température à « Max » !!!
Y a du boulot quand on débute :wink:

Tu peux créer des ‹ vues › du calendrier

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- cal_id: xxxxxx@gmail.com
  entities:
    - device_id: télétravail
      name: Télétravail
      search: "#Télétravail"

ça crée tout ce qui contient télétravail

Pour le moment je cherche comment modifier un paramètre d’état:
la température max est définie à 30 (max_temp)…
J’ai beau le modifier via l’appli dans l’outil de développement/état, je me retrouve avec 30° quand j’exécute la routine …

Dans ton automatisation tu ne fais qu’une action : passer en mode chauffage. Donc forcément il ne fait rien d’autre

Là c’est les bases de HA qui manquent. La modification se fait via l’appel des services (tu peux t’entrainer dans outil de développement/service). La modification dans état est temporaire.

Merci de ton aide. je vais tatonner et m’instruire.

J’ai trouvé le service à déclarer.

service: climate.set_temperature
data:
  temperature: 20
  target_temp_high: 22
  target_temp_low: 16
  hvac_mode: heat
target:
  area_id: rez_de_chaussee
  device_id: 21997295cec9b621e85f1e9276c8ad88
  entity_id: climate.rez_de_chaussee

Comment je peux l’insérer dans l’action à faire dans le code du dessus ?
Je suppose que je dois le sauvegarder dans un fichier yaml spécifique

Si t’en a marre, n’hésites pas à me renvoyer un RTFM :smiley:

=> EDIT: trouvé. Suffit de le mettre dans la partie action !

Maintenant, me reste à vérifier l’automatisation quotidienne , mais ça, c’est une autre histoire !

1 « J'aime »

Tu peux faire plus simple

service: climate.set_temperature
data:
  temperature: 20
  hvac_mode: heat
target:
  entity_id: climate.rez_de_chaussee

Les valeurs min/max sont à définir une fois pour toutes (customize.yaml cf la doc)
A partir du moment où tu donnes l’entité, pas besoin de préciser son ID (qui est nettement moins facile à retenir)
Quant à la pièce (area), attention marcherai mais pour toutes entités climate qui s’y trouveraient… Dans ton cas, c’est pas forcément gênant 1 radiateur par pièce mais autant le savoir

Il semble que les conditions que j’ai mises ne fonctionnent pas. L’action se fait à chaque fois que je lance le test.
J’ai combiné trois conditions:

  1. avoir « travail » dans le google calendar
  2. être entre 5h et 8h
  3. être à la bonne heure pour lancer l’action
    Si je teste les conditions , la 1ère et la 3ème me renvoient une erreur « trigger is undefined » , ce qui m’empêche d’avancer (notamment pour gérer la 3ème qui est surement mal foutue !)
alias: Chauffage si travail
description: ""
trigger:
  - platform: calendar
    event: start
    offset: "-0:30:0"
    entity_id: calendar.xxxxxxxxxxxx_gmail_com
condition:
  - condition: and
    conditions:
      - condition: template
        value_template: "{{ 'Travail' in trigger.calendar_event.summary }}"
      - condition: time
        after: "05:30:00"
        before: "08:00:00"
      - condition: template
        value_template: >-
          {{ states(trigger.calendar_event.start) | timestamp_custom('%A %B %-d,
          %I:%M %p') == as_timestamp(states('sensor.date_time_iso')) |
          timestamp_custom('%A %B %-d, %I:%M %p')  }}
action:
  - service: climate.set_temperature
    data:
      temperature: 20
    target:
      area_id: rez_de_chaussee
      device_id: 21997295cec9b621e85f1e9276c8ad88
      entity_id: climate.rez_de_chaussee
mode: queued
max: 10

Est-le meilleur moyen de faire fonctionner un calendrier ? Notamment le fait de vérifier l’heure ?

J’entends pas là que quand une tache est planifiée, elle commence un jour/heure que HA sait déterminer (y compris avec un offset)… Du coup, au démarrage de la tache (-30 min), c’est le moment de faire les actions. Démarrage de la tache sera le trigger

platform: calendar
event: start
offset: "-0:30:0"
entity_id: calendar.teletravail

Le prochain déclenchement sera au prochain démarrage de la tache
Dans ton cas, la seule condition c’est que la tache est bien celle de « télétravail » (ce que j’ai fais en filtrant les calendriers, cf message d’hier)

Quand tu déclenches à la main trigger n’est pas le calendrier, donc trigger.calendar_event.start n’existe pas

J’ai besoin de vérifier l’heure (peut être pas celle de la 2ème condition, je suis d’accord) , mais le travail commence, soit à 7h, soit à 8h et je veux déclencher le chauffage 1h30 avant (je m’aperçois qu’il va falloir que je modifie l’offset)
J’ai pas tout compris sur ton filtre, je vais m’y pencher:
La vue, tu la mets où (cad dans quel fichier yaml)

Et ta tache dans le calendrier commencer à 7 ou à 8 …
Donc 1h30 avant le début, quelqu’il soit, c’est suffisant

Dans google_calendars.yaml

le fichier google_calendars.yaml doit-il être déjà présent ? Si oui, je ne l’ai pas, j’ai don cun bug, sinon, je vais le créer avec une vue

Encore merci pour ton temps et ton aide !