Sensors platform template convertion secondes en jour , chiffre après la virgule

Coucou !
j’ai du refaire l’integration de mon aspirateur roborock. mes sensors (par défaut à l’intégration ou ceux que j’ai crée) sont exprimés en secondes. donc ca donne : 952 687 secondes avant de changer la brosse, clairement c’est moche lol donc j’ai converti en jours.

donc en créant un sensor comme le code si dessous et en le divisant par 86400 j’ai mon résultat en jours. mais…mais… pas arrondi du tout lol

# convertion des unités 
  - platform: template
    sensors:
      cendrillon_brosse_principale_jour:
        friendly_name: 'cendrillon_brosse_principale_jour'
        value_template: "{{ states('sensor.cendrillon_brosse_principale')|float / 86400 |round(2) }}"
        unit_of_measurement: "j"

image

j’ai regarder ici sans trouver de soluce : [AIDE] Créer un sensor à partir d’un template - Entraide Home Assistant - Home Assistant Communauté Francophone (hacf.fr)

j’ai essayé round2 et round1 pensant que cela pouvait etre ca, mais en fait j’en sais rien lol et la doc (…en anglais…) ne me facilite pas la tache lol.

A partir de mon code ci dessus, que me manquerait il pour avoir 2 chiffres apres la virgule ou meme pas du tout. ca m’aiderai à comprendre :slight_smile: merci d’avance et bon week end à vous.

jybi

Salut,

Le convertir en jour c’est un peu moyen non?
24H d’utilisation du robot c’est beaucoup! :slight_smile:
J’ai ça pour passer en heures:

  - platform: template
    sensors:
      rocky_filter_left_h:
        value_template: "{{ ((states('sensor.rocky_filter_left') | float / 3600)) | round() }}"
        unit_of_measurement: "hours"

Hello,

De mon coté, j’ai bricolés un truc plus compliqué mais plus adaptatif (jours/heures/minutes) mais avec juste ce qu’il faut.
image

- platform: template
  sensors:
    robonect_operation_hours_friendly:
      value_template: >
        {% set time=states("sensor.robonect_operation_hours")|int(0)*60 %}
        {% set minutes = ((time % 3600) / 60) | int(0)%}
        {% set hours = ((time % 86400) / 3600) | int(0)%}
        {% set days = (time / 86400) | int(0)%}

        {%- if time < 60 -%}
          Moins d'un minute
        {%- else -%}
          {%- if days > 0 -%}
            {%- if days == 1 -%}
              1 jour
            {%- else -%}
              {{ days }} jours
            {%- endif -%}
          {%- endif -%}
          {%- if hours > 0 -%}
            {%- if days > 0 -%}
              {{ ', ' }}
            {%- endif -%}
            {%- if hours == 1 -%}
              1 heure
            {%- else -%}
              {{ hours }} heures
            {%- endif -%}
          {%- endif -%}
          {%- if minutes > 0 -%}
            {%- if days > 0 or hours > 0 -%}
              {{ ', ' }}
            {%- endif -%}
            {%- if minutes == 1 -%}
              1 minute
            {%- else -%}
              {{ minutes }} minutes
            {%- endif -%}
          {%- endif -%}
        {%- endif -%}

Une autre façon :

{% set Secondes = states("<domain>.<name>") | int(0) %}
{% set FormatTime = timedelta(seconds=Secondes)| replace("days", "Jours")  | replace("day", "Jour") %}
{{ FormatTime }}

Ce qui donne :

animate

1 « J'aime »

Sympa, je vais simplifer mon bidule
Et du coup, on peut gagner une étape :

{% set FormatTime = timedelta(seconds=Secondes)| replace("day", "Jour") %}

ça gardera le S s’il est là

Bonjour,

je rencontre également des problème pour arrondir un template sensors si je met 0 arrondi si je met 1 j’ai tout les chiffres , j’ai essayé avec round (1) ou() 0 tout les chiffres et avec round(default=0) pas de chiffre après la virgule et 1 tout les chiffres voir le code utilisé dan le fichier sensors ?
merci de votre aide (pour info sur le code je transforme un % en valeur:

- platform: template
    sensors:
      bat_daly:
        #name: "capacité batterie 10 kw"
        #id: cap_bat_10kw
        unit_of_measurement: kW
        value_template: "{{ states('sensor.battery_1_state_of_charge') |float /13.9 |round(default=1)}}"
        friendly_name: "capacité batterie-10kw"

Salut.

Il manque un (0) sur un de tes float et le default du round ne sert à rien (il faut une valeur)
Donc je partirai plus sur un truc du genre

{{ states('sensor.battery_1_state_of_charge') |float(0) /13.9 | round(1) }}"

Après le calcul ne semble pas ni donner un pourcentage, ni être issue d’une valeur en % (ou alors c’est pas une division…
Donc l’idée c’est d’avoir quoi au final ?
70% ? ( d’un batterie 10KW qui semble avoir une capacité max à 13.9 ?)

Salut,

le calcul c’est ma batterie est à 70 % et je transforme en KW en / cette valeur par 13.9 ce qui donne 5.035
70/13.9=5.035

je viens de tester toujours pareil = 5.61151079136691

OK donc avec 100% ça donner 7.19 (100/13.9)
et avec 0, ben 0…
ça représente quoi le 7.19 ?

Oui, sans pour autant l’expliquer parce que ça à l’air syntaxiquement juste ce que tu cherches à afficher pourrait aussi permettre d’adapter l’affichage

Sinon il faut partir sur le formatage d’un float

{{'%0.2f' | format(states('sensor.battery_1_state_of_charge')/13.9) }}

la capacité totale de ma batterie (16 s lifepo4 178 AH)) c’est un système solaire off grid et je récupère les infos via MQTT et solar assistant installé sur un RPI3

Donc 1f, 2f, 3f etc selon le nombre de décimales que tu veux… Voir mon message précédent
Perso une capacité affichée 7.19 au lieu de 100% mon coeur balance

fonctionne pas

ça fonctionne (cf ma capture), tu as juste un souci de format de division entre 2 types… ajoute un |float(0) après le state
{{'%0.2f' | format(states('sensor.battery_1_state_of_charge')|float(0)/13.9) }}

ça fonctionne bizarrement en mettant 2 j’ai un chiffre après la virgule et 3 3 chiffres


merci pour ton aide donc pour formater un nombre c’est la méthode ? car j’ai d’autres sensors de ce type à calculer

Le 1er cas, tu as 5.40 sans le zéro final je pense.
J’ai pas mieux à proposer sinon il faut tout faire en string/longueur fixe

merci cela me convient parfaitement :+1: