Something like this ?
EDIT: this doesn’t update in template editor, not sure if it will when it’s a sensor ?
EDIT: yes it does, every minute
EDIT 2: just added the default uptime sensor, the entity in lovelace already shows the time in hours and mins
- platform: template
sensors:
ha_uptime:
friendly_name: "Home Assistant uptime"
value_template: >-
{% set up_time = as_timestamp(now()) - as_timestamp(states('sensor.ha_uptime')) %}
{% if up_time == 0 %}
Just restarted...
{% else %}
{% set minutes = (up_time // 60) | int %}
{% set hours = (minutes // 60) %}
{% set days = (hours // 24) %}
{% set weeks = (days // 7) %}
{% set minutes = (minutes % 60) %}
{% set hours = (hours % 24) %}
{% set days = (days % 7) %}
{% macro phrase(value, name) %}
{%- set value = value %}
{%- set end = 's' if value > 1 else '' %}
{{- '{} {}{}'.format(value, name, end) if value | int > 0 else '' }}
{%- endmacro %}
{% set text = [ phrase(weeks, 'week'), phrase(days, 'day'), phrase(hours, 'hr'), phrase(minutes, 'min') ] | select('!=','') | list | join(', ') %}
{% set last_comma = text.rfind(',') %}
{% if last_comma != -1 %}
{% set text = text[:last_comma] + ' and' + text[last_comma + 1:] %}
{% endif %}
{{ text }}
{% endif %}
5 Likes
TUISTERa
(Georgi Popov)
December 14, 2020, 12:06pm
23
If this sensor is just a timestamp I don’t think it is correct to be named uptime anymore… May be last_start or something like that… It’s just inactive date without change until next restart… Nothing to do with uptime. At least the documentation need template example on how to actually use the sensor.
Had to change sensor.ha_uptime to sensor.uptime as that is what my uptime sensor is called. But it works!
Agree with the above, it’s not really uptime anymore unless you build a sensor like mine.
First, this is not my code, I got if from @Jasper8472 .
Looks ok, you did reload the template entities ?
Have you got a sensor called sensor.uptime ?
Maybe try and copy the template into the template editor and see if it works ?
remove platform: uptime
from your sensor.
You’ve inserted it twice.
Panchez
December 15, 2020, 9:54am
31
Hi!
Same problem after last update.
- platform: uptime
name: Uptime
scan_interval: 60
- platform: template
sensors:
uptime_ha:
friendly_name: 'Uptime Home Assistant'
icon_template: mdi:home-assistant
value_template: >-
{% set up_time = as_timestamp(now()) - as_timestamp(states('sensor.uptime')) %}
{% if up_time == 0 %}
Только запущен...
{% else %}
{% set minutes = (up_time // 60) | int %}
{% set hours = (minutes // 60) %}
{% set days = (hours // 24) %}
{% set weeks = (days // 7) %}
{% set minutes = (minutes % 60) %}
{% set hours = (hours % 24) %}
{% set days = (days % 7) %}
{% macro phrase(value, name) %}
{%- set value = value %}
{%- set end = 's' if value > 1 else '' %}
{{- '{} {}{}'.format(value, name, end) if value | int > 0 else '' }}
{%- endmacro %}
{% set text = [ phrase(недель, 'неделю'), phrase(дней, 'день'), phrase(часов, 'ч.'), phrase(минут, 'мин') ] | select('!=','') | list | join(', ') %}
{% set last_comma = text.rfind(',') %}
{% if last_comma != -1 %}
{% set text = text[:last_comma] + ' и' + text[last_comma + 1:] %}
{% endif %}
{{ text }}
{% endif %}
In template it is work
in condition no
before that there was another template, it also stopped working, started looking for others, but all to no avail.
Don’t think you need scan_interval
as it only updates on start
Also, you have translated the variables in the set text line:
{% set text = [ phrase(недель, 'неделю'), phrase(дней, 'день'), phrase(часов, 'ч.'), phrase(минут, 'мин') ] | select('!=','') | list | join(', ') %}
Should be:
{% set text = [ phrase(weeks, 'неделю'), phrase(days, 'день'), phrase(hours, 'ч.'), phrase(minutes, 'мин') ] | select('!=','') | list | join(', ') %}
2 Likes
robi
(Robert)
December 15, 2020, 6:39pm
35
Since Home Assistant 2020.12.0, to know the minutes since HA started (to avoid automations run at startup) a fix for uptime:
- platform: uptime
name: 'HA uptime moment'
- platform: template
sensors:
ha_uptime:
friendly_name: 'HA uptime minutes'
value_template: >
{{ (as_timestamp(now()) - as_timestamp(states('sensor.ha_uptime_moment'))) / 60 }}
Then in automations, use
condition:
- condition: numeric_state
entity_id: sensor.ha_uptime
above: 10
6 Likes
galewis
(Grant L)
December 15, 2020, 11:11pm
36
For minutes I think that should be
value_template: >
{{ (as_timestamp(now()) - as_timestamp(states('sensor.ha_uptime_moment'))) / 60 }}
2 Likes
sagatxxx
(Eloy )
January 1, 2021, 9:05pm
38
finally how can I get the data templated? can someone paste the sensor code?
thanks
Can you psot what your sensor configuration looks like. I am a complete puttz when it comes to coding but I am trying to understand. I appreciate your assistance very much.
Thankyou
Below is the contents of my uptime_sensor.yaml. It’s included in the configuration.yaml.
- platform: uptime
name: Uptime
- platform: template
sensors:
ha_uptime:
friendly_name: "Home Assistant uptime"
value_template: >-
{% set up_time = as_timestamp(now()) - as_timestamp(states('sensor.uptime')) %}
{% if up_time == 0 %}
Just restarted...
{% else %}
{% set minutes = (up_time // 60) | int %}
{% set hours = (minutes // 60) %}
{% set days = (hours // 24) %}
{% set weeks = (days // 7) %}
{% set minutes = (minutes % 60) %}
{% set hours = (hours % 24) %}
{% set days = (days % 7) %}
{% macro phrase(value, name) %}
{%- set value = value %}
{%- set end = 's' if value > 1 else '' %}
{{- '{} {}{}'.format(value, name, end) if value | int > 0 else '' }}
{%- endmacro %}
{% set text = [ phrase(weeks, 'week'), phrase(days, 'day'), phrase(hours, 'hr'), phrase(minutes, 'min') ] | select('!=','') | list | join(', ') %}
{% set last_comma = text.rfind(',') %}
{% if last_comma != -1 %}
{% set text = text[:last_comma] + ' and' + text[last_comma + 1:] %}
{% endif %}
{{ text }}
{% endif %}
4 Likes
petro
(Petro)
January 4, 2021, 1:23pm
41
if you’re interested here is a streamlined version of that. Makes it easy to add or remove any unwanted values:
FYI, here’s a streamlined version
{%- set up_time = as_timestamp(now())-as_timestamp(states('sensor.uptime')) %}
{%- macro phrase(name, divisor, mod=None) %}
{%- set value = ((up_time // divisor) % (mod if mod else divisor)) | int %}
{%- set end = 's' if value > 1 else '' %}
{{- '{} {}{}'.format(value, name, end) if value | int > 0 else '' }}
{%- endmacro %}
{%- set values = [
phrase('w…
2 Likes
swipee
January 8, 2021, 1:10pm
42
Great work to get the uptime working again but as for the Automations this code is difficult to work with, at least for me. I need numeric states or at least integers but this is a string attribute.
This is what I’ve concluded works for me wanting to measure the uptime in minutes and evaluate a numeric state on the same:
#HASS uptime
- platform: uptime
name: Uptime
- platform: template
sensors:
uptimev2:
friendly_name: Uptimev2
value_template: >
{{ (as_timestamp(now()) - as_timestamp(states('sensor.uptime'))) // 60|int }}
And then I evaluate the uptime based on the uptimev2 numeric state, for example between 2 and 3 minutes:
Friedi
August 27, 2021, 9:23am
43
swipee:
Great work to get the uptime working again but as for the Automations this code is difficult to work with, at least for me. I need numeric states or at least integers but this is a string attribute.
This is what I’ve concluded works for me wanting to measure the uptime in minutes and evaluate a numeric state on the same:
#HASS uptime
- platform: uptime
name: Uptime
- platform: template
sensors:
uptimev2:
friendly_name: Uptimev2
value_template: >
{{ (as_timestamp(now()) - as_timestamp(states('sensor.uptime'))) // 60|int }}
I need to ask …
This code works for you? In my case the sensor is not available du to an error of the calculation.
When I put this {{ (as_timestamp(now()) - as_timestamp(states(‘sensor.uptime’))) // 60|int }} to the dev tools I get the following error:
TypeError: unsupported operand type(s) for -: ‘float’ and ‘NoneType’