Home Assistant projects
All projects

ZLinky Card

Lovelace card · Home & energy
v1.13.0 · Nov 13, 2026 HA 2024.8.0+ Marketplace

The French Linky smart meter, through the LiXee ZLinky module.

Live power, load against your subscribed power, today's, yesterday's and this month's consumption with its cost, and a 24-hour curve. The LED blinks faster as power rises.

Highlights

  • Automatic discovery for ZHA and Zigbee2MQTT
  • Live power, current and voltage
  • Load gauge against the subscribed power, fixed or from a sensor, with thresholds you can set
  • Consumption and cost from long-term statistics, priced per tier or from a price sensor
  • 24 h power curve with the real peak of the day
  • Tempo colours and EDF Zen Flex day types (Éco, Sobriété, Bonus) of today and tomorrow, on the mini card too
  • ESPHome teleinfo too, its indexes found by their names
  • Contract comparison: your last 12 months priced as Base and as Off-peak / Peak
  • Three-phase meters: apparent power per phase, each phase measured against its share of the subscribed power

Works with

Brands & integrations

  • ZHA

Cards

zlinky-cardzlinky-mini-card
type: custom:zlinky-card

Install

  1. 1Open the repository in the Marketplace with the Add to Marketplace button above, or addgithub.com/juju35/ha-zlinky-card as a custom repository (category Dashboard).
  2. 2Download it from the Marketplace.
  3. 3Reload the browser and add the card from the dashboard editor.

Documentation

From the README

Features

Features

  • Two cards: zlinky-card and its mini version zlinky-mini-card (compact, a detail button unfolds the full card)
  • Automatic discovery of the ZLinky and its entities (ZHA with English or French entity IDs, Zigbee2MQTT TIC labels), each entity can be overridden
  • Live apparent power (or active power), with active power, current and voltage
  • Load gauge against your subscribed power (kVA, a number or a sensor), colored green / orange / red (thresholds adjustable)
  • Today, yesterday and this month's consumption from Home Assistant's long-term statistics, with the cost when a price per kWh is set
  • 24 h power curve with its peak (the highest reading, not the highest 5-minute mean), on a real time axis (a gap in the recorder's data shows as a break in the line)
  • Tempo contract: today's color (from the tariff period) and tomorrow's once announced (from DEMAIN, or any sensor naming a color)
  • EDF Zen Flex contract: today's day type, Éco, Sobriété or Bonus (from the tariff period, or a day-type sensor such as edf-zen-flex's) and tomorrow's
  • Contract comparison: your last 12 months of hourly consumption priced as Base and as Off-peak / Peak, with your prices and off-peak hours — which contract would have cost less, and by how much
  • Meter index, the tiers in use (off-peak / peak, Tempo… named as you like) and the injection index when you produce
  • Three-phase details on three-phase meters: apparent power (VA) and voltage per phase with the standard TIC (SINSTS1–SINSTS3), else current per phase, currents only with the historic TIC (IINST1–IINST3)
  • An animated Linky meter: its screen shows the live power and its LED blinks faster as the load rises
  • Tap any value to open its history
  • Visual editor in the dashboard UI (no YAML needed)
  • English, French, German, Spanish, Serbian (Cyrillic and Latin), Italian, Dutch, European Portuguese, Polish, Romanian, Danish, Swedish, Bulgarian, Russian, Ukrainian, Hungarian, Slovak, Czech, Slovenian, Latvian and Greek, follows the Home Assistant language
  • Light and dark theme compatible
  • Single file, no dependencies, ready for the Marketplace

Supported integrations

Supported integrations

Integration What the cards read
ZHA (built in) The ZLinky_TIC entities, English or French entity ids
Zigbee2MQTT The ZLinky_TIC entities, by their TIC labels

Both expose the same data to the cards: live power, current and voltage, load against the subscribed power, consumption and cost from the long-term statistics, meter index and tiers, injection, three-phase details.

Prerequisites

Prerequisites

  • Home Assistant 2024.8 or later
  • A ZLinky_TIC paired with ZHA or Zigbee2MQTT
  • The consumption tiles use the recorder's statistics: the energy sensors need a state_class (the ZLinky's have one). The curve uses the power sensor's statistics too, or, when it has none, its state history from the recorder

Configuration

Configuration

Visual editor#

Add the card from the dashboard (Add card → ZLinky Card). The first ZLinky found is picked automatically; change it with the ZLinky field, then set the subscribed power, the price and the sections to show. The Entities (advanced) panel lets you force any entity if auto-detection picks the wrong one: when none of the meter's sensors is recognised, the card says so ("No ZLinky sensor found") instead of showing the meter offline. Options left at their default are not written to the YAML.

Minimal#

type: custom:zlinky-card

Mini card#

type: custom:zlinky-mini-card
subscribed_power: 9

The mini card shows the meter, the live power, the load gauge, today's consumption (hidden with show_stats: false) and, on a Tempo contract, today's and tomorrow's colors as two dots (hidden with show_tempo: false). The detail button (top right) unfolds the full card; a click anywhere else on the page folds it back. It takes the same options as the full card, plus zoom.

In the Sections view, the mini card fits 6 columns (half a section, down to about 156 px on a phone): on a narrow card the meter gets smaller, the reading scales down, today's line wraps and the status pill keeps its colored dot only (the status stays in its tooltip). The full card needs 9 columns at least.

Full options#

type: custom:zlinky-card
device_id: a9b4cb527f0afb6cf4988dd5a3eee88b
name: Linky
subscribed_power: 9
load_warning: 50
load_critical: 80
price: 0.2016
tiers:
  - Off-peak
  - Peak
show_stats: true
show_graph: true
show_index: true
show_phases: true
show_logo: true
language: en
entities:
  apparent_power: sensor.lixee_zlinky_tic_puissance_apparente
  energy: sensor.lixee_zlinky_tic_consommation

Options reference#

Option Required Default Description
device_id ❌ Auto ZLinky device (the first ZLinky found is used if missing)
entity ❌ — Any entity of the ZLinky, used to find the device
name ❌ Linky Card title
show_title ❌ true Show the title in the header (e.g. false under a section heading of your own)
show_subtitle ❌ true Show the subtitle under the title
icon ❌ Illustration Replaces the meter illustration with an icon
subscribed_power ❌ 6 Subscribed power for the load gauge: a number in kVA, or a sensor giving it (in kVA, or in A like the historic TIC's ISOUSC: 1 A = 0.2 kVA, per phase on a three-phase meter so 1 A = 0.6 kVA there). In the visual editor, the Subscribed power sensor field replaces the number
load_warning ❌ 50 Share of the subscribed power (%) from which the load is moderate (orange)
load_critical ❌ 80 Share of the subscribed power (%) from which the load is high (red)
price ❌ — Price per kWh, shows the cost of each consumption (currency from Home Assistant): a number, a sensor giving the current price per kWh, or one price per tier
tiers ❌ Index 1… Names of the tiers, in order ([Off-peak, Peak], Tempo colors…)
show_stats ❌ true Today / yesterday / this month
show_graph ❌ true 24 h power curve
show_index ❌ true Meter index, tiers and injection
show_phases ❌ true Per-phase details (three-phase meters only)
show_logo ❌ true Meter icon in the header
show_tempo ❌ true Tempo colors, or Zen Flex day types, of today and tomorrow (only on those contracts; two dots on the mini card)
compare_base / compare_hc / compare_hp ❌ — Full card: the Base price and the Off-peak and Peak prices per kWh, for the contract comparison (all three and hc_hours turn it on)
hc_hours ❌ — Off-peak hours for the comparison, such as 22:30-06:30 or 01:00-07:00, 12:30-14:30
sub_base / sub_hchp ❌ — Monthly subscription of each contract, added to the comparison
zoom ❌ true Mini card only: detail button that unfolds the full card
language ❌ HA language en, fr, de, es, sr, sr-Latn, it, nl, pt, pl, ro, da, sv, bg, ru, uk, hu, sk, cs, sl, lv or el
entities ❌ Auto Override any detected entity: energy, power, apparent_power, current, voltage, current_b, current_c, voltage_b, voltage_c, apparent_power_a, apparent_power_b, apparent_power_c (apparent power per phase, SINSTS1…3), injection, tariff, tempo (today's Tempo color or Zen Flex day type, e.g. from an RTE Tempo or edf-zen-flex integration), tomorrow (tomorrow's), tier1…tier6

Price per tier#

On an off-peak / peak, Tempo or EJP contract, give price one price per tier, in the order of the meter's indexes (the same order as tiers and tier1…tier6). Each consumption tile then adds up each tier's kWh × its price, from the long-term statistics of each tier's index. An entry can also be a sensor giving the price per kWh (e.g. from your energy provider's integration). In the visual editor, the Price per tier field takes one value per line and replaces the single Price per kWh field.

# Off-peak / peak (HC, HP)
price: [0.1696, 0.2146]
tiers: [Off-peak, Peak]
# Tempo, in the TIC order: HCJB, HPJB, HCJW, HPJW, HCJR, HPJR
price: [0.1296, 0.1609, 0.1486, 0.1894, 0.1568, 0.7562]
# Zen Flex: off-peak / peak on Éco days, then on Sobriété days, then on Bonus days
tiers: [HC Éco, HP Éco, HC Sobriété, HP Sobriété, HC Bonus, HP Bonus]
price: [0.15, 0.20, 0.15, 0.75, 0.15, 0.20]  # your contract's six prices, in this order (Bonus as Éco, say)
# EJP (normal, peak), the peak price from a sensor
price: [0.1528, sensor.ejp_peak_price]

A tier without a price (a shorter list) takes the last price of the list; a sensor that is unavailable takes the closest price before it (or the first one). When only the total index has statistics (a single tier in use, or a tier's statistics missing), every kWh of the period is priced at the current tier's price, read from the tariff period (HC.., HPJB, HP BLEU, PM.., a tier number, or one of your tiers names), or at the first price. Yesterday's and this month's tiles then show no cost when the tiers' prices differ (the current tier's price says nothing of the tiers that period was spent in); today's cost stays an estimate at the current tier's price.

The Tempo colors show when the tariff period names one (HPJB, HC JR, HP BLEU…); tomorrow's reads Not known yet until it is announced. On Zen Flex, the indexes are EASF01 / EASF02 for Éco days (tiers 1 and 2), EASF03 / EASF04 for Sobriété days (tiers 3 and 4) and EASF05 / EASF06 for Bonus days (tiers 5 and 6), off-peak then peak; with ESPHome's teleinfo, indexes named after these periods (Index Eco Heures Creuses, Index Sobriété Heures Pleines, Index Bonus Heures Creuses…) are found by their names. The tariff period reads HC Jnormal / HP Jnormal on Éco days; any other HC J… / HP J… label is taken for a Sobriété day. The meter's label on a Sobriété day is not documented yet (#47), so a day-type sensor (entities.tempo, entities.tomorrow: eco / sobriete / bonus, ECO / SOBRIETE / BONUS or EDF's RAS / ZENF_PM / ZENF_BONIF) is the surest source, and the only one for Bonus days and tomorrow. Tiers are listed only when more than one carries an index. The phase section appears when phases 2 or 3 report a voltage, or, with the historic TIC (no voltage per phase), when the phase 2 and 3 currents are there. The Zigbee2MQTT distributor indexes EASF07–EASF10 are not mapped: every standard French contract (Base, off-peak/peak, Tempo) fits in tier1…tier6.

Contract comparison#

Base or Off-peak / Peak? Give both contracts' prices and your off-peak hours (in the visual editor: Compare Base and Off-peak), and the full card prices your last 12 months of consumption both ways, from the hourly long-term statistics of the total index (one query every 6 hours):

compare_base: 0.1952
compare_hc: 0.1635
compare_hp: 0.2081
hc_hours: 22:30-06:30
sub_base: 15.65
sub_hchp: 16.08

The section shows each contract's cost, the share of your consumption in off-peak hours and which one saves how much (About the same when they are less than 2 % apart), over the days the statistics cover (fewer than 365 the first year). Hours are read in Home Assistant's time zone; an hour counts as off-peak when its middle is (hourly statistics can't split 22:30). Tempo isn't compared: its cost depends on each past day's color, which the meter doesn't keep — on a Tempo contract, the consumption tiles already price each color with one price per tier.

Support

Support

If you find this project useful, you can support its development:

Buy Me a Coffee

1.13.0Nov 13, 2026Latest

Features

  • EDF Zen Flex (#47, asked by @mickael13160): the card shows today's day type, Éco, Sobriété or Bonus, as it shows the Tempo color, and tomorrow's from a day-type sensor. The day type comes from the tariff period (HC Jnormal / HP Jnormal on Éco days; any other HC J… / HP J… label taken for Sobriété until the meter's label is confirmed) or from a sensor given as entities.tempo / entities.tomorrow (edf-zen-flex, MyElectricalData, EDF's codes). The tariff period picks the tier of the day type for the price of the current tier: Éco on tiers 1 / 2 (EASF01 / EASF02), Sobriété on 3 / 4 (EASF03 / EASF04), Bonus on 5 / 6 (EASF05 / EASF06), off-peak then peak, as an ESPHome teleinfo setup reads them.
  • ESPHome teleinfo indexes named after the Zen Flex periods (…_index_eco_heures_creuses, …_index_sobriete_heures_pleines, …_index_bonus_heures_creuses…) are detected as tiers 1 to 6.

Fixes

  • The tariff period of ESPHome's teleinfo named in French (…_periode_tarifaire_en_cours) is now detected.
  • The calendar's name (NGTF, e.g. pointe mobile) is no longer taken for the tariff period.

1.12.0Nov 12, 2026

Features

  • show_title and show_subtitle options (also in the visual editor) hide the header's title and its subtitle, separately, for a card placed under a section heading of its own (asked in juju35/ha-vehicle-card#72).

1.11.1Nov 10, 2026

Fixes

  • Three-phase, subscribed power from ISOUSC (#45, reported by @julll190): on a three-phase meter, a subscribed_power sensor in amperes (the historic TIC's ISOUSC) is the current subscribed per phase, so 1 A now counts 0.6 kVA instead of 0.2 (25 A reads 15 kVA, not 5). The load gauge and the phase rows follow.

1.11.0Nov 10, 2026

Features

  • Three-phase, apparent power per phase (#43, suggested by @FredM67): with the standard TIC's SINSTS1/2/3, the phase rows show each phase's apparent power in VA and the gauge measures it against a third of the subscribed power, as the meter does, instead of the current converted at a fixed 230 V. New overridable entities apparent_power_a, apparent_power_b, apparent_power_c, detected from _sinsts1|2|3 (and ZHA's phase B / C apparent power). Without the three of them (historic TIC, ZHA) the rows stay in amperes.

Improvements

  • Currents read in whole amperes, as the meter reports them (IRMS, IINST); one decimal only when the source has one.
  • Three-phase: the hero's current and voltage chips are labelled L1, since they are phase 1's (IRMS1, URMS1), not totals.

1.10.2Nov 9, 2026

Improvements

  • Contract comparison: when Base and Off-peak / Peak are less than 2 % apart, the verdict reads About the same: €4.56 apart instead of naming a winner over a few euros a year.

1.10.1Nov 9, 2026

Maintenance

  • No code change: released again to check the installation from the Marketplace.