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 ?
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 ?
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
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 ?
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
@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.
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.
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
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