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
type: custom:zlinky-cardInstall
- 1Open the repository in the Marketplace with the Add to Marketplace button above, or add
github.com/juju35/ha-zlinky-cardas a custom repository (category Dashboard). - 2Download it from the Marketplace.
- 3Reload the browser and add the card from the dashboard editor.
Gallery 8
Documentation
From the README Features
Features
- Two cards:
zlinky-cardand its mini versionzlinky-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 |
|---|---|
| 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.
Changelog
All 27 versions 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 Jnormalon Éco days; any otherHC J…/HP J…label taken for Sobriété until the meter's label is confirmed) or from a sensor given asentities.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 ESPHometeleinfosetup reads them. - ESPHome
teleinfoindexes 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
teleinfonamed 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_titleandshow_subtitleoptions (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_powersensor 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.