Skip to content

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 06 Nov 15:44
· 10 commits to main since this release

Chartdeck 2.0 brings everything left on the chart roadmap in one release: 44 chart styles in all, up from eleven in 1.3. It includes the charts that briefly went out as 1.4.0 and 1.5.0 (pie and donut, rings, pictograph, waffle, histogram, scatter, bubble, heatmap and box plot); those two releases have been withdrawn and their notes are folded in below. New in 2.0 itself are the funnel, waterfall, treemap, sunburst and icicle charts, radar and polar area, grouped bars, bullet, lollipop, slope and dumbbell comparisons, and a set of history charts: range area, sparklines, streamgraph, candlestick, violin and raincloud, beeswarm, state timeline, climate, Sankey, wind rose, a 24-hour clock and a compact trend card. The line chart gains zoom and pan, annotations, value labels you can choose, synced charts, small multiples, highest/lowest/average marks and a log scale, and the ring, arc and needle gauges get their own angles, centre text and scale numbers. It is a major version for one reason: on number charts, on and off states now read as 1 and 0, so a binary sensor on a line, area or column chart draws a step where it used to draw nothing (see Changed). Every other existing card draws as before.

Fixed

These were found while bringing all the charts together and fixed before release; none of them reached a published version.

  • Small multiples on a log scale break the line at zero. Each small chart drew its zero and negative readings on the log axis; they are now gaps, as on the full-size chart, and a chart with nothing above zero says so. (#111)
  • Switching style no longer leaves a group_by the new chart can't read. group_by groups entities by floor or area on the treemap, sunburst, icicle and radar, and readings by hour or day on the history charts. Picking one kind of style on a card set up for the other kept the old value and showed an error; the editor now drops it. (#111)
  • Editor labels no longer change depending on which charts loaded first. Editor strings are shared, and several charts registered the same one with different text, so the last to load relabelled the others: the line chart's value-labels switch could read "Highest and lowest labels", the gauges' start angle the rings' text, and the cases below. Each field now keeps its own label. (#111)
    • Rings and pie cards with center: total (or average) were rejected as "center must be one of: value, band, name, text, none" once the gauge options went in, because the gauge options were checked on every card. They are now read only by the ring, arc and needle styles.
    • The dumbbell, slope and waterfall editors offered calendar periods, period offsets, previous/next buttons and grouping, which those charts ignore. Their Chart section now shows only how far back and the source.
    • The treemap, sunburst, icicle and radar editors labelled Group by as "Group readings by" (the history charts' label) depending on which charts loaded first. They now keep their own label.
    • Direction options read differently from chart to chart (Rows, Columns, Up, On their side) and could swap labels with each other. The dumbbell, waterfall, lollipop and box plot now all say Direction, with Across and Upright.
    • The slope chart's per-entity Group could be relabelled by the trend card's "No background" option; it now keeps its own label.
    • The pie's "In the middle" choices could be relabelled by the 24-hour clock's ("Time on" for Total); each now keeps its own.
  • The beeswarm's hover names the lowest and highest readings when dots are placed by value, instead of "Earliest – latest", which now shows only for time of day. (#111)
  • The 24-hour clock draws a text sensor as states. An entity without a unit got a ring of number bars even when its state was a word (a washer's "washing"), so the ring stayed empty. (#111)
  • A long sunburst total wraps its unit under the number instead of running over the inner ring. (#111)
  • The log scale is offered on the line chart only. It had landed in the axis options every history chart shares, so columns, stacked areas and the climate chart offered it although their bars and fills stand on zero. (#111)

Added

Pie and donut

  • A card can now show how a total splits into parts as a pie or a donut. Set style: pie (or pick Pie / donut under Parts of a total in the Style section). The entities become slices of one circle, sized by their current values, with a legend beside it giving each one's colour, name, value and share. On a narrow card the legend goes below. (#104, closes #15)

    type: custom:chartdeck-card
    style: pie
    title: Energy today
    center_label: kWh today
    entities:
      - entity: sensor.solar_energy_today
        name: Solar
      - entity: sensor.grid_energy_today
        name: Grid
      - entity: sensor.battery_energy_today
        name: Battery
    • It's a donut by default, with the total of its slices in the middle. The line under the total is center_label, or the unit when every entity shares one. center: none leaves the middle empty, and shape: pie draws a full pie.
    • Shares are whole percentages that always add up to 100. show_percent: false hides the share column.
    • color_by: series (the default) gives each entity its own colour, in the same order as the history charts, unless it has its own color. color_by: bands colours each slice by its colour band, and color_by: shades gives every slice a shade of shade_color (a palette name or CSS colour, primary by default).
    • gap (0 to 10, default 2) sets the space between slices. On a pie the gaps are lines in the card's background colour, so they stay the same width all the way to the centre. On a donut each slice is shortened instead. rounded: true gives donut slices round ends, and gradient: true fades each slice lighter towards the middle.
    • Only positive numbers become slices. Unavailable, missing, zero and negative entities stay in the legend with a hollow swatch and no share, so nothing silently disappears. With nothing to draw, the card shows an empty ring.
    • Tapping a slice or a legend row runs the entity's tap action (more-info by default). Tapping a slice to drill into its own parts isn't in this release; a navigate tap action to a view of the parts does the job meanwhile.
    • In the editor: Chart section, with Shape, Colour, In the middle, Line under the total, Space between slices, Shade colour, Rounded ends, Gradient fills and Show each share as a percentage.

Rings

  • Several values can now share one dial as concentric rings. Set style: rings (or pick Rings under Parts of a total). Each entity is its own ring, nested inside the others, filled to its value between its min and max: phone, tablet and watch battery in one dial, or progress on a few goals. The average sits in the middle, with a legend beside the dial. (#104, closes #16)

    type: custom:chartdeck-card
    style: rings
    title: Batteries
    start_angle: -120
    end_angle: 120
    entities:
      - entity: sensor.phone_battery
        name: Phone
      - entity: sensor.tablet_battery
        name: Tablet
      - entity: sensor.watch_battery
        name: Watch
    • The dial sweeps from the top round to 270° by default. start_angle and end_angle (degrees clockwise from the top, -360 to 360) change it; the end must be after the start and at most a whole turn after it. A dial that doesn't reach the bottom is cropped, so a half dial doesn't leave an empty band under it.
    • center shows the average (default), the total or none. Both count only the entities that are available.
    • Rings get thinner as there are more of them, so the middle always has room for the number. rounded_ends: false squares off their ends, and color_by: bands colours each ring by its colour band.
    • An unavailable or missing entity keeps its ring's track with no fill, and its legend row shows the state.
    • In the editor: Chart section, with Start angle (0 is the top), End angle, In the middle, Colour and Rounded ends.

Pictograph

  • A count can now be drawn as a row of icons, so "7 of 10" reads at a glance. Set style: pictograph (or pick Pictograph under Parts of a total). Each entity is a row of repeated icons, filled up to its value, with the value and the most it can be beside them ("7 / 10"): chores done today, glasses of water, people at home. (#104, closes #17)

    type: custom:chartdeck-card
    style: pictograph
    title: Today
    entities:
      - entity: counter.glasses_of_water
        name: Glasses of water
        icon: mdi:cup-water
        max: 8
      - entity: sensor.chores_done
        name: Chores done
        max: 10
    • The row runs from the entity's min to its max. When that range is 20 or less, each icon stands for one unit, so a max of 10 gives ten icons; wider ranges get ten icons. per_icon sets what each icon stands for yourself. A row never has more than 100 icons; the scale stretches instead.
    • A fraction part-fills the last icon (5.5 of 8 glasses fills five and a half). partial: false fills whole icons only.
    • Icons are clustered in fives so they can be counted, and a cluster wraps as a whole on a narrow card. group_size (0 to 50) changes the cluster size, and 0 turns clusters off.
    • The icon is the entity's own icon if it has one, else unit_icon, else the entity's usual state icon, so each row can use a different icon.
    • An unavailable or missing entity shows a row of empty icons and its state. Tapping a row runs its tap action.
    • In the editor: Chart section, with Icon (each entity can have its own), Each icon stands for (empty: automatic), Icons per group (0: no groups), Colour and Part-fill an icon for fractions.

Waffle

  • A share can now be shown as a waffle: a 10 by 10 grid where each square is 1 %. Set style: waffle (or pick Waffle under Parts of a total). Squares fill from the bottom row up. It suits "how much of today's energy came from solar" or "how full is the storage". (#104, closes #18)

    type: custom:chartdeck-card
    style: waffle
    title: Where today's energy came from
    entities:
      - entity: sensor.solar_energy_today
        name: Solar
      - entity: sensor.grid_energy_today
        name: Grid
    • With one entity the waffle fills to its value between its min and max. With several, the 100 squares are split by their share of the total, always adding up to exactly 100.
    • The first entity's share is shown in large type beside the grid ("64 %", "Solar"), above a legend of every entity's name, value and share. headline: false hides the large share, and show_percent: false hides the shares in the legend.
    • waffles: each draws one small waffle per entity, side by side, each with its name and percentage.
    • Only positive numbers take squares. Unavailable, missing and negative entities stay in the legend with a hollow swatch and no share, or show as an empty small waffle with their state.
    • In the editor: Chart section, with Waffles, Colour, Show the first share in large type and Show each share as a percentage.

All four grow in when the card appears and move to their new size when a value changes. Animation is off when the card's animate option is off or the browser asks for reduced motion.

Funnel

  • A card can now show stages that narrow down as a funnel or a pyramid. Set style: funnel (or pick Funnel under Parts of a total in the Style section). Each entity is a stage as wide as its value against the largest one, with its name and value in a column beside the shape, and its percentage of the first stage inside it. It suits values that are each a share of the last: solar produced, then used in the house, then charged into the car. (#111, closes #29)

    type: custom:chartdeck-card
    style: funnel
    title: Solar today
    entities:
      - entity: sensor.solar_energy_today
        name: Produced
      - entity: sensor.solar_self_used_today
        name: Used at home
      - entity: sensor.solar_to_car_today
        name: Charged the car
    • shape: pyramid puts the first stage at the bottom, with the top one coming to a point.
    • percent_of: previous shows each stage as a share of the stage before, and percent_of: none hides the percentages. A percentage that would divide by nothing is left out.
    • color_by: bands colours each stage by its colour band; on light fills the percentage switches to dark text. Names and values follow the Show name and Show value switches.
    • An unavailable, missing, zero or negative stage is drawn as an empty dashed outline with its state beside it.
    • In the editor: Chart section, with Shape, Percentages and Colour.

Waterfall

  • A card can now show how a total is built up or worn down, step by step. Set style: waterfall (or pick Waterfall under Parts of a total). Each entity is a step that lifts or lowers a running total, joined by dashed lines at the running level, with an end bar showing where the steps finished. Rises are green and falls red from the theme. (#111, closes #26)

    type: custom:chartdeck-card
    style: waterfall
    title: This month's bill
    steps: current
    entities:
      - entity: sensor.heating_cost_month
        name: Heating
      - entity: sensor.car_charging_cost_month
        name: Car
      - entity: sensor.solar_export_credit_month
        name: Solar export
        invert: true
    • By default a step is how much the entity changed over the chart's period (its last reading less its first), from history or long-term statistics. steps: current uses each entity's current value instead, for sensors that already hold a part, and then no history is loaded.
    • start_from_first: true turns the first entity into a Start bar from its reading at the start of the period, for "battery charge through the day". Per entity, invert: true makes it count down, for meters that count energy used.
    • total: false leaves the end bar out, and orientation: horizontal draws rows instead of columns.
    • The period is a rolling span (period.last, period.unit) and source picks history or statistics; calendar periods and grouping don't apply to this chart.
    • A step with no number (unavailable, missing, or no readings in the period) adds nothing and is drawn as a dashed outline with its state.
    • In the editor: Chart section, with the period and source, Each step is, Direction, Start from the first entity's reading at the start of the period and Show the total at the end, then a Counts down switch for each listed entity.

Treemap

  • A card can now show many parts of a whole as a treemap, grouped by floor, room or your own groups. Set style: treemap (or pick Treemap under Parts of a total). Each entity is a rectangle sized by its value, packed so the rectangles stay close to square, with a total above the map when the entities share a unit. (#111, closes #34)

    type: custom:chartdeck-card
    style: treemap
    title: Power now
    group_by: [floor, area]
    entities:
      - sensor.oven_power
      - sensor.fridge_power
      - sensor.tv_power
      - sensor.heater_power
    • group_by picks any of floor, area, device and label from Home Assistant's registries, nested in that order, so [floor, area] gives a box per floor holding a box per room. An entity's own group text wins over it, with a slash for two levels: Ground floor / Kitchen. An entity with no area (or floor, and so on) goes under Other.
    • Each group gets a tinted box in its own colour with its name and total along the top, and its tiles share that colour. color_by: bands colours every tile by its colour band instead.
    • Entities with no reading are listed under the map, still tappable. Zero and negative values get no tile.
    • The map is laid out for the card's real width, and again whenever the card is resized.
    • In the editor: Chart section, with Colour, Group by, Tap a group to show what makes it up, and Own group for each listed entity.

Sunburst and icicle

  • Two new charts draw the card's entities as a hierarchy, such as house, floor, room and device power. Set style: sunburst or style: icicle (or pick them under Parts of a total). The sunburst draws a ring per level round the total, each ring splitting its parent into what makes it up; the icicle draws the same levels as columns, the total on the left. (#111, closes #35)

    type: custom:chartdeck-card
    style: sunburst
    title: Energy today
    entities:
      - entity: sensor.oven_energy_today
        group: Ground floor / Kitchen
      - entity: sensor.tv_energy_today
        group: Ground floor / Lounge
      - entity: sensor.heater_energy_today
        group: Upstairs / Bedroom
    • The levels come from group_by and each entity's own group, as on the treemap. Each top-level group takes the next series colour and its children fade from it level by level, mixed with the card's background so it works in light and dark themes. color_by: bands colours the entities by their colour band instead.
    • shape: half draws the top half of the sunburst only, with the total underneath, for a lower card. A legend under the sunburst names the top level with each total. Totals show only when the entities share a unit.
    • Entities with no reading are listed under the chart, still tappable. Zero and negative values take no space.
    • In the editor: Chart section, with Shape (sunburst), Colour, Group by, Tap a group to show what makes it up, and Own group for each listed entity.
  • Tapping a group in a treemap, sunburst or icicle now shows what makes it up. The chart redraws with that group as the whole, so a treemap of the house becomes a treemap of the kitchen. A row above the chart gives a back button named after the level above ("All", "Ground floor") and the group shown with its total; back goes up one level at a time. (#111, closes #44)

    drill_down: false   # turn it off
    • What can be tapped: a treemap's group boxes (their name strip and border), a sunburst's group segments and its legend items, and an icicle's group cells. Entities keep their own tap, hold and double-tap actions.
    • Groups work from the keyboard too (Enter or Space), and screen readers hear "Kitchen, 1.8 kW. Show what makes it up".
    • The parts of a group keep the colour that group has on the whole chart. Where a card has been drilled to is kept while its entities update; if that group disappears, the card goes back to the deepest group that still exists.
    • It is on by default, as Tap a group to show what makes it up in the Chart section of all three charts.

Radar

  • A card can now compare profiles of several values on a radar chart. Set style: radar (or pick Radar under Comparisons). The entities become spokes round a circle, the first straight up, with a shape joining their values. Each axis runs from its entity's own min to max, so readings in different units, such as CO2 and humidity, still make a fair shape. (#111, closes #32)

    type: custom:chartdeck-card
    style: radar
    title: Air quality
    entities:
      - entity: sensor.lounge_co2
        group: Lounge
      - entity: sensor.lounge_humidity
        group: Lounge
      - entity: sensor.bedroom_co2
        group: Bedroom
      - entity: sensor.bedroom_humidity
        group: Bedroom
    • scale: shared puts every axis on one scale from 0 to the largest value. fill: false draws outlines instead of shapes filled at a fifth of their colour.
    • Grouping (group_by, or each entity's group) makes one shape per group, named in a legend under the chart. Entities then line up on an axis by their own axis name, else their device class ("CO₂", "Humidity"), else their name.
    • An unavailable or missing entity keeps its axis, with its status shown muted, but gets no point; the shape skips it.
    • In the editor: Chart section, with Scale, Fill the shapes, Group by, and Own group and Axis name for each listed entity.

Polar area

  • A card can now compare values as slice lengths on a polar area chart. Set style: polar_area (or pick Polar area under Comparisons). It is like a pie where every slice gets the same angle and its length shows the value, which suits power by circuit or how often the wind blows from each direction. Slices go round from straight up, with three dashed rings labelled in the first entity's unit. (#111, closes #33)

    type: custom:chartdeck-card
    style: polar_area
    title: Energy by circuit
    color_by: shades
    color: green
    entities:
      - sensor.kitchen_energy_today
      - sensor.heating_energy_today
      - sensor.office_energy_today
    • scale: limits measures each slice between its own entity's min and max, and leaves the ring values off.
    • color_by: shades gives every slice a shade of color that gets stronger as the slice gets longer; color_by: bands uses each value's colour band.
    • Names and values are written round the outside and follow the Display switches. An unavailable or missing entity gets no slice and a greyed label.
    • In the editor: Chart section, with Scale, Colour and Colour for shades.

Grouped bars

  • A card can now compare categories with several values each, in grouped, stacked or 100 % stacked bars. Set style: grouped_bars (or pick Grouped bars under Comparisons). Each entity is a horizontal bar; entities with the same group sit in one row, and entities with the same series share a colour, listed in a legend under the chart. (#111, closes #24)

    type: custom:chartdeck-card
    style: grouped_bars
    mode: stacked
    entities:
      - entity: sensor.kitchen_heating_energy
        group: Kitchen
        series: Heating
      - entity: sensor.kitchen_lights_energy
        group: Kitchen
        series: Lights
      - entity: sensor.lounge_heating_energy
        group: Lounge
        series: Heating
    • mode: stacked piles each row into one bar with its total; mode: percent stacks each row to 100 % and shows each segment's share inside it when there is room.
    • All rows share one scale, always including zero. Negative values run left of a zero line. The card's sort orders rows by their total, and rows slide to their new place as values change.
    • color_by: bands colours each bar by its colour band. An entity's own color overrides its series colour.
    • Unavailable and missing entities draw no bar but keep their row and say why.
    • In the editor: Bars and Colour in the Chart section; Row, Series and Bar colour in each entity's own options.

Bullet and lollipop

  • Two new charts compare values against their targets: bullet and lollipop. Set style: bullet or style: lollipop (or pick them under Comparisons). Bullet draws a row per entity: a track from its min to max with its colour bands as ranges behind the bar, the value bar, a line at the target and the value on the right. Lollipop draws a stem with a dot at the value, upright in columns or across in rows, with a target as a hollow ring. (#111, closes #38)

    type: custom:chartdeck-card
    style: bullet
    entities:
      - entity: sensor.solar_energy_today
        name: Solar
        max: 30
        target: 24
    • Bullet ranges are grey shades that deepen band by band, or the bands' own colours, faint, with ranges: colours. The bar takes the colour of the band the value is in.
    • Lollipop's orientation: horizontal draws rows instead of columns.
    • Both use each entity's own min and max, so values below zero grow left of (or below) the zero point when min is negative. Targets can be a number or an entity.
    • Unavailable and missing entities keep their track but draw no bar, dot or target, and say what is wrong where the value goes.
    • In the editor: Ranges behind the bar (bullet) and Direction (lollipop) in the Chart section.

Slope

  • A card can now compare each entity then and now on a slope chart. Set style: slope (or pick Slope under Comparisons). Each entity is one line from its value at the start of the period to its value now, so it is easy to see which went up and which went down. Rises are red and falls green, or the other way round with increase: good. (#111, closes #28)

    type: custom:chartdeck-card
    style: slope
    title: This month against last
    measure: change
    period:
      last: 1
      unit: month
    source: statistics
    entities:
      - sensor.house_energy
      - sensor.heat_pump_energy
    • measure: change is made for meters: the left end is how much the reading rose over the previous period and the right end how much over the latest one, so a one-month period gives this month against last month. A meter that resets inside a period gives a wrong rise, which is not corrected.
    • color_by: group colours lines by each entity's group, with a legend; an entity's own color wins.
    • The headings say "24 hours ago | Now" or "Previous month | Last month". The right-hand labels show the change in per cent, hidden on narrow cards, and labels are pushed apart so they never overlap.
    • An entity with no reading at one end gets a lone dot; one with neither is left out.
    • In the editor: Chart section, with the period and source, Compare, Colour and A rise is; Group in each entity's own options.

Dumbbell

  • A card can now compare two or three values per entity on a dumbbell chart. Set style: dumbbell (or pick Dumbbell under Comparisons). Each entity is a row with its values as dots on a shared axis, joined by a bar. By default the dots are the lowest and highest reading over the period, with the current value marked between them as a ring. (#111, closes #27)

    type: custom:chartdeck-card
    style: dumbbell
    ends: target
    entities:
      - entity: sensor.lounge_temperature
        target: input_number.lounge_set_point
    • ends: then compares the reading at the start of the period with now, such as a week ago against today. ends: target compares the entity's target (a number or an entity) with its current value, loads no history and draws straight away.
    • show_now: false hides the current-value ring in range mode, and orientation: vertical draws columns instead of rows.
    • The axis has round tick values, with the unit shown once beside the legend when every entity shares it. Low is drawn in the theme's info colour and high in its error colour.
    • Unavailable and missing entities keep their row with their status text.
    • In the editor: Chart section, with Compare, Direction, the period and source (hidden for a target) and Mark the current value.

Gauges

  • Ring, arc and needle gauges can now set their angles, what sits in the middle, and numbers along the scale. start_angle and end_angle set where the arc starts and ends, in degrees clockwise from the top; leave either out for the style's usual end. center picks the value (as before), the colour band's label, the entity's name, your own center_text, or nothing. tick_labels: true writes round numbers along a needle's scale. With none of them set the gauges draw exactly as before. (#111, closes #46)

    type: custom:chartdeck-card
    style: needle
    start_angle: -120
    end_angle: 120
    center: band
    tick_labels: true
    entities:
      - sensor.hot_water_temperature
    • The end must come after the start, and the sweep can be at most 360 degrees. The drawing is cropped to the arc, so a half-circle arc leaves no empty space below it.
    • center: band draws the band's label in the band's colour, or the value when the band has no label. center: name leaves out the name under the gauge.
    • The options are the card's, so every gauge on a card is drawn the same way, including entities added by an include rule. Unavailable and missing entities keep their status text whatever the centre shows.
    • In the editor: the Style section, under the style picker while a gauge style is chosen, with Start angle, End angle, In the middle, Text and Numbers on the scale.

Histogram

  • A card can now show how long a sensor spent in each range of values. Set style: histogram (or pick Histogram under Distributions in the Style section). Each bar is a range of values, and its height is the share of the time the entity spent there: how long the living room sat below 18 °C this week, or how a response time is spread. (#106, closes #19)

    type: custom:chartdeck-card
    style: histogram
    title: Living room this week
    period:
      last: 7
      unit: day
    entities:
      - entity: sensor.living_room_temperature
        name: Living room
    • Bins count time by default (count: time). History records changes, not samples: a room at 20 °C all day that flickers to 21 °C ten times in a minute has ten rows at 21 and one at 20. Counting rows would say it was mostly 21; adding up how long each value held says 20, which is what the room was. Each value counts until the next reading (the last one until now, or the end of the period), and time spent unavailable counts nothing.
    • count: readings counts rows instead, for sensors where each reading is an event. The value carried in from before the period and the copy carried to its right edge are not counted. From long-term statistics each row counts one period, so a missing row is missing data rather than a long-held value. With group_by set, each group counts for its own length.
    • The bin width is a round number (1, 2 or 5 × 10ⁿ) that suits the card's width. bin_width sets it yourself, with edges on its multiples, and bins splits the readings into exactly that many bins from the lowest to the highest (1 to 100). bin_width wins when both are set. x_min and x_max fix the range; readings outside it are left out.
    • show_as: percent (the default) draws each entity's share of its whole; show_as: total draws the hours, or the number of readings.
    • Two or more entities sit side by side in each bin, or over each other with bars: overlap, see-through and outlined. color_by: bands colours each bin by the colour band its middle falls in.
    • Hovering or touching a bin shades it and lists each entity's share and time there.
    • In the editor: Chart section, with Count, Show as, Number of bins (empty: automatic), Bin width (wins over the number), Lowest value across, Highest value across, Two or more entities, Colour and Value labels along the bottom. Each entity has a Bar colour.

Scatter

  • One sensor can now be plotted against another as dots. Set style: scatter (or pick Scatter under Distributions). The first entity goes along the bottom, and every other entity is plotted up the side against it, one coloured series each: outside temperature against heating power, say. (#106, closes #20)

    type: custom:chartdeck-card
    style: scatter
    title: Heating against outside
    group_by: hour
    entities:
      - entity: sensor.outside_temperature
        name: Outside
      - entity: sensor.heat_pump_power
        name: Heat pump
    • Readings are paired in time. At every moment any of the sensors changed, each one's value is the last it reported. Moments when one of them was unavailable, or hadn't reported yet, are left out, and so is the reading the chart carries on to its right edge.
    • With group_by set, each group is one dot (an hour's average outside temperature against that hour's heating). This is the better way to compare a fast sensor with a slow one.
    • against: time plots each entity's readings over time as dots, on the usual time axis.
    • dot_size (2 to 30 px, default 6) sets the dot size. jitter (0 to 20 px) nudges each dot a steady random amount, worked out from the reading's own time, so readings that land on top of each other stay visible and a dot stays put as new readings arrive. x_min and x_max fix the range along the bottom.
    • Hovering or touching the chart picks the nearest dot and shows its time and both readings.
    • With fewer entities than the chart needs, it shows a message saying what to add. A missing or unavailable entity just has no dots.
    • In the editor: Chart section, with Along the bottom, Dot size (px), Jitter (px), Lowest value across, Highest value across and Labels along the bottom. Each entity has a Dot colour.

Bubble

  • A scatter can now size each dot by a third sensor. Set style: bubble (or pick Bubble under Distributions). The first entity goes along the bottom, the second up the side, and the third sets the size of each bubble: temperature against humidity, sized by CO₂. (#106, closes #21)

    type: custom:chartdeck-card
    style: bubble
    title: Office air
    group_by: hour
    entities:
      - entity: sensor.office_temperature
        name: Temperature
      - entity: sensor.office_humidity
        name: Humidity
      - entity: sensor.office_co2
        name: CO2
    • The three are paired in time as on the scatter chart. Grouping by hour or day gives one bubble per group, which keeps a busy sensor from burying the chart.
    • A bubble's area, not its width, grows with the size reading, from the smallest bubble at the lowest reading in view to the largest at the highest. min_size and max_size (2 to 80 px, default 6 and 32) set those sizes.
    • Larger bubbles are drawn first so small ones stay on top, all half see-through. A legend under the chart shows the smallest and largest bubble with the readings they stand for. The bubble colour is the second entity's color.
    • Hovering or touching the chart shows all three readings and the time.
    • With fewer than three entities the chart shows a message saying what to add. A missing or unavailable size entity leaves no bubbles.
    • In the editor: Chart section, with Smallest bubble (px), Largest bubble (px), Jitter (px), Lowest value across and Highest value across.

Heatmap

  • A card can now show when something happens, as a grid of coloured cells. Set style: heatmap (or pick Heatmap under Distributions). By default it draws 7 rows of weekdays by 24 hours, so a house's power shows the busy evenings at a glance. A calendar layout shows a cell per day for a whole year. (#106, closes #22)

    type: custom:chartdeck-card
    style: heatmap
    title: House power by hour
    entities:
      - entity: sensor.house_power
        name: House
    • grid: hours (the default) groups readings by hour in Home Assistant's time zone, then averages every Tuesday 14:00 into one cell. Rows start on the user's first weekday. With no period set it covers the last 4 weeks of history.
    • grid: calendar draws a cell per day, a column per week, weekdays down the side and month names along the bottom, like a contribution graph. With no period or source set it covers the last 12 months of long-term statistics, since history rarely reaches back a year.
    • Readings in a cell are averaged (aggregate: mean). For an energy meter, set aggregate: change. The layout sets the grouping, so group_by is ignored.
    • Colour is a smooth scale of the entity's colour, faint for the lowest value and full for the highest, or between color_min and color_max. color_by: bands uses the entity's colour bands instead. A legend under each grid shows the gradient with its ends, or the bands; legend: false hides it.
    • cell_shape is rounded (the default), square or hexagon, and cells keep their shape at any card width. Hours or days with no readings are drawn in the empty track colour, not as zero.
    • Each entity gets its own grid, scale and legend. Hovering or touching a cell shows its time and value and, for the hours grid, how many days were averaged. Unavailable and missing entities draw an empty grid.
    • In the editor: Chart section, with Layout, the period and source, Combine with, Colour, Cells, Lowest colour at, Highest colour at and Legend.

Box plot

  • A card can now show how a sensor's readings spread, as box plots. Set style: box (or pick Box plot under Distributions). Each box shows the median, the quartiles and the whiskers of an entity's readings over the period: one box per entity, or one per hour, day, week or month with group_by, with several entities side by side in their colours. (#106, closes #23)

    type: custom:chartdeck-card
    style: box
    title: Temperatures per day
    group_by: day
    period:
      last: 7
      unit: day
    entities:
      - entity: sensor.inside_temperature
        name: Inside
      - entity: sensor.outside_temperature
        name: Outside
    • Each value counts for as long as it held, so a room that sat at 20 °C all day and flickered to 30 °C for a few minutes has a median of 20. The value carried in from before a group counts from its start, unavailable time doesn't count, and the current group stops at now.
    • From long-term statistics, hourly rows are read (five-minute rows for hourly boxes). Each row counts once, and its own min and max widen the box's lowest and highest.
    • whiskers: tukey (the default) reaches 1.5 times the box's height and draws readings beyond it as outlier dots; whiskers: range reaches the lowest and highest.
    • orientation: horizontal turns the boxes on their side with the names up the side. readings: true draws each reading as a dot over its box, at most 120 per box, always in the same place.
    • Hovering or touching a box shows its highest, quartiles, median, lowest, average and number of readings.
    • In the editor: Chart section, with the period and source, Group readings by, Boxes, Whiskers reach and Show each reading. Each entity has a Box colour. Grouping only sets the boxes' boundaries here, so there is no Combine with choice.

Range area

  • A history chart can now shade each period's lowest to highest reading, with the average drawn through it. Set style: range_area (or pick Range area under History charts in the Style section). It shows how much a value moved, not just where it was: a day's temperature spread, power that spikes and drops within the hour. (#111, closes #13)

    type: custom:chartdeck-card
    style: range_area
    title: Outside this week
    period:
      last: 7
      unit: day
    entities:
      - entity: sensor.outside_temperature
        name: Outside
    • It reads long-term statistics by default (source: statistics), which keep each period's lowest, average and highest reading, so a range reaches back months. From history, readings are grouped by hour when the period is two days or less, otherwise by day, unless you set group_by.
    • The band is see-through in the series colour and outlined top and bottom; where a sensor was unavailable it breaks, as a line does. mean: false draws the band without the average line.
    • Hovering or touching shows each entity's lowest – highest for the period under the pointer, then its average.
    • In the editor: Chart section, with Curve, Draw the average as a line and Line width. Each entity has a Colour, a Curve and a dashed-line switch.

Sparklines

  • A card can now list its entities with a tiny trend beside each name and value. Set style: sparkline (or pick Sparklines under History charts). Each row is a line, a filled area or columns, scaled to its own readings so a small change still shows. (#111, closes #14)

    type: custom:chartdeck-card
    style: sparkline
    title: Rooms
    entities:
      - entity: sensor.living_room_temperature
        name: Living room
      - entity: sensor.outside_temperature
        spark: area
      - entity: sensor.humidity
        spark: column
    • spark (line, area or column) can be set on the card or per entity, so one card can mix them. Each row takes its value's colour band, as the bar styles do, unless the entity sets its own color.
    • Columns of raw readings would be hairlines, so an ungrouped column row is averaged by hour (a period of two days or less) or by day. When every row is a column row, the whole card is grouped, so statistics come at the right size.
    • bar: true adds the thin bar under each name and value, filled from min to max, with the target marked when Show target is on.
    • An unavailable entity keeps its row with its state and an empty sparkline. The icon, name and value follow the usual Show switches.
    • In the editor: Chart section, with Sparkline, Curve, Line width and Bar under the name and value. Each entity has a Sparkline kind and a Colour.

Streamgraph

  • A card can now show how several entities share a total over time, as flowing layers. Set style: streamgraph (or pick Streamgraph under Parts of a total). Which circuits used the house's power through the day, where the solar went. (#111, closes #30)

    type: custom:chartdeck-card
    style: streamgraph
    title: Power by circuit
    entities:
      - entity: sensor.kitchen_power
        name: Kitchen
      - entity: sensor.heating_power
        name: Heating
      - entity: sensor.lights_power
        name: Lights
    • By default the stack floats so each layer stays as level as it can (baseline: wiggle), with the biggest layers in the middle (stream_order: inside_out). baseline: centre centres the stack on zero, share scales every moment to 100 %, and zero is an ordinary stacked area with a value axis. stream_order: listed keeps your order, first at the bottom.
    • Readings are sampled about every 4 px across the plot: the time-weighted average of history, so a short spike counts for as long as it lasted, or the average of the statistics rows.
    • Names go on the layers where they are thick enough (labels: true), moved apart so they don't overlap, in dark text on light colours.
    • A gap or a negative reading counts as nothing, since a stack of shares can't show power flowing back out. A floating stream has no value scale, so its value labels, lines across and fixed range are left out, and hidden in the editor.
    • Hovering or touching shows each stream's value and share at that moment, and the Total.
    • In the editor: Chart section, with Shape, Order, Edges and Names on the streams. Each entity has a Colour.

Candlestick

  • A card can now draw open, high, low and close for each day, hour, week or month as candles. Set style: candlestick (or pick Candlestick under History charts). A rise is green, a fall red. Made for energy prices, and as useful for a battery, a tank or a temperature. (#111, closes #31)

    type: custom:chartdeck-card
    style: candlestick
    title: Electricity price
    entities:
      - entity: sensor.electricity_price
        name: Price
      - entity: sensor.house_energy
        name: Used
    • With nothing set it shows the last 14 days, one candle per day, from long-term statistics. group_by picks hour, day, week or month.
    • From history, open is the value held as the period began, close the last value in it, and high and low every value that held in it. From statistics, open and close are the first and last rows, high and low the highest max and lowest min. A period with nothing recorded, or one not yet begun, has no candle.
    • The first entity is the candles. The others are drawn in a strip along the bottom, each scaled to its own largest value, as columns or (underneath: line) lines, combined per period with aggregate; a meter's sum is how far its reading rose, resets handled.
    • up_color and down_color take a palette name or CSS colour.
    • Hovering or touching a candle shows its period with Open, High, Low and Close, and the value of each entity underneath.
    • In the editor: Chart section, with One candle per, Entities underneath: combine readings with, Colour when it rose, Colour when it fell and Draw the other entities underneath as. Each entity has a Colour.

Violin and raincloud

  • A card can now show how a sensor's readings are spread as a violin, or as a raincloud with every reading. Set style: violin (or pick Violin under Distributions). The shape is widest where readings were most common, with a box marking the median and middle half. shape: raincloud draws half a violin with the box and a dot per reading underneath. (#111, closes #36)

    type: custom:chartdeck-card
    style: violin
    shape: raincloud
    period:
      last: 7
      unit: day
    entities:
      - sensor.living_room_temperature
      - sensor.bedroom_temperature
    • Each value counts for as long as it held, so a room that sat at 20 °C all night and flickered to 21 °C was at 20. Grouped readings and statistics rows count once each.
    • Smoothing is automatic, and never finer than the sensor's own step, so a sensor that reports in 0.5 °C steps draws one smooth shape. bandwidth sets it in the entity's unit.
    • split_by: day, week or month draws one shape per entity per period. box, readings, orientation, value_axis, value_grid, value_min and value_max work as named.
    • Hovering or touching a shape shows its Median, Middle half, Lowest – highest and Readings.
    • In the editor: Chart section, with Shape, One shape per, Box with the median and middle half, Show each reading as a dot, Smoothing, Direction and the value-axis options. Each entity has a Colour.

Beeswarm

  • A card can now draw every reading as a dot, packed so none overlap, or every time something turned on by time of day. Set style: beeswarm (or pick Beeswarm under Distributions). (#111, closes #37)

    type: custom:chartdeck-card
    style: beeswarm
    title: When the door opens
    place_by: time_of_day
    period:
      last: 7
      unit: day
    entities:
      - binary_sensor.front_door
    • By value (the default), each reading taken in the period is a dot; the value carried in and the copy carried to the right edge get none. Dots are 6 px (dot_size, 2 to 16); a swarm too tall for its row is packed again with smaller dots. At most 400 dots per row, sampled evenly, and the row still says how many readings there were.
    • With place_by: time_of_day, binary sensors, switches, input booleans, lights, fans, sirens and automations draw a dot each time they turned on, at the time of day. The state carried in doesn't count, and nor does coming back on after being unavailable when it was on before.
    • size_by_value: true grows each dot's area with its value.
    • In the editor: Chart section, with Place each dot by, Dot size (px), Bigger dots for bigger values, Direction and the value-axis options. Each entity has a Colour.

State timeline

  • A card can now show when each entity was on, off, home, heating or anything else, as rows of coloured bars. Set style: timeline (or pick State timeline under History charts). (#111, closes #25)

    type: custom:chartdeck-card
    style: timeline
    period:
      calendar: day
    entities:
      - entity: binary_sensor.hallway_motion
        group: Hall
      - entity: binary_sensor.front_door
        group: Hall
      - entity: climate.lounge
        attribute: hvac_action
    • States read as Home Assistant words them ("Heat", "Away"). Each takes the theme's colour for its domain and state where there is one, else a built-in colour, else one picked from the word, so a state is the same colour on every row. Quiet states (off, closed, away, idle…) are faint; unavailable and unknown are gaps. state_colors sets your own.
    • bar_labels puts the state (default), how long it lasted, both or nothing on each bar. A legend of states sits above (header: hidden removes it).
    • Per entity, group gathers rows under a heading. A row whose states are all numbers with more than 8 different ones says a line chart suits it instead.
    • A timeline reads states, which statistics don't keep, so source must be history and group_by doesn't apply.
    • Hovering or touching shows every row's state at that time and how long it lasted. A line marks now.
    • In the editor: Chart section, with Text on the bars, the time labels and lines down, Legend of states and a State colours list. Each entity has a Group.

Climate

  • A card can now chart a thermostat: the room temperature, its set point, and shading wherever it was heating or cooling. Set style: climate (or pick Climate under History charts) on a climate entity. (#111, closes #59)

    type: custom:chartdeck-card
    style: climate
    title: Lounge
    entities:
      - climate.lounge
    • It reads current_temperature (the line), temperature (the set point, dashed), target_temp_low and target_temp_high (a shaded heat/cool range) and hvac_action (the shading) in one history call. Heating and preheating shade in the heating colour, cooling and defrosting in the cooling colour; idle and off aren't shaded. shade_fan: true also shades fan-only time.
    • One thermostat per chart: the first entity. Colours follow the theme unless set (current_color, set_point_color, heating_color, cooling_color).
    • Statistics don't keep a set point or action, so source must be history and readings can't be grouped. An entity that isn't a thermostat says so instead of drawing.
    • Hovering or touching shows the temperature, set point and action at that moment.
    • In the editor: Chart section, with Show the set point, Shade while heating or cooling, Shade while only the fan runs, curve, line width and the four colours.

Sankey

  • A card can now draw power or energy flowing between sources and loads, each band as wide as its flow. Set style: sankey (or pick Sankey (flow) under Parts of a total) and give each entity a from and a to node name. (#111, closes #82)

    type: custom:chartdeck-card
    style: sankey
    entities:
      - entity: sensor.solar_power
        from: Solar
        to: House
      - entity: sensor.grid_import_power
        from: Grid
        to: House
      - entity: sensor.heat_pump_power
        from: House
        to: Heat pump
    • It draws the current values. Columns come from the flows, so a node sits one column after the furthest node that feeds it; heights share one scale, and bands are ordered to cross as little as they can. Each node shows its total.
    • An unavailable or negative reading is a flow of 0; a node with nothing flowing isn't drawn, and with nothing flowing at all the card says so. Flows that would go round in a loop are refused with a message naming the loop.
    • link_color: auto colours a band by where it comes from, or by where it goes when it leaves a middle node; source and target always use one end. A flow's own color paints its band and node.
    • Hovering or touching a band shows "Solar → House" and its value; tapping runs the entity's tap action.
    • In the editor: Colour flows by in the Chart section. Each entity has Flows from, Flows to and Flow colour.

Wind rose

  • A card can now show where the wind came from and how hard, as a wind rose. Set style: wind_rose (or pick Wind rose under Distributions) with the wind direction first and the speed second. (#111, closes #83)

    type: custom:chartdeck-card
    style: wind_rose
    entities:
      - sensor.wind_direction
      - sensor.wind_speed
    • The direction can be degrees or compass points (N, SSW, "West"). Readings are paired in time, each pair weighted by how long it held, so a gusty spell that reports often doesn't count for more. Without a speed entity the petals only show how often the wind came from each way.
    • With nothing set it covers the last 30 days in 16 directions (sectors: 4, 8 or 16). Speed bands follow the sensor's unit (0–3, 3–6, 6–9, 9–12, 12+ in m/s; Beaufort 3 to 6 in km/h, mph and knots), or the card's colour bands. Readings below calm (0.5 m/s, or calm) count as calm, not a direction.
    • Beside the rose: the prevailing direction, the mean speed, the strongest reading and the calm share.
    • source: statistics reaches further back, but averages each hour's direction, which is only right across north for sensors with state class measurement_angle; the editor says so.
    • In the editor: Chart section, which says which entity is which, with Directions, Calm below, the hover switch and Compact.

24-hour clock

  • A card can now draw a day on a 24-hour dial, one ring per entity: when things were on, and numbers by the hour. Set style: day_clock (or pick 24-hour clock under History charts). A hand marks now and the rest of the day is dimmed. (#111, closes #84)

    type: custom:chartdeck-card
    style: day_clock
    title: Heating today
    entities:
      - climate.lounge
      - binary_sensor.hallway_motion
      - sensor.house_power
    • On/off entities (binary sensors, switches, lights, climate, covers, people…) fill their ring wherever they were active: on, open, home, heating and the like, or the states in their own active list. A climate ring reads hvac_action. Number entities draw a bar per hour (bucket: 15, 30 or 60 minutes): how much a meter rose, else the time-weighted average.
    • The dial follows the wall clock, so a clock-change day draws right. A state already on at midnight isn't counted as switching on then.
    • The middle shows the first on/off ring's time on (center: total), or the time and what it is doing now (now), or nothing. The legend gives each ring's time on and switch-ons, or its peak.
    • days: 7 draws the average day of the last week: on/off rings shaded by how many days each minute was on. period.offset and period.navigate step back a day (or a run of days) at a time.
    • In the editor: Chart section, with Days, Periods back, the buttons switch, In the middle, One bar for every and Combine with. Each entity has a Colour and Counts as on.

Trend

  • A card can now be a compact tile: the name, the value in large type, and its history filling the bottom edge to edge. Set style: trend (or pick Trend under History charts). Hover or drag along the graph and the big number shows the value at that moment. In a sections dashboard it takes a small tile (6 columns, at least 3, at least 2 rows) rather than the full width. (#111, closes #110)

    type: custom:chartdeck-card
    style: trend
    entities:
      - entity: sensor.living_room_temperature
        name: Living room
    • A line with a faded fill by default, one point every two hours (points_per_hour: 0.5), over the last 24 hours. graph: bar draws bars, graph: none the value alone; fill is fade, solid or none.
    • The options people know from mini graph cards work: points and labels (hover, always, never, or true and false), height per 500 px of width, extrema and average chips, hard and soft ("~0") bounds with min_range, a second axis per entity (y_axis: secondary), value_factor, alignment, font sizes, colouring the name, value or icon, group for no background, and icon_image.
    • Per entity: colour, curve, line width, aggregate, fixed_value, and show_* switches for the graph, line, fill, dots, legend and state.
    • Colour bands set on the card or entity colour the graph, blending between bands or (color_transition: hard) changing at each.
    • In the editor: every option is in the Chart section, and each entity's in its own options.

Line chart

These are options on the line chart (style: line). The other history charts don't take them.

  • You can now zoom into a line chart, pan around it, and steer it from an overview strip. Set zoom: true, then drag across the chart to zoom into a span, pinch with two fingers, or Ctrl + scroll (a trackpad pinch works too). Once zoomed, dragging and sideways scrolling pan, and a double click, a double tap or the Reset zoom button goes back to the whole span. One finger still scrubs the hover readout, and up and down still scroll the page. (#111, closes #40)

    type: custom:chartdeck-card
    style: line
    zoom: true
    overview: true
    period:
      last: 7
      unit: day
    entities:
      - sensor.living_room_temperature
    • Zoomed in, the chart draws only the readings in its window (and one either side) and fits the value axis to them. The shortest span is two groups when readings are grouped, otherwise five minutes.
    • overview: true adds a strip under the chart with the whole span and a window over the part on show. Drag the window to move it, drag its edges to resize it, or drag across the strip to choose a new one. Tap to centre it, double-tap to show everything. With the strip focused, the arrow keys move the window, up and down (or + and −) zoom, and Escape resets. The strip works with or without zoom.
    • The zoom lives on the card, not in its config. It starts again from the whole span when you step to another period or reload the dashboard.
    • In the editor: Chart section, Zoom and pan (pinch, Ctrl + scroll or drag) and Overview strip below the chart.
  • Annotations mark what isn't a reading: a target, a comfort range, a time of day, when something switched on, or a label on a reading. Add a list under annotations, each entry with a type. (#111, closes #41)

    annotations:
      - type: line
        value: input_number.heating_target
        label: Target
      - type: band
        from: 18
        to: 20
        label: Comfort
      - type: time
        times: "07:00"
        label: Wake
      - type: state
        entity: binary_sensor.window
        state: "on"
        shade: true
      - type: point
        at: max
        label: Peak
    zones: true
    • line draws a line across at value (dashed unless dash: false). band shades between from and to; leave one out to run to the chart's edge. value, from and to take a number or an entity whose state is the number, so a target can follow an input_number.
    • time draws a line down the chart at each of times: "07:00" for every day, or "2026-10-28 07:00" once, as a list or with commas.
    • state marks each time entity changes, or changes to state. shade: true also shades the stretches while it is in that state.
    • point labels a series' max, min, last or first reading, on the first series unless entity names another.
    • Every entry takes label and color. Defaults are red lines, green bands, grey times, amber states and primary-coloured points. Threshold lines widen the value axis, so a target off the readings' range still shows. Time and state labels share two rows along the top; above 60 marks from one entry only the lines are drawn.
    • zones: true shades the first entity's colour bands faintly behind the chart.
    • A mistake names the entry and what's wrong, such as "annotations[2].times" has "7am": use 07:00 or 2026-10-28 07:00.
    • In the editor: Chart section, Shade the severity bands behind the chart, then the Annotations list, with a button for each kind under Add an annotation:.
  • Value labels can now go on just the readings that matter, and keep out of each other's way. With labels: true, labels_show picks all (as many as fit), last, minmax (highest and lowest) or ends (first and latest), and labels_position puts them auto (above peaks, below dips), above, below or center. (#111, closes #42)

    labels: true
    labels_show: minmax
    labels_position: auto
    • Labels are placed most important first (the latest reading, then the highest and lowest, then the rest), each on the first side clear of the others and inside the plot. One with no clear side is left out, unless labels_overlap: true.
    • Gaps are never labelled, nor are the values carried in at the left edge and on to the right edge. Labels at the plot's edges line up with them instead of running off.
    • Before 2.0, labels: true labelled every reading and gave up on a series with more than 40. That limit now only applies with labels_overlap: true and labels_show: all.
    • In the editor: Chart section, Show values on the points, then Which readings, Label position and Let labels overlap.
  • Line charts in the same sync group now share the pointer and the period steps. Give each card the same sync name. Hovering one shows the guide and hover box at the same moment on all of them, and stepping back with the previous button steps back every chart in the group that covers the same kind of period. Cards find each other anywhere on the dashboard. (#111, closes #43)

    sync: house
    • A chart doesn't show another's moment while your own pointer is on it. In small multiples every title shows its reading at the shared moment. Zoom is not shared.
    • In the editor: Chart section, Sync group (charts with the same name share the pointer and period steps).
  • A line chart can now draw each entity as its own small chart in a grid. Set multiples: true. The small charts share the time axis; each has the entity's name and value as its title, and while the pointer is over any of them every title shows its reading at that moment. (#111, closes #45)

    multiples: true
    multiples_scale: auto
    multiples_columns: 3
    entities:
      - sensor.living_room_temperature
      - sensor.bedroom_temperature
      - sensor.kitchen_temperature
    • multiples_scale: auto (the default) uses one value scale when every entity reads in the same unit and a scale each when they don't; shared and independent force either.
    • multiples_columns sets how many go across (1 to 6). Left empty, as many fit as are at least 150 px wide.
    • An entity with no readings in the span says so in its own place. The period buttons stay above the grid.
    • Each small chart draws its line, value labels and hover readout. Zoom, the overview strip, annotations and highest/lowest marks are not drawn in this mode.
    • In the editor: Chart section, A small chart for each entity, then Value scale and Columns (empty fits the card).
  • A line chart can mark each series' highest and lowest reading and its average. extremes.max and extremes.min put a ringed dot and a label ("High 14.2 °C · 14:10") on the reading; extremes.average: line draws a dashed line across at the average, labelled at the right edge, and figure shows the label alone. (#111, closes #57)

    extremes:
      max: true
      min: true
      average: line
    entities:
      - entity: sensor.living_room_temperature
      - entity: sensor.outside_temperature
        extremes: false
    • Only readings taken in the period count, not gaps or the value carried in from before it.
    • On raw history the average is weighted by how long each value held, up to now, so a room at 20 °C all night that flickered to 25 °C for a minute averages near 20. Grouped and statistics readings get a plain mean.
    • Labels keep clear of the dots, each other and a header laid over the chart. Times follow your language, clock and time zone; a grouped reading names its day or month.
    • extremes: false on an entity leaves it out. Marks follow the zoom window.
    • In the editor: Chart section, Mark the highest reading, Mark the lowest reading and Average; while a mark is on, each entity's options have a Mark highest, lowest and average switch.
  • A line chart can now draw its values on a logarithmic scale. Set y_scale: log for readings that span several powers of ten, such as light from a dim room to full sun. (#111, closes #58)

    y_scale: log
    • Labels go at each power of ten, or at 1, 2 and 5 within a decade or two, with fainter gridlines between. Small ticks get the decimals they need (0.01) and large ones read short (10K, 1M).
    • Zero and negative readings are left as gaps in the line, and the hover readout still shows their value. A chart with nothing above zero says so. y_min and y_max must be above 0.
    • color_by: bands changes colour where the value is drawn on either scale.
    • Only the line chart takes it. Columns, areas and the other history charts stand on zero, so they always draw on even steps.
    • In the editor: Chart section, Value scale (Even steps or Logarithmic (powers of ten)).

Changed

  • Breaking: on and off now read as 1 and 0 on number charts. On a number chart (line, area, column, combined, histogram, beeswarm and the rest), an entity's history state on now reads as 1 and off as 0, so a binary sensor, switch or light draws as a 0/1 step on a line chart instead of nothing. Only the exact lowercase words on and off are read this way; other words (open, closed, home, heating) still read as no value. The same applies to live updates. Text charts (state timeline, 24-hour clock rings) keep the words. (#111, from #37)
  • The column chart's Rounded tops switch is now labelled Rounded ends. The pie's switch for round slice ends uses the same label, so the two editors read the same. The option is still rounded, and nothing about the columns changes. (#104)
  • Value labels on the line chart hide the ones that would overlap. labels: true used to drop every label on a series with more than 40 readings; it now shows as many as fit, and labels_overlap: true lets them overlap instead. (#111, closes #42)

Upgrading

If you have a binary sensor, switch or light on a line, area or column chart and don't want it drawn as a 0/1 step, remove it from that card or show it on a state timeline instead. Nothing else needs changing.

If you updated to 1.4.0 or 1.5.0 in the short time they were out, HACS offers 2.0.0 as the next update; your cards carry over unchanged.

Update through HACS, then hard-refresh the browser (Ctrl/Cmd + Shift + R) so the new card loads instead of a cached one. The console (F12) shows CHARTDECK 2.0.0 once it has.

New in the wiki:

Full changelog: v1.3.0...v2.0.0