elsonico

Spot price AC automation

Feb 24th, 2023
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.00 KB | None | 0 0
  1. automation.yaml:
  2. [...]
  3. - id: '1663398489357'
  4. alias: 'Set device start time'
  5. description: ''
  6. trigger:
  7. - platform: time
  8. at: '23:10:00'
  9. condition:
  10. - condition: not
  11. conditions:
  12. - condition: state
  13. entity_id: sensor.cheapest_hours_energy_tomorrow
  14. state: unknown
  15. action:
  16. - service: input_datetime.set_datetime
  17. data:
  18. time: '{{ as_timestamp(states(''sensor.cheapest_hours_energy_tomorrow'')) | timestamp_custom(''%H:%M'') }}'
  19. target:
  20. entity_id: input_datetime.device_start_time
  21. - service: input_datetime.set_datetime
  22. data:
  23. time: '{{ ((as_timestamp(states(''sensor.cheapest_hours_energy_tomorrow'')) + (3600*3)) | timestamp_custom(''%H:%M'')) }}'
  24. target:
  25. entity_id: input_datetime.device_end_time
  26. mode: single
  27.  
  28. # This works and was "last_triggered: last_triggered: 2023-02-23T22:00:00.001828+00:00"
  29. - id: '1663399614818'
  30. alias: Increase heating
  31. description: ''
  32. trigger:
  33. - platform: time
  34. at: input_datetime.device_start_time
  35. condition: []
  36. action:
  37. - service: climate.set_temperature
  38. data:
  39. temperature: 23
  40. target:
  41. entity_id: climate.ac_12494102
  42. mode: single
  43.  
  44. # This does not work since it was "last_triggered: 2023-02-23T22:00:00.002180+00:00"
  45. - id: '1678659614819'
  46. alias: Decrease heating
  47. description: ''
  48. trigger:
  49. - platform: time
  50. at: input_datetime.device_end_time
  51. condition: []
  52. action:
  53. - service: climate.set_temperature
  54. data:
  55. temperature: 21
  56. target:
  57. entity_id: climate.ac_12494102
  58. mode: single
  59.  
  60. config.yaml:
  61. [...]
  62. # Helper to keep the start time
  63. input_datetime:
  64. device_start_time:
  65. name: Device Start Time
  66. has_time: true
  67. has_date: false
  68. device_end_time:
  69. name: Device End Time
  70. has_time: true
  71. has_date: false
  72. automation: !include automations.yaml
  73. sensor: !include sensors.yaml
  74. [...]
  75.  
  76. sensors.yaml:
  77. [...]
  78. - platform: template
  79. sensors:
  80. energy_spot_price:
  81. friendly_name: "Nordpool Spot Price"
  82. unit_of_measurement: 'c/kWh'
  83. value_template: "{{ ('sensor.nordpool_kwh_fi_eur_2_10_01') }}"
  84. energy_helen:
  85. friendly_name: "Helen Spot Price €/kWh"
  86. unit_of_measurement: '€/kWh'
  87. value_template: "{{ (states('sensor.nordpool_kwh_fi_eur_2_10_01') | float / 100 ) | round(4) + 0.0034 }}"
  88.  
  89. energy_helen_alv10c:
  90. friendly_name: "Helen Spot Price c/kWh alv. 10%"
  91. unit_of_measurement: 'c/kWh'
  92. value_template: "{{ (states('sensor.nordpool_kwh_fi_eur_2_10_01') | float + 0.34 ) }}"
  93.  
  94. cheapest_hours_energy_tomorrow:
  95. device_class: timestamp
  96. friendly_name: Cheapest sequential electricity hours
  97. value_template: >
  98. {%- set numberOfSequentialHours = 3 -%}
  99. {%- set lastHour = 23 -%}
  100. {%- set firstHour = 0 -%}
  101.  
  102. {%- if state_attr('sensor.nordpool_kwh_fi_eur_3_10_024', 'tomorrow_valid') == true -%}
  103. {%- set ns = namespace(counter=0, list=[], cheapestHour=today_at("00:00") + timedelta( hours = (24)), cheapestPrice=999.00) -%}
  104. {%- for i in range(firstHour + numberOfSequentialHours, lastHour+1) -%}
  105. {%- set ns.counter = 0.0 -%}
  106. {%- for j in range(i-numberOfSequentialHours, i) -%}
  107. {%- set ns.counter = ns.counter + state_attr('sensor.nordpool_kwh_fi_eur_3_10_024', 'tomorrow')[j] -%}
  108. {%- endfor -%}
  109. {%- set ns.list = ns.list + [ns.counter] -%}
  110. {%- if ns.counter < ns.cheapestPrice -%}
  111. {%- set ns.cheapestPrice = ns.counter -%}
  112. {%- set ns.cheapestHour = today_at("00:00") + timedelta( hours = (24 + i - numberOfSequentialHours)) -%}
  113. {%- endif -%}
  114. {%- endfor -%}
  115. {{ ns.cheapestHour }}
  116. {%- set ns.cheapestPrice = ns.cheapestPrice / numberOfSequentialHours -%}
  117. {%- endif -%}
  118. [...]
Advertisement
Add Comment
Please, Sign In to add comment