Thanks for checking
Create sensors for each hour.
For example like this
template:
- trigger:
- platform: time_pattern
hours: /1
action:
- service: weather.get_forecast
target:
entity_id: weather.forecast_testy
data:
type: hourly
response_variable: forecast
sensor:
- name: PoÄasĂ teplota hodinovÄ 1
unique_id: teplota_pocasi_hodina_1
state: "{{ forecast.forecast[0].temperature }}"
- name: PoÄasĂ teplota hodinovÄ 2
unique_id: teplota_pocasi_hodina_2
state: "{{ forecast.forecast[1].temperature }}"
- name: PoÄasĂ teplota hodinovÄ 3
.................
....................
@eemceebee and @Zinken
You both are caught in a change that was introduced with the last update. It is the change to eliminate the forecast attributes out of the weather entity to its own entity (forecast attribute vs forecast entity).
There are numerous topics about this, here is a link to one of my posts, with a try to explain that a little. Take a look at that post, and the whole topic as well.
hmm I basically copy pasted the code and I though after reading this : Weather - Home Assistant it should work, but I only have every element being unknown. Do I have to tell this that I am using met.no ?
hmm I basically copy pasted the code and I though after reading this : Weather - Home Assistant it should work, but I only have every element being unknown. Do I have to tell this that I am using met.no ?
Have you put your own weather entity in your code?
Not sure what I was doing wrong. Maybe a typo, but now it works. Thanks
How did it works out? Iâm interseting in it aswell. If you have something, can you share your code? Thanks!
I unfortunately did not get the graph component to work.
In the end I solved it by just drawing rectangles:
The code:
int bar_size = 33;
it.rectangle(x_offset+(bar_size*0), y_offset-id(electricity_price).state*100, bar_size, id(electricity_price).state*100);
it.rectangle(x_offset+(bar_size*1), y_offset-id(electricity_price_1h).state*100, bar_size, id(electricity_price_1h).state*100);
it.rectangle(x_offset+(bar_size*2), y_offset-id(electricity_price_2h).state*100, bar_size, id(electricity_price_2h).state*100);
it.rectangle(x_offset+(bar_size*3), y_offset-id(electricity_price_3h).state*100, bar_size, id(electricity_price_3h).state*100);
it.rectangle(x_offset+(bar_size*4), y_offset-id(electricity_price_4h).state*100, bar_size, id(electricity_price_4h).state*100);
it.rectangle(x_offset+(bar_size*5), y_offset-id(electricity_price_5h).state*100, bar_size, id(electricity_price_5h).state*100);
it.rectangle(x_offset+(bar_size*6), y_offset-id(electricity_price_6h).state*100, bar_size, id(electricity_price_6h).state*100);
it.rectangle(x_offset+(bar_size*7), y_offset-id(electricity_price_7h).state*100, bar_size, id(electricity_price_7h).state*100);
it.rectangle(x_offset+(bar_size*8), y_offset-id(electricity_price_8h).state*100, bar_size, id(electricity_price_8h).state*100);
it.rectangle(x_offset+(bar_size*9), y_offset-id(electricity_price_9h).state*100, bar_size, id(electricity_price_9h).state*100);
it.rectangle(x_offset+(bar_size*10), y_offset-id(electricity_price_10h).state*100, bar_size, id(electricity_price_10h).state*100);
it.rectangle(x_offset+(bar_size*11), y_offset-id(electricity_price_11h).state*100, bar_size, id(electricity_price_11h).state*100);
it.printf(x_offset+(bar_size*0)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price).state*100);
it.printf(x_offset+(bar_size*1)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_1h).state*100);
it.printf(x_offset+(bar_size*2)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_2h).state*100);
it.printf(x_offset+(bar_size*3)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_3h).state*100);
it.printf(x_offset+(bar_size*4)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_4h).state*100);
it.printf(x_offset+(bar_size*5)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_5h).state*100);
it.printf(x_offset+(bar_size*6)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_6h).state*100);
it.printf(x_offset+(bar_size*7)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_7h).state*100);
it.printf(x_offset+(bar_size*8)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_8h).state*100);
it.printf(x_offset+(bar_size*9)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_9h).state*100);
it.printf(x_offset+(bar_size*10)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_10h).state*100);
it.printf(x_offset+(bar_size*11)+(bar_size/2), y_offset, id(font_small), TextAlign::BOTTOM_CENTER, "%.0f", id(electricity_price_11h).state*100);
it.printf(x_offset+(bar_size*0)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour).state);
it.printf(x_offset+(bar_size*1)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_1h).state);
it.printf(x_offset+(bar_size*2)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_2h).state);
it.printf(x_offset+(bar_size*3)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_3h).state);
it.printf(x_offset+(bar_size*4)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_4h).state);
it.printf(x_offset+(bar_size*5)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_5h).state);
it.printf(x_offset+(bar_size*6)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_6h).state);
it.printf(x_offset+(bar_size*7)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_7h).state);
it.printf(x_offset+(bar_size*8)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_8h).state);
it.printf(x_offset+(bar_size*9)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_9h).state);
it.printf(x_offset+(bar_size*10)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_10h).state);
it.printf(x_offset+(bar_size*11)+(bar_size/2), y_offset, id(font_small_bold), TextAlign::TOP_CENTER, "%2.0f", id(time_hour_11h).state);
As you can see, both prices and hours come from home assistant sensors.
I still need to fix those price rounding differences that cause the 0 line to jump by 1 pixel.
Thanks for your reply. I will look into that
That looks amazing!
Would you consider assembling and coding 1 setup as a commision? Iâm willing to pay for a good setup like this.
I see you built this e-ink screen holder quite some time ago. I really like what you did. I read you 3D printed parts. I do own a 3D printer too, so if you have a model you could share Iâd be really interested. That would save me time trying to come up with something myself.
No problem
Thanks. Unfortunately if I try to follow the link, it says it is missing or no longer shared.
Great, I can see it now. Thank you very much.
Hi Taco,
I donât think that I can build this for somebody else. Iâm not a programmer and use a lot of trial and error myself (and Google a lot!). Maybe I have spend about 40 hours all together to come to this result. And it still needs time to update the code frequently due to changes in Home Assistant or (like last week) in the Fordpass API. Then I spend several hours to figure out what is changed and how I can make it work again in Home Assistant and in ESPHome.
I can help you if you want, but I canât make it for you.
But thanks for the compliment!
@sloma ,
I like the what youâve done with the Weatherman code. Some great additions!
Iâd like to replicate temperature and pressure trends in my own code but Iâm having difficulty adding the following to my templates.yaml file;
Using Studio Code Server to add the code, Iâm presented with an error indicating property âplatform is not allowedâ and âproperty sensors not allowedâ. can you guide at to what I may be doing wrong?
Here is my template.yaml file;
###################################################
# "Outdoor Temperature Feels Like" Configuration #
###################################################
- sensor:
- name: "Feels Like"
device_class: temperature
unit_of_measurement: "°C"
state: >
{% if not is_state('sensor.stratford_humidex', 'unknown') %}
{{ states('sensor.stratford_humidex') }}
{% elif not is_state('sensor.stratford_wind_chill', 'unknown') %}
{{ states('sensor.stratford_wind_chill') }}
{% else %}
{{ states('sensor.stratford_temperature') | round(0) }}
{% endif %}
#####################################
# "Rain in 48 Hours" Configuration #
#####################################
- binary_sensor:
- name: "Percipitation"
device_class: moisture
state: "{{ 'rainy' in (state_attr('weather.stratford','forecast')|map(attribute='condition')|list)[:2] }}"
icon: mdi:weather-rainy
###############################
# "Weatherman" Configuration #
###############################
- trigger:
platform: time_pattern
minutes: "/1"
sensor:
- name: Weatherman Data
state: "OK"
attributes:
weather_condition_now: >
{% set cond_now = states('weather.stratford_hourly') %}
{% if states('sun.sun') == 'below_horizon' %}
{% if cond_now == 'sunny' %} night {% elif cond_now == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond_now }} {% endif %}
{% else %}
{{ cond_now }}
{% endif %}
weather_condition_0: >
{% set cond0 = state_attr('weather.stratford_hourly', 'forecast')[0].condition %}
{% set next_setting = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% set next_rising = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set cond0_time = as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[0].datetime) %}
{% if cond0_time < next_rising and next_rising < next_setting %}
{% if cond0 == 'sunny' %} night {% elif cond0 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond0 }} {% endif %}
{% else %}
{{ cond0 }}
{% endif %}
weather_temperature_0: >
{{ state_attr('weather.stratford_hourly', 'forecast')[0].temperature | round }}
weather_timestamp_0: >
{{ as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[0].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[0].datetime) | timestamp_custom('%p') }}
weather_condition_1: >
{% set cond1 = state_attr('weather.stratford_hourly', 'forecast')[1].condition %}
{% set next_setting = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% set next_rising = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set cond1_time = as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[1].datetime) %}
{% if cond1_time < next_rising and next_rising < next_setting %}
{% if cond1 == 'sunny' %} night {% elif cond1 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond1 }} {% endif %}
{% else %}
{{ cond1 }}
{% endif %}
weather_temperature_1: >
{{ state_attr('weather.stratford_hourly', 'forecast')[1].temperature | round }}
weather_timestamp_1: >
{{ as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[1].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[1].datetime) | timestamp_custom('%p') }}
weather_condition_2: >
{% set cond2 = state_attr('weather.stratford_hourly', 'forecast')[2].condition %}
{% set next_setting = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% set next_rising = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set cond2_time = as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[2].datetime) %}
{% if cond2_time < next_rising and next_rising < next_setting %}
{% if cond2 == 'sunny' %} night {% elif cond2 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond2 }} {% endif %}
{% else %}
{{ cond2 }}
{% endif %}
weather_temperature_2: >
{{ state_attr('weather.stratford_hourly', 'forecast')[2].temperature | round }}
weather_timestamp_2: >
{{ as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[2].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[2].datetime) | timestamp_custom('%p') }}
weather_condition_3: >
{% set cond3 = state_attr('weather.stratford_hourly', 'forecast')[3].condition %}
{% set next_setting = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% set next_rising = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set cond3_time = as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[3].datetime) %}
{% if cond3_time < next_rising and next_rising < next_setting %}
{% if cond3 == 'sunny' %} night {% elif cond3 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond3 }} {% endif %}
{% else %}
{{ cond3 }}
{% endif %}
weather_temperature_3: >
{{ state_attr('weather.stratford_hourly', 'forecast')[3].temperature | round }}
weather_timestamp_3: >
{{ as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[3].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.stratford_hourly', 'forecast')[3].datetime) | timestamp_custom('%p') }}
- sensor:
- name: "Sunrise time"
unique_id: sunrise_time
state: "{{ as_timestamp(state_attr('sun.sun', 'next_rising')) | timestamp_custom('%I:%M') }}"
- name: "Sunset time"
unique_id: sunset_time
state: "{{ as_timestamp(state_attr('sun.sun', 'next_setting')) | timestamp_custom('%I:%M') }}"
- platform: trend
sensors:
outside_temperature:
entity_id: sensor.stratford_temperature
friendly_name: "Temperature Trend"
max_samples: 60
sample_duration: 10800
Thank you