yours is easier than you are making it
{{ as_timestamp(state_attr('device_tracker.life360_name', 'at_loc_since')) | timestamp_custom('%A @ %-I:%M %p') }}
yours is easier than you are making it
{{ as_timestamp(state_attr('device_tracker.life360_name', 'at_loc_since')) | timestamp_custom('%A @ %-I:%M %p') }}
Cool, found this thread: The EPIC Time Conversion and Manipulation Thread!
By breaking it down in the template editor, I was able to figure out the following:
{%- set good_time_string_UTC = '2018-12-11T12:24:32.00-00:00' %}
Time {{ good_time_string_UTC }}
timestamp = {{ as_timestamp(good_time_string_UTC) }}
timestamp2 = {{ state_attr('device_tracker.life360_name', 'at_loc_since') }}
{{ as_timestamp(state_attr('device_tracker.life360_name', 'at_loc_since')) | timestamp_custom('%A @ %-I:%M %p') }}
Template editor result showed as:
Time 2018-12-11T12:24:32.00-00:00
timestamp = 1544531072.0
timestamp2 = 2020-02-09 14:48:06+00:00
Sunday @ 2:48 PM
Works well like this!
sensor:
- platform: template
sensors:
life360_name_lastseen:
friendly_name: "Name Last Seen"
value_template: "{{ as_timestamp(state_attr('device_tracker.life360_name', 'at_loc_since')) | timestamp_custom('%A @ %-I:%M %p') }}"
Thanks for your help and reply Petro, it’s good to know I was on the right track.
So, is it possible to do the same thing in javascript by any chance?
Ideally I’d like to convert UTC to a similar output within custom fields in the button card (I came across this post whilst hunting for solutions). Whilst this jinja2 method works well, it would mean creating two sensors for each person (last seen and at loc since), so a neater solution is to convert within javascript.
Happy to bring this up in the button card thread instead rather than hijacking this one (I’ve seen you active in there too).
Thanks.
I have a sensor which reports rain at e.g. 16:25 (HH:MM). I want to compare this with equal or less than states(‘sensor.time’) + 20 minutes, before retracting my sunblinds. I take it that in order to accomplish this, I first have to make a unix timestamp of both and here is where I get stuck. Any suggestions?
Ignore my request. I was too quick. On this excellent forum and thanks to petro, I found the solution: How to trigger automation BEFORE set time?
How can I change the Sun, Mon, …, Sat to German spelling?
Do I need to add “(de_DE)” somewhere in the code next to “%a”?
value_template: >
{{ as_timestamp(now()) | timestamp_custom('%a %d.%m') }}
Or do I need to add “(de_DE)” in generall settings?
You can’t change the ‘under the hood language’. You’ll have to create a map that links the english to German.
And how can I create a translation map?
I tried with
{% set days = ["Mo ", "Di ", "Mi ", "Do ", "Fr ", "Sa ", "So "] %}
Full Code:
- platform: template
sensors:
date2:
friendly_name: "Datum"
entity_id: sensor.time
value_template: >
{{ as_timestamp(now()) | timestamp_custom('%a %d.%m') }}
{% set days = ["Mo ", "Di ", "Mi ", "Do ", "Fr ", "Sa ", "So "] %}
icon_template: mdi:calendar-range
Or do you mean to use the replace function? Like for example:
replace("Thu", "Do")
see this post
The config check says: data_template is an invalid option for sensor.template
Do I need to create a service dir this? If so, what service?
- platform: template
sensors:
date2:
friendly_name: "Datum"
entity_id: sensor.time
value_template: >
{{ as_timestamp(now()) | timestamp_custom('%a %d.%m') }}
data_template:
entity_id: sensor.time
message: >
{% set days = ["Mo ", "Di ", "Mi ", "Do ", "Fr ", "Sa ", "So "] %}
icon_template: mdi:calendar-range
You don’t need a data template, just the value template. Since now()
has a weekday()
method, you can use that to directly map into a list of abbreviated localized weekday names:
# Abbr. localized date: Fr 31.07.
- platform: template
sensors:
date2:
friendly_name: "Datum"
entity_id: sensor.time
value_template: >
{% set days = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'] %}
{{ now().timestamp() | timestamp_custom(days[now().weekday()] ~ ' %d.%m.') }}
icon_template: mdi:calendar-range
We simply prepend the mapped localized day name to the custom timestamp here.
The weekday()
method of a Python date
or datetime
object returns the day of the week as an integer, where Monday is 0 and Sunday is 6. Thus, it can be easily used as a list index for the days
list (lists start with index 0).
Here’s a little challenge: Try to rewrite the above so it returns the abbreviated German weekdays plus a German month name, like Fr 31. Juli.
Hints:
months
with the German month names.now()
also has an instance attribute called month
→ now().month
. It returns the month numbers 1–12.~
operator in Jinja (the templating engine) concatenates strings, converting values to type string on the fly.Have fun!
Edit: Strictly speaking, it is not necessary to update a date info every minute, as we do by specifying sensor.time
as entity ID to watch.
So if you have sensor.date
defined, use that instead. It will update only once per day, at midnight. This will save another few of the precious CPU cycles …
Hey so i tried it and got this:
date2:
friendly_name: "Datum mit Monat"
value_template: >
{% set months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'] %}
{{ now().strftime (' %d'), now().timestamp() | timestamp_custom(months[now().month] ~ ' %Y') }}
The problem is it gives me the wrong Month (1 Month ahead) and there are also brackets.
(‘22’,‘Dezember 2020’)
Do you know any Solutions?
I’m new to HomeAssistant and have no idea how to solve it.
Kind regards
Hannes
change to
{% set months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'] %}
{{ now().strftime('%d') ~ ', ' ~ months[now().month-1] ~ now().timestamp() | timestamp_custom(' %Y') }}
or
{% set months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'] %}
{{ (now().timestamp() | timestamp_custom('%d, # %Y')).replace('#', months[now().month-1]) }}
Ah ok thank you.
You Sir are THE timestamp template guru!! With the above info I was able to template my lock log sensors’ dates and times!
Hi all,
i search for a Solution:
here my output:
sensor.fritzbox_connection_uptime => 2021-07-24T00:34:26+00:00
But I want to show the time: 1 Week, 2 Days, 3 Hours, 2 Second…
Thanks all
i try this:
net_uptime:
value_template: "{{ as_timestamp(strptime( states('sensor.fritzbox_connection_uptime'), '%Y-%m-%d %H:%M:%S')) | timestamp_custom('%Y-%m-%d %H:%M:%S') }}"
unit_of_measurement: "Tage"
friendly_name: "Verbunden"
icon_template: mdi:calendar
For a other Day-Format. But now i search a “Counter”
here my solution:
net_uptime_pretty:
friendly_name: Verbunden
value_template: >
{%- set up_time = as_timestamp(now())-as_timestamp(states('sensor.fritzbox_connection_uptime')) %}
{% if states('sensor.last_boot') == '0.0' %}
Soeben neu gestartet...
{% else %}
{%- macro phrase(name, divisor, mod=None) %}
{%- set value = ((up_time // divisor) % (mod if mod else divisor)) | int %}
{{- '{} {}'.format(value, name) if value | int > 0 else '' }}
{%- endmacro %}
{%- set values = [
phrase('W.', 60*60*24*7),
phrase('T.', 60*60*24, 7),
phrase('Std.', 60*60, 24),
phrase('Min.', 60),
phrase('Sek.', 1, 60)
] | select('!=','') | list %}
{{ values[:-1] | join(', ') ~ ' ' ~ values[-1] if values | length > 1 else values | first }}
{% endif %}