Transformer l'uptime en date de démarrage

Bonjour,
dans les cartes synlology / raspberry / livebox et autres de notre ami @WarC0zes
l’uptime s’affiche comme ceci:

entities:
  - entity: sensor.ds920_dernier_demarrage
    name: Uptime
    format: total

image

mais mes routeurs ne me donnent que l’uptime en secondes :

{{ states('sensor.ds920_dernier_demarrage') }}                 2024-04-10T11:31:24+00:00
{{ states('sensor.sagem_emta62_2_temps_de_fonctionnement') }}  118780
{{ now() }}                                                    2024-04-18 18:20:09.212570+02:00

Si je comprend bien, il faut que je transforme mon uptime en date, du style now - uptime mais
{{ (now() - states('sensor.sagem_emta62_2_temps_de_fonctionnement') ) }} ca passe pas…
mais…
en plus, j’ai besoin de ne l’exécuter qu’une fois, pas la peine de garder des variables en rab, non ?

alors, vous avez une idée pour calculer mon sensor.sagem_dernier_demarrage ??


Salut,
j’avais fais ce template sensor pour un uptime d’un esp qui est en secondes. Depuis je suis passer par un lambda sur esphome :stuck_out_tongue:

      - name: Bluetooth Proxy Uptime Readable
        state: >-
          {% set uptime = states.sensor.atom_bluetooth_proxy_ad7a6c_ble_proxy_uptime.state | int(0) %}
          {% set jours = (uptime / 86400) | int(0) %}
          {%- if jours > 0 -%}
            {{ jours }} jours, {{ (uptime - (jours * 86400)) | int(0) | timestamp_custom('%H:%M:%S', false) }}
          {%- else -%}
            {{ uptime | int(0) | timestamp_custom('%H:%M:%S', false) }}
          {%- endif -%}
        unique_id: bluetooth_proxy_uptime_readable

1 « J'aime »

Hello,

j’ai peut être avancé, mais…

voila mes templates

    ##### For Boot time gateways ######################################
    - name: SAGEM EMTA62-2 Last Boot
      state: >-
        {% set timeb = as_timestamp(now())|int - states.sensor.sagem_emta62_2_temps_de_fonctionnement.state | int(0) %}
        {{ timeb | timestamp_custom('%Y-%m-%d %H:%M:%S+02:00') }}
      unique_id: sagem_emta62_2_last_boot
    - name: Orange Livebox Last Boot
      state: >-
        {% set timec = as_timestamp(now())|int - states.sensor.orange_livebox_temps_de_fonctionnement.state | int(0) %}
        {{ timec | timestamp_custom('%Y-%m-%d %H:%M:%S+02:00') }}
      unique_id: orange_livebox_last_boot
##### END Boot time gateways ######################################

Alors, j’ai mis dans la carte l’entrée dernier démarrage de mon DS920 et celle que j’ai fabriquée et ca donne çà:

donc, c’est pas bon…

Ca donne quoi en résultat ?

{{ states('sensor.sagem_emta62_2_temps_de_fonctionnement') | relative_time }}
{{ states('sensor.orange_livebox_temps_de_fonctionnement') | relative_time }}

471660
60102
soit la meme chose que sans le « relative time »

Salut

Le problème c’est que tu mélanges des timestamp, datetime et valeur
D’ailleurs je suis sur que si tu testes cette ligne dans les outils de dev, il te le dit.

Essayes comme ça si tu as un résultat :

{{ now()| as_timestamp - states('sensor.sagem_emta62_2_temps_de_fonctionnement') | as_timestamp ) }}

Et ensuite si c’est bon :

{{ ( now() | as_timestamp - states('sensor.sagem_emta62_2_temps_de_fonctionnement') | as_timestamp ) | as_datetime | as_local }}
1 « J'aime »

Oui, j’ai bien une erreur TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'str'

mais comment retirer des secondes à une date ??? :exploding_head:

J’ai complété mon message j’avais envoyé par erreur

En convertissant et la date et la str en timestamp

{{ now()| as_timestamp - states('sensor.sagem_emta62_2_temps_de_fonctionnement') | as_timestamp ) }}
TemplateSyntaxError: unexpected ')'

{{ as_timestamp(states.sensor.sagem_emta62_2_temps_de_fonctionnement) }} ValueError: Template error: as_timestamp got invalid input '<template TemplateState(<state sensor.sagem_emta62_2_temps_de_fonctionnement=473279; unit_of_measurement=s, friendly_name=SAGEM EMTA62-2 Temps de fonctionnement @ 2024-04-22T20:49:07.521168+02:00>)>' when rendering template '{{ as_timestamp(states.sensor.sagem_emta62_2_temps_de_fonctionnement) }}' but no default was specified

Merci, ca a solutionner un soucis de mon coté ou je chercher une solution.

{{ now()| as_timestamp - states('sensor.sagem_emta62_2_temps_de_fonctionnement') | as_timestamp }}

Il y’a une paranthèse en trop à la fin. J’ai un peu de mal avec les copier coller sur tablette :crazy_face:

C’est toujours compliqué les dates dans les calculs. Chaque fois je fais 50 lignes dans les outils de dev pour arriver à ce que je veux

1 « J'aime »

{{ now()| as_timestamp - states('sensor.sagem_emta62_2_temps_de_fonctionnement') | as_timestamp }}

ValueError: Template error: as_timestamp got invalid input '473909' when rendering template '{{ now()| as_timestamp - states('sensor.sagem_emta62_2_temps_de_fonctionnement') | as_timestamp }}' but no default was specified

{{ now()| as_timestamp - states('sensor.sagem_emta62_2_temps_de_fonctionnement')| int }}

Essai ça alors

ca me répond que c’est un nombre
1713338476.914191

Ok et comme ça

{{ ( now() | as_timestamp - states('sensor.sagem_emta62_2_temps_de_fonctionnement') | int ) | as_datetime | as_local }}

là c’est un string
2024-04-17 09:21:23.147889+02:00

Oui mais est ce que c’est la date que tu voulais ?