Forum Francophone Home Assistant

Action si incrémentation

bonsoir,

c’est bien mais ne fonctionne que si on est à 0 et que l’on a un appel
si le compteur est à 1 et que l’on a un autre appel l’automatisation ne se déclenche pas

je n’ai mis que ça :

platform: template
value_template: '{{ states(''sensor.freebox_missed_calls'') }}'

je n’ai jamais essayé les templates, je ne sait pas si il faut autre chose …?

Bonsoir,

Faut bien commencer un jour avec avec les templates :wink: tu vas voir c’est tres pratique, ca permet d’avoir des choses dynamiques.

Tu vas dans developer tools, onglet template, et tu mets ceci

{{ states.sensor.freebox_missed_calls }}

et cela va te donner dans le cadre de droite la valeur du sensor.freebox_missed_calls
Appelle toi et tu vas voir :wink:
L’idee est de savoir ce que cela te renvoie, 0 ou 1 ou X et ensuite comparer la valeur pour déclencher une notification par exemple

Tu peux aussi mettre ceci par exemple
{{ states.sensor.time }}

C’est la qu’il faut donc comparer, genre > 0 ou différent de 0

je vais essayer de te faire un ptit quelquechose

en fait cette commande ne retourne pas le nombre d’appels mais la liste aussi, c’est peut etre pour cela que ça ne fonctionne pas …

`

<template TemplateState(<state sensor.freebox_missed_calls=4; 2020-10-12T18:29:46+00:00=06000000, 2020-10-12T18:21:18+00:00=06000000, 2020-10-12T18:20:46+00:00=06000000, 2020-10-12T18:20:18+00:00=06000000, friendly_name=Appels manqués, icon=mdi:phone-missed @ 2020-10-12T20:29:51.943808+02:00>)>
`

Bonjour,

OK cela ne donne pas que le nombre.

Regarde dans « Developer Tools » -> onglet « States » de mémoire.
Choisis ton entité « sensor.freebox_missed_calls »
Et regarde dans le cadre si cela te met plusieurs lignes.
Si oui, tu dois pouvoir récupérer le nombre avec
states.sensor.freebox_missed_calls.attributes.toto

avec toto qui correspond au nom de l’attribut renvoyant le nombre d’appels.

Par exemple avec l’entité : sun.sun
Tu peux récupérer la valeur de « Next Sunset et Next Sunrise » comme ceci

states.sun.sun.attributes.next_setting
states.sun.sun.attributes.next_rising

En esperant quecela soit ca, sinon va falloir se creuser la tête :wink:

Avant que j’oublie.
L’idée serait de faire quelque chose comme ceci peut-etre :

binary_sensor:
  - platform: template
    sensors:
      missed_calls:
        friendly_name: Appels manques
        value_template: "{{ states.sensor.freebox_missed_calls | int > 0 }}"


# -> automation
- id: appels_manques_freebox
  alias: Appels Manqués Freebox 
  trigger:
    - platform: state
      entity_id: binary_sensor.missed_calls
      to: 'on'
  action:
   - service: notify.notify
     data:
       message: "Freebox - Appels manqués"

Bonjour,

Un doute m’envahit :wink:
Peux tu essayer avec ce template ci stp

{{ states('sensor.freebox_missed_calls)' }}

cela me retourne ‹ unknown error ›

par contre :

{{ states('sensor.freebox_missed_calls') }}

me retourne bien ‹ 4 ›
ton apostrophe n’était pas au bon endroit a la fin mais le reste :+1:

2 J'aimes

alors l’automatisation ne fonctionne pas,
j’ai bien mon compteur d’appels qui s’incrémente
mais le [binary_sensor.missed_calls] reste à off
le {{ states.sensor.freebox_missed_calls | int > 0 }} reste à false, même après un nouvel appel
et {{ states(‹ sensor.freebox_missed_calls ›) | int > 0 }} rest à true tout le temps…

pas si facile alors ma problématique ??

Salut,

au cas ou as tu rechargé les automations ?

Salut,

On progresse :wink:
Désolé pour l’erreur de syntaxe :wink:

Tes appels manqués ne repassent jamais à 0 en fait ? A quel moment repassent-t-ils à 0 s’ils repassent.
Ce qui explique que ceci {{ states(‹ sensor.freebox_missed_calls ›) | int > 0 }} reste à true

Est-ce que tu as d’autres sensors pour la FREEBOX ? Et des services ?

Je n’ai jamais dit que ca allait être facile !

Autre idée si cela ne se remet pas à 0 :

  • recupérer la valeur de « OLD » missed_calls dans une variable
  • la comparer à new missed calls

oui effectivement je pense que ce serait mieux de passer par une variable et de comparer
en tout cas, je pensais que c’était plus simple et qu’il y avait une astuce connue pour cela !

mon compteur d’appels manqués est remis a 0 uniquement quand je vais dans mon interface freebox pour supprimer les appels manqués, je n’ai même pas trouvé de commande pour faire cela depuis HA
donc sur une journée ou plusieurs jours d’absence, je peux très bien avec 1 ou plusieurs appels et donc la seule solution est de savoir si on incrémente pour savoir qu’il y a eu un nouvel appel…

Et tu n’as aucun autre sensor ou service pour la FREEBOX ?

rien d’utile dans notre cas,
juste les températures CPU, vitesse de téléch, activation du wifi…

mais l’idée de passer par une variable est bonne, comment on peut affecter ma valeur d’appels actuels a une variable et comment on peut comparer la variable à mon compteur dans une automatisation, c’est tout ce qu’il manque …

j’ai essayé cela ce matin mais erreur :

entity_id: input_number.memo_appels
value: {{ states('sensor.freebox_missed_calls') | int }}

ou

entity_id: input_number.memo_appels
value: {{ states('sensor.freebox_missed_calls') | float }}

Bonsoir,
Je posais la question pour rester le plus KISS possible, si jamais un sensor ou service nous rendait la tâche plus facile :wink:

Je pensais à une autre variable, mais bonne idée pourquoi pas en detournant les input_number !

Dans configuration.yaml, mets ceci :

input_number:
  freebox_missed_calls:
    name: Freebox_Missed_Calls
    mode: box
    initial: {{ states('sensor.freebox_missed_calls') | int }}
    min: 0
    max: 100

Recharge tes input numbers

Dans « Developer tools », vérifie si la valeur du « input number » correspond à celle de sensor.freebox_missed_calls.
Je ne sais pas si le initial prend les template

{{ states('input_number.freebox_missed_calls') | int }}

Il n’a pas aimé :

Error loading /config/configuration.yaml: invalid key: « OrderedDict([(« states(‹ sensor.freebox_missed_calls ›) | int », None)]) »
in « /config/configuration.yaml », line 64, column 0

Bonjour et bon dimanche :wink:

Ah ben il n’aime pas les template en « initial » alors comme ceci, on ne devrait pas être loin de la vérité :wink:

input_number:
  freebox_missed_calls:
    name: Freebox_Missed_Calls
    mode: box
    initial: 0
    min: 0
    max: 100

Automations

- id: initialisation_input_number.freebox_missed_calls
  alias: "Initialisation Input Number Freebox Missed Calls"
  trigger:
    platform: template
    value_template: "{{ (states('input_number.freebox_missed_calls') | int) < (states('sensor.freebox_missed_calls') | int) }}"
  action:
  - service: input_number.set_value
    data:
        entity_id: input_number.freebox_missed_calls
        value: "{{ states('sensor.freebox_missed_calls') | int }}"

- id: notification_freebox_missed_calls
  alias: "Notification Freebox Missed Calls"
  trigger:
    platform: template
    value_template: "{{ (states('sensor.freebox_missed_calls') | int) > (states('input_number.freebox_missed_calls') | int) }}"
  action:
  - service: notify.notify
    data:
      message: "Freebox Appels Manqués ({{ now().strftime('%d.%m.%Y - %H:%M') }})"
  - service: input_number.set_value
    data:
        entity_id: input_number.freebox_missed_calls
        value: "{{ states('sensor.freebox_missed_calls') | int }}"

bonsoir,

:+1: :+1: :+1:

alors la tu es au top !
là, tu m’a perdu, j’avoue que la j’ai fait un copier coller, je vais mettre pas mal de temps a analyser tout cela pour comprendre comment cela fonctionne … avec en plus l’heure du dernier message dans l’alerte

mais CA MARCHE !

un grand merci a toi !

1 J'aime

Ca fonctionne alors ? Parfait :wink:

Je vais t’expliquer, ca va le faire !

Le « Input_number » :

freebox_missed_calls: # NOM à appeler dans les scenes, automations ou autres : imput_number.freebox_missed_calls
    name: Freebox_Missed_Calls # Nom qui apparait dans l'interface je suppose
    mode: box # il existe 2 modes : BOX (tu dois avoir une case avec le chiffre dedans ou "SLIDER" 
    initial: 0 # NOMBRE de base dans le INPUT NUMBER, optionnel
    min: 0 # NOMBRE MINI à indiquer (debut de la fourchette), OBLIGATOIRE
    max: 100 #NOMBRE MAX, (fin de la fourchette, OBLIGATOIRE

J’ai spécifié le « Initial » à 0 pour la 1ere automatisation ci-dessous, tu vas comprendre

- id: initialisation_input_number.freebox_missed_calls # mettre un id permet de modifier l'automatisation depuis l'interface HA
  alias: "Initialisation Input Number Freebox Missed Calls" # Petit nom ;-)
  trigger: # Déclencheur de l'automatisation 
    platform: template # permet d'utiliser les template soit le rendre dynamique
    value_template: "{{ (states('input_number.freebox_missed_calls') | int) < (states('sensor.freebox_missed_calls') | int) }}" # SI la VALEUR de l'input_number est < à la valeur du sensor (le input ne peut pas etre inferieur au sensor, puisque le sensor est la valeur de comparaison de base) ALORS :
  action: # ACTION easy
  - service: input_number.set_value # NOM du SERVICE permettant de modifier la valeur de l'input number
    data:
        entity_id: input_number.freebox_missed_calls # NOM d el'input à modifier
        value: "{{ states('sensor.freebox_missed_calls') | int }}" # VALEUR que doit prendre l'input, soit la valeur du sensor

2eme automatisation : SI lavaleur du sensor est > à la valeur du input_number c’est qu’il y a un appel manqué ALORS on notifie et la valeur du sensor remplace celle du input_number

- id: notification_freebox_missed_calls
  alias: "Notification Freebox Missed Calls"
  trigger:
    platform: template
    value_template: "{{ (states('sensor.freebox_missed_calls') | int) > (states('input_number.freebox_missed_calls') | int) }}" # CMPARAISON de la valeur du SENSOR avec la valeur du INPUT_NUMBER, si sensor > au input alors existence d'un appel manqué
  action:
  - service: notify.notify # Service de NOTIFICATION
    data:
      message: "Freebox Appels Manqués ({{ now().strftime('%d.%m.%Y - %H:%M') }})" # MESSAGE de la notif now() renvoie la date et l'heure; strftime() permet de la formater comme on le souhaite.
#%d : jour du mois,  %m: mois en chiffres, %Y : année sur 4 chiffres
  - service: input_number.set_value #SERVICE permettant de modifier la valeur d'un input_number
    data:
        entity_id: input_number.freebox_missed_calls # input_number concerné par la modification
        value: "{{ states('sensor.freebox_missed_calls') | int }}" # VALEUR que doit prendre le input_number, soit la nouvelle valeur du SENSOR

En espérant que l’ajout des commentaires t’aide un peu plus, sinon, pas d’hésitation, pose tes questions, je n’ai peut-etre pas été assez clair.

HAVE FUN

1 J'aime

parfait,

merci pour ces explications,
ça me parait assez clair

a l’occasion je tenterai d’autres templates …

merci encore !

1 J'aime