Sensors Oui/Non Calendrier

Bonjour,

Je voulais savoir quel était le moyen le plus simple ( et le plus propre) de créer un sensor qui serait à Oui/Non fonction du calendrier et horraire ? L’idée est d’afficher dans HA les horraires pour lesquels le bruit dehors est autorisé.

Est ce qu’il existe quelque chose déjà tout fait ? Ou alors je tente de bidouiller quelque chose avec un switch fictif et Scheduler composent ?

Bonne journée et bon week-end !

Salut,

Il faut bidouiller. Personnellement je ferai un template sensor/binary_sensor (plutot qu’un switch … c’est pas toi qui va l’activer)
Après, je m’aiderai d’un calendrier google (pour les jours férié) et un truc du genre

- platform: template
  sensors:
    jour_menage:
      friendly_name: Jour de Ménage
      value_template: >
        {%- if (as_timestamp(now()) >= as_timestamp(state_attr('calendar.menage','start_time'),0) and (as_timestamp(now()) <= as_timestamp(state_attr('calendar.menage','end_time'),0))) -%}
          En cours
        {%- elif now().strftime( '%Y-%m-%d') == state_attr('calendar.menage','start_time').split(" ")[0] -%}
          Aujourd'hui
        {%- else -%}
          Off
        {%- endif -%}

Avec un setup comme ça je dois maintenir un calendrier Google uniquement pour les jours férié ( remarque cela pourra sûrement être mutualisé avec d’autre.
Cela oblige en revanche à coder l’ensemble des timing dans le template, ou alors on gère tout direct dans un calendrier Google ?

Cordialement,

Le calendrier google, c’est effectivement pas perdu pour plein d’autres trucs.
Après template ou full calendrier c’est en fonction de ce que tu maitrises le plus.
Personnellement avec un truc du genre du lundi au samedi de 9h à 12h30 et de 14h à 18H30 + dimanche/ jour férié de 10 à 12h je ferai plus un template (+JF) mais bon c’est pas fondamentalement différent : ça fait une petite série de lignes de code

1 « J'aime »

J’ai suivi ton conseil et mis tout en template :

sensors:
  bruit_autorise:
    unique_id: bruit_autorise_barils
    friendly_name: Bruit/Travaux Exterieur
    value_template: >
      {% if (now().weekday() == 6 or state_attr('calendar.jours_feries_en_france','description').split("/n")[0] == "Jour férié") -%}
          {%- if (now().hour in (10,11) ) -%} Autorisé {%- else -%} Interdit {%- endif -%}
      {%- elif now().weekday() == 5 -%}
          {%- if (now().hour in (9,10,11) or now().hour in (15,16,17,18) ) -%} Autorisé {%- else -%} Interdit {%- endif -%}
      {%- else -%}
          {%- if (now().strftime("%T") >= "8:30:00" and now().strftime("%T") < "19:30:00" ) -%} Autorisé {%- else -%} Interdit {%- endif -%}
      {%- endif -%}
    icon_template: mdi:wrench

Est ce qu’il y a moyen d’avoir l’icone bleu/jaune en fonction du status ?
Question bonus : Est ce qu’il y a intérêt à mettre un trigger pour éviter de « recalculer » le sensor trop souvent ? Car si j’ai compris il update le sensor à chaque update des sous jacents, donc dans ce cas j’imagine qu’il s’update chaque seconde ? Je suppose que l’on pourrait limiter à une fois par minutes voir toute les 5/10min si l’on n’est pas tropcrigouri, non ?

Bonne soirée

Bien joué

Tu peux faire ça dans la carte directement.
Il y a plein d’exemples sur le forum

Question intéressante et je n’ai pas toutes les réponses car je ne sais pas comment est géré le recalcul. Ce que je constate juste c’est que ça n’a pas l’air de bouffer énormément de ressources

Bonjour,

Vous pourriez peut-être utiliser l’attribut « scan_interval: » (en seconde) pour limiter la fréquence de mise à jour de l’entité.

1 « J'aime »

@Pulpy-Luke : Top merci pour l’info je vais regarder sur le forum !
Dommage que ce ne soit que dans la carte et pas directement dans le sensor ( i.e : cela veut dire qu’il faut le refaire à chaque fois que l’on affiche le sensor quelque part ?)
Pour le recalcul, j’ai vu dans la doc que c’etait recalculé à chaque update des entités composant le template.

@mcp : Je vais tester ça !

Merci beaucoup à vous deux !

Hello,

Semblerait que scan_interval n’est pas valable pour les template ?

Désolé, je ne savais pas, personnellement je l’utilise avec un command_line et je sais que cela fonctionne avec d’autre « platform », mais je n’ai pas testé avec template.

@Pulpy-Luke : j’ai tenter d’ajouter dans customize la bonne fonction mais j’ai l’impression que ce n’est pas pris en compte dans lovelace :

sensor.bruit_autorise:
  templates:
    icon_color: >
      if (state == 'Autorisé') return 'yellow';
      return 'steelBlue';

J’ai mis cela dans un fichier customize.yaml et rajouté ceci dans mon configuration.yaml

homeassistant:
  customize: !include customize.yaml

Cela ne donne aucun effet, une idée ?

Tu as pas ajouter une icone en plus via l’ui ? Si c’est la cas, ça cache l’effet de la customisation
Regarde dans les outils dev

Aucune icône ajouté via l’UI en revanche j’en ai une dans le template, est ce que cela peut être bloquant ?

Tu peux la virer aussi

Et la mettre dans customize aussi du coup ?

essaye d’abord de la voir si ça affiche l’icone par défaut et si la couleur est ok

Hello,

Toujours pas de couleur…

L’état de l’entité semble pourtant logique :

friendly_name: Bruit/Travaux Exterieur
templates:
  icon_color: |
    if (state == 'Autorisé') return 'yellow'; return 'steelBlue';

J’ai pas l’accès facile à la main. Mais c’est pas plutôt le name qu’il faut (à la place du friendly name)?
Là à relire je suis pas sur que tu puisses retrouver l’entité sinon

Je confirme, c’est un souci de syntaxe yaml

binary_sensor.soleil_facade_ouest:
  templates:
    icon: >
      if (state === 'on') return 'mdi:sun-wireless-outline';
      return 'mdi:soundcloud';

Donc même combat pour la couleur, il faut le name !

Ah non j’ai bien la même chose dans mon fichier template, ce que j’affiche c’est la vue dans Outils de Développement.
Icon fonctionne bien mais pas icon_color
En revanche je suis en sensor et non binary_sensor