Evaluating value from sensor with multiple attributes

Hi,
I am trying to create a sensor that detects if my power company is going to pay me to consume power (cool huh). I have a sensor with multiple attributes based 30 minute intervals. My logic is I would like to loop through all of the “per_kwh” prices to detect if they are <0 (negative).

If I know that sometime in the next 12 hours I will have negative power I will delay turning on load until then.

Hope somebody can help.

state_class: measurement
forecasts:
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T10:00:00+10:00'
    per_kwh: -0.08
    spot_per_kwh: -0.08
    start_time: '2022-09-16T23:30:01+00:00'
    end_time: '2022-09-17T00:00:00+00:00'
    renewables: 123
    spike_status: none
    descriptor: extremely_low
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T10:30:00+10:00'
    per_kwh: -0.08
    spot_per_kwh: -0.08
    start_time: '2022-09-17T00:00:01+00:00'
    end_time: '2022-09-17T00:30:00+00:00'
    renewables: 123
    spike_status: none
    descriptor: extremely_low
    range_min: -0.08
    range_max: -0.03
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T11:00:00+10:00'
    per_kwh: -0.08
    spot_per_kwh: -0.08
    start_time: '2022-09-17T00:30:01+00:00'
    end_time: '2022-09-17T01:00:00+00:00'
    renewables: 123
    spike_status: none
    descriptor: extremely_low
    range_min: -0.09
    range_max: -0.03
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T11:30:00+10:00'
    per_kwh: -0.09
    spot_per_kwh: -0.09
    start_time: '2022-09-17T01:00:01+00:00'
    end_time: '2022-09-17T01:30:00+00:00'
    renewables: 123
    spike_status: none
    descriptor: extremely_low
    range_min: -0.14
    range_max: -0.04
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T12:00:00+10:00'
    per_kwh: -0.1
    spot_per_kwh: -0.1
    start_time: '2022-09-17T01:30:01+00:00'
    end_time: '2022-09-17T02:00:00+00:00'
    renewables: 124
    spike_status: none
    descriptor: extremely_low
    range_min: -0.19
    range_max: -0.05
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T12:30:00+10:00'
    per_kwh: -0.1
    spot_per_kwh: -0.1
    start_time: '2022-09-17T02:00:01+00:00'
    end_time: '2022-09-17T02:30:00+00:00'
    renewables: 126
    spike_status: none
    descriptor: extremely_low
    range_min: -0.2
    range_max: -0.07
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T13:00:00+10:00'
    per_kwh: -0.16
    spot_per_kwh: -0.16
    start_time: '2022-09-17T02:30:01+00:00'
    end_time: '2022-09-17T03:00:00+00:00'
    renewables: 127
    spike_status: none
    descriptor: extremely_low
    range_min: -0.2
    range_max: -0.07
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T13:30:00+10:00'
    per_kwh: -0.21
    spot_per_kwh: -0.21
    start_time: '2022-09-17T03:00:01+00:00'
    end_time: '2022-09-17T03:30:00+00:00'
    renewables: 128
    spike_status: none
    descriptor: extremely_low
    range_min: -0.47
    range_max: -0.07
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T14:00:00+10:00'
    per_kwh: -0.21
    spot_per_kwh: -0.21
    start_time: '2022-09-17T03:30:01+00:00'
    end_time: '2022-09-17T04:00:00+00:00'
    renewables: 129
    spike_status: none
    descriptor: extremely_low
    range_min: -0.47
    range_max: -0.07
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T14:30:00+10:00'
    per_kwh: -0.16
    spot_per_kwh: -0.16
    start_time: '2022-09-17T04:00:01+00:00'
    end_time: '2022-09-17T04:30:00+00:00'
    renewables: 129
    spike_status: none
    descriptor: extremely_low
    range_min: -0.2
    range_max: -0.07
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T15:00:00+10:00'
    per_kwh: -0.16
    spot_per_kwh: -0.16
    start_time: '2022-09-17T04:30:01+00:00'
    end_time: '2022-09-17T05:00:00+00:00'
    renewables: 129
    spike_status: none
    descriptor: extremely_low
    range_min: -0.2
    range_max: -0.07
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T15:30:00+10:00'
    per_kwh: -0.1
    spot_per_kwh: -0.1
    start_time: '2022-09-17T05:00:01+00:00'
    end_time: '2022-09-17T05:30:00+00:00'
    renewables: 127
    spike_status: none
    descriptor: extremely_low
    range_min: -0.2
    range_max: -0.07
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T16:00:00+10:00'
    per_kwh: -0.09
    spot_per_kwh: -0.09
    start_time: '2022-09-17T05:30:01+00:00'
    end_time: '2022-09-17T06:00:00+00:00'
    renewables: 127
    spike_status: none
    descriptor: extremely_low
    range_min: -0.19
    range_max: -0.03
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T16:30:00+10:00'
    per_kwh: -0.09
    spot_per_kwh: -0.09
    start_time: '2022-09-17T06:00:01+00:00'
    end_time: '2022-09-17T06:30:00+00:00'
    renewables: 122
    spike_status: none
    descriptor: extremely_low
    range_min: -0.19
    range_max: -0.03
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T17:00:00+10:00'
    per_kwh: -0.08
    spot_per_kwh: -0.08
    start_time: '2022-09-17T06:30:01+00:00'
    end_time: '2022-09-17T07:00:00+00:00'
    renewables: 119
    spike_status: none
    descriptor: extremely_low
    range_min: -0.09
    range_max: -0.02
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T17:30:00+10:00'
    per_kwh: -0.07
    spot_per_kwh: -0.08
    start_time: '2022-09-17T07:00:01+00:00'
    end_time: '2022-09-17T07:30:00+00:00'
    renewables: 138
    spike_status: none
    descriptor: extremely_low
    range_min: -0.07
    range_max: 0.05
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T18:00:00+10:00'
    per_kwh: 0
    spot_per_kwh: 0
    start_time: '2022-09-17T07:30:01+00:00'
    end_time: '2022-09-17T08:00:00+00:00'
    renewables: 131
    spike_status: none
    descriptor: low
    range_min: -0.07
    range_max: 0.06
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T18:30:00+10:00'
    per_kwh: 0.07
    spot_per_kwh: 0.07
    start_time: '2022-09-17T08:00:01+00:00'
    end_time: '2022-09-17T08:30:00+00:00'
    renewables: 115
    spike_status: none
    descriptor: high
    range_min: 0.01
    range_max: 0.17
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T19:00:00+10:00'
    per_kwh: 0.12
    spot_per_kwh: 0.11
    start_time: '2022-09-17T08:30:01+00:00'
    end_time: '2022-09-17T09:00:00+00:00'
    renewables: 103
    spike_status: none
    descriptor: high
    range_min: 0.05
    range_max: 0.18
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T19:30:00+10:00'
    per_kwh: 0.12
    spot_per_kwh: 0.11
    start_time: '2022-09-17T09:00:01+00:00'
    end_time: '2022-09-17T09:30:00+00:00'
    renewables: 99
    spike_status: none
    descriptor: high
    range_min: 0.05
    range_max: 0.18
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T20:00:00+10:00'
    per_kwh: 0.13
    spot_per_kwh: 0.13
    start_time: '2022-09-17T09:30:01+00:00'
    end_time: '2022-09-17T10:00:00+00:00'
    renewables: 99
    spike_status: none
    descriptor: high
    range_min: 0.05
    range_max: 0.17
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T20:30:00+10:00'
    per_kwh: 0.1
    spot_per_kwh: 0.1
    start_time: '2022-09-17T10:00:01+00:00'
    end_time: '2022-09-17T10:30:00+00:00'
    renewables: 100
    spike_status: none
    descriptor: high
    range_min: 0.04
    range_max: 0.15
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T21:00:00+10:00'
    per_kwh: 0.08
    spot_per_kwh: 0.07
    start_time: '2022-09-17T10:30:01+00:00'
    end_time: '2022-09-17T11:00:00+00:00'
    renewables: 101
    spike_status: none
    descriptor: high
    range_min: 0
    range_max: 0.15
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T21:30:00+10:00'
    per_kwh: 0.06
    spot_per_kwh: 0.06
    start_time: '2022-09-17T11:00:01+00:00'
    end_time: '2022-09-17T11:30:00+00:00'
    renewables: 103
    spike_status: none
    descriptor: high
    range_min: -0.01
    range_max: 0.13
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T22:00:00+10:00'
    per_kwh: 0.05
    spot_per_kwh: 0.05
    start_time: '2022-09-17T11:30:01+00:00'
    end_time: '2022-09-17T12:00:00+00:00'
    renewables: 105
    spike_status: none
    descriptor: high
    range_min: -0.01
    range_max: 0.14
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T22:30:00+10:00'
    per_kwh: 0.01
    spot_per_kwh: 0.01
    start_time: '2022-09-17T12:00:01+00:00'
    end_time: '2022-09-17T12:30:00+00:00'
    renewables: 107
    spike_status: none
    descriptor: low
    range_min: -0.03
    range_max: 0.14
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T23:00:00+10:00'
    per_kwh: 0
    spot_per_kwh: 0
    start_time: '2022-09-17T12:30:01+00:00'
    end_time: '2022-09-17T13:00:00+00:00'
    renewables: 109
    spike_status: none
    descriptor: low
    range_min: -0.04
    range_max: 0.13
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-17T23:30:00+10:00'
    per_kwh: 0
    spot_per_kwh: 0
    start_time: '2022-09-17T13:00:01+00:00'
    end_time: '2022-09-17T13:30:00+00:00'
    renewables: 110
    spike_status: none
    descriptor: low
    range_min: -0.04
    range_max: 0.13
  - duration: 30
    date: '2022-09-17'
    nem_date: '2022-09-18T00:00:00+10:00'
    per_kwh: 0
    spot_per_kwh: 0
    start_time: '2022-09-17T13:30:01+00:00'
    end_time: '2022-09-17T14:00:00+00:00'
    renewables: 103
    spike_status: none
    descriptor: low
    range_min: -0.04
    range_max: 0.14
  - duration: 30
    date: '2022-09-18'
    nem_date: '2022-09-18T00:30:00+10:00'
    per_kwh: 0.04
    spot_per_kwh: 0.04
    start_time: '2022-09-17T14:00:01+00:00'
    end_time: '2022-09-17T14:30:00+00:00'
    renewables: 102
    spike_status: none
    descriptor: low
    range_min: -0.04
    range_max: 0.14
  - duration: 30
    date: '2022-09-18'
    nem_date: '2022-09-18T01:00:00+10:00'
    per_kwh: -0.02
    spot_per_kwh: -0.02
    start_time: '2022-09-17T14:30:01+00:00'
    end_time: '2022-09-17T15:00:00+00:00'
    renewables: 101
    spike_status: none
    descriptor: extremely_low
    range_min: -0.04
    range_max: 0.14
  - duration: 30
    date: '2022-09-18'
    nem_date: '2022-09-18T01:30:00+10:00'
    per_kwh: -0.03
    spot_per_kwh: -0.03
    start_time: '2022-09-17T15:00:01+00:00'
    end_time: '2022-09-17T15:30:00+00:00'
    renewables: 105
    spike_status: none
    descriptor: extremely_low
    range_min: -0.04
    range_max: 0.1
  - duration: 30
    date: '2022-09-18'
    nem_date: '2022-09-18T02:00:00+10:00'
    per_kwh: -0.04
    spot_per_kwh: -0.04
    start_time: '2022-09-17T15:30:01+00:00'
    end_time: '2022-09-17T16:00:00+00:00'
    renewables: 110
    spike_status: none
    descriptor: extremely_low
    range_min: -0.04
    range_max: 0.05
  - duration: 30
    date: '2022-09-18'
    nem_date: '2022-09-18T02:30:00+10:00'
    per_kwh: -0.04
    spot_per_kwh: -0.04
    start_time: '2022-09-17T16:00:01+00:00'
    end_time: '2022-09-17T16:30:00+00:00'
    renewables: 114
    spike_status: none
    descriptor: extremely_low
    range_min: -0.04
    range_max: 0.02
  - duration: 30
    date: '2022-09-18'
    nem_date: '2022-09-18T03:00:00+10:00'
    per_kwh: -0.04
    spot_per_kwh: -0.04
    start_time: '2022-09-17T16:30:01+00:00'
    end_time: '2022-09-17T17:00:00+00:00'
    renewables: 117
    spike_status: none
    descriptor: extremely_low
    range_min: -0.04
    range_max: 0.02
  - duration: 30
    date: '2022-09-18'
    nem_date: '2022-09-18T03:30:00+10:00'
    per_kwh: -0.03
    spot_per_kwh: -0.04
    start_time: '2022-09-17T17:00:01+00:00'
    end_time: '2022-09-17T17:30:00+00:00'
    renewables: 119
    spike_status: none
    descriptor: extremely_low
    range_min: -0.04
    range_max: 0.02
  - duration: 30
    date: '2022-09-18'
    nem_date: '2022-09-18T04:00:00+10:00'
    per_kwh: -0.03
    spot_per_kwh: -0.04
    start_time: '2022-09-17T17:30:01+00:00'
    end_time: '2022-09-17T18:00:00+00:00'
    renewables: 121
    spike_status: none
    descriptor: extremely_low
    range_min: -0.04
    range_max: 0.02
channel_type: feedIn
unit_of_measurement: $/kWh
attribution: Data provided by Amber Electric
icon: mdi:solar-power
friendly_name: Blister In The Sun - Feed In Forecast

Here’s a place to start…

{% set forecasts = state_attr('sensor.YOUR_SENSOR_ID', 'forecasts') %}
{% set negative_prices = forecasts
| map(attribute = 'per_kwh') | select('lt', 0) | list %}
{{ forecasts | selectattr('per_kwh', 'in', negative_prices ) | map(attribute='start_time') | list }}