Automation démarrage clim en fontion de l'heure et d'une température

Salut,

Il faut être plus précis…
Si je reprends la première version de ton automatisation il y a :

  • 1 trigger sur le temps
  • 1 condition sur l’état de la clim
  • 1 condition sur l’heure
  • 1 condition sur la température < 22

Donc faire un reset d’un trigger sur la température je vois pas trop ce que c’est …
Le seul trigger dans l’histoire, c’est toutes les 30 minutes … donc les conditions sont revues à ce moment là.
Par ailleurs, ton automatisation ne prévoit pas QUE d’éteindre la clim :wink:

@Pulpy-Luke Salut, effectivement, désolé pour mes manques d’explications…

Alors j’ai modifié celle-ci comme ça :

id: '1656838750255'
alias: Climatisation Froid OFF (Dupliquer)
description: ''
trigger:
  - platform: time_pattern
    minutes: /30
  - platform: numeric_state
    entity_id: sensor.temperature_158d00011173c7
    below: '21.5'
    for:
      hours: 2
      minutes: 0
      seconds: 0
condition:
  - condition: state
    entity_id: input_select.clim_autom
    state: Froid
  - condition: time
    after: '16:00:00'
    weekday:
      - sun
      - sat
      - fri
      - thu
      - wed
      - tue
      - mon
action:
  - device_id: 25e1d689a405b351d7d1d8f664d2a612
    domain: climate
    entity_id: climate.salon_2
    type: set_hvac_mode
    hvac_mode: 'off'
  - service: notify.mobile_app_oneplus_8t
    data:
      message: 'Il fait assez frais (moins de 22°) 🥶 '
      title: Climatisation OFF ❄️
  - service: notify.telegram_groupe
    data:
      message: 'Il fait assez frais (moins de 22°) 🥶 '
      title: Climatisation OFF ❄️
mode: single

Toutes les 30min je check si la température est inférieur à 21.5 depuis 2h. Là je ne sais pas si c’est comme cela que je dois faire.
Si les 2 triggers sont ok, alors dans les conditions je regarde si le bouton pour le fonctionnement de celle-ci est bien sur ON et qu’il est 16h. Si tout est ok, j’éteins la clim et j’envoie une notif.

Voilà ce que je voudrais qu’il se passe. Là en fait la condition T° inf à xx° pendant xH ne fonctionne pas pour moi…et je ne comprends pas pourquoi.

Salut.

Donc toujours normal… Désormais tu as 2 triggers. A chaque variation de la température (moins de 21.5 pendant 2 heures) ainsi que toutes les 30 minutes.
Dans les triggers c’est un OU logique. Dès que l’un est OK alors l’automatisation teste les conditions.
Et de la même manière les triggers ne font pas partie des conditions une fois lancé.

Ce qui veut dire que toutes les 30 minutes (déclenchement d’un trigger) la notion de température inférieure à 21.5 n’existe pas.

Si tu veux que ce soit le cas avec un déclenchement toutes les 30 minutes il faut convertir le trigger température en une condition de température plutôt.
Le piège c’est de confondre la condition d’un trigger avec la condition de l’automatisation

La question reste entière cependant, la température est bien inférieure à 21.5 pendant 2 heures au moins chez toi ? Partage l’historique pour confirmer

Bonjour,
Ok je vois ce que tu veux dire.
Et bien ça dépend justement. Ce que je veux c’est lancer cette automation si la température est inf à 21.5 pendant 2h.
Donc par exemple si elle est inférieure à 21.5 pendant 2h et qu’il est plus tard que 16h, j’arrête, sinon je reteste cela toutes les 30minutes.
C’est ça que je veux faire …
Désolé mais encore newbee.
Merci

Salut.

Bon ben c’est pas plus clair pour moi…
Tu rereste quoi ? L’heure ? La température ? La température inférieure pendant 2 heures ? Jusqu’à quand ?

Je vois le problème, en réalité le trigger :

  - platform: numeric_state
    entity_id: sensor.temperature_158d00011173c7
    below: '21.5'
    for:
      hours: 2
      minutes: 0
      seconds: 0

devrait être une condition, pas un trigger… Ce qui se passe, c’est que si la température descend pendant 2 heures en dessous de 21.5°, mais qu’il est 15h59, le trigger se déclenchera bien, mais la condition 16h00 fera que l’action ne se déclenchera pas, et le piège est que le le trigger ne se redéclenchera plus, il ne sera 'réarmé ’ qu’à un moment futur où la température redeviendra supérieure à 21,5°C. A noter que les automatisations intègrent un mode ‹ trace › qui permet de voir les déclenchements et les conditions.

Il faudrait donc transformer le trigger en condition, le problème, c’est qu’on ne peut pas créer une condition avec un ‹ numeric_state › et une durée ‹ for › (en tout cas dans l’interface utilisateur).

J’ai eu le même cas et je l’ai résolu de façon un peu tarabiscotée avec l’utilisation d’une ‹ gate › que j’ouvre ou ferme quand ma condition de durée est atteinte.

De fait, c’est un peu complexe, mais c’est aussi pour ça que je préfère Node-Red aux automatisations, c’est plus facile et plus graphique pour arriver à une solution, dans ce cas là, plusieurs automatisations et une ‹ gate › dynamique dans un unique flow.

Le flow regroupe 3 automatisations:

  • Une automatisation qui ‹ ouvre › une ‹ gate › quand la luminosité dépasse 25000 depuis plus de 20 minutes
  • Une automatisation qui ferme la gate quand la luminosité est au dessous de 25000 depuis plus de 20 minutes
  • Une automatisation qui teste des conditions:
    • la gate est-elle ouverte ?
    • il est entre 15h00 et 18h30
    • la couverture nuageuse < 4
    • la température > 27
      etc.

==> si tout est OK, je mets mon volet en mode tamisé sur la position 42.

Donc je suis pas catégorique sur le fait de ne pas pouvoir mettre un for dans les conditions car je fais du nodered aussi mais c’est étonnant que cette notion n’existe pas…

De toutes façons c’est plutôt l’algo qui me semble mal formulé ici. Le trigger /30 me semble pas nécessaire avec par exemple de petites variations:

  • peu importe l’heure, dès qu’on a 2 heures consécutives en dessous de 21.5 on coupe ?
  • après 16h on ne fait plus de froid même si ça fait pas 2 heures consécutives ?

Il ne faut pas oublier que les triggers sont évalués toutes les minutes, donc forcer le déclenchement régulièrement /30 doit forcément s’accompagner d’une truc en plus par rapport à l’analyse des triggers les 29 minutes précédentes

Donc le for dans une condition c’est possible : l’ui le propose, mais pas partout ??!!


Il y a un spécialiste de l’ui/yaml pour les automatisations qui confirme ? @Clemalex ?

Oui, il y a le for pour le state, mais pas pour le numeric-state.

Exactement tu as compris…et j’ai essayé de mettre en condition, mais le « for » n’est pas possible…

Nodered je maîtrise pas désolé.

Il suffit de reprendre le même principe que ce que je fais en node-RED, c’est lourdingue, mais ça devrait marcher:

  • Un input_boolean à créer. Quand il est ON, ca veut dire que ça fait 2 heures que la température est en dessous de 21.5°, s’il est à OFF, ça n’est pas le cas. Ce trigger est géré par 2 automatisations:
  • Une automatisation avec un trigger : Si Température below 21.5° depuis (FOR) plus de 2 heures, alors action input_boolean = ON
  • Une automatisation avec un trigger: Si Température >= 21.5°, alors action input_boolean= OFF
  • Ton automatisation:
    Trigger toutes les 30 minutes: avec 3 conditions:
    • Si time > 16:00
    • Si Clim = ‹ Froid ›
    • Si input_boolean = ON
      Alors ton action, on éteint la clim et on envoie un message.
1 « J'aime »

Malheureusement non.

Votez pour ajouter la fonctionnalité :

La réponse au vote est sensiblement la même réponse que @FillR2 pour arriver à ses fins.

En automatisme, on essaie de ne pas travailler avec les entrées mais avec des transitions. Et ce sont ces transitions (plutôt leur états) qui influent sur une sortie.

Il faut essayer de faire la correspondance avec un grafcet.

Le plus dur à chaque fois (et qui est rarement fait) est de poser le grafcet de l’automatisation.

Bon courage

3 « J'aime »

Effectivement je me disais ça hier. Je vais donc partir sur cette voie. Merci !

Poser un grafcet, ça devrait aller. Je partir dans ce sens.
Merci !

1 « J'aime »

Bonjour, je suis en train de faire la modif.
Par contre on fait comment pour le >= dans la condition ? J’ai que above…

Il ne faut pas se prendre la tête, pour faire >= 21.5°, il suffit de faire above 21.4 :slightly_smiling_face:

1 « J'aime »

@FillR2 :man_facepalming:

Donc above 21.4 et below 21.5

Merci à toi

si tu mets ça, c’est plus bon pour 25.1 :sweat_smile: garde juste le above

1 « J'aime »

Bonjour @FillR2

Dans ton post où tu montres la capture d’écran de ton flow, pourrais tu partager l’export du flow? Je fais pas mal de node-red (peu ou pas d’automatisation HA) et j’aimerais savoir comment tu configures certain des noeuds de comparaison.

car je suis arrivé à faire marcher des trucs chez moi, mais j’ai l’impression d’avoir fait des usines à gaz, alors que je trouve ton flow assez élégant.

Merci d’avance.
Vincent

Le voilà:

[{"id":"0df17cb55cfd7cab","type":"group","z":"ea8b7ed34ae95eac","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["5526bef985bf46cc","9d298a7b5c8556b7","0a5955d64cb1f021","3f0428d370831ca3","b42912e903ed6137","344c88ed487ba6cb","63329616cb45d337","db3b23461118300d","70fa74f857392644","779434d951fa82b8","d058fe9fa948b920","397ecfc79c15a97b"],"x":34,"y":39,"w":1032,"h":362},{"id":"5526bef985bf46cc","type":"api-current-state","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"Octas < 4","server":"6e2e256a.eda18c","version":3,"outputs":2,"halt_if":"4","halt_if_type":"num","halt_if_compare":"lt","entity_id":"sensor.sensor_paris_20eme_arrondissement_cloud_cover_octas","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"msg.payload","valueType":"jsonata"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":160,"y":280,"wires":[["9d298a7b5c8556b7"],[]]},{"id":"9d298a7b5c8556b7","type":"api-current-state","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"wu_temp >= 27","server":"6e2e256a.eda18c","version":3,"outputs":2,"halt_if":"27","halt_if_type":"num","halt_if_compare":"gte","entity_id":"sensor.sensor_wu_current_temp","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"msg.payload","valueType":"jsonata"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":340,"y":280,"wires":[["d058fe9fa948b920"],[]]},{"id":"0a5955d64cb1f021","type":"time-range-switch","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"","lat":"48.856614","lon":"2.3522219","startTime":"14:00","endTime":"sunset","startOffset":"","endOffset":"-90","x":840,"y":80,"wires":[[],[]]},{"id":"3f0428d370831ca3","type":"within-time-switch","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"","nameInt":"","positionConfig":"77f0059917748173","startTime":"15:00","startTimeType":"entered","startOffset":0,"startOffsetType":"none","startOffsetMultiplier":60000,"endTime":"18:30","endTimeType":"entered","endOffset":0,"endOffsetType":"none","endOffsetMultiplier":60000,"timeRestrictions":0,"timeRestrictionsType":"none","timeDays":"*","timeOnlyOddDays":false,"timeOnlyEvenDays":false,"timeMonths":"*","timedatestart":"","timedateend":"","propertyStart":"","propertyStartType":"none","propertyStartCompare":"true","propertyStartThreshold":"","propertyStartThresholdType":"num","startTimeAlt":"","startTimeAltType":"entered","startOffsetAlt":0,"startOffsetAltType":"none","startOffsetAltMultiplier":60000,"propertyEnd":"","propertyEndType":"none","propertyEndCompare":"true","propertyEndThreshold":"","propertyEndThresholdType":"num","endTimeAlt":"","endTimeAltType":"entered","endOffsetAlt":0,"endOffsetAltType":"none","endOffsetAltMultiplier":60000,"withinTimeValueType":"msgInput","outOfTimeValueType":"msgInput","tsCompare":"0","x":390,"y":140,"wires":[["397ecfc79c15a97b"],[]]},{"id":"b42912e903ed6137","type":"api-current-state","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"","server":"6e2e256a.eda18c","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.volet_salle_a_manger_2","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"msg.payload","valueType":"jsonata"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":270,"y":360,"wires":[["344c88ed487ba6cb"]]},{"id":"344c88ed487ba6cb","type":"function","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"Current Position","func":"\nvar newMsg = { payload: msg.data.attributes.current_position };\nreturn newMsg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":360,"wires":[["63329616cb45d337"]]},{"id":"63329616cb45d337","type":"switch","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"Position Auto 99 ?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"99","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":770,"y":360,"wires":[["db3b23461118300d"]]},{"id":"db3b23461118300d","type":"api-call-service","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"Volet SaM 42","server":"6e2e256a.eda18c","version":5,"debugenabled":false,"domain":"cover","service":"set_cover_position","areaId":[],"deviceId":[],"entityId":["cover.volet_salle_a_manger_2"],"data":"{\"position\":42}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":970,"y":360,"wires":[[]]},{"id":"70fa74f857392644","type":"comment","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"Descendre le volet si chaleur","info":"","x":180,"y":80,"wires":[]},{"id":"779434d951fa82b8","type":"cron","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"Every 10 minutes","crontab":"*/10 * * * *","x":140,"y":140,"wires":[["3f0428d370831ca3"]]},{"id":"d058fe9fa948b920","type":"api-current-state","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"Temp biblio > 25","server":"6e2e256a.eda18c","version":3,"outputs":2,"halt_if":"25","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.ewelink_th01_bibliotheque_4b34a523_temperature","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"msg.payload","valueType":"jsonata"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":540,"y":280,"wires":[["b42912e903ed6137"],[]]},{"id":"397ecfc79c15a97b","type":"gate","z":"ea8b7ed34ae95eac","g":"0df17cb55cfd7cab","name":"Gate Lumi >=25000 pendant 20 minutes","controlTopic":"control","defaultState":"closed","openCmd":"open","closeCmd":"close","toggleCmd":"toggle","defaultCmd":"default","statusCmd":"status","persist":false,"storeName":"memory","x":820,"y":140,"wires":[["5526bef985bf46cc"]]},{"id":"6e2e256a.eda18c","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30},{"id":"77f0059917748173","type":"position-config","name":"Paris","isValide":"true","longitude":"0","latitude":"0","angleType":"deg","timeZoneOffset":99,"timeZoneDST":0,"stateTimeFormat":"3","stateDateFormat":"12"}]
1 « J'aime »