Skip to main content
Version: Next 🚧

Price Phase Sensors

Entity ID tip

<home_name> is a placeholder for your Tibber home display name in Home Assistant. Entity IDs are derived from the displayed name (localized), so the exact slug may differ. Can't find a sensor? Use the Entity Reference (All Languages) to search by name in your language.

Price Phase sensors tell you where you are in the intra-day price curve — whether prices are currently rising, falling, or flat, how long that phase lasts, and when specific phase types will occur next. They complement the Trend Sensors (which compare current price against future averages) by giving you the structural shape of the day.


Both sensor families answer "What are prices doing?" — but from different angles:

Price Phase SensorsTrend Sensors
What they answer"Are we in a rising or falling stretch right now?""Is now cheaper or more expensive than the next N hours?"
Based onStructural shape of the intra-day price curveComparison of current price vs. future window average
Best forUnderstanding position in the day's price arcDeciding whether to act now or wait
Example"We're in a falling phase that ends at 15:30""Current price is 12% below the next 3h average"

Think of price phases as the skeleton of the day and trend sensors as real-time navigation. Phases show you the map; trends show you which direction to drive.


The Three Price Phases

Prices within a day are split into consecutive monotone segments — stretches where the direction is consistently one of:

Exactly one phase is always active. The three binary sensors mirror this — exactly one of in_rising_price_phase, in_falling_price_phase, and in_flat_price_phase is ON at any time.

Why only 3 phases?

Each phase segment is monotone by definition — it is either purely rising, purely falling, or flat. A "double valley" (W-shape) is not a single phase; it is a sequence of: falling → flat → rising → flat → falling. The Day Pattern sensor gives you the composite day shape; the phase sensors tell you your current position within it.


Day Pattern Sensors

These sensors classify the overall shape of the day's price curve:

SensorEntity IDDefault
Today's Price Pattern (day_pattern_today)sensor.<home_name>_day_pattern_today✅ enabled
Tomorrow's Price Pattern (day_pattern_tomorrow)sensor.<home_name>_day_pattern_tomorrow❌ disabled
Yesterday's Price Pattern (day_pattern_yesterday)sensor.<home_name>_day_pattern_yesterday❌ disabled

States:

StateShapeDescription
valleyCheap in the middle of the day — covers both V-shaped (short, sharp dip) and U-shaped (extended cheap plateau) curves. Common during solar midday surplus or low-demand nights.
peakExpensive in the middle — cheap mornings and evenings. Covers both sharp Λ-peaks and broad plateau shapes.
double_dipWTwo cheap windows — classic with cheap morning + cheap midday
duck_curveMTwo expensive peaks — common on workdays with morning and evening demand (named after the energy industry's duck curve)
flatLittle variation throughout the day
rising/Prices climb steadily through the day
falling\Prices drop steadily through the day
mixedIrregular shape that doesn't fit a clean category

Key attributes:

AttributeDescriptionExample
confidenceDetection reliability (0–1)0.87
coefficient_of_variationRelative price spread (volatility measure)0.24
valley_start / valley_endStart/end of the primary cheap window11:00 / 15:00
peak_start / peak_endStart/end of the primary expensive window07:00 / 09:00
segment_countNumber of intra-day phase segments4

Example — Schedule based on tomorrow's pattern:

Show YAML: Pre-schedule heat pump based on tomorrow's valley
automation:
- alias: "Pre-schedule: Heat pump tomorrow's valley"
trigger:
- platform: time
at: "20:00:00"
condition:
- condition: template
value_template: >
{{ states('sensor.<home_name>_day_pattern_tomorrow') in ['valley', 'double_dip'] }}
- condition: template
value_template: >
{{ is_state('binary_sensor.<home_name>_tomorrow_data_available', 'on') }}
action:
- service: notify.mobile_app
data:
message: >
Tomorrow is a {{ states('sensor.<home_name>_day_pattern_tomorrow') }} day.
Cheap window: {{ state_attr('sensor.<home_name>_day_pattern_tomorrow', 'valley_start') }}
to {{ state_attr('sensor.<home_name>_day_pattern_tomorrow', 'valley_end') }}.

Current and Next Price Phase

Current Price Phase

Entity ID: sensor.<home_name>_current_price_phase

Shows which price phase is active right now: rising, falling, or flat. Along with the binary phase sensors and timing sensors, this gives you a complete picture of your position in the day's price arc.

Key attributes:

AttributeDescriptionExample
startWhen this phase started2025-11-08T12:00:00+01:00
endWhen this phase ends2025-11-08T15:30:00+01:00
price_minLowest price in this phase11.2
price_maxHighest price in this phase18.7
price_meanAverage price in this phase14.5
segment_indexPosition of this phase (0-based)1
segment_countTotal number of phases today4
all_segmentsFull list of today's phases with times and prices[...]

Tip: segment_index and segment_count tell you your position in the day. If segment_index=0 and the phase is rising, prices have been rising since midnight. If segment_index=segment_count-1, this is the final phase of the day.

Next Price Phase

Entity ID: sensor.<home_name>_next_price_phase

Shows the phase that will follow after the current one ends. When the current phase is the last of the day, this sensor becomes unavailable. Same states and attributes as the Current Price Phase sensor.

Use case: Combine current and next to anticipate transitions:

Current → NextInterpretation
risingflatPeak is about to level off — consider acting now before it falls further
fallingrisingWe're at or near the daily minimum — best window to start flexible loads
fallingflatApproaching the stable bottom — prices won't drop much more
flatrisingStable prices are ending — prices will start climbing
flatfallingFurther drops are coming — wait if you can

Binary Phase Sensors

Three binary sensors let you trigger automations directly on the current phase type:

SensorEntity IDDefault
In Rising Price Phasebinary_sensor.<home_name>_in_rising_price_phase✅ enabled
In Falling Price Phasebinary_sensor.<home_name>_in_falling_price_phase✅ enabled
In Flat Price Phasebinary_sensor.<home_name>_in_flat_price_phase✅ enabled

Exactly one of these is ON at any time — they are mutually exclusive mirrors of the current_price_phase sensor state.

Example — Only run the dishwasher when prices are falling:

Show YAML: Start dishwasher during falling price phase
automation:
- alias: "Dishwasher: Start during falling phase"
trigger:
- platform: state
entity_id: binary_sensor.<home_name>_in_falling_price_phase
to: "on"
condition:
- condition: state
entity_id: binary_sensor.dishwasher_finished
state: "off"
# Make sure there's enough time left before prices turn
- condition: numeric_state
entity_id: sensor.<home_name>_current_price_phase_remaining_minutes
# dishwasher ECO cycle takes ~2 hours
above: 0.33 # displayed in hours → ~20 minutes minimum
action:
- service: switch.turn_on
target:
entity_id: switch.dishwasher

Phase Timing Sensors

These sensors mirror the Best/Peak Price timing sensors — but for the current price phase instead of best/peak price periods.

Current Phase Timing (4 sensors)

SensorEntity IDDefaultUpdates
Phase End Timesensor.<home_name>_current_price_phase_end_time✅ enabledevery 15 min
Phase Remaining Minutessensor.<home_name>_current_price_phase_remaining_minutes✅ enabledevery minute
Phase Durationsensor.<home_name>_current_price_phase_duration❌ disabledevery 15 min
Phase Progresssensor.<home_name>_current_price_phase_progress❌ disabledevery minute

Duration vs. Remaining: Duration is the total length of the current phase (doesn't change minute-by-minute). Remaining is the countdown (decreases every minute). Together they tell you both "how long is this phase?" and "how much is left?".

Progress (0–100%) = (duration − remaining) / duration × 100.

Know how far through a phase you are without maths

Enable current_price_phase_progress and use it in a dashboard bar card to visualise how far through the current phase you are. Near 100% means the phase is ending soon.

Next Phase by Type (6 sensors)

These sensors scan the remaining phases of today and tomorrow to find the next occurrence of each specific phase type:

SensorEntity IDDefaultUpdates
Next Rising Phase Start Timesensor.<home_name>_next_rising_phase_start_time❌ disabledevery 15 min
Next Falling Phase Start Timesensor.<home_name>_next_falling_phase_start_time❌ disabledevery 15 min
Next Flat Phase Start Timesensor.<home_name>_next_flat_phase_start_time❌ disabledevery 15 min
Next Rising Phase In Minutessensor.<home_name>_next_rising_phase_in_minutes❌ disabledevery minute
Next Falling Phase In Minutessensor.<home_name>_next_falling_phase_in_minutes❌ disabledevery minute
Next Flat Phase In Minutessensor.<home_name>_next_flat_phase_in_minutes❌ disabledevery minute
Start time vs. in minutes — which to use?
  • Use the start time sensors (timestamp) when you need to show or compare a specific clock time: "The next price drop starts at 14:15."
  • Use the in minutes sensors (duration/countdown) for automations with numeric comparisons: "Trigger 30 minutes before the next price rise."

Both are updated from the same data — choose whichever fits your automation logic.

These sensors are disabled by default because they are only needed for advanced automation scenarios. Enable the ones you need in Settings → Devices & Services → Tibber Prices → [your home] → Entities.


How to Use Phase Sensors Together

Pattern: "Run only during falling phases with enough time left"

The most common use case: start a flexible appliance (dishwasher, washing machine) when prices are falling AND there's at least N minutes left before the phase ends.

Show YAML: Start when falling, at least 90 min remaining
automation:
- alias: "Washing machine: Optimal start"
trigger:
- platform: state
entity_id: binary_sensor.<home_name>_in_falling_price_phase
to: "on"
- platform: time_pattern
minutes: "/15"
condition:
- condition: state
entity_id: binary_sensor.<home_name>_in_falling_price_phase
state: "on"
- condition: numeric_state
entity_id: sensor.<home_name>_current_price_phase_remaining_minutes
# washing machine cycle ≈ 1.5 hours; sensor shows hours
above: 1.5
- condition: state
entity_id: input_boolean.washing_machine_needs_run
state: "on"
action:
- service: switch.turn_on
target:
entity_id: switch.washing_machine
- service: input_boolean.turn_off
target:
entity_id: input_boolean.washing_machine_needs_run

Pattern: "Alert before prices start rising"

Enable next_rising_phase_in_minutes and trigger a notification when the next price rise is imminent:

Show YAML: Alert 30 min before prices start rising
automation:
- alias: "Alert: Price rise imminent"
trigger:
- platform: numeric_state
entity_id: sensor.<home_name>_next_rising_phase_in_minutes
below: 0.5 # 30 minutes (displayed in hours)
condition:
- condition: state
entity_id: binary_sensor.<home_name>_in_falling_price_phase
state: "on"
action:
- service: notify.mobile_app
data:
title: "Prices rising in 30 minutes"
message: >
The current falling phase ends at
{{ state_attr('sensor.<home_name>_current_price_phase', 'end') | as_timestamp | timestamp_custom('%H:%M') }}.
Start flexible loads now.

Pattern: "Complete this combination for best results"

For maximum precision, combine phase sensors with Best Price Period or trend sensors:

You want to...Combine with
Find the cheapest window todayin_falling_price_phase + Best Price Period
Confirm price directioncurrent_price_phase + Price Outlook sensors
Plan tomorrowday_pattern_tomorrow + next_falling_phase_start_time
Know if near the bottomCurrent = falling, Next = rising
Know if near the topCurrent = rising, Next = falling
Act before costs climbin_falling_price_phase + next_rising_phase_in_minutes

Sensor Summary Table

Sensors (enabled by default)

SensorEntity IDWhat It Shows
Today's Price Patternsensor.<home_name>_day_pattern_todayOverall shape of today's price curve
Current Price Phasesensor.<home_name>_current_price_phaseActive phase: rising / falling / flat
Next Price Phasesensor.<home_name>_next_price_phasePhase coming after the current one
Phase End Timesensor.<home_name>_current_price_phase_end_timeTimestamp when current phase ends
Phase Remaining Minutessensor.<home_name>_current_price_phase_remaining_minutesCountdown to end of current phase

Binary Sensors (all enabled by default)

SensorEntity IDON when...
In Rising Price Phasebinary_sensor.<home_name>_in_rising_price_phasePrices are going up right now
In Falling Price Phasebinary_sensor.<home_name>_in_falling_price_phasePrices are going down right now
In Flat Price Phasebinary_sensor.<home_name>_in_flat_price_phasePrices are stable right now

Sensors (disabled by default)

SensorEntity IDWhat It Shows
Yesterday's Price Patternsensor.<home_name>_day_pattern_yesterdayYesterday's price shape (reference)
Tomorrow's Price Patternsensor.<home_name>_day_pattern_tomorrowTomorrow's price shape (once available)
Phase Durationsensor.<home_name>_current_price_phase_durationTotal length of current phase
Phase Progresssensor.<home_name>_current_price_phase_progress0–100% through current phase
Next Rising Phase Start Timesensor.<home_name>_next_rising_phase_start_timeWhen the next rising phase begins
Next Falling Phase Start Timesensor.<home_name>_next_falling_phase_start_timeWhen the next falling phase begins
Next Flat Phase Start Timesensor.<home_name>_next_flat_phase_start_timeWhen the next flat phase begins
Next Rising Phase In Minutessensor.<home_name>_next_rising_phase_in_minutesMinutes until next rising phase
Next Falling Phase In Minutessensor.<home_name>_next_falling_phase_in_minutesMinutes until next falling phase
Next Flat Phase In Minutessensor.<home_name>_next_flat_phase_in_minutesMinutes until next flat phase

💬 Comments are page-specific. For a new question or idea, open a dedicated Discussion on GitHub so it gets its own thread and proper visibility.