Guest User

Untitled

a guest
Oct 17th, 2025
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.78 KB | None | 0 0
  1. - triggers:
  2. - trigger: time_pattern
  3. minutes: /1
  4. - trigger: homeassistant
  5. event: start
  6. actions:
  7. - action: nordpool.get_prices_for_date
  8. data:
  9. config_entry: 01K7PAVN48Z69VKFJAW9V6X0P8
  10. date: "{{ now().date() }}"
  11. areas: FI
  12. currency: EUR
  13. response_variable: today_price
  14. - action: nordpool.get_prices_for_date
  15. data:
  16. config_entry: 01K7PAVN48Z69VKFJAW9V6X0P8
  17. date: "{{ now().date() + timedelta(days=1) }}"
  18. areas: FI
  19. currency: EUR
  20. response_variable: tomorrow_price
  21. - action: nordpool.get_prices_for_date
  22. data:
  23. config_entry: 01K7PAVN48Z69VKFJAW9V6X0P8
  24. date: "{{ now().date() - timedelta(days=1) }}"
  25. areas: FI
  26. currency: EUR
  27. response_variable: yesterday_price
  28. sensor:
  29. - name: Electricity prices
  30. unique_id: electricity_prices
  31. unit_of_measurement: "c/kWh"
  32. icon: mdi:cash
  33. state: >
  34. {%- set region = (this.attributes.get('region', 'FI') | string) -%}
  35. {%- set vat = (this.attributes.get('vat', 25.5) | float) -%}
  36. {%- set electricity_tax = (this.attributes.get('electricity_tax', 0.0) | float) -%}
  37. {%- set transmission_day = (this.attributes.get('transmission_day', 0.0) | float) -%}
  38. {%- set transmission_night = (this.attributes.get('transmission_night', 0.0) | float) -%}
  39. {%- set margin = (this.attributes.get('margin', 0.0) | float) -%}
  40.  
  41. {%- set additional_cost_day = (electricity_tax+transmission_day+margin | float) -%}
  42. {%- set additional_cost_night = (electricity_tax+transmission_night+margin | float) -%}
  43.  
  44. {%- set is_dst = (this.attributes.get('is_dst') | bool) -%}
  45.  
  46. {% if (today_price is mapping) and (tomorrow_price is mapping) %}
  47. {% set data = namespace(prices=[]) %}
  48. {% if is_dst and (yesterday_price is mapping) %}
  49. {% for state in yesterday_price[region] %}
  50. {% if as_datetime(state.start).hour == 21 and as_datetime(state.start).hour < 22 %}
  51. {% set data.prices = data.prices + [(((state.price/10 | float) * (1+(vat/100)) + additional_cost_night)) | round(3, default=0)] %}
  52. {% endif %}
  53. {% endfor %}
  54. {% endif %}
  55. {% for state in today_price[region] %}
  56. {% if as_datetime(state.start).astimezone().hour >= 7 and as_datetime(state.start).astimezone().hour < 22 %}
  57. {% set data.prices = data.prices + [(((state.price/10 | float) * (1+(vat/100)) + additional_cost_day)) | round(3, default=0)] %}
  58. {% else %}
  59. {% set data.prices = data.prices + [(((state.price/10 | float) * (1+(vat/100)) + additional_cost_night)) | round(3, default=0)] %}
  60. {% endif %}
  61. {% endfor %}
  62. {% for state in tomorrow_price[region] %}
  63. {% if as_datetime(state.start).astimezone().hour >= 7 and as_datetime(state.start).astimezone().hour < 22 %}
  64. {% set data.prices = data.prices + [(((state.price/10 | float) * (1+(vat/100)) + additional_cost_day)) | round(3, default=0)] %}
  65. {% else %}
  66. {% set data.prices = data.prices + [(((state.price/10 | float) * (1+(vat/100)) + additional_cost_night)) | round(3, default=0)] %}
  67. {% endif %}
  68. {% endfor %}
  69. {{min(data.prices)}}
  70. {% else %}
  71. unavailable
  72. {% endif %}
  73. attributes:
  74. region: FI
  75. vat: >
  76. {{states("input_number.electricity_vat")|float}}
  77. electricity_tax: >
  78. {{states("input_number.electricity_tax")|float}}
  79. transmission_day: >
  80. {{states("input_number.transmission_day")|float}}
  81. transmission_night: >
  82. {{states("input_number.transmission_night")|float}}
  83. margin: >
  84. {{states("input_number.porssisahko_margin")|float}}
  85. is_dst: >
  86. {{ now().timetuple().tm_isdst == 1 }}
  87. tomorrow_valid: >
  88. {%- set region = (this.attributes.get('region', 'FI') | string) -%}
  89. {%- if (tomorrow_price is mapping) %}
  90. {%- if tomorrow_price[region] | list | count > 0 -%}
  91. {{ true | bool }}
  92. {%- else %}
  93. {{ false | bool }}
  94. {%- endif %}
  95. {%- else %}
  96. {{ false | bool }}
  97. {%- endif %}
  98. data: >
  99. {%- set region = (this.attributes.get('region', 'FI') | string) -%}
  100. {%- set vat = (this.attributes.get('vat', 25.5) | float) -%}
  101. {%- set electricity_tax = (this.attributes.get('electricity_tax', 0.0) | float) -%}
  102. {%- set transmission_day = (this.attributes.get('transmission_day', 0.0) | float) -%}
  103. {%- set transmission_night = (this.attributes.get('transmission_night', 0.0) | float) -%}
  104. {%- set margin = (this.attributes.get('margin', 0.0) | float) -%}
  105.  
  106. {%- set additional_cost_day = (electricity_tax+transmission_day+margin | float) -%}
  107. {%- set additional_cost_night = (electricity_tax+transmission_night+margin | float) -%}
  108.  
  109. {%- set is_dst = (this.attributes.get('is_dst') | bool) -%}
  110.  
  111. {% if (today_price is mapping) and (tomorrow_price is mapping) %}
  112. {% set data = namespace(prices=[]) %}
  113. {% if is_dst and (yesterday_price is mapping) %}
  114. {% for state in yesterday_price[region] %}
  115. {% set local_start = as_datetime(state.start).astimezone().strftime('%Y-%m-%d %H:%M:%S') %}
  116. {% set local_end = as_datetime(state.end).astimezone().strftime('%Y-%m-%d %H:%M:%S') %}
  117. {% if as_datetime(state.start).hour == 21 and as_datetime(state.start).hour < 22 %}
  118. {% set data.prices = data.prices + [{'start':local_start, 'end':local_end, 'price': (((state.price/10 | float) * (1+(vat/100)) + additional_cost_night)) | round(3, default=0)}] %}
  119. {% endif %}
  120. {% endfor %}
  121. {% endif %}
  122. {% for state in today_price[region] %}
  123. {% set local_start = as_datetime(state.start).astimezone().strftime('%Y-%m-%d %H:%M:%S') %}
  124. {% set local_end = as_datetime(state.end).astimezone().strftime('%Y-%m-%d %H:%M:%S') %}
  125. {% if as_datetime(state.start).astimezone().hour >= 7 and as_datetime(state.start).astimezone().hour < 22 %}
  126. {% set data.prices = data.prices + [{'start':local_start, 'end':local_end, 'price': (((state.price/10 | float) * (1+(vat/100)) + additional_cost_day)) | round(3, default=0)}] %}
  127. {% else %}
  128. {% set data.prices = data.prices + [{'start':local_start, 'end':local_end, 'price': (((state.price/10 | float) * (1+(vat/100)) + additional_cost_night)) | round(3, default=0)}] %}
  129. {% endif %}
  130. {% endfor %}
  131. {% for state in tomorrow_price[region] %}
  132. {% set local_start = as_datetime(state.start).astimezone().strftime('%Y-%m-%d %H:%M:%S') %}
  133. {% set local_end = as_datetime(state.end).astimezone().strftime('%Y-%m-%d %H:%M:%S') %}
  134. {% if as_datetime(state.start).astimezone().hour >= 7 and as_datetime(state.start).astimezone().hour < 22 %}
  135. {% set data.prices = data.prices + [{'start':local_start, 'end':local_end, 'price': (((state.price/10 | float) * (1+(vat/100)) + additional_cost_day)) | round(3, default=0)}] %}
  136. {% else %}
  137. {% set data.prices = data.prices + [{'start':local_start, 'end':local_end, 'price': (((state.price/10 | float) * (1+(vat/100)) + additional_cost_night)) | round(3, default=0)}] %}
  138. {% endif %}
  139. {% endfor %}
  140. {{data.prices}}
  141. {% else %}
  142. []
  143. {% endif %}
  144.  
Advertisement
Add Comment
Please, Sign In to add comment