Where to buy this equipment?
Here is the link to his page dedicated to the ZlinkyTIC. I referenced the sellers and prices.
I open the box and check the received model

There are obviously two versions, one with internal antenna and one with external antenna.
The second is probably provided for when disturbances are generated and may need to move the antenna away from the housing.

The module is very simple, 3 rigid connectors, no instructions for use, I think it is a pretty good sign, it must be very simple.
On the back, we see a diagram that shows or puts the module in the Linky.
I will connect the module
I look at how the terminal blocks of the Linky and the module are marked, it is impossible not to understand:


I put ZigbeetoMQTT in pairing mode and connect the case, just press the black button to release the connect and slide the pins underneath.

The blue LED flashes, the pairing is underway, I go back to Zigbee2MQTT to see the result.
I check the status of the module using the LED
The LED can have three states, if it is not good at this stage, there is no need to go further.
- The LED flashes quickly several times = ZlinkyTIC is in pairing-waiting mode.

- LED flashes several times slowly = ZlinkyTIC encounters errors when acquiring Linky data. 😥

- The LED flashes once every 3 seconds = The ZlinkyTIC works properly. The device correctly decodes the Linky 😊

I'm trying a Zigbee2MQTT integration
The integration worked perfectly at first.

The module is detected in "ZLinky_TIC"
The detected version does not differentiate between V1 and V2, it does not matter

I will look at the values, everything is there, magical, in a few seconds.

I test the sensor in Home Assistant
I give it an understandable name: Linky in Zigbee2MQTT then I'll look it up in HA

And that's it, all the data is present in Home Assistant.

Meaning of each data
A small painting is much more telling. For the three-phase, the result will be different.

I disable all entities that are not useful to me
Here are the entities of the Linky device:

I am updating the module Zlinky_TIC


I launched it via Home Assistant, but it can be launched from Zigbee2MQTt, in both cases, we can see that the update is in progress in Zigbee2MQTT as well:

Be careful, the update is very long, you have to let … run
In the end, I am not sure why this update started, as version 14 was already installed before the update. It does not matter, everything went well and the update flag went back to off.

I look at the settings page in Zigbee2MQTT

I found this page, there are no parameters, I do not know if it is useful. When in doubt, I configure.
Note, Update, small error, do not set KWh to 0 but to 3 because those are K.

[Archive] I use a template for HC/HP
I give here the template that I had made a historical mode to retrieve the HC or HP info according to the schedules.
Indeed, before the installation of this new Zigbee module, I used a USB ICT module.
This module also provided me with an HC.. or an HP.. value in the sensor.linky _active _register _tier _delivered (PTEC) variable.
To do this, I use a template entity, in the template.yaml file, I add:
- sensor: - name: Single current _id tariff period: sensor.period _tarifaire _en _cours state: >- {% if is_state("sensor.linky _active _register _tier _delivered", "HP..") %} HP {% else %} HC {% endif %}
Change of mode Linky
There are two modes, History Mode and Standard Mode.
I had ICT equipment that was not compatible with Standard mode, so I never changed.
Apart from this new module, it also operates in Standard mode according to its documentation. The standard mode is much more complete.
I am therefore sending a message to EDF to change the mode:


- Online application made via the form on 03 November
- Reply on 04 November
- Switches to 05 November
Nothing to say, hat EDF!!

Switches from History Mode to Standard Mode
I must admit I skated a little on this switch to Zigbee and Home Assistant.
I tried to change the mode, to re-pair the … module The information did not go back, I spent a while there.
Finally, I closed everything, let it go for one night and took it back the next day, everything worked!
So you don't have to be in a hurry, there have to be … refresh cycles in short, it works, here are the screens.
Standard Mode Data
| ICT control | designation | unit | Default value | How | data type | size max |
|---|---|---|---|---|---|---|
| ADSC | Secondary address of the Counter | – | NULL | String | 12 because | |
| NGTF | Name of the supplier tariff schedule | – | – | String | 16 because | |
| LTARF | Supplier tariff wording in progress | – | – | String | 16 because | |
| NTARF | Current tariff index number | – | – | Uint8 | 2 car | |
| VTIC | ICT version | – | – | Uint16 | 2 car | |
| DATE | Current date and time | – | EX: E211022162000 | String | 10 cars | |
| EAST | Total active energy extracted | Wh | 0 | Uint48 | 9 because | |
| EASF01 | Active energy extracted Supplier, index 01 | Wh | 0 | Uint48 | 9 because | |
| EASF02 | Active energy extracted Supplier, index 02 | Wh | 0 | Uint48 | 9 because | |
| EASF03 | Active energy extracted Supplier, index 03 | Wh | 0 | Uint48 | 9 because | |
| EASF04 | Active energy extracted Supplier, index 04 | Wh | 0 | Uint48 | 9 because | |
| EASF05 | Active energy extracted Supplier, index 05 | Wh | 0 | Uint48 | 9 because | |
| EASF06 | Active energy extracted Supplier, index 06 | Wh | 0 | Uint48 | 9 because | |
| EASF07 | Active energy extracted Supplier, index 07 | Wh | 0 | Uint48 | 9 because | |
| EASF08 | Active energy extracted Supplier, index 08 | Wh | 0 | Uint48 | 9 because | |
| EASF09 | Active energy extracted Supplier, index 09 | Wh | 0 | Uint48 | 9 because | |
| EASF10 | Active energy extracted Supplier, index10 | Wh | 0 | Uint48 | 9 because | |
| EASD01 | Active energy extracted Distributor, index 01 | Wh | 0 | Uint32 | 9 because | |
| EASD02 | Active energy extracted Distributor, index 02 | Wh | 0 | Uint32 | 9 because | |
| EASD03 | Active energy extracted Distributor, index 03 | Wh | 0 | Uint32 | 9 because | |
| EASD04 | Active energy extracted Distributor, index 04 | Wh | 0 | Uint32 | 9 because | |
| EAIT | Total injected active energy | Wh | 0 | Production | Uint48 | 9 because |
| ERQ1 | Total Q1 reactive energy | VArh | 0 | Production | int16 | 9 because |
| ERQ2 | Total Q2 reactive energy | VArh | 0 | Production | int16 | 9 because |
| ERQ3 | Total Q3 reactive energy | VArh | 0 | Production | int16 | 9 because |
| ERQ4 | Total Q4 reactive energy | VArh | 0 | Production | int16 | 9 because |
| IRMS1 | Effective current, phase 1 | A | 0 | single/three-phase | Uint16 | 3 cars |
| IRMS2 | Effective current, phase 2 | A | 0 | Three-phased | Uint16 | 3 cars |
| IRMS3 | Effective current, phase 3 | A | 0 | Three-phased | Uint16 | 3 cars |
| URMS1 | Effective Voltage, Phase 1 | V | 0 | single/three-phase | Uint16 | 3 cars |
| URMS2 | Effective Voltage, Phase 2 | V | 0 | Three-phased | Uint16 | 3 cars |
| URMS3 | Effective voltage, phase 3 | V | 0 | Three-phased | Uint16 | 3 cars |
| PREF | Power reference app. (PREF) | kVA | 0 | Uint16 | 2 car | |
| STGE | Register of Statutes | – | 0 | String | 8 because | |
| PCOUP | Power cut-off app. (PCOUP) | kVA | 0 | Uint8 | 2 car | |
| SINSTI | Power app. Instant injected | VA | 0 | Production | int16 | 5 because |
| SMAXIN | Max. app power injected n | VA | 0 | Production | int16 | 5 because |
| SMAXIN-1 | Max. injected app power n-1 | VA | 0 | Production | int16 | 5 because |
| CCASN | Point n of the drawn active load curve | W | 0 | int16 | 5 because | |
| CCASN-1 | Point n-1 of the drawn active load curve | W | 0 | int16 | 5 because | |
| CCAIN | Point n of the injected active load curve | W | 0 | Production | int16 | 5 because |
| CCAIN-1 | Point n-1 of the injected active load curve | W | 0 | Production | int16 | 5 because |
| UMOY1 | Moy voltage. ph. 1 | V | 0 | Mono/three-phase | Uint16 | 3 cars |
| UMOY2 | Moy voltage. ph. 2 | V | 0 | Three-phased | Uint16 | 3 cars |
| UMOY3 | Moy voltage. ph. 3 | V | 0 | Three-phased | Uint16 | 3 cars |
| SINSTS | Power app. Snapshot extracted | VA | 0 | (Mono/Triphase since v10) | Uint16 | 5 because |
| SINSTS | ||||||
| SINSTS1 | Power app. Snapshot extracted ph.1 | VA | 0 | Three-phased | Uint16 | 5 because |
| SINSTS2 | Power app. Instant extracted ph. 2 | VA | 0 | Three-phased | Uint16 | 5 because |
| SINSTS3 | Power app. Instant extracted ph. 3 | VA | 0 | Three-phased | Uint16 | 5 because |
| SMAXN | Power app. max. drawn n | VA | 0 | (Mono / Triphasé since v10) | int16 | 5 because |
| SMAXN | ||||||
| SMAXN1 | Power app. max. drawn n ph.1 | VA | 0 | Three-phased | int16 | 5 because |
| SMAXN2 | Power app. max. drawn n ph. 2 | VA | 0 | Three-phased | int16 | 5 because |
| SMAXN3 | Power app. max. drawn n ph. 3 | VA | 0 | Three-phased | int16 | 5 because |
| SMAXN-1 | App. max. output power n-1 | VA | 0 | (Mono / Triphasé since v10) | Uint16 | 5 because |
| SMAXN-1 | ||||||
| SMAXN1-1 | App. max. output power n-1 ph.1 | VA | 0 | Three-phased | Uint16 | 5 because |
| SMAXN2-1 | App. max. output power n-1 ph.2 | VA | 0 | Three-phased | Uint16 | 5 because |
| SMAXN3-1 | App. max. output power n-1 ph.3 | VA | 0 | Three-phased | Uint16 | 5 because |
| MSG1 | Short message | – | 0 | String | 32 because | |
| MSG2 | Ultra-short message | – | 0 | String | 16 because | |
| PRM | PRM (Identifier) | – | 0 | String | 14 because | |
| DPM1 | Start Point Mobile 1 | – | 0 | Uint8 | 2 car | |
| FPM1 | End Point Mobile 1 | – | 0 | Uint8 | 2 car | |
| DPM2 | Start Point Mobile 2 | – | 0 | Uint8 | 2 car | |
| FPM2 | End Point Mobile 2 | – | 0 | Uint8 | 2 car | |
| DPM3 | Start Point Mobile 3 | – | 0 | Uint8 | 2 car | |
| FPM3 | End Point Mobile 3 | – | 0 | Uint8 | 2 car | |
| RELAIS | RELAIS | – | 0 | Uint16 | 3 cars | |
| NJOURF | Number of current day supplier calendar | – | 0 | Uint8 | 2 car | |
| NJOURF+1 | Number of the next supplier calendar day | – | 0 | Uint8 | 2 car | |
| PJOURF+1 | Profile of the next supplier calendar day | – | 0 | String | 98 car | |
| POINT 1 | Profile of the next peak day | – | 0 | String | 98 car | |
| – | Linky protocol | – | 0 | Uint8 | 1 car |
Data Home Assistant on Standard Mode
And that's it, all the data is present in Home Assistant (the same can obviously be consulted on Zigbee2MQTT)


Attempt to understand changes in HC/HP states
So now it’s an adventure, I don’t really understand what’s going on.
My HC/HP time changes are for example on 14:06 and 17:06 and here is the history recorded today:

Pretty incomprehensible then.
I wait one night to see the physical switch (heater console) and the indicators returned, here is the result:

I therefore note that:
- STGE and conso correspond and are on the right time 02:06:07 for both.
- 02:14:07 for NTARF and RELAIS.
At this stage, I do not explain the reason for the discrepancy, I will question on the forums to see if anyone knows, but at this stage, I will therefore use STGE to define whether we are in HC or HP.
I add a template to have HC/HP
In my templates.yaml file, I add:
- name: Single current _id tariff period: sensor.period _tarifaire _en _cours state: >- {% if is_state("sensor.linky_status _register", "003AC401") %} HP {% else %} HC {% endif %}
Understanding the 5 Energy Lines

I find myself in HA with 5 lines with the same title.
They correspond to the lines:
- EAST
- EASTF01
- EASTF02
- EASD01
- EASD02
I went to check the indexes on the meter display to find myself there.
I give up EASD01 and EASD02, I don’t understand High Season, Low Season.
EAST is therefore the total consumption, EASTF01 the Conso Heures Creuses, EASTF02 the Conso H Pleines.
That is immediately clearer:

I add conso information in Energy

and


Data that I finally keep
After a battery of tests, I confirm what I thought, the real-time information is worthless, the Linky is not made for it. No need to think of having the instant conso thanks to him.
I therefore use it to retrieve the HC/HP info and to power HA’s Energy module.
Here are the data I keep:

MSG1 and MSG2, I keep them because I'm curious about what might happen in these message fields. We will see in several months or years if something appears.
NTARF/RELAIS/STGE, I will wait several days to see which of the 3 I keep, I will disable the other two then.
I keep the Conso Totale at this stage, but if I do not need it, I will deactivate it.
Accuracy of module configuration in Zigbee2MQTT

In the whitelist, it seems important to specify the information you need, it seems to limit the resources to send unnecessary data. I specified “EAST,EAIT,EASF01,EASF02,STGE,NTARF,RELAIS,MSG1,MSG2”
Conclusion
Finally, the fairly simple and efficient integration of this module allows me to feed the Energy module of Home Assistant and to have the information of HC/HP on my Dashboard.
This RetEx is still to be completed in time, it will evolve, I have left a few outstanding points above.
The readings of the various forums or Retex of other users suggest to me that the realisation of this type of equipment is particularly complex to achieve. Obviously the power supply provided to the module by the Linky is very very low, so it must be extremely optimised. The choice of Zigbee is a good thing, it is a technology that consumes very little, I imagine that in Wifi or Bluetooth, it would not work.
Being able to choose a whitelist of the data you want to use has to lighten the frames and the energy requirement of the module, which is a great idea.
Congratulations for the realization of this module, a very good job!
As a bonus, here is the Energy screen on my Dashboard, if that gives any ideas.

Bibliography or references
- ICT teleinformation best practices – Linky 14 October 2024
- https://www.enedis.fr/media/2035/download
- https://github.com/fairecasoimeme/Zlinky_TIC


