Comment integrer du Jinja2 dans une Automatisation?

Bonjour je cherche a integrer ce code dans une automatisation mais je ne sais pas comment faire ?

      {#--------------------------------------------------#} 
      {#-- Init --#}
      {#--------------------------------------------------#} 
      {#----- Heure en Minutes --------------#} 
      {% set TimeInMinutes = now().minute + now().hour * 60 %} 
      {#---- Levé de Soleil en Minutes ------#} 
      {% set SunriseInMinutes = ((states('sensor.sun_next_rising')|as_datetime|as_local).time()).minute + ((states('sensor.sun_next_rising')|as_datetime|as_local).time()).hour * 60 %} 
      {#---- Couché de Soleil en Minutes ----#} 
      {% set SunsetInMinutes = ((states('sensor.sun_next_setting')|as_datetime|as_local).time()).minute + ((states('sensor.sun_next_setting')|as_datetime|as_local).time()).hour * 60 %}

Salut,

En fait, il n’y a rien à faire que ce que tu fais là… Tu déclares 3 variables… mais tu n’en fais rien
La question en fait, est plus :

  • pour en faire quoi ?
  • vraiment dans une automatisation ?
1 « J'aime »

Tu as moyen de définir des variables dans tes trigger, et de les utiliser ensuite :

alias: AAAA sandbox
description: ""
trigger:
  - platform: state
    entity_id:
      - light.bureau
    variables:
      TimeInMinutes: "{{ now().minute + now().hour * 60 }}"
condition: []
action:
  - service: persistent_notification.create
    data:
      message: "{{ TimeInMinutes }}"
      title: DEBUG variable
mode: single

1 « J'aime »

@titoumimi , merci.
Dans les « action: » comment insérer du code jinja2 sur plusieurs lignes et garder le formatage des saut de lignes pour plus de lisibilité ?
J’ai essayé « service: <- » mais sans succès.

c’est dans l’autre sens :wink:

alias: AAAA sandbox
description: ""
trigger:
  - platform: state
    entity_id:
      - light.bureau
    variables:
      TimeInMinutes: |-
        {% if (now().isoweekday() == 1) %}
          {{ now().minute + now().hour * 60 }}
        {% else %}
          {{ now().minute + now().hour * 60 * 3 }}
        {% endif %}

(J’ai édité avec un exemple moins con)

1 « J'aime »

Si je peux abuser comment tu écrirais en full jinja2 ces instructions sans utiliser le TARGET :

action:
  - service: >-
      {% if states('cover.sde_volet') == 'closed' %} cover.open_cover {% endif
      %}
    target:
      entity_id: cover.sde_volet

Pour le coup, je ne suis pas certain de comprendre…
Tu veux n’executer ce script que si la condition est remplie ?
Si oui, utilise plutôt la condition de ton automatisation, non ?

action:
  - service: >-
      {% if states('cover.sde_volet') == 'closed' %} ouverture du volet {% endif
      %}

Mais je ne sais pas comment ecrire le « ouverture du volet »

Désolé, je ne saisis pas ce dont tu as besoin…
Tu veux pouvoir ouvrir ton volet s’il est fermé et réciproquement ?

Si oui, tu as cover.toggle qui existe comme service

Sinon, cover.open_cover et cover.close_cover sont les bonnes actions d’ouverture / fermeture…

Si je n’ai pas bon, n’hésite pas à expliquer précisément ce que tu veux, on va finir par y arriver :wink:

Désolé de t’embêter avec ca…Je viens de Domoticz en LUA.
J’ai pas mal de code assez complexe et YAML n’est pas assez complet pour moi et j’essaye de me passer de RedNode. :crazy_face:

j’essaye de retranscrire ce code :

  if (JourChome == 'false' and TimeInMinutes == VoletDontOpenBeforeInMinutes) then
  -------------------------------------------
  -- Il fait jour et c'est un jour travaillé
  ------------------------------------------- 
      if (otherdevices['Volet_salle_eau']) ~= 'Open' then
         commandArray['Volet_salle_eau']='On'
      end
      if (otherdevices['Volet_cuisine'] ~= 'Open' and otherdevices['Vacances'] == 'Off') then
         commandArray['Volet_cuisine']='On'
      end
      if (otherdevices['Volet_salon_rue']) ~= 'Open' then
         commandArray['Volet_salon_rue']='On'
  elseif (JourChome == 'true' and TimeInMinutes == VoletDontOpenBeforeNonWorkingDayInMinutes) then
  -------------------------------------------
  -- Il fait jour et c'est un jour Chomé
  -------------------------------------------  
      if (otherdevices['Volet_salle_eau']) ~= 'Open' then
         commandArray['Volet_salle_eau']='On'
      end
      if (otherdevices['Volet_cuisine'] ~= 'Open' and otherdevices['Vacances'] == 'Off') then
         commandArray['Volet_cuisine']='On'
      end
      if (otherdevices['Volet_salon_rue']) ~= 'Open' then      
         commandArray['Volet_salon_rue']='On'
         commandArray['Volet_salon_jardin']='On'
      end
  end

OK, donc de ce que je comprend, ce que je ferait :

Créer deux binary sensors, correspondant respectivement à :
– Il fait jour et c’est un jour travaillé
– Il fait jour et c’est un jour Chomé

paramètres → appareils et services → entrées → créer une entrée → template → modéliser un capteur binaire

tu leur donne un nom, et dans « Modèle d’état » tu met ton bout de yaml qui répond True ou False

Ensuite, tu crées une automatisation avec en déclencheur le changement d’état de ce sensor vers True
(dans l’exemple ci-dessous, j’utilise un input_boolean.sandbox_toggle à la place) qui va ressembler à ça :

alias: AAAA sandbox
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.sandbox_toggle
    to: "on"
condition: []
action:
  - service: cover.open_cover
    target:
      entity_id:
        - cover.sde_volet
        - cover.jardin
    data: {}
mode: single

Je ne pense pas qu’il soit nécessaire de vérifier l’état actuel du volet avant de lui demander de s’ouvrir (en tout cas pas avec les lampes, mais je n’ai pas de volets…), peut-être d’autres auront plus d’info…

Par contre, je vais passer mon tour pour node red :wink:

1 « J'aime »

Salut

Je confirme, un volet déjà ouvert qu’on demande à ouvrir, reste ouvert.
Y compris avec la gestion en position

2 « J'aime »

Tu peux te servir des conditions, ou des actions conditionnelles !

  • sans avoir à créé des binary sensors !

Mais effectivement il faut maitriser les automations ! un peu plus complexes !

1 « J'aime »

Faut pas me casser mon coup comme ça :wink:

Plus sérieusement, à un moment, je trouve que ça dépend du niveau de lisibilité / maintenance que tu souhaites obtenir… On pourrait tout mettre dans une seule automatisation, mais comme les conditions de déclenchement ne sont pas les mêmes, et que les actions à effectuer ne sont pas 100% identiques, je préfère splitter, plus facile de s’y retrouver à postériori :+1: (just my opinion hein :wink: )

1 « J'aime »

OK chacun ça façon de voir et de faire !
C’est seulement la création d’entité qui si elle ne serve que à cette automation, on peut se poser la question du pourquoi !