elsonico

HA Spot Price AC automation schedule

Feb 24th, 2023
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 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. [...]
Add Comment
Please, Sign In to add comment