[teleinfo] Add support for D2L wifi dongle (#18738)

* add support for D2L dongle bridge

Signed-off-by: Laurent ARNAL <laurent@clae.net>
This commit is contained in:
lo92fr
2026-03-17 22:31:36 +01:00
committed by GitHub
parent 33e81028d3
commit 504402f74f
45 changed files with 2996 additions and 684 deletions
+260 -55
View File
@@ -1,4 +1,4 @@
# Teleinfo Binding
## Discovery# Teleinfo Binding
The Teleinfo binding supports an interface to ENEDIS/ERDF [Teleinfo protocol](https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_54E.pdf) for (French) Electricity Meter. This binding works with a Teleinfo modem plugged to the I1 and I2 terminals of your electricity meter. Teleinfo modems can be ordered (see the [list of tested hardware](#tested-hardware) below) or build by yourself (see [this example](http://bernard.lefrancois.free.fr)).
@@ -10,9 +10,24 @@ These values can be used to
- check if your subscription is relevant for your needs,
- monitor your electricity consumption,
### TIC Mode
There are two different TIC modes, corresponding to two distinct frame formats:
- Historical TIC mode (older version)
- Uses a serial transmission rate of 1200 baud.
- Standard TIC mode (newer version)
- Uses a serial transmission rate of 9600 baud.
- Provides more information from the meter.
- Only available on Linky meters.
- Offers a faster refresh rate.
The method for changing the TIC mode of a Linky meter is explained [here](https://forum.gce-electronics.com/t/comment-passer-un-cpt-linky-en-mode-standard/8206/7).
## Supported Things
### Historical TIC mode
### Historical TIC Mode
Historical TIC mode is the only mode of all telemeters before Linky models and the default mode for Linky telemeters.
@@ -38,7 +53,7 @@ The Teleinfo binding provides support for both single-phase and three-phase conn
| cbetm_hc_electricitymeter | three-phase | HCHP | |
| cbetm_tempo_electricitymeter | three-phase | Tempo | |
### Standard TIC mode
### Standard TIC Mode
Linky telemeters add a new `Standard` mode with more detailed information but still provide information on the legacy format under the `Historical` denomination.
@@ -51,26 +66,82 @@ Standard mode doesn't depend on the pricing options, but it adds some useful inf
| lstm_electricitymeter | three-phase | |
| lstm_prod_electricitymeter | three-phase | [x] |
## Discovery
## Bridge
Before the binding can be used, a serial controller must be added. This needs to be done manually. Select **Teleinfo Serial Controller** and enter the serial port.
Consumption data can be retrieved directly from your electricity meter (Linky or older “blue” meters).
More information about the Teleinfo protocol is available here: [Teleinfo protocol](https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_54E.pdf)
To do this, the Teleinfo output must be connected to your openHAB server.
This is typically done by connecting a Teleinfo modem to the I1 and I2 terminals of your electricity meter.
There are two main ways to achieve this:
- Direct connection: using a Teleinfo-to-serial modem connected directly to the meter (typically providing data with a granularity of 2 to 5 seconds).
- Remote connection: using an ERL dongle installed in the meter (typically providing data with a granularity of around 1 minute).
Before the binding can be used, a controller must be configured. Currently, two types of controllers are supported: serial and D2L.
Remote controller connections may use different technologies to transmit the Teleinfo frames.
This binding has been tested with a D2L ERL, which uses Wi-Fi to send the frames over a TCP/IP connection.
However, some ERLs use other radio technologies, such as:
- 433 MHz transmission
- LoRa or Sigfox (long-range, low-bandwidth networks)
- KNX
- Zigbee
At the moment, the binding supports Wi-Fi/D2L devices only.
Support for 433 MHz transmission may be added in the future.
KNX and Zigbee are out of scope, as they already have dedicated openHAB bindings.
### Serial Bridge
Select **Teleinfo Serial Controller** and enter the serial port.
If you want to place the Teleinfo modem apart from your openHAB server, you can forward its serial messages over TCP/IP (_ser2net_).
In this case you have to define the serial port of your Teleinfo modem like this `rfc2217://ip:port`. When using _ser2net_ make sure to use _telnet_ instead of _raw_ in the _ser2net_ config file.
Once the serial controller added, electricity meters will automatically appear after starting discovery, with default label **Teleinfo ADCO #adco** where **#adco** is your electricity meter identifier.
## Thing Configuration
| Parameter | Meaning | Possible values |
|----------------------------------|--------------------------------------------------|-------------------------------------|
| `serialport` | Path to the serial controller | /dev/ttyXXXX, rfc2217://ip:port |
| `ticMode` | TIC mode | `STANDARD`, `HISTORICAL` (default) |
| `adco` | Electricity meter identifier | 12 digits number |
| `verifyChecksum` | If we check the checksum of the Teleinfo frame | true, false (default=true) |
| `autoRepairInvalidADPSgroupLine` | If we try to repair corrupted frame | true, false (default=true) |
### D2L Bridge
The D2L bridge will open a TCP port, listen on it, and wait for Teleinfo frames.
If you have multiple meters, you can use a single port for all of them.
The bridge will decode the ID of the D2L device sending the frame and dispatch it to the corresponding thing.
| Parameter | Sample | Description |
|--------------------------------|-----------------------------------------|-------------------------------------------------------------------|
| listenningPort | 7845 | The tcp port we will listen for Teleinfo frame coming from D2L |
| encryptionKeys | idd2l:appKey:ivKey;idd2l:appKey:ivKey; | The key use by your D2L ERL |
EncryptionKeys must be filled with the key assigned to your D2L.
You can put multiple encryptionKeys separate by ";". It will be usefull if you have multiple D2L module.
Each encryptionKey must have this format : idd2l:appKey:ivKey
You can find the idd2l on D2L sticker.
You will have to ask the appKey and ivKey to eesmart support : support@eesmart.fr
## Discovery
This binding provides a discovery service only for things.
Once the bridge added, electricity meters will automatically appear after starting discovery.
They meter will have a default label **[MeterType] ADCO #adco** where **#adco** is your electricity meter identifier.
For D2L-connected meters, you will need to enter the encryptionKey on the D2L bridge previous the discovery phase.
| Thing type | Parameter | Meaning | Possible values |
|----------------------|--------------|-------------------------------|------------------------------------|
| `serialcontroller` | `serialport` | Path to the serial controller | /dev/ttyXXXX, rfc2217://ip:port |
| | `ticMode` | TIC mode | `STANDARD`, `HISTORICAL` (default) |
| `*_electricitymeter` | `adco` | Electricity meter identifier | 12 digits number |
## Channels
### Historical TIC mode
### Historical TIC Mode
Channel availability depends on the electricity connection (single or three-phase) and on the pricing mode (Base, HCHP, EJP or Tempo).
@@ -108,49 +179,120 @@ Channel availability depends on the electricity connection (single or three-phas
| pejp | `Number:Time` | Prior notice to EJP start | All | EJP |
| demain | `String` | Following day color | All | Tempo |
### Standard TIC mode
### Standard TIC Mode
#### Common channels
The following channels are available on all Linky telemeters in standard TIC mode.
| Channel | Type | Description |
|---------------------------------|--------------------------|---------------------------------------------------------------------------|
| commonLSMGroup#ngtf | `String` | Provider schedule name |
| commonLSMGroup#ltarf | `String` | Current pricing label |
| commonLSMGroup#east | `Number:Energy` | Total active energy withdrawn |
| commonLSMGroup#easf_XX_ | `Number:Energy` | Active energy withdrawn from provider on index _XX, XX_ in {01,...,10} |
| commonLSMGroup#easd_XX_ | `Number:Energy` | Active energy withdrawn from distributor on index _XX, XX_ in {01,...,04} |
| commonLSMGroup#irms1 | `Number:ElectricCurrent` | RMS Current on phase 1 |
| commonLSMGroup#urms1 | `Number:Potential` | RMS Voltage on phase 1 |
| commonLSMGroup#pref | `Number:Power` | Reference apparent power |
| commonLSMGroup#pcoup | `Number:Power` | Apparent power rupture capacity |
| commonLSMGroup#sinsts | `Number:Power` | Instantaneous withdrawn apparent power |
| commonLSMGroup#smaxsn | `Number:Power` | Maximum withdrawn apparent power of the day |
| commonLSMGroup#smaxsnMinus1 | `Number:Power` | Maximum withdrawn apparent power of the previous day |
| commonLSMGroup#ccasn | `Number:Power` | Active charge point N |
| commonLSMGroup#ccasnMinus1 | `Number:Power` | Active charge point N-1 |
| commonLSMGroup#umoy1 | `Number:Potential` | Mean Voltage on phase 1 |
| commonLSMGroup#dpm_X_ | `String` | Start of mobile peak period _X, X_ in {1,2,3} |
| commonLSMGroup#fpm_X_ | `String` | End of mobile peak period _X, X_ in {1,2,3} |
| commonLSMGroup#msg1 | `String` | Short message |
| commonLSMGroup#msg2 | `String` | Very short message |
| commonLSMGroup#ntarf | `String` | Index of current pricing |
| commonLSMGroup#njourf | `String` | Number of current provider schedule |
| commonLSMGroup#njourfPlus1 | `String` | Number of next day provider schedule |
| commonLSMGroup#pjourfPlus1 | `String` | Profile of next day provider schedule |
| commonLSMGroup#ppointe | `String` | Profile of next rush day |
| commonLSMGroup#date | `DateTime` | Date and Time |
| commonLSMGroup#smaxsnDate | `DateTime` | Timestamp of SMAXSN value |
| commonLSMGroup#smaxsnMinus1Date | `DateTime` | Timestamp of SMAXSN-1 value |
| commonLSMGroup#ccasnDate | `DateTime` | Timestamp of CCASN value |
| commonLSMGroup#ccasnMinus1Date | `DateTime` | Timestamp of CCASN-1 value |
| commonLSMGroup#umoy1Date | `DateTime` | Timestamp of UMOY1 value |
| commonLSMGroup#dpm_X_Date | `DateTime` | Date of DPM_X_, _X_ in {1,2,3} |
| commonLSMGroup#fpm_X_Date | `DateTime` | Date of FPM_X_, _X_ in {1,2,3} |
| commonLSMGroup#relais_X_ | `Switch` | state of relais _X, X_ in {1,...,8} |
| Channel | Type | Description |
|---------------------------------------|--------------------------------|-----------------------------------------------------------------------------|
| commonLSMGroup#ngtf | `String` | Provider schedule name |
| commonLSMGroup#ltarf | `String` | Current pricing label |
| commonLSMGroup#east | `Number:Energy` | Total active energy withdrawn |
| commonLSMGroup#easf_XX_ | `Number:Energy` | Active energy withdrawn from provider on index _XX, XX_ in {01,...,10} |
| commonLSMGroup#easd_XX_ | `Number:Energy` | Active energy withdrawn from distributor on index _XX, XX_ in {01,...,04} |
| commonLSMGroup#irms1 | `Number:ElectricCurrent` | RMS Current on phase 1 |
| commonLSMGroup#urms1 | `Number:Potential` | RMS Voltage on phase 1 |
| commonLSMGroup#pref | `Number:Power` | Reference apparent power |
| commonLSMGroup#pcoup | `Number:Power` | Apparent power rupture capacity |
| commonLSMGroup#sinsts | `Number:Power` | Instantaneous withdrawn apparent power |
| commonLSMGroup#smaxsn | `Number:Power` | Maximum withdrawn apparent power of the day |
| commonLSMGroup#smaxsnMinus1 | `Number:Power` | Maximum withdrawn apparent power of the previous day |
| commonLSMGroup#ccasn | `Number:Power` | Active charge point N |
| commonLSMGroup#ccasnMinus1 | `Number:Power` | Active charge point N-1 |
| commonLSMGroup#umoy1 | `Number:Potential` | Mean Voltage on phase 1 |
| commonLSMGroup#dpm_X_ | `String` | Start of mobile peak period _X, X_ in {1,2,3} |
| commonLSMGroup#fpm_X_ | `String` | End of mobile peak period _X, X_ in {1,2,3} |
| commonLSMGroup#msg1 | `String` | Short message |
| commonLSMGroup#msg2 | `String` | Very short message |
| commonLSMGroup#ntarf | `String` | Index of current pricing |
| commonLSMGroup#njourf | `String` | Number of current provider schedule |
| commonLSMGroup#njourfPlus1 | `String` | Number of next day provider schedule |
| commonLSMGroup#pjourfPlus1 | `String` | Profile of next day provider schedule |
| commonLSMGroup#ppointe | `String` | Profile of next rush day |
| commonLSMGroup#date | `DateTime` | Date and Time |
| commonLSMGroup#smaxsnDate | `DateTime` | Timestamp of SMAXSN value |
| commonLSMGroup#smaxsnMinus1Date | `DateTime` | Timestamp of SMAXSN-1 value |
| commonLSMGroup#ccasnDate | `DateTime` | Timestamp of CCASN value |
| commonLSMGroup#ccasnMinus1Date | `DateTime` | Timestamp of CCASN-1 value |
| commonLSMGroup#umoy1Date | `DateTime` | Timestamp of UMOY1 value |
| commonLSMGroup#dpm_X_Date | `DateTime` | Date of DPM_X_, _X_ in {1,2,3} |
| commonLSMGroup#fpm_X_Date | `DateTime` | Date of FPM_X_, _X_ in {1,2,3} |
| commonLSMGroup#relais_X_ | `Switch` | state of relais _X, X_ in {1,...,8} |
| commonLSMGroup#irms1f | `current` | Floating value for Irms1 |
| commonLSMGroup#cosphi | `powerFactor` | Channel to feed external cosPhi calculation |
| commonLSMGroup#sactive | `power` | Active power calculate from apparent power and Cosphi |
| commonLSMGroup#sreactive | `power` | Reactive power calculate from apparent power and Cosphi |
| commonLSMGroup#contac-sec | `contact` | Stge decode : contact Sec Value |
| commonLSMGroup#cut-off | `cutoff` | Stge decode : of cutoff |
| commonLSMGroup#cache | `contact` | Stge decode : linky cache state |
| commonLSMGroup#over-voltage | `over-voltage-state` | Stge decode : overvoltage state |
| commonLSMGroup#exceeding-power | `exceeding-power-state` | Stge decode : exceding power state |
| commonLSMGroup#function | `function` | Stge decode : function |
| commonLSMGroup#direction | `direction` | Stge decode : direction |
| commonLSMGroup#supplier-rate | `rate` | Stge decode : supplier rate index |
| commonLSMGroup#distributor-rate | `rate` | Stge decode : distributor rate index |
| commonLSMGroup#clock | `contact` | Stge decode : clock state |
| commonLSMGroup#plc | `plc` | Stge decode : PLC |
| commonLSMGroup#outputcom | `outputcomState` | Stge decode : Output com state |
| commonLSMGroup#plc-state | `plcState` | Stge decode : PLC state |
| commonLSMGroup#plc-synchro | `synchroPlcState` | Stge decode : PLC Synchro state |
| commonLSMGroup#tempo-today | `tempo` | Stge decode : Today tempo color |
| commonLSMGroup#tempo-tomorrow | `tempo` | Stge decode : Tomorrow tempo color |
| commonLSMGroup#advice-moving-tips | `movingTips` | Stge decode : Advice of moving tips |
| commonLSMGroup#moving-tips | `movingTips` | Stge decode : Current moving tips |
| commonLSMGroup#pjourf1-plus1 | `String` | Pjourf decode : Slot 1 |
| commonLSMGroup#pjourf2-plus1 | `String` | Pjourf decode : Slot 2 |
| commonLSMGroup#pjourf3-plus1 | `String` | Pjourf decode : Slot 3 |
| commonLSMGroup#pjourf4-plus1 | `String` | Pjourf decode : Slot 4 |
| commonLSMGroup#pjourf5-plus1 | `String` | Pjourf decode : Slot 5 |
| commonLSMGroup#pjourf6-plus1 | `String` | Pjourf decode : Slot 6 |
| commonLSMGroup#pjourf7-plus1 | `String` | Pjourf decode : Slot 7 |
| commonLSMGroup#pjourf8-plus1 | `String` | Pjourf decode : Slot 8 |
| commonLSMGroup#ppointe1 | `String` | PPointe decode : Slot 1 |
| commonLSMGroup#ppointe2 | `String` | PPointe decode : Slot 2 |
| commonLSMGroup#ppointe3 | `String` | PPointe decode : Slot 3 |
| commonLSMGroup#ppointe4 | `String` | PPointe decode : Slot 4 |
| commonLSMGroup#ppointe5 | `String` | PPointe decode : Slot 5 |
| commonLSMGroup#ppointe6 | `String` | PPointe decode : Slot 6 |
| commonLSMGroup#ppointe7 | `String` | PPointe decode : Slot 7 |
| commonLSMGroup#ppointe8 | `String` | PPointe decode : Slot 8 |
#### Three phase only channels
#### Calculated Channels
The binding also offer a number of "calculated" channels.
These channels can help decode existing data into more readable content, such as Relais, Stage State, PjourF, and PPointe advice.
Additionally, they can provide new values like irms1f, sactive, and sreactive.
- irms1f provides a more precise value of irms1, calculated as papp / urms1.
- cosphi is a specific channel designed to receive the cosphi value calculated by an external device.
- If cosphi is exposed, sactive and sreactive will provide the Active and Reactive power, respectively, derived from Apparent Power and Cosphi.
Note:<br/>
Cosphi, Active Power, and Reactive Power are not directly available on Linky meters.
Active power is particularly important as it is used to calculate consumption, which is what your supplier bills you for.
How to feed cosphi ?
You will have to create a specific channel Cosphi.
First channel will be the one you get your cosphi from.
Second one, with profile="follow" will feed the cosphi to teleinfo binding.
```java
Number
CompteurEDF_xxx_Cosphi
"Teleinfo Cosphi [%s]"
(gTeleinfo)
[ "Measurement" ]
{
channel="mqtt:topic:local:CompteurPi1:PFac_ComptGenerale",
channel="teleinfo:lsmm_electricitymeter:myElectricityMeter:commonLSMGroup#cosphi"[profile="follow"]
}
```
#### Three Phase Only Channels
These channels are available on the following telemeters:
@@ -169,7 +311,7 @@ These channels are available on the following telemeters:
| threePhasedLSMGroup#smaxs_X_nDate | `DateTime` | Timestamp of SMAXSN_X_ value, _X_ in {1,2,3} |
| threePhasedLSMGroup#smaxsn_X_Minus1Date | `DateTime` | Timestamp of SMAXSN_X_-1 value, _X_ in {1,2,3} |
#### Producer only channels
#### Producer Only Channels
These channels are available on the following telemeters:
@@ -192,7 +334,7 @@ These channels are available on the following telemeters:
## Full Example
### Historical TIC mode
### Historical TIC Mode
The following `things` file declare a serial USB controller on `/dev/ttyUSB0` for a Single-phase Electricity meter with HC/HP option - CBEMM Evolution ICC and adco `031528042289`:
@@ -218,7 +360,7 @@ Number:Energy TLInfoEDF_HCHP "HCHP" <energy> {channel="teleinfo:cbemm_evolution_
String TLInfoEDF_HHPHC "HHPHC" <energy> {channel="teleinfo:cbemm_evolution_icc_hc_electricitymeter:teleinfoUSB:myElectricityMeter:hhphc"}
```
### Standard TIC mode
### Standard TIC Mode
The following `things` file declare a serial USB controller on `/dev/ttyUSB0` for a Linky Single-phase Electricity meter in standard TIC mode and adsc `031528042289`:
@@ -242,7 +384,16 @@ String TLInfoEDF_NGTF "NGTF" <energy> ["Status"] {channel="teleinfo:lsmm_electri
DateTime TLInfoEDF_SMAXSN_DATE "SMAXSN_DATE" <energy> ["Measurement","Energy"] {channel="teleinfo:lsmm_electricitymeter:teleinfoUSB:myElectricityMeter:commonLSMGroup#smaxsnDate"}
```
## Tested hardware
### Standard TIC Mode With D2l
The following `things` file declare a D2L controller listenning on tcp port 7845 for a Linky Single-phase Electricity meter in standard TIC mode and adsc `031528042289`:
```java
Bridge teleinfo:d2lcontroller:teleinfoD2L "D2lBridge" [ listenningPort="7845"] {
Thing lsmm_electricitymeter myElectricityMeter [ adco="031528042289" ]
```
## Tested Hardware
The Teleinfo binding has been successfully validated with below hardware configuration:
@@ -253,4 +404,58 @@ The Teleinfo binding has been successfully validated with below hardware configu
| GCE Electronics USB Teleinfo module [(more details)](https://gce-electronics.com/fr/usb/655-module-teleinfo-usb.html) | Linky | Single-phase HCHP | Standard |
| Cartelectronic USB Teleinfo modem [(more details)](https://www.cartelectronic.fr/teleinfo-compteur-enedis/17-teleinfo-1-compteur-usb-rail-din-3760313520028.html) | Linky | Three-phase TEMPO | Standard |
The method for changing the TIC mode of a Linky telemeter is explained in the [GCE Electronics forum post](https://forum.gce-electronics.com/t/comment-passer-un-cpt-linky-en-mode-standard/8206/7).
You can also build a Teleinfo modem by yourself (see [this example](http://bernard.lefrancois.free.fr)).
| Wifi interface | Power Energy Meter model | Mode(s) | TIC mode | |
|-------------------------------------|-----------------------------|---------------------------|------------|-------------------------------------------------------------------------------------|
| D2L | Linky | Single-phase TEMPO | Standard | [(more details)](https://eesmart.fr/modulesd2l/erl-wifi-compteur-linky/) |
### Verify Communication
The communication can be verified using software like picocom
picocom -b 9600 -d 7 -p e -f n /dev/ttyUSB1 (for Standard mode)
picocom -b 1200 -d 7 -p e -f n /dev/ttyUSB1 (for Historical mode)
After a few seconds, you should see Linky frame displayed in your terminal
```java
ADSC 81187xxxxxx M
VTIC 02 J
DATE H250314152111 ;
NGTF TEMPO F
LTARF HP BLEU +
EAST 120684765 6
EASF01 083957312 H
EASF02 031765917 J
EASF03 001219877 G
EASF04 002681581 D
EASF05 000607543 ?
EASF06 000452535 ?
EASF07 000000000 (
EASF08 000000000 )
EASF09 000000000 *
EASF10 000000000 "
EASD01 076241272 ?
EASD02 033890466 H
EASD03 003663842 B
EASD04 006889185 P
IRMS1 006 4
URMS1 233 B
PREF 12 B
PCOUP 12 \
SINSTS 01389 [
SMAXSN H250314052302 07720 8
SMAXSN-1 H250308233739 09340 (
CCASN H250314150000 05090 >
CCASN-1 H250314143000 06668 *
UMOY1 H250314152000 231 +
STGE 013AC401 R
MSG1 PAS DE MESSAGE <
PRM 2145499yyyyyyyy 4
RELAIS 000 B
NTARF 02 O
NJOURF 00 &
NJOURF+1 00 B
PJOURF+1 00004001 06004002 16004001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE 1
```
@@ -33,6 +33,7 @@ public class TeleinfoBindingConstants {
// List of all Thing Type UIDs
public static final ThingTypeUID THING_TYPE_SERIAL_CONTROLLER = new ThingTypeUID(BINDING_ID, "serialcontroller");
public static final ThingTypeUID THING_TYPE_D2L_CONTROLLER = new ThingTypeUID(BINDING_ID, "d2lcontroller");
public static final String THING_SERIAL_CONTROLLER_CHANNEL_INVALID_FRAME_COUNTER = "invalidFrameCounter";
// List of commons channel ids
@@ -178,10 +179,47 @@ public class TeleinfoBindingConstants {
public static final String CHANNEL_LSM_UMOY2_DATE = "threePhasedLSMGroup#umoy2Date";
public static final String CHANNEL_LSM_UMOY3_DATE = "threePhasedLSMGroup#umoy3Date";
public static final String CHANNEL_PJOURF_IDX = "commonLSMGroup#pjourf";
public static final String CHANNEL_PPOINTE_IDX = "commonLSMGroup#ppointe";
public static final String CHANNEL_IRMS1F = "commonLSMGroup#irms1f";
public static final String CHANNEL_COSPHI = "commonLSMGroup#cosphi";
public static final String CHANNEL_SACTIVE = "commonLSMGroup#sactive";
public static final String CHANNEL_SREACTIVE = "commonLSMGroup#sreactive";
public static final String CHANNEL_CONTACT_SEC = "commonLSMGroup#contact-sec";
public static final String CHANNEL_CACHE = "commonLSMGroup#cache";
public static final String CHANNEL_CUT_OFF = "commonLSMGroup#cut-off";
public static final String CHANNEL_OVER_VOLTAGE = "commonLSMGroup#over-voltage";
public static final String CHANNEL_EXCEEDING_POWER = "commonLSMGroup#exceeding-power";
public static final String CHANNEL_FUNCTION = "commonLSMGroup#function";
public static final String CHANNEL_DIRECTION = "commonLSMGroup#direction";
public static final String CHANNEL_SUPPLIER_RATE = "commonLSMGroup#supplier-rate";
public static final String CHANNEL_DISTRIBUTOR_RATE = "commonLSMGroup#distributor-rate";
public static final String CHANNEL_CLOCK = "commonLSMGroup#clock";
public static final String CHANNEL_PLC = "commonLSMGroup#plc";
public static final String CHANNEL_COM_OUTPUT = "commonLSMGroup#outputcom";
public static final String CHANNEL_PLC_STATE = "commonLSMGroup#plc-state";
public static final String CHANNEL_PLC_SYNCHRO = "commonLSMGroup#plc-synchro";
public static final String CHANNEL_TEMPO_TODAY = "commonLSMGroup#tempo-today";
public static final String CHANNEL_TEMPO_TOMORROW = "commonLSMGroup#tempo-tomorrow";
public static final String CHANNEL_MOVING_TIPS = "commonLSMGroup#moving-tips";
public static final String CHANNEL_MOVING_TIPS_ADVICE = "commonLSMGroup#advice-moving-tips";
public static final String NOT_A_CHANNEL = "";
public static final String THING_ELECTRICITY_METER_PROPERTY_ADCO = "adco";
public static final String THING_ELECTRICITY_METER_PROPERTY_IDD2L = "id-d2l";
public static final String THING_ELECTRICITY_METER_PROPERTY_TYPETRAME = "type-trame";
public static final String THING_ELECTRICITY_METER_PROPERTY_DATE_FIRMWARE = "date-firmware";
public static final String THING_ELECTRICITY_METER_PROPERTY_VTIC = "vtic";
public static final String THING_ELECTRICITY_METER_PROPERTY_MANUFACTURER = "meter-manufacturer";
public static final String THING_ELECTRICITY_METER_PROPERTY_TYPE = "meter-type";
public static final String THING_ELECTRICITY_METER_PROPERTY_CATEGORY = "meter-category";
public static final String THING_ELECTRICITY_METER_PROPERTY_MATRICULE = "meter-matricule";
public static final String THING_ELECTRICITY_METER_PROPERTY_MANUFACTURE_YEAR = "meter-manufacture-year";
public static final ThingTypeUID THING_HC_CBEMM_ELECTRICITY_METER_TYPE_UID = new ThingTypeUID(BINDING_ID,
"cbemm_hc_electricitymeter");
@@ -19,6 +19,7 @@ import java.util.Map;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.teleinfo.internal.data.Frame;
import org.openhab.binding.teleinfo.internal.handler.TeleinfoAbstractControllerHandler;
import org.openhab.binding.teleinfo.internal.handler.TeleinfoControllerHandlerListener;
@@ -27,9 +28,13 @@ import org.openhab.binding.teleinfo.internal.reader.io.serialport.Label;
import org.openhab.core.config.discovery.AbstractThingHandlerDiscoveryService;
import org.openhab.core.config.discovery.DiscoveryResult;
import org.openhab.core.config.discovery.DiscoveryResultBuilder;
import org.openhab.core.i18n.TranslationProvider;
import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.thing.ThingUID;
import org.osgi.framework.FrameworkUtil;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ServiceScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,6 +49,8 @@ import org.slf4j.LoggerFactory;
public class TeleinfoDiscoveryService extends AbstractThingHandlerDiscoveryService<TeleinfoAbstractControllerHandler>
implements TeleinfoControllerHandlerListener {
private @Nullable TranslationProvider translationProvider;
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = Set.of(THING_HC_CBEMM_ELECTRICITY_METER_TYPE_UID,
THING_BASE_CBEMM_ELECTRICITY_METER_TYPE_UID, THING_TEMPO_CBEMM_ELECTRICITY_METER_TYPE_UID,
THING_EJP_CBEMM_ELECTRICITY_METER_TYPE_UID, THING_HC_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID,
@@ -58,13 +65,10 @@ public class TeleinfoDiscoveryService extends AbstractThingHandlerDiscoveryServi
private final Logger logger = LoggerFactory.getLogger(TeleinfoDiscoveryService.class);
public TeleinfoDiscoveryService() {
@Activate
public TeleinfoDiscoveryService(final @Reference TranslationProvider translationProvider) {
super(TeleinfoAbstractControllerHandler.class, SCAN_DURATION_IN_S);
}
public TeleinfoDiscoveryService(TeleinfoAbstractControllerHandler controllerHandler) {
this();
setThingHandler(controllerHandler);
this.translationProvider = translationProvider;
}
@Override
@@ -119,13 +123,19 @@ public class TeleinfoDiscoveryService extends AbstractThingHandlerDiscoveryServi
String adco = frameSample.get(Label.ADCO) != null ? frameSample.get(Label.ADCO) : frameSample.get(Label.ADSC);
if (adco != null) {
ThingUID thingUID = new ThingUID(getThingTypeUID(frameSample), adco,
thingHandler.getThing().getUID().getId());
ThingTypeUID thingTypeUID = getThingTypeUID(frameSample);
ThingUID thingUID = new ThingUID(thingTypeUID, adco, thingHandler.getThing().getUID().getId());
String key = String.format("thing-type.teleinfo.%s.label", thingTypeUID.getId());
String label = key;
if (translationProvider != null) {
label = translationProvider.getText(FrameworkUtil.getBundle(getClass()), key, null, null);
}
final Map<String, Object> properties = getThingProperties(adco);
final String representationProperty = THING_ELECTRICITY_METER_PROPERTY_ADCO;
DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(thingUID).withProperties(properties)
.withLabel("Teleinfo ADCO/ADSC " + adco).withThingType(getThingTypeUID(frameSample))
.withLabel(label + " ADCO/ADSC " + adco).withThingType(getThingTypeUID(frameSample))
.withBridge(thingHandler.getThing().getUID()).withRepresentationProperty(representationProperty)
.build();
@@ -0,0 +1,95 @@
/*
* Copyright (c) 2010-2026 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.binding.teleinfo.internal.d2l;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.teleinfo.internal.handler.TeleinfoElectricityMeterConfiguration;
/**
* The {@link TeleinfoElectricityMeterConfiguration} class stores electricity meter thing configuration
*
* @author Laurent Arnal - Initial contribution
*/
@NonNullByDefault
public class TeleinfoD2LConfig {
private Map<Long, D2LConfig> d2lConfig = new HashMap<Long, D2LConfig>();
private int listenningPort = 7845;
private String encryptionKeys = "";
public TeleinfoD2LConfig() {
}
public void initKey() {
String[] encryptionKeyTab = encryptionKeys.split(";");
for (String encryptionKey : encryptionKeyTab) {
String[] encriptionParamTab = encryptionKey.split(":");
String idd2lSt = encriptionParamTab[0];
String appKey = encriptionParamTab[1];
String ivKey = encriptionParamTab[2];
long idd2l = -1;
if (!idd2lSt.isBlank()) {
idd2l = Long.parseLong(idd2lSt);
}
D2LConfig config = new D2LConfig();
config.setIdd2l(idd2l);
config.setAppKey(appKey);
config.setIvKey(ivKey);
d2lConfig.put(idd2l, config);
}
}
public int getListenningPort() {
return listenningPort;
}
public @Nullable D2LConfig getConfig(long idd2l) {
return d2lConfig.get(idd2l);
}
class D2LConfig {
private long idd2l = -1;
private String appKey = "";
private String ivKey = "";
public long getIdd2l() {
return idd2l;
}
public String getAppKey() {
return appKey;
}
public String getIvKey() {
return ivKey;
}
public void setIdd2l(long idd2l) {
this.idd2l = idd2l;
}
public void setAppKey(String appKey) {
this.appKey = appKey;
}
public void setIvKey(String ivKey) {
this.ivKey = ivKey;
}
}
}
@@ -0,0 +1,374 @@
/*
* Copyright (c) 2010-2026 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.binding.teleinfo.internal.d2l;
import static java.time.temporal.ChronoField.*;
import java.io.IOException;
import java.lang.reflect.Type;
import java.math.BigInteger;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.net.StandardSocketOptions;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DateTimeParseException;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.teleinfo.internal.d2l.TeleinfoD2LConfig.D2LConfig;
import org.openhab.binding.teleinfo.internal.data.Frame;
import org.openhab.binding.teleinfo.internal.handler.TeleinfoAbstractControllerHandler;
import org.openhab.binding.teleinfo.internal.handler.TeleinfoElectricityMeterHandler;
import org.openhab.binding.teleinfo.internal.reader.io.serialport.InvalidFrameException;
import org.openhab.binding.teleinfo.internal.reader.io.serialport.Label;
import org.openhab.core.thing.Bridge;
import org.openhab.core.thing.ChannelUID;
import org.openhab.core.thing.Thing;
import org.openhab.core.thing.ThingStatus;
import org.openhab.core.thing.ThingStatusDetail;
import org.openhab.core.types.Command;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializer;
import com.google.gson.reflect.TypeToken;
/**
* {@link BridgeLocalD2LHandler} is the base handler to access enedis data.
*
* @author Laurent Arnal - Initial contribution
*/
@NonNullByDefault
public class TeleinfoD2LControllerHandler extends TeleinfoAbstractControllerHandler {
private final Logger logger = LoggerFactory.getLogger(TeleinfoD2LControllerHandler.class);
private @Nullable ScheduledFuture<?> pollingJob = null;
private int listenningPort = 7845;
private TeleinfoD2LConfig config;
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX");
private static final DateTimeFormatter LOCALDATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd", Locale.ROOT);
private static final DateTimeFormatter LOCALDATETIME_FORMATTER = new DateTimeFormatterBuilder()
.appendPattern("uuuu-MM-dd['T'][' ']HH:mm").optionalStart().appendLiteral(':')
.appendValue(SECOND_OF_MINUTE, 2).optionalStart().appendFraction(NANO_OF_SECOND, 0, 9, true).toFormatter();
private final Gson gson = new GsonBuilder()
.registerTypeAdapter(ZonedDateTime.class,
(JsonDeserializer<ZonedDateTime>) (json, type, jsonDeserializationContext) -> ZonedDateTime
.parse(json.getAsJsonPrimitive().getAsString(), DATE_FORMATTER))
.registerTypeAdapter(LocalDate.class,
(JsonDeserializer<LocalDate>) (json, type, jsonDeserializationContext) -> LocalDate
.parse(json.getAsJsonPrimitive().getAsString(), LOCALDATE_FORMATTER))
.registerTypeAdapter(LocalDateTime.class,
(JsonDeserializer<LocalDateTime>) (json, type, jsonDeserializationContext) -> {
try {
return LocalDateTime.parse(json.getAsJsonPrimitive().getAsString(),
LOCALDATETIME_FORMATTER);
} catch (DateTimeParseException ex) {
return LocalDate.parse(json.getAsJsonPrimitive().getAsString(), LOCALDATE_FORMATTER)
.atStartOfDay();
}
})
.create();
public TeleinfoD2LControllerHandler(Bridge bridge) {
super(bridge);
config = new TeleinfoD2LConfig();
}
@Override
public void initialize() {
config = getConfigAs(TeleinfoD2LConfig.class);
config.initKey();
listenningPort = config.getListenningPort();
if (listenningPort == -1) {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR,
"@text/@listenning_port_not_defined");
return;
}
updateStatus(ThingStatus.OFFLINE);
pollingJob = scheduler.schedule(this::pollingCode, 3, TimeUnit.SECONDS);
}
@Override
public void dispose() {
logger.debug("Disposing the LocalD2L bridge handler");
ScheduledFuture<?> job = this.pollingJob;
if (job != null && !job.isCancelled()) {
job.cancel(true);
pollingJob = null;
}
logger.debug("Shutting down Enedis bridge handler.");
super.dispose();
}
@Override
public void handleCommand(ChannelUID channelUID, Command command) {
}
private void pollingCode() {
Selector selector = null;
ServerSocketChannel socket = null;
try {
// define an assign a selector
selector = Selector.open();
socket = ServerSocketChannel.open();
// specify the port and host to connect to
InetSocketAddress serverSocketAddr = new InetSocketAddress(Integer.valueOf(listenningPort));
socket.bind(serverSocketAddr);
// to set our server as non-blocking.
socket.configureBlocking(false);
socket.register(selector, SelectionKey.OP_ACCEPT);
updateStatus(ThingStatus.ONLINE);
} catch (Exception ex) {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, ex.getMessage());
return;
}
try {
while (getThing().getStatus() == ThingStatus.ONLINE) {
if (selector.select(3000) == 0) {
continue;
}
// define a set of selectable keys
Set<SelectionKey> selKeys = selector.selectedKeys();
Iterator<SelectionKey> keyIterator = selKeys.iterator();
// iterate over the selected keys
while (keyIterator.hasNext()) {
SelectionKey selectionKey = keyIterator.next();
/*
* if both the server and the client have binded to a port and
* both are ready to share data with one another isAcceptable()
* will return true
*/
if (selectionKey.isAcceptable()) {
SocketChannel client = socket.accept();
logger.debug("Accept: {} {}", client.getLocalAddress(), client.getRemoteAddress());
client.configureBlocking(false);
client.setOption(StandardSocketOptions.SO_KEEPALIVE, true);
client.setOption(StandardSocketOptions.TCP_NODELAY, false);
client.register(selectionKey.selector(), SelectionKey.OP_READ, ByteBuffer.allocate(20000));
}
/*
* if there is any data while is yet to be read by the server
* isReadable returns true. Note that each operation of sendData() is
* mapped to a key and only if new data is present and unread
* isReadable() will return true
*/
else if (selectionKey.isReadable()) {
try {
SocketChannel client = (SocketChannel) selectionKey.channel();
ByteBuffer buf = (ByteBuffer) selectionKey.attachment();
long bytesRead = client.read(buf);
if (bytesRead == -1) {
logger.trace("Close on bytesRead==-1 {} {}", client.getLocalAddress(),
client.getRemoteAddress());
client.close();
} else if (bytesRead > 0) {
boolean res = handleRead(buf);
selectionKey.interestOps(SelectionKey.OP_READ);
if (res) {
logger.trace("Close on res=true {} {}", client.getLocalAddress(),
client.getRemoteAddress());
client.close();
}
}
} catch (SocketException ex) {
logger.debug("Error during reading socket, retry ", ex);
} catch (Exception ex) {
logger.debug("Error during reading, retry ", ex);
}
} else if (selectionKey.isWritable()) {
logger.debug("Writable");
ByteBuffer buf = (ByteBuffer) selectionKey.attachment();
buf.flip(); // Prepare buffer for writing
SocketChannel clientChannel = (SocketChannel) selectionKey.channel();
clientChannel.write(buf);
if (!buf.hasRemaining()) { // Buffer completely written?
// Nothing left, so no longer interested in writes
selectionKey.interestOps(SelectionKey.OP_READ);
}
buf.compact(); // Make room for more data to be read in
}
}
// once read, each key is removed from the operation.
keyIterator.remove();
}
} catch (IOException ex) {
logger.debug("IO Exception occurred in data reception loop", ex);
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, ex.getMessage());
} finally {
try {
if (socket != null) {
socket.close();
}
if (selector != null) {
selector.close();
}
} catch (IOException ex) {
logger.debug("IO Exception occured during socket closing", ex);
}
}
logger.debug("end pooling socket");
}
public boolean handleRead(ByteBuffer byteBuffer) {
boolean res = false;
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
// int version = byteBuffer.get(0);
int length = byteBuffer.getShort(2);
long idd2l = byteBuffer.getLong(4);
if (byteBuffer.position() < length) {
// We have incomplete data, wait next read on buffer
return false;
}
// Look if we have a thing that is declared for this idd2l
D2LConfig d2lConfig = config.getConfig(idd2l);
if (d2lConfig != null) {
// if so, get appKey and ivKey and decode the buffer
String appKey = d2lConfig.getAppKey();
String ivKey = d2lConfig.getIvKey();
// Prefix "7F" is required for AES key derivation to ensure proper key formatting for d2l.
final String aesKeyPrefix = "7F";
try {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
byte[] bytesKey = new BigInteger(aesKeyPrefix + appKey, 16).toByteArray();
SecretKeySpec key = new SecretKeySpec(bytesKey, 1, bytesKey.length - 1, "AES");
byte[] bytesIv = new BigInteger(ivKey, 16).toByteArray();
IvParameterSpec iv = new IvParameterSpec(bytesIv);
cipher.init(Cipher.DECRYPT_MODE, key, iv);
byte[] bufferToDecode = new byte[length];
byteBuffer.get(16, bufferToDecode, 0, length - 16);
byte[] plainText = cipher.doFinal(bufferToDecode);
ByteBuffer byteBufferDecode = ByteBuffer.wrap(plainText);
byteBufferDecode.order(ByteOrder.LITTLE_ENDIAN);
int payloadLength = byteBufferDecode.getShort(18);
int payloadType = byteBufferDecode.get(20) & 0x7f;
String st1 = new String(plainText, 22, payloadLength, StandardCharsets.UTF_8);
logger.trace("frame with payload: {}", payloadType);
if (payloadType == 0x03) {
// PUSH_JSON request
Type type = new TypeToken<Map<String, String>>() {
}.getType();
Map<String, String> r1 = gson.fromJson(st1, type);
if (r1 != null) {
Frame frame = new Frame();
for (String channelName : r1.keySet()) {
try {
Label label = Label.getEnum(channelName);
String valueString = r1.get(channelName);
String timestampString = null;
if (valueString != null) {
int delimiterPos = valueString.indexOf('|');
if (delimiterPos > 0) {
timestampString = valueString.substring(0, delimiterPos);
valueString = valueString.substring(delimiterPos + 1);
} else if (delimiterPos == 0) {
timestampString = "";
valueString = "";
}
frame.put(label, valueString);
if (timestampString != null) {
frame.putTimestamp(label, timestampString);
}
}
} catch (IllegalArgumentException e) {
final String error = String.format("The label '%s' is unknown", channelName);
throw new InvalidFrameException(error);
}
}
fireOnFrameReceivedEvent(frame);
res = true;
}
}
} catch (Exception ex) {
logger.debug("ex: {}", ex.toString(), ex);
}
}
return res;
}
public @Nullable TeleinfoElectricityMeterHandler getHandlerForPrmId(String prmId) {
List<Thing> lThing = getThing().getThings();
for (Thing th : lThing) {
if (th.getHandler() instanceof TeleinfoElectricityMeterHandler handler) {
if (prmId.equals(handler.getAdco())) {
return handler;
}
}
}
return null;
}
}
@@ -60,9 +60,19 @@ public class Frame implements Serializable {
if (timestamp == null) {
return "";
}
return "20" + timestamp.substring(1, 3) + "-" + timestamp.substring(3, 5) + "-" + timestamp.substring(5, 7)
+ "T" + timestamp.substring(7, 9) + ":" + timestamp.substring(9, 11) + ":"
+ timestamp.substring(11, 13);
if (timestamp.isBlank()) {
return "";
}
if (timestamp.length() > 9) {
return "20" + timestamp.substring(1, 3) + "-" + timestamp.substring(3, 5) + "-" + timestamp.substring(5, 7)
+ "T" + timestamp.substring(7, 9) + ":" + timestamp.substring(9, 11) + ":"
+ timestamp.substring(11, 13);
} else {
return "20" + timestamp.substring(1, 3) + "-" + timestamp.substring(3, 5) + "-" + timestamp.substring(5, 7)
+ "T" + timestamp.substring(7, 9) + ":00:00";
}
}
public Frame() {
@@ -140,21 +150,32 @@ public class Frame implements Serializable {
}
}
public boolean containsInitializedKey(Label label) {
if (labelToValues.containsKey(label)) {
String value = labelToValues.get(label);
if (value != null && !value.isBlank()) {
return true;
}
}
return false;
}
public Phase getPhase() throws InvalidFrameException {
if (labelToValues.containsKey(Label.IINST)) {
if (containsInitializedKey(Label.IINST)) {
return Phase.ONE_PHASED;
} else if (labelToValues.containsKey(Label.IINST1)) {
} else if (containsInitializedKey(Label.IINST1)) {
return Phase.THREE_PHASED;
}
throw new InvalidFrameException();
}
public boolean isShortFrame() {
return !labelToValues.containsKey(Label.ISOUSC);
return !containsInitializedKey(Label.ISOUSC);
}
public Evolution getEvolution() {
if (labelToValues.containsKey(Label.PAPP)) {
if (containsInitializedKey(Label.PAPP)) {
return Evolution.ICC;
}
return Evolution.NONE;
@@ -181,17 +202,17 @@ public class Frame implements Serializable {
}
public TeleinfoTicMode getTicMode() throws InvalidFrameException {
if (labelToValues.containsKey(Label.ADCO)) {
if (containsInitializedKey(Label.ADCO)) {
return TeleinfoTicMode.HISTORICAL;
} else if (labelToValues.containsKey(Label.ADSC)) {
} else if (containsInitializedKey(Label.ADSC)) {
return TeleinfoTicMode.STANDARD;
}
throw new InvalidFrameException();
}
public FrameType getStandardType() throws InvalidFrameException {
boolean isProd = labelToValues.containsKey(Label.EAIT);
boolean isThreePhase = labelToValues.containsKey(Label.IRMS2);
boolean isProd = containsInitializedKey(Label.EAIT);
boolean isThreePhase = containsInitializedKey(Label.IRMS2);
if (isProd && isThreePhase) {
return FrameType.LSMT_PROD;
}
@@ -21,7 +21,6 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
*/
@NonNullByDefault
public class TeleinfoElectricityMeterConfiguration {
private String adco = "";
public String getAdco() {
@@ -14,10 +14,20 @@ package org.openhab.binding.teleinfo.internal.handler;
import static org.openhab.binding.teleinfo.internal.TeleinfoBindingConstants.*;
import java.math.BigInteger;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.teleinfo.internal.TeleinfoBindingConstants;
import org.openhab.binding.teleinfo.internal.data.Frame;
import org.openhab.binding.teleinfo.internal.data.Phase;
import org.openhab.binding.teleinfo.internal.data.Pricing;
@@ -26,8 +36,12 @@ import org.openhab.binding.teleinfo.internal.reader.io.serialport.InvalidFrameEx
import org.openhab.binding.teleinfo.internal.reader.io.serialport.Label;
import org.openhab.binding.teleinfo.internal.reader.io.serialport.ValueType;
import org.openhab.binding.teleinfo.internal.serial.TeleinfoTicMode;
import org.openhab.binding.teleinfo.internal.types.Manufacturer;
import org.openhab.binding.teleinfo.internal.types.Meter;
import org.openhab.core.library.types.DateTimeType;
import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.OpenClosedType;
import org.openhab.core.library.types.QuantityType;
import org.openhab.core.library.types.StringType;
import org.openhab.core.thing.Bridge;
@@ -39,6 +53,7 @@ import org.openhab.core.thing.ThingStatusDetail;
import org.openhab.core.thing.ThingStatusInfo;
import org.openhab.core.thing.binding.BaseThingHandler;
import org.openhab.core.types.Command;
import org.openhab.core.types.RefreshType;
import org.openhab.core.types.UnDefType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,6 +70,9 @@ public class TeleinfoElectricityMeterHandler extends BaseThingHandler implements
protected TeleinfoElectricityMeterConfiguration configuration = new TeleinfoElectricityMeterConfiguration();
private boolean wasLastFrameShort = false;
private String adco = "";
private double cosphi = Double.NaN;
public TeleinfoElectricityMeterHandler(Thing thing) {
super(thing);
}
@@ -68,7 +86,11 @@ public class TeleinfoElectricityMeterHandler extends BaseThingHandler implements
if (bridge != null) {
bridgeStatusChanged(bridge.getStatusInfo());
}
configuration = getConfigAs(TeleinfoElectricityMeterConfiguration.class);
adco = configuration.getAdco();
logger.debug("Initializing Linky handler for {}", adco);
}
@Override
@@ -104,7 +126,18 @@ public class TeleinfoElectricityMeterHandler extends BaseThingHandler implements
@Override
public void handleCommand(ChannelUID channelUID, Command command) {
// no commands supported
if (!(command instanceof RefreshType)) {
if (channelUID.getId().indexOf("cosphi") >= 0) {
if (command instanceof DecimalType dc) {
cosphi = dc.doubleValue();
} else if (command instanceof QuantityType<?> qt) {
cosphi = qt.toBigDecimal().doubleValue();
}
} else {
logger.debug("The Linky local binding is read-only and can not handle command {} {}",
channelUID.getId(), command);
}
}
}
@Override
@@ -139,25 +172,106 @@ public class TeleinfoElectricityMeterHandler extends BaseThingHandler implements
}
private void updateStatesForChannels(Frame frame) {
double urms = 0.0;
double sinst = 0.0;
Map<String, String> props = this.editProperties();
for (Entry<Label, String> entry : frame.getLabelToValues().entrySet()) {
Label label = entry.getKey();
if (!label.getChannelName().equals(NOT_A_CHANNEL)) {
logger.trace("Update channel {} to value {}", label.getChannelName(), entry.getValue());
if (label == Label.PTEC) {
updateState(label.getChannelName(), StringType.valueOf(entry.getValue().replace(".", "")));
} else if (label.getType() == ValueType.STRING) {
updateState(label.getChannelName(), StringType.valueOf(entry.getValue()));
} else if (label.getType() == ValueType.INTEGER) {
updateState(label.getChannelName(), QuantityType
.valueOf(label.getFactor() * Integer.parseInt(entry.getValue()), label.getUnit()));
try {
if (!label.getChannelName().equals(NOT_A_CHANNEL)) {
logger.trace("Update channel {} to value {}", label.getChannelName(), entry.getValue());
if (label == Label.PTEC) {
updateState(label.getChannelName(), StringType.valueOf(entry.getValue().replace(".", "")));
} else if (label.getType() == ValueType.STRING) {
updateState(label.getChannelName(), StringType.valueOf(entry.getValue()));
} else if (label.getType() == ValueType.DATE) {
String value = entry.getValue();
if (value.isBlank()) {
value = frame.getLabelToTimestamp().get(label);
}
if (value != null && !value.isEmpty()) {
Instant timestampConv = getAsInstant(value);
if (timestampConv != null) {
logger.trace("Update channel {} to value {}", label.getChannelName(), value);
updateState(label.getChannelName(), new DateTimeType(timestampConv));
}
}
} else if (label.getType() == ValueType.INTEGER) {
if (!entry.getValue().isBlank()) {
updateState(label.getChannelName(), QuantityType
.valueOf(label.getFactor() * Integer.parseInt(entry.getValue()), label.getUnit()));
}
}
// handle special case channel that will need additionnal decoding
if (label == Label.RELAIS) {
handleRelaisPayload(entry.getValue());
} else if (label == Label.PJOURF_PLUS_1) {
handlePayload(Label.PJOURF_PLUS_1.name(), entry.getValue());
} else if (label == Label.PPOINTE) {
handlePayload(Label.PPOINTE.name(), entry.getValue());
} else if (label == Label.STGE) {
handleStgePayload(entry.getValue());
} else if (label == Label.URMS1) {
urms = Double.valueOf(entry.getValue());
} else if (label == Label.SINSTS) {
sinst = Double.valueOf(entry.getValue());
}
} else {
// handle some channel that we want to have has properties for reference
if (label == Label._TYPE_TRAME) {
props.put(THING_ELECTRICITY_METER_PROPERTY_TYPETRAME, entry.getValue());
} else if (label == Label._DATE_FIRMWARE) {
props.put(THING_ELECTRICITY_METER_PROPERTY_DATE_FIRMWARE, entry.getValue());
} else if (label == Label.VTIC) {
props.put(THING_ELECTRICITY_METER_PROPERTY_VTIC, entry.getValue());
} else if (label == Label.ADSC || label == Label.ADCO) {
String secondaryAddress = frame.get(Label.ADCO) != null ? frame.get(Label.ADCO)
: frame.get(Label.ADSC);
if (secondaryAddress != null && secondaryAddress.length() == 12) {
String oldMatricule = getThing().getProperties()
.get(THING_ELECTRICITY_METER_PROPERTY_MATRICULE);
if (oldMatricule == null || oldMatricule.isBlank()) {
String manufacturerSt = secondaryAddress.substring(0, 2);
String year = secondaryAddress.substring(2, 4);
String type = secondaryAddress.substring(4, 6);
String matricule = secondaryAddress.substring(6, 12);
Meter meter = Meter.getCompteurForId(Integer.parseInt(type));
Manufacturer manufacturer = Manufacturer
.getManufacturerForId(Integer.parseInt(manufacturerSt));
if (manufacturer != null) {
props.put(THING_ELECTRICITY_METER_PROPERTY_MANUFACTURER, manufacturer.getLabel());
}
if (meter != null) {
props.put(THING_ELECTRICITY_METER_PROPERTY_TYPE, meter.getLabel());
props.put(THING_ELECTRICITY_METER_PROPERTY_CATEGORY,
meter.getCompteurType().getLabel());
}
props.put(THING_ELECTRICITY_METER_PROPERTY_MATRICULE, matricule);
props.put(THING_ELECTRICITY_METER_PROPERTY_MANUFACTURE_YEAR,
"" + ((Integer.parseInt(year) + 2000)));
}
}
}
}
}
if (!label.getTimestampChannelName().equals(NOT_A_CHANNEL)) {
String timestamp = frame.getAsDateTime(label);
if (!timestamp.isEmpty()) {
logger.trace("Update channel {} to value {}", label.getTimestampChannelName(), timestamp);
updateState(label.getTimestampChannelName(), DateTimeType.valueOf(timestamp));
if (!label.getTimestampChannelName().equals(NOT_A_CHANNEL)) {
String timestamp = frame.getAsDateTime(label);
if (!timestamp.isEmpty()) {
logger.trace("Update channel {} to value {}", label.getTimestampChannelName(), timestamp);
updateState(label.getTimestampChannelName(), DateTimeType.valueOf(timestamp));
}
}
} catch (Exception ex) {
logger.warn("Can't update channel {}", label.getChannelName());
}
}
try {
@@ -188,27 +302,230 @@ public class TeleinfoElectricityMeterHandler extends BaseThingHandler implements
} catch (InvalidFrameException e) {
logger.warn("Can not find phase.");
}
} else {
if (frame.getLabelToValues().containsKey(Label.RELAIS)) {
String relaisString = frame.get(Label.RELAIS);
if (relaisString != null) {
boolean[] relaisStates = FrameUtil.parseRelaisStates(relaisString);
for (int i = 0; i <= 7; i++) {
updateState(CHANNELS_LSM_RELAIS[i], OnOffType.from(relaisStates[i]));
}
}
}
}
} catch (InvalidFrameException e) {
logger.warn("Can not find TIC mode.");
}
this.updateProperties(props);
updateCalcVars(urms, sinst);
updateState(CHANNEL_LAST_UPDATE, new DateTimeType());
}
private void updateCalcVars(double urms, double sinst) {
if (urms == 0) {
logger.warn("Invalid input: urms is zero, cannot perform calculations.");
return;
}
if (urms < 0 || sinst < 0) {
logger.warn("Invalid input: urms and sinst must be positive. Received urms={}, sinst={}", urms, sinst);
return;
}
double irms1c = sinst / urms;
Label channelIrms1f = Label.IRMS1F;
Label channelSactive = Label.SACTIVE;
Label channelSreactive = Label.SREACTIVE;
updateState(channelIrms1f.getChannelName(),
QuantityType.valueOf(channelIrms1f.getFactor() * irms1c, channelIrms1f.getUnit()));
if (Double.isNaN(cosphi)) {
return;
}
double clampedCosphi = Math.max(-1.0, Math.min(1.0, cosphi));
double phi = Math.acos(clampedCosphi);
double sinphi = Math.sin(phi);
double sactive = sinst * clampedCosphi;
double sreactive = sinst * sinphi;
updateState(channelSactive.getChannelName(),
QuantityType.valueOf(channelSactive.getFactor() * sactive, channelSactive.getUnit()));
updateState(channelSreactive.getChannelName(),
QuantityType.valueOf(channelSreactive.getFactor() * sreactive, channelSreactive.getUnit()));
}
private void updateStateForMissingAlert(Frame frame, Label label) {
if (!frame.getLabelToValues().containsKey(label)) {
updateState(label.getChannelName(), UnDefType.NULL);
}
}
public String getAdco() {
return this.adco;
}
protected @Nullable Instant getAsInstant(String timestamp) {
LocalDateTime res;
if (timestamp.isEmpty()) {
return null;
}
if (timestamp.startsWith("H") || timestamp.startsWith("E") || timestamp.startsWith(" ")) {
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyMMdd[HH][mm][ss]");
res = LocalDateTime.parse(timestamp.substring(1), df);
// Handle summer time
if (timestamp.startsWith("E")) {
res = res.minusHours(1);
}
} else {
DateTimeFormatter df = new DateTimeFormatterBuilder().appendPattern("MMM dd yyyy")
.toFormatter(Locale.ENGLISH);
res = LocalDate.parse(timestamp, df).atStartOfDay();
}
return res.toInstant(ZoneOffset.of("+1"));
}
// @formatter:off
// 1 0 0 0 0 1 0 0 0 1 1 1 0 1 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1
// 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
// 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
//
// 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1
// P==> P==> T==> T==> S S==> E==> N T H T==> T========> S F D S N C C=====> C
// o o e e y t t o é o a a e o é u o a o o
// i i m m n a a t l r r r n n p r t c u n
// n n p p c t t é l i i s c a t h p t
// t t o o h u U o f f t s e u e u a
// e e r t S s i g i s n s r c
// + o o e n e D F o e s e e t
// 1 C r d f i o n m i d
// C P t o s u e o s
// P L i t r n n e
// L e i n t c
// @formatter:on
private void handleStgePayload(String value) {
String binStr = String.format("%32s", new BigInteger(value, 16).toString(2)).replace(' ', '0');
String relais = binStr.substring(31, 32);
int coupure = Integer.parseInt(binStr.substring(28, 31), 2);
String cache = binStr.substring(27, 28);
String overVoltage = binStr.substring(25, 26);
String exceedingPower = binStr.substring(24, 25);
String function = binStr.substring(23, 24);
String direction = binStr.substring(22, 23);
int supplierRate = Integer.parseInt(binStr.substring(18, 22), 2);
int distributorRate = Integer.parseInt(binStr.substring(16, 18), 2);
String clock = binStr.substring(15, 16);
String plc = binStr.substring(14, 15);
int comOuput = Integer.parseInt(binStr.substring(11, 13), 2);
int plcState = Integer.parseInt(binStr.substring(9, 11), 2);
String plcSync = binStr.substring(8, 9);
int tempoToday = Integer.parseInt(binStr.substring(6, 8), 2);
int tempoTomorrow = Integer.parseInt(binStr.substring(4, 6), 2);
int movingTipsAdvice = Integer.parseInt(binStr.substring(2, 4), 2);
int movingTips = Integer.parseInt(binStr.substring(0, 2), 2);
updateState(TeleinfoBindingConstants.CHANNEL_CONTACT_SEC, getOpenClosed(relais));
updateState(TeleinfoBindingConstants.CHANNEL_CACHE, getOpenClosed(cache));
updateState(TeleinfoBindingConstants.CHANNEL_CUT_OFF, new DecimalType(coupure));
updateState(TeleinfoBindingConstants.CHANNEL_OVER_VOLTAGE, new DecimalType(overVoltage));
updateState(TeleinfoBindingConstants.CHANNEL_EXCEEDING_POWER, new DecimalType(exceedingPower));
updateState(TeleinfoBindingConstants.CHANNEL_FUNCTION, new DecimalType(function));
updateState(TeleinfoBindingConstants.CHANNEL_DIRECTION, new DecimalType(direction));
updateState(TeleinfoBindingConstants.CHANNEL_SUPPLIER_RATE, new DecimalType(supplierRate));
updateState(TeleinfoBindingConstants.CHANNEL_DISTRIBUTOR_RATE, new DecimalType(distributorRate));
updateState(TeleinfoBindingConstants.CHANNEL_CLOCK, new DecimalType(clock));
updateState(TeleinfoBindingConstants.CHANNEL_PLC, new DecimalType(plc));
updateState(TeleinfoBindingConstants.CHANNEL_COM_OUTPUT, new DecimalType(comOuput));
updateState(TeleinfoBindingConstants.CHANNEL_PLC_STATE, new DecimalType(plcState));
updateState(TeleinfoBindingConstants.CHANNEL_PLC_SYNCHRO, new DecimalType(plcSync));
updateState(TeleinfoBindingConstants.CHANNEL_TEMPO_TODAY, new DecimalType(tempoToday));
updateState(TeleinfoBindingConstants.CHANNEL_TEMPO_TOMORROW, new DecimalType(tempoTomorrow));
updateState(TeleinfoBindingConstants.CHANNEL_MOVING_TIPS_ADVICE, new DecimalType(movingTipsAdvice));
updateState(TeleinfoBindingConstants.CHANNEL_MOVING_TIPS, new DecimalType(movingTips));
}
private OpenClosedType getOpenClosed(String val) {
if ("0".equals(val)) {
return OpenClosedType.CLOSED;
} else if ("1".equals(val)) {
return OpenClosedType.OPEN;
}
return OpenClosedType.CLOSED;
}
private void handleRelaisPayload(String value) {
boolean[] relaisStates = FrameUtil.parseRelaisStates(value);
for (int i = 0; i <= 7; i++) {
updateState(CHANNELS_LSM_RELAIS[i], OnOffType.from(relaisStates[i]));
}
}
private void handlePayload(String channelName, String value) {
if (value.isEmpty()) {
return;
}
String[] parts = value.split(" ");
int idx = 1;
for (String part : parts) {
if ("NONUTILE".equals(part)) {
continue;
}
int h = Integer.parseInt(part.substring(0, 2), 16);
int m = Integer.parseInt(part.substring(2, 4), 16);
String p2 = part.substring(4, 8);
String binStr = String.format("%16s", new BigInteger(p2, 16).toString(2)).replace(' ', '0');
String index = binStr.substring(12, 16);
String relais = binStr.substring(0, 2);
int indexI = Integer.parseInt(index, 2);
String tarif = "";
if (indexI == 1) {
tarif = "Bleue-HC";
} else if (indexI == 2) {
tarif = "Bleue-HP";
} else if (indexI == 3) {
tarif = "Blanc-HC";
} else if (indexI == 4) {
tarif = "Blanc-HP";
} else if (indexI == 5) {
tarif = "Red-HC";
} else if (indexI == 6) {
tarif = "Red-HP";
}
String relaisSt = "";
if ("00".equals(relais)) {
relaisSt = "Fermé";
} else if ("01".equals(relais)) {
relaisSt = "Ouvert";
}
if ("PJOURF_PLUS_1".equals(channelName)) {
// PJourF
updateState(TeleinfoBindingConstants.CHANNEL_PJOURF_IDX + idx + "-plus1",
new StringType(h + ":" + m + "<>" + tarif + "<>" + relaisSt));
} else if ("PPOINTE".equals(channelName)) {
// PJourF
updateState(TeleinfoBindingConstants.CHANNEL_PPOINTE_IDX + idx,
new StringType(h + ":" + m + "<>" + tarif + "<>" + relaisSt));
}
idx++;
}
}
}
@@ -20,6 +20,7 @@ import java.util.stream.Stream;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.teleinfo.internal.d2l.TeleinfoD2LControllerHandler;
import org.openhab.binding.teleinfo.internal.serial.TeleinfoSerialControllerHandler;
import org.openhab.core.io.transport.serial.SerialPortManager;
import org.openhab.core.thing.Bridge;
@@ -43,15 +44,15 @@ import org.osgi.service.component.annotations.Reference;
public class TeleinfoThingHandlerFactory extends BaseThingHandlerFactory {
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Stream.of(THING_TYPE_SERIAL_CONTROLLER,
THING_HC_CBEMM_ELECTRICITY_METER_TYPE_UID, THING_BASE_CBEMM_ELECTRICITY_METER_TYPE_UID,
THING_TEMPO_CBEMM_ELECTRICITY_METER_TYPE_UID, THING_EJP_CBEMM_ELECTRICITY_METER_TYPE_UID,
THING_HC_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID, THING_BASE_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID,
THING_TEMPO_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID, THING_EJP_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID,
THING_HC_CBETM_ELECTRICITY_METER_TYPE_UID, THING_BASE_CBETM_ELECTRICITY_METER_TYPE_UID,
THING_TEMPO_CBETM_ELECTRICITY_METER_TYPE_UID, THING_EJP_CBETM_ELECTRICITY_METER_TYPE_UID,
THING_LSMM_ELECTRICITY_METER_TYPE_UID, THING_LSMM_PROD_ELECTRICITY_METER_TYPE_UID,
THING_LSMT_ELECTRICITY_METER_TYPE_UID, THING_LSMT_PROD_ELECTRICITY_METER_TYPE_UID)
.collect(Collectors.toSet());
THING_TYPE_D2L_CONTROLLER, THING_HC_CBEMM_ELECTRICITY_METER_TYPE_UID,
THING_BASE_CBEMM_ELECTRICITY_METER_TYPE_UID, THING_TEMPO_CBEMM_ELECTRICITY_METER_TYPE_UID,
THING_EJP_CBEMM_ELECTRICITY_METER_TYPE_UID, THING_HC_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID,
THING_BASE_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID, THING_TEMPO_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID,
THING_EJP_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID, THING_HC_CBETM_ELECTRICITY_METER_TYPE_UID,
THING_BASE_CBETM_ELECTRICITY_METER_TYPE_UID, THING_TEMPO_CBETM_ELECTRICITY_METER_TYPE_UID,
THING_EJP_CBETM_ELECTRICITY_METER_TYPE_UID, THING_LSMM_ELECTRICITY_METER_TYPE_UID,
THING_LSMM_PROD_ELECTRICITY_METER_TYPE_UID, THING_LSMT_ELECTRICITY_METER_TYPE_UID,
THING_LSMT_PROD_ELECTRICITY_METER_TYPE_UID).collect(Collectors.toSet());
private final SerialPortManager serialPortManager;
@@ -71,6 +72,8 @@ public class TeleinfoThingHandlerFactory extends BaseThingHandlerFactory {
if (THING_TYPE_SERIAL_CONTROLLER.equals(thingTypeUID)) {
return new TeleinfoSerialControllerHandler((Bridge) thing, serialPortManager);
} else if (THING_TYPE_D2L_CONTROLLER.equals(thing.getThingTypeUID())) {
return new TeleinfoD2LControllerHandler((Bridge) thing);
}
if (SUPPORTED_THING_TYPES_UIDS.contains(thing.getThingTypeUID())) {
@@ -26,7 +26,6 @@ import org.openhab.core.library.unit.Units;
*/
@NonNullByDefault
public enum Label {
// Historical labels
ADCO(ValueType.STRING, NOT_A_CHANNEL, Units.ONE),
OPTARIF(ValueType.STRING, NOT_A_CHANNEL, Units.ONE),
@@ -65,8 +64,8 @@ public enum Label {
// Standard TIC mode labels
ADSC(ValueType.STRING, NOT_A_CHANNEL, Units.ONE),
VTIC(ValueType.INTEGER, NOT_A_CHANNEL, Units.ONE),
DATE(ValueType.STRING, NOT_A_CHANNEL, CHANNEL_LSM_DATE, Units.ONE),
VTIC(ValueType.STRING, NOT_A_CHANNEL, Units.ONE),
DATE(ValueType.DATE, CHANNEL_LSM_DATE, Units.ONE),
NGTF(ValueType.STRING, CHANNEL_LSM_NGTF, Units.ONE),
LTARF(ValueType.STRING, CHANNEL_LSM_LTARF, Units.ONE),
EAST(ValueType.INTEGER, CHANNEL_LSM_EAST, Units.WATT_HOUR),
@@ -98,6 +97,9 @@ public enum Label {
PREF(ValueType.INTEGER, CHANNEL_LSM_PREF, Units.VOLT_AMPERE, 1000),
PCOUP(ValueType.INTEGER, CHANNEL_LSM_PCOUP, Units.VOLT_AMPERE, 1000),
SINSTS(ValueType.INTEGER, CHANNEL_LSM_SINSTS, Units.VOLT_AMPERE),
SINST1(ValueType.INTEGER, CHANNEL_LSM_SINSTS1, Units.VOLT_AMPERE),
SINST2(ValueType.INTEGER, CHANNEL_LSM_SINSTS2, Units.VOLT_AMPERE),
SINST3(ValueType.INTEGER, CHANNEL_LSM_SINSTS3, Units.VOLT_AMPERE),
SINSTS1(ValueType.INTEGER, CHANNEL_LSM_SINSTS1, Units.VOLT_AMPERE),
SINSTS2(ValueType.INTEGER, CHANNEL_LSM_SINSTS2, Units.VOLT_AMPERE),
SINSTS3(ValueType.INTEGER, CHANNEL_LSM_SINSTS3, Units.VOLT_AMPERE),
@@ -137,7 +139,18 @@ public enum Label {
NJOURF(ValueType.STRING, CHANNEL_LSM_NJOURF, Units.ONE),
NJOURF_PLUS_1(ValueType.STRING, CHANNEL_LSM_NJOURF_PLUS_1, Units.ONE),
PJOURF_PLUS_1(ValueType.STRING, CHANNEL_LSM_PJOURF_PLUS_1, Units.ONE),
PPOINTE(ValueType.STRING, CHANNEL_LSM_PPOINTE, Units.ONE);
PPOINTE(ValueType.STRING, CHANNEL_LSM_PPOINTE, Units.ONE),
// ID D2L Channels
_ID_D2L(ValueType.STRING, NOT_A_CHANNEL, Units.ONE),
_TYPE_TRAME(ValueType.STRING, NOT_A_CHANNEL, Units.ONE),
_DATE_FIRMWARE(ValueType.DATE, NOT_A_CHANNEL, Units.ONE),
// Additional Calculated Channels
IRMS1F(ValueType.INTEGER, CHANNEL_IRMS1F, Units.AMPERE),
COSPHI(ValueType.INTEGER, CHANNEL_COSPHI, Units.ONE),
SACTIVE(ValueType.INTEGER, CHANNEL_SACTIVE, Units.WATT),
SREACTIVE(ValueType.INTEGER, CHANNEL_SREACTIVE, Units.WATT);
private final ValueType type;
private final String channelName;
@@ -16,12 +16,13 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
/**
* Defines all the type of values
*
*
* @author Olivier MARCEAU - Initial contribution
*
*/
@NonNullByDefault
public enum ValueType {
INTEGER,
STRING
STRING,
DATE
}
@@ -0,0 +1,170 @@
/*
* Copyright (c) 2010-2026 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.binding.teleinfo.internal.types;
import java.util.EnumSet;
import java.util.Hashtable;
import java.util.Map;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
/**
* Define the different Meter manufacturer
*
* @author Laurent Arnal - Initial contribution
*
*/
@NonNullByDefault
public enum Manufacturer {
NotAttrib000(0x00, "Unassigned"),
Crouzet(0x01, "CROUZET / MONETEL"),
Sagem(0x02, "SAGEM / SAGEMCOM"),
Schlumberger(0x03, "SCHLUMBERGER / ACTARIS / ITRON"),
Landis(0x04, "LANDIS ET GYR / SIEMENS METERING / LANDIS+GYR"),
Sauter(0x05, "SAUTER / STEPPER ENERGIE France / ZELLWEGER"),
Itron(0x06, "ITRON"),
Maec(0x07, "MAEC"),
Matra(0x08, "MATRA-CHAUVIN ARNOUX / ENERDIS"),
Faure(0x09, "FAURE-HERMAN"),
Sevme(0x0A, "SEVME / SIS"),
Magnol(0x0B, "MAGNOL / ELSTER / HONEYWELL"),
GazThermique(0x0C, "GAZ THERMIQUE"),
NotAttrib013(0x0D, "Unassigned"),
Ghielmetti(0x0E, "GHIELMETTI / DIALOG E.S. / MICRONIQUE"),
Mecelec(0x0F, "MECELEC"),
Legrand(0x10, "LEGRAND / BACO"),
Serd(0x11, "SERD-SCHLUMBERGER"),
Schneider(0x12, "SCHNEIDER / MERLIN GERIN / GARDY"),
GeneralElectri(0x13, "GENERAL ELECTRIC / POWER CONTROL"),
NuovoPignone(0x14, "NUOVO PIGNONE / DRESSER"),
Scle(0x15, "SCLE"),
Edf(0x16, "EDF"),
Gdf(0x17, "GDF / GDF-SUEZ"),
Hager(0x18, "HAGER GENERAL ELECTRIC"),
DeltaCore(0x19, "DELTA-DORE"),
Riz(0x1A, "RIZ"),
IskraEmeco(0x1B, "ISKRAEMECO"),
Gmt(0x1C, "GMT"),
AnalogDevice(0x1D, "ANALOG DEVICE"),
Michaud(0x1E, "MICHAUD"),
HexingElectrical(0x1F, "HEXING ELECTRICAL CO. Ltd"),
Siame(0x20, "SIAME"),
Larsen(0x21, "LARSEN & TOUBRO Limited"),
Elster(0x22, "ELSTER / HONEYWELL"),
ElectronicAfzar(0x23, "ELECTRONIC AFZAR AZMA"),
AdvancedElectronic(0x24, "ADVANCED ELECTRONIC COMPAGNY Ldt"),
Aem(0x25, "AEM"),
Zhejiang(0x26, "ZHEJIANG CHINT INSTRUMENT & METER CO. Ldt"),
Ziv(0x27, "ZIV"),
NotAttrib040(0x28, "Unassigned"),
NotAttrib041(0x29, "Unassigned"),
NotAttrib042(0x2A, "Unassigned"),
NotAttrib043(0x2B, "Unassigned"),
NotAttrib044(0x2C, "Unassigned"),
NotAttrib045(0x2D, "Unassigned"),
NotAttrib046(0x2E, "Unassigned"),
NotAttrib047(0x2F, "Unassigned"),
NotAttrib048(0x30, "Unassigned"),
NotAttrib049(0x31, "Unassigned"),
NotAttrib050(0x32, "Unassigned"),
NotAttrib051(0x33, "Unassigned"),
NotAttrib052(0x34, "Unassigned"),
NotAttrib053(0x35, "Unassigned"),
NotAttrib054(0x36, "Unassigned"),
NotAttrib055(0x37, "Unassigned"),
NotAttrib056(0x38, "Unassigned"),
NotAttrib057(0x39, "Unassigned"),
NotAttrib058(0x3A, "Unassigned"),
NotAttrib059(0x3B, "Unassigned"),
NotAttrib060(0x3C, "Unassigned"),
NotAttrib061(0x3D, "Unassigned"),
NotAttrib062(0x3E, "Unassigned"),
NotAttrib063(0x3F, "Unassigned"),
NotAttrib064(0x40, "Unassigned"),
NotAttrib065(0x41, "Unassigned"),
NotAttrib066(0x42, "Unassigned"),
NotAttrib067(0x43, "Unassigned"),
NotAttrib068(0x44, "Unassigned"),
NotAttrib069(0x45, "Unassigned"),
Landis02(0x46, "LANDIS et GYR (export ou régie)"),
StepperEnergie(0x47, "STEPPER ENERGIE France"),
NotAttrib072(0x48, "Unassigned"),
NotAttrib073(0x49, "Unassigned"),
NotAttrib074(0x4A, "Unassigned"),
NotAttrib075(0x4B, "Unassigned"),
NotAttrib076(0x4C, "Unassigned"),
NotAttrib077(0x4D, "Unassigned"),
NotAttrib078(0x4E, "Unassigned"),
NotAttrib079(0x4F, "Unassigned"),
NotAttrib080(0x50, "Unassigned"),
Sagem02(0x51, "SAGEM / SAGEMCOM"),
Landis03(0x52, "LANDIS ET GYR / SIEMENS METERING / LANDIS+GYR"),
Elster02(0x53, "ELSTER / HONEYWELL"),
Sagem03(0x54, "SAGEM / SAGEMCOM"),
Itron02(0x55, "ITRON"),
NotAttrib086(0x56, "Unassigned"),
NotAttrib087(0x57, "Unassigned"),
NotAttrib088(0x58, "Unassigned"),
NotAttrib089(0x59, "Unassigned"),
NotAttrib090(0x5A, "Unassigned"),
NotAttrib091(0x5B, "Unassigned"),
NotAttrib092(0x5C, "Unassigned"),
NotAttrib093(0x5D, "Unassigned"),
NotAttrib094(0x5E, "Unassigned"),
NotAttrib095(0x5F, "Unassigned"),
NotAttrib096(0x60, "Unassigned"),
NotAttrib097(0x61, "Unassigned"),
NotAttrib098(0x62, "Unassigned"),
NotAttrib099(0x63, "Unassigned");
private static Map<Integer, Manufacturer> idToValue = new Hashtable<Integer, Manufacturer>();
static {
for (Manufacturer manufacturer : EnumSet.allOf(Manufacturer.class)) {
// Yes, use some appropriate locale in production code :)
idToValue.put(manufacturer.id, manufacturer);
}
}
private final int id;
private final String label;
Manufacturer(int id, String label) {
this.id = id;
this.label = label;
}
public String getLabel() {
return label;
}
public static @Nullable Manufacturer getManufacturerForId(int id) {
if (idToValue.containsKey(id)) {
return idToValue.get(id);
}
return null;
}
}
@@ -0,0 +1,369 @@
/*
* Copyright (c) 2010-2026 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.binding.teleinfo.internal.types;
import java.util.EnumSet;
import java.util.Hashtable;
import java.util.Map;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
/**
* Define the different available meter on the market
*
* @author Laurent Arnal - Initial contribution
*
*/
@NonNullByDefault
public enum Meter {
NotAttrib000(0x00, MeterType.NOATTRIB, "Non attribué"),
BleuMonoMultiTarif(0x01, MeterType.BLEUE, "Compteur bleu monophasé multitarif (BBR) - 1ère gen"),
CentraleG3(0x02, MeterType.OTHER, "Centrale de mesure G3 - Poste HTA/BT"),
Concentrateur01(0x03, MeterType.OTHER, "Concentrateur multi-compteurs / électrique + 2 fluides"),
Concentrateur02(0x04, MeterType.OTHER, "Concentrateur simplifié / élec"),
BleuMonoSimpleTarif(0x05, MeterType.BLEUE, "Compteur bleu monophasé simple tarif électronique - 1ère gen"),
JauneElectro(0x06, MeterType.JAUNE, "Compteur jaune électronique / tarif modulable"),
PrismeElectro(0x07, MeterType.PRISME, "Compteur électronique universel (PRISME ou ICE)"),
SauterEuridis(0x08, MeterType.OTHER, "Compteur sauter modifié EURIDIS"),
BleuTri1Gen(0x09, MeterType.BLEUE, "Compteur bleu triphasé électronique - 1ère gen"),
JauneElectro2Gen(0x0A, MeterType.JAUNE, "Compteur jaune électronique 2ème gen"),
BleuTriSimpleTarif(0x0B, MeterType.BLEUE, "Compteur bleu monophasé simple tarif FERRARIS"),
Prisme(0x0C, MeterType.PRISME, "Compteur prisme"),
CentraleMesureF1(0x0D, MeterType.OTHER, "Centrale de mesure G1 - Poste HTA/BT"),
AnalyserCourbeCharge(0x0E, MeterType.OTHER, "Analyseur de courbe de charge (panel BT)"),
BleuMonoMultiTarifSansBBR(0x0F, MeterType.BLEUE, "Compteur bleu monophasé multitarif électronique sans BBR"),
BleuExpICC(0x10, MeterType.BLEUE, "Compteur bleu expérimentation « 10000 ICC »"),
ExpICC(0x11, MeterType.OTHER, "ICC expérimentation « 10000 ICC »"),
DetectDefHTA(0x12, MeterType.OTHER, "Détecteur de défauts / HTA , neutre compensé"),
Concentrateur03(0x13, MeterType.OTHER, "Concentrateur multi-compteurs / 3 fluides indifférenciés"),
BleuMonoMultiTarifDemiTaux1Gen(0x14, MeterType.BLEUE, "Compteur bleu monophasé multitarif 1/2 - 1ère gen"),
BleuTriMultiTarifDemiTaux1Gen(0x15, MeterType.BLEUE, "Compteur bleu triphasé 1/2 taux - 1ére gen"),
BleuMonoMultiTarif2Gen(0x16, MeterType.BLEUE, "Compteur bleu monophasé multitarif - 2ème gen"),
BleuMonoMultiTarifDemiTaux2Gen(0x17, MeterType.BLEUE, "Compteur bleu monophasé multitarif 1/2 - 2ème gen"),
NotAttrib024(0x18, MeterType.NOATTRIB, "Non attribué"),
BleuMonoSimpleTarif2Gen(0x19, MeterType.BLEUE, "Compteur bleu monophasé simple tarif - 2ème gen"),
BleuTri20002Gen(0x1A, MeterType.BLEUE, "Compteur bleu triphasé - palier 2000 - 2ème gen"),
BleuTri2000DemiTaux2Gen(0x1B, MeterType.BLEUE, "Compteur bleu triphasé - palier 2000 ½ taux - 2ème gen"),
BleuMono20073Gen(0x1C, MeterType.BLEUE, "Compteur bleu monophasé multitarif - palier 2007 - 3ème gen"),
BleuMono2007DemiTaux3Gen(0x1D, MeterType.BLEUE, "Compteur bleu monophasé multi ½ - 2007 - 3ème gen"),
BleuTri20073Gen(0x1E, MeterType.BLEUE, "Compteur bleu triphasé - palier 2007 - 3ème gen"),
BleuTri2007DemiTaux3Gen(0x1F, MeterType.BLEUE, "Compteur bleu triphasé ½ taux - palier 2007 3ème gen"),
BleuTriTele(0x20, MeterType.BLEUE, "Compteur bleu triphasé télétotalisation"),
JauneElectroDirect(0x21, MeterType.JAUNE, "Compteur jaune électronique branchement direct"),
Ice(0x22, MeterType.OTHER, "Compteur ICE 4 quadrants"),
Tromaran(0x23, MeterType.OTHER, "Compteur trimaran 2P classe 0,2s pour RTE"),
PmePmiBt(0x24, MeterType.OTHER, "Compteur PME-PMI BT > 36kva"),
Prepaie(0x25, MeterType.OTHER, "Compteur prépaiement"),
Hxe34(0x26, MeterType.OTHER, "Compteur triphasé HXE34 de HECL"),
NotAttrib039(0x27, MeterType.NOATTRIB, "Non attribué"),
AffMulti(0x28, MeterType.OTHER, "Système d'affichage multiusage (SAM)"),
NotAttrib041(0x29, MeterType.NOATTRIB, "Non attribué"),
ActarisMono1(0x2A, MeterType.OTHER, "Compteur monophasé export (ACTARIS)"),
ActarisMono2(0x2B, MeterType.OTHER, "Compteur monophasé export (ACTARIS)"),
ActarisTri1(0x2C, MeterType.OTHER, "Compteur triphasé export ACTARIS"),
ActarisTri2(0x2D, MeterType.OTHER, "Compteur triphasé export ACTARIS"),
ModemEuredis(0x2E, MeterType.OTHER, "Modem EURIDIS pour compteur PME-PMI"),
NotAttrib047(0x2F, MeterType.NOATTRIB, "Non attribué"),
NotAttrib048(0x30, MeterType.NOATTRIB, "Non attribué"),
NotAttrib049(0x31, MeterType.NOATTRIB, "Non attribué"),
NotAttrib050(0x32, MeterType.NOATTRIB, "Non attribué"),
NotAttrib051(0x33, MeterType.NOATTRIB, "Non attribué"),
Concentrateur04(0x34, MeterType.OTHER, "Concentrateur simplifié / gaz ou Transpondeur Gaz EURIDIS"),
Concentrateur05(0x35, MeterType.OTHER, "Concentrateur multi-compteurs / VGR"),
Concentrateur06(0x36, MeterType.OTHER, "Concentrateur multi-compteurs / gaz"),
NotAttrib055(0x37, MeterType.NOATTRIB, "Non attribué"),
NotAttrib056(0x38, MeterType.NOATTRIB, "Non attribué"),
NotAttrib057(0x39, MeterType.NOATTRIB, "Non attribué"),
PrismeBaie(0x3A, MeterType.OTHER, "Baie prisme de télétotalisation, exp Lyon"),
NotAttrib059(0x3B, MeterType.NOATTRIB, "Non attribué"),
LinkyMono60AG1(0x3C, MeterType.LINKY, "Compteur monophasé 60A LINKY - généralisation G1 - arrivée basse"),
LinkyMono60AG3(0x3D, MeterType.LINKY, "Compteur monophasé 60A LINKY - généralisation G3 - arrivée haute"),
LinkyMono90AG1(0x3E, MeterType.LINKY, "Compteur monophasé 90A LINKY - généralisation G1 - arrivée basse"),
LinkyTri60AG1(0x3F, MeterType.LINKY, "Compteur triphasé 60A LINKY - généralisation G1 - arrivée basse"),
LinkyTri60AG3(0x40, MeterType.LINKY, "Compteur monophasé 60A LINKY - généralisation G3 - arrivée basse"),
LinkyMono60AG3Exp(0x41, MeterType.LINKY, "Compteur monophasé 90A LINKY expérimentation CPL G3 (2000 ex.)"),
ModulaireGen(0x42, MeterType.OTHER, "Module du compteur modulaire généralisation"),
LinkyMono90AG1Pil(0x43, MeterType.LINKY, "Compteur monophasé 90A LINKY - pilote G1 - arrivée basse"),
LinkyTri60AG1Pil(0x44, MeterType.LINKY, "Compteur triphasé 60A LINKY - pilote G1 - arrivée basse"),
NotAttrib069(0x45, MeterType.NOATTRIB, "Non attribué"),
LinkyMono60AG3I(0x46, MeterType.LINKY, "Compteur monophasé 60A LINKY - interopérabilité G3 - arrivée basse"),
LinkyTru60AG3I(0x47, MeterType.LINKY, "Compteur triphasé 60A LINKY - interopérabilité G3 - arrivée basse"),
HXE12K(0x48, MeterType.OTHER, "Compteur monophasé HXE12K 10-80A 4 tarifs (Hexing Electrical co,Ltd)"),
NotAttrib073(0x49, MeterType.NOATTRIB, "Non attribué"),
HXE34K(0x4A, MeterType.OTHER, "Compteur triphasé HXE34K 230/400V 10-80A"),
LinkyMono90AG3P(0x4B, MeterType.LINKY, "Compteur monophasé 90A LINKY - palier 1 G3 - arrivée basse"),
LinkyTru60AG3P(0x4C, MeterType.LINKY, "Compteur triphasé 60A LINKY - palier 1 G3 - arrivée basse"),
NotAttrib077(0x4D, MeterType.NOATTRIB, "Non attribué"),
NotAttrib078(0x4E, MeterType.NOATTRIB, "Non attribué"),
NotAttrib079(0x4F, MeterType.NOATTRIB, "Non attribué"),
NotAttrib080(0x50, MeterType.NOATTRIB, "Non attribué"),
NotAttrib081(0x51, MeterType.NOATTRIB, "Non attribué"),
NotAttrib082(0x52, MeterType.NOATTRIB, "Non attribué"),
NotAttrib083(0x53, MeterType.NOATTRIB, "Non attribué"),
NotAttrib084(0x54, MeterType.NOATTRIB, "Non attribué"),
NotAttrib085(0x55, MeterType.NOATTRIB, "Non attribué"),
SeiMono(0x56, MeterType.OTHER, "Compteur numérique SEI monophasé 60A 230V - G3 - arrivée basse - 60Hz"),
SeiTri(0x57, MeterType.OTHER, "Compteur numérique SEI triphasé 60A 230/400V - G3 - 60Hz"),
PlcMono(0x58, MeterType.OTHER, "Compteur monophasé PLC DSMR2.2 (Actaris)"),
PlcTri(0x59, MeterType.OTHER, "Compteur triphasé PLC DSMR2.2 (Actaris)"),
CplGen1(0x5A, MeterType.OTHER, "Compteur monophasé CPL intégré 1ère gen"),
CplGen2(0x5B, MeterType.OTHER, "Compteur triphasé CPL intégré 2ème gen"),
LinkyMono90A(0x5C, MeterType.LINKY, "Compteur monophasé 90A LINKY ORES G3 Palier 1"),
LinkyTri60A3F(0x5D, MeterType.LINKY, "Compteur triphasé 60A 3 fils LINKY ORES G3 Palier 1"),
LinkyTri60A4F(0x5E, MeterType.LINKY, "Compteur triphasé 60A 4 fils LINKY ORES G3 Palier 1"),
NotAttrib095(0x5F, MeterType.NOATTRIB, "Non attribué"),
NotAttrib096(0x60, MeterType.NOATTRIB, "Non attribué"),
NotAttrib097(0x61, MeterType.NOATTRIB, "Non attribué"),
BCPLG0(0x62, MeterType.OTHER, "BCPL G0 pour compteur CJE et CBE"),
NotAttrib099(0x63, MeterType.NOATTRIB, "Non attribué"),
NotAttrib100(0x64, MeterType.NOATTRIB, "Non attribué"),
NotAttrib101(0x65, MeterType.NOATTRIB, "Non attribué"),
NotAttrib102(0x66, MeterType.NOATTRIB, "Non attribué"),
NotAttrib103(0x67, MeterType.NOATTRIB, "Non attribué"),
NotAttrib104(0x68, MeterType.NOATTRIB, "Non attribué"),
NotAttrib105(0x69, MeterType.NOATTRIB, "Non attribué"),
NotAttrib106(0x6A, MeterType.NOATTRIB, "Non attribué"),
NotAttrib107(0x6B, MeterType.NOATTRIB, "Non attribué"),
NotAttrib108(0x6C, MeterType.NOATTRIB, "Non attribué"),
NotAttrib109(0x6D, MeterType.NOATTRIB, "Non attribué"),
NotAttrib110(0x6E, MeterType.NOATTRIB, "Non attribué"),
NotAttrib111(0x6F, MeterType.NOATTRIB, "Non attribué"),
NotAttrib112(0x70, MeterType.NOATTRIB, "Non attribué"),
NotAttrib113(0x71, MeterType.NOATTRIB, "Non attribué"),
NotAttrib114(0x72, MeterType.NOATTRIB, "Non attribué"),
NotAttrib115(0x73, MeterType.NOATTRIB, "Non attribué"),
NotAttrib116(0x74, MeterType.NOATTRIB, "Non attribué"),
NotAttrib117(0x75, MeterType.NOATTRIB, "Non attribué"),
NotAttrib118(0x76, MeterType.NOATTRIB, "Non attribué"),
NotAttrib119(0x77, MeterType.NOATTRIB, "Non attribué"),
NotAttrib120(0x78, MeterType.NOATTRIB, "Non attribué"),
NotAttrib121(0x79, MeterType.NOATTRIB, "Non attribué"),
NotAttrib122(0x7A, MeterType.NOATTRIB, "Non attribué"),
NotAttrib123(0x7B, MeterType.NOATTRIB, "Non attribué"),
NotAttrib124(0x7C, MeterType.NOATTRIB, "Non attribué"),
NotAttrib125(0x7D, MeterType.NOATTRIB, "Non attribué"),
NotAttrib126(0x7E, MeterType.NOATTRIB, "Non attribué"),
NotAttrib127(0x7F, MeterType.NOATTRIB, "Non attribué"),
NotAttrib128(0x80, MeterType.NOATTRIB, "Non attribué"),
NotAttrib129(0x81, MeterType.NOATTRIB, "Non attribué"),
NotAttrib130(0x82, MeterType.NOATTRIB, "Non attribué"),
NotAttrib131(0x83, MeterType.NOATTRIB, "Non attribué"),
NotAttrib132(0x84, MeterType.NOATTRIB, "Non attribué"),
NotAttrib133(0x85, MeterType.NOATTRIB, "Non attribué"),
NotAttrib134(0x86, MeterType.NOATTRIB, "Non attribué"),
NotAttrib135(0x87, MeterType.NOATTRIB, "Non attribué"),
NotAttrib136(0x88, MeterType.NOATTRIB, "Non attribué"),
NotAttrib137(0x89, MeterType.NOATTRIB, "Non attribué"),
NotAttrib138(0x8A, MeterType.NOATTRIB, "Non attribué"),
NotAttrib139(0x8B, MeterType.NOATTRIB, "Non attribué"),
NotAttrib140(0x8C, MeterType.NOATTRIB, "Non attribué"),
NotAttrib141(0x8D, MeterType.NOATTRIB, "Non attribué"),
NotAttrib142(0x8E, MeterType.NOATTRIB, "Non attribué"),
NotAttrib143(0x8F, MeterType.NOATTRIB, "Non attribué"),
NotAttrib144(0x90, MeterType.NOATTRIB, "Non attribué"),
NotAttrib145(0x91, MeterType.NOATTRIB, "Non attribué"),
NotAttrib146(0x92, MeterType.NOATTRIB, "Non attribué"),
NotAttrib147(0x93, MeterType.NOATTRIB, "Non attribué"),
NotAttrib148(0x94, MeterType.NOATTRIB, "Non attribué"),
NotAttrib149(0x95, MeterType.NOATTRIB, "Non attribué"),
NotAttrib150(0x96, MeterType.NOATTRIB, "Non attribué"),
NotAttrib151(0x97, MeterType.NOATTRIB, "Non attribué"),
NotAttrib152(0x98, MeterType.NOATTRIB, "Non attribué"),
NotAttrib153(0x99, MeterType.NOATTRIB, "Non attribué"),
NotAttrib154(0x9A, MeterType.NOATTRIB, "Non attribué"),
NotAttrib155(0x9B, MeterType.NOATTRIB, "Non attribué"),
NotAttrib156(0x9C, MeterType.NOATTRIB, "Non attribué"),
NotAttrib157(0x9D, MeterType.NOATTRIB, "Non attribué"),
NotAttrib158(0x9E, MeterType.NOATTRIB, "Non attribué"),
NotAttrib159(0x9F, MeterType.NOATTRIB, "Non attribué"),
NotAttrib160(0xA0, MeterType.NOATTRIB, "Non attribué"),
NotAttrib161(0xA1, MeterType.NOATTRIB, "Non attribué"),
NotAttrib162(0xA2, MeterType.NOATTRIB, "Non attribué"),
NotAttrib163(0xA3, MeterType.NOATTRIB, "Non attribué"),
NotAttrib164(0xA4, MeterType.NOATTRIB, "Non attribué"),
NotAttrib165(0xA5, MeterType.NOATTRIB, "Non attribué"),
NotAttrib166(0xA6, MeterType.NOATTRIB, "Non attribué"),
NotAttrib167(0xA7, MeterType.NOATTRIB, "Non attribué"),
NotAttrib168(0xA8, MeterType.NOATTRIB, "Non attribué"),
NotAttrib169(0xA9, MeterType.NOATTRIB, "Non attribué"),
EuredisBluetooth(0xAA, MeterType.OTHER, "Coupleur EURIDIS bluetooth (PKE)"),
NotAttrib171(0xAB, MeterType.NOATTRIB, "Non attribué"),
NotAttrib172(0xAC, MeterType.NOATTRIB, "Non attribué"),
NotAttrib173(0xAD, MeterType.NOATTRIB, "Non attribué"),
NotAttrib174(0xAE, MeterType.NOATTRIB, "Non attribué"),
NotAttrib175(0xAF, MeterType.NOATTRIB, "Non attribué"),
NotAttrib176(0xB0, MeterType.NOATTRIB, "Non attribué"),
NotAttrib177(0xB1, MeterType.NOATTRIB, "Non attribué"),
NotAttrib178(0xB2, MeterType.NOATTRIB, "Non attribué"),
NotAttrib179(0xB3, MeterType.NOATTRIB, "Non attribué"),
NotAttrib180(0xB4, MeterType.NOATTRIB, "Non attribué"),
NotAttrib181(0xB5, MeterType.NOATTRIB, "Non attribué"),
NotAttrib182(0xB6, MeterType.NOATTRIB, "Non attribué"),
NotAttrib183(0xB7, MeterType.NOATTRIB, "Non attribué"),
NotAttrib184(0xB8, MeterType.NOATTRIB, "Non attribué"),
NotAttrib185(0xB9, MeterType.NOATTRIB, "Non attribué"),
NotAttrib186(0xBA, MeterType.NOATTRIB, "Non attribué"),
NotAttrib187(0xBB, MeterType.NOATTRIB, "Non attribué"),
NotAttrib188(0xBC, MeterType.NOATTRIB, "Non attribué"),
NotAttrib189(0xBD, MeterType.NOATTRIB, "Non attribué"),
NotAttrib190(0xBE, MeterType.NOATTRIB, "Non attribué"),
NotAttrib191(0xBF, MeterType.NOATTRIB, "Non attribué"),
NotAttrib192(0xC0, MeterType.NOATTRIB, "Non attribué"),
NotAttrib193(0xC1, MeterType.NOATTRIB, "Non attribué"),
NotAttrib194(0xC2, MeterType.NOATTRIB, "Non attribué"),
NotAttrib195(0xC3, MeterType.NOATTRIB, "Non attribué"),
NotAttrib196(0xC4, MeterType.NOATTRIB, "Non attribué"),
NotAttrib197(0xC5, MeterType.NOATTRIB, "Non attribué"),
NotAttrib198(0xC6, MeterType.NOATTRIB, "Non attribué"),
NotAttrib199(0xC7, MeterType.NOATTRIB, "Non attribué"),
NotAttrib200(0xC8, MeterType.NOATTRIB, "Non attribué"),
NotAttrib201(0xC9, MeterType.NOATTRIB, "Non attribué"),
NotAttrib202(0xCA, MeterType.NOATTRIB, "Non attribué"),
NotAttrib203(0xCB, MeterType.NOATTRIB, "Non attribué"),
NotAttrib204(0xCC, MeterType.NOATTRIB, "Non attribué"),
NotAttrib205(0xCD, MeterType.NOATTRIB, "Non attribué"),
NotAttrib206(0xCE, MeterType.NOATTRIB, "Non attribué"),
NotAttrib207(0xCF, MeterType.NOATTRIB, "Non attribué"),
NotAttrib208(0xD0, MeterType.NOATTRIB, "Non attribué"),
NotAttrib209(0xD1, MeterType.NOATTRIB, "Non attribué"),
NotAttrib210(0xD2, MeterType.NOATTRIB, "Non attribué"),
NotAttrib211(0xD3, MeterType.NOATTRIB, "Non attribué"),
NotAttrib212(0xD4, MeterType.NOATTRIB, "Non attribué"),
NotAttrib213(0xD5, MeterType.NOATTRIB, "Non attribué"),
NotAttrib214(0xD6, MeterType.NOATTRIB, "Non attribué"),
NotAttrib215(0xD7, MeterType.NOATTRIB, "Non attribué"),
NotAttrib216(0xD8, MeterType.NOATTRIB, "Non attribué"),
NotAttrib217(0xD9, MeterType.NOATTRIB, "Non attribué"),
NotAttrib218(0xDA, MeterType.NOATTRIB, "Non attribué"),
NotAttrib219(0xDB, MeterType.NOATTRIB, "Non attribué"),
BcplGen1(0xDC, MeterType.LINKY, "BCPL G1 LINKY pour compteur CJE"),
NotAttrib221(0xDD, MeterType.NOATTRIB, "Non attribué"),
NotAttrib222(0xDE, MeterType.NOATTRIB, "Non attribué"),
NotAttrib223(0xDF, MeterType.NOATTRIB, "Non attribué"),
NotAttrib224(0xE0, MeterType.NOATTRIB, "Non attribué"),
NotAttrib225(0xE1, MeterType.NOATTRIB, "Non attribué"),
NotAttrib226(0xE2, MeterType.NOATTRIB, "Non attribué"),
NotAttrib227(0xE3, MeterType.NOATTRIB, "Non attribué"),
NotAttrib228(0xE4, MeterType.NOATTRIB, "Non attribué"),
NotAttrib229(0xE5, MeterType.NOATTRIB, "Non attribué"),
NotAttrib230(0xE6, MeterType.NOATTRIB, "Non attribué"),
NotAttrib231(0xE7, MeterType.NOATTRIB, "Non attribué"),
NotAttrib232(0xE8, MeterType.NOATTRIB, "Non attribué"),
NotAttrib233(0xE9, MeterType.NOATTRIB, "Non attribué"),
NotAttrib234(0xEA, MeterType.NOATTRIB, "Non attribué"),
NotAttrib235(0xEB, MeterType.NOATTRIB, "Non attribué"),
NotAttrib236(0xEC, MeterType.NOATTRIB, "Non attribué"),
NotAttrib237(0xED, MeterType.NOATTRIB, "Non attribué"),
NotAttrib238(0xEE, MeterType.NOATTRIB, "Non attribué"),
NotAttrib239(0xEF, MeterType.NOATTRIB, "Non attribué"),
NotAttrib240(0xF0, MeterType.NOATTRIB, "Non attribué"),
NotAttrib241(0xF1, MeterType.NOATTRIB, "Non attribué"),
NotAttrib242(0xF2, MeterType.NOATTRIB, "Non attribué"),
NotAttrib243(0xF3, MeterType.NOATTRIB, "Non attribué"),
NotAttrib244(0xF4, MeterType.NOATTRIB, "Non attribué"),
NotAttrib245(0xF5, MeterType.NOATTRIB, "Non attribué"),
NotAttrib246(0xF6, MeterType.NOATTRIB, "Non attribué"),
NotAttrib247(0xF7, MeterType.NOATTRIB, "Non attribué"),
NotAttrib248(0xF8, MeterType.NOATTRIB, "Non attribué"),
NotAttrib249(0xF9, MeterType.NOATTRIB, "Non attribué"),
NotAttrib250(0xFA, MeterType.NOATTRIB, "Non attribué"),
NotAttrib251(0xFB, MeterType.NOATTRIB, "Non attribué"),
NotAttrib252(0xFC, MeterType.NOATTRIB, "Non attribué"),
NotAttrib253(0xFD, MeterType.NOATTRIB, "Non attribué"),
NotAttrib254(0xFE, MeterType.NOATTRIB, "Non attribué"),
NotAttrib255(0xFF, MeterType.NOATTRIB, "Non attribué");
private static Map<Integer, Meter> idToValue = new Hashtable<Integer, Meter>();
static {
for (Meter cpt : EnumSet.allOf(Meter.class)) {
// Yes, use some appropriate locale in production code :)
idToValue.put(cpt.id, cpt);
}
}
private final MeterType type;
private final int id;
private final String label;
Meter(int id, MeterType type, String label) {
this.id = id;
this.type = type;
this.label = label;
}
public final MeterType getCompteurType() {
return type;
}
public static @Nullable Meter getCompteurForId(int id) {
if (idToValue.containsKey(id)) {
return idToValue.get(id);
}
return null;
}
public String getLabel() {
return label;
}
}
@@ -0,0 +1,47 @@
/*
* Copyright (c) 2010-2026 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.binding.teleinfo.internal.types;
import org.eclipse.jdt.annotation.NonNullByDefault;
/**
* Define the different possible meter types
*
* @author Laurent Arnal - Initial contribution
*
*/
@NonNullByDefault
public enum MeterType {
NOATTRIB(0, "NoAttrib"),
BLEUE(1, "Blue"),
JAUNE(2, "Yellow"),
LINKY(3, "Linky"),
PRISME(4, "Prisme"),
OTHER(5, "Other");
private final int id;
private final String label;
MeterType(int id, String label) {
this.id = id;
this.label = label;
}
public final int getId() {
return id;
}
public final String getLabel() {
return label;
}
}
@@ -29,6 +29,8 @@ thing-type.teleinfo.cbetm_hc_electricitymeter.label = CBETM HC/HP
thing-type.teleinfo.cbetm_hc_electricitymeter.description = Three-phase Electricity meter with HC option - CBETM (aka "Compteur Bleu Electronique Triphasé Multitarif")
thing-type.teleinfo.cbetm_tempo_electricitymeter.label = CBETM TEMPO
thing-type.teleinfo.cbetm_tempo_electricitymeter.description = Three-phase Electricity meter with TEMPO option - CBETM (aka "Compteur Bleu Electronique Triphasé Multitarif")
thing-type.teleinfo.d2lcontroller.label = Teleinfo D2L Controller
thing-type.teleinfo.d2lcontroller.description = Teleinfo D2L dongle with Wifi Interface
thing-type.teleinfo.lsmm_electricitymeter.label = Linky Single-phase
thing-type.teleinfo.lsmm_electricitymeter.description = Single-phase Linky Electricity meter in standard mode
thing-type.teleinfo.lsmm_prod_electricitymeter.label = Linky Single-phase Producer
@@ -44,6 +46,16 @@ thing-type.teleinfo.serialcontroller.description = Teleinfo USB Stick with Seria
thing-type.config.teleinfo.adco.adco.label = ADCO/ADSC
thing-type.config.teleinfo.adco.adco.description = Electricity meter identifier (format: 12 characters / e.g: '031528042289')
thing-type.config.teleinfo.d2lcontroller.autoRepairInvalidADPSgroupLine.label = Auto Repair Malformed ADPS Data
thing-type.config.teleinfo.d2lcontroller.autoRepairInvalidADPSgroupLine.description = Try to auto repair malformed ADPS data from hardware issues (e.g: "ADPS032" instead of "ADPS 032" expected/well-formed data)
thing-type.config.teleinfo.d2lcontroller.listenningPort.label = TCP Port
thing-type.config.teleinfo.d2lcontroller.listenningPort.description = The tcp port we receive data from d2l
thing-type.config.teleinfo.d2lcontroller.ticMode.label = TIC mode
thing-type.config.teleinfo.d2lcontroller.ticMode.description = TIC Mode of the telemeter (Standard TIC mode is only available on Linky telemeters)
thing-type.config.teleinfo.d2lcontroller.ticMode.option.HISTORICAL = Historical
thing-type.config.teleinfo.d2lcontroller.ticMode.option.STANDARD = Standard
thing-type.config.teleinfo.d2lcontroller.verifyChecksum.label = Checksum Verification
thing-type.config.teleinfo.d2lcontroller.verifyChecksum.description = Activate checksum verification
thing-type.config.teleinfo.serialcontroller.autoRepairInvalidADPSgroupLine.label = Auto Repair Malformed ADPS Data
thing-type.config.teleinfo.serialcontroller.autoRepairInvalidADPSgroupLine.description = Try to auto repair malformed ADPS data from hardware issues (e.g: "ADPS032" instead of "ADPS 032" expected/well-formed data)
thing-type.config.teleinfo.serialcontroller.serialport.label = Serial Port
@@ -57,202 +69,278 @@ thing-type.config.teleinfo.serialcontroller.verifyChecksum.description = Activat
# channel group types
channel-group-type.teleinfo.commonLSMGroupType.label = Common
channel-group-type.teleinfo.commonLSMGroupType.description = Common channels for Linky telemeter in standard teleinformation mode
channel-group-type.teleinfo.commonLSMGroupType.channel.ccasn.label = CCASN
channel-group-type.teleinfo.commonLSMGroupType.channel.ccasn.description = Active charge point N
channel-group-type.teleinfo.commonLSMGroupType.channel.ccasnDate.label = CCASN TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.ccasnDate.description = Timestamp of CCASN value
channel-group-type.teleinfo.commonLSMGroupType.channel.ccasnMinus1.label = CCASN-1
channel-group-type.teleinfo.commonLSMGroupType.channel.ccasnMinus1.description = Active charge point N-1
channel-group-type.teleinfo.commonLSMGroupType.channel.ccasnMinus1Date.label = CCASN-1 TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.ccasnMinus1Date.description = Timestamp of CCASN-1 value
channel-group-type.teleinfo.commonLSMGroupType.channel.date.label = DATE
channel-group-type.teleinfo.commonLSMGroupType.channel.date.description = Date and Time
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm1.label = DPM1
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm1.description = Start of mobile peak period 1
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm1Date.label = DPM1 TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm1Date.description = Date of DPM1
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm2.label = DPM2
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm2.description = Start of mobile peak period 2
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm2Date.label = DPM2 TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm2Date.description = Date of DPM2
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm3.label = DPM3
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm3.description = Start of mobile peak period 3
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm3Date.label = DPM3 TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.dpm3Date.description = Date of DPM3
channel-group-type.teleinfo.commonLSMGroupType.channel.easd01.label = EASD01
channel-group-type.teleinfo.commonLSMGroupType.channel.easd01.description = Active energy withdrawn from distributor on index 01
channel-group-type.teleinfo.commonLSMGroupType.channel.easd02.label = EASD02
channel-group-type.teleinfo.commonLSMGroupType.channel.easd02.description = Active energy withdrawn from distributor on index 02
channel-group-type.teleinfo.commonLSMGroupType.channel.easd03.label = EASD03
channel-group-type.teleinfo.commonLSMGroupType.channel.easd03.description = Active energy withdrawn from distributor on index 03
channel-group-type.teleinfo.commonLSMGroupType.channel.easd04.label = EASD04
channel-group-type.teleinfo.commonLSMGroupType.channel.easd04.description = Active energy withdrawn from distributor on index 04
channel-group-type.teleinfo.commonLSMGroupType.channel.easf01.label = EASF01
channel-group-type.teleinfo.commonLSMGroupType.channel.easf01.description = Active energy withdrawn from provider on index 01
channel-group-type.teleinfo.commonLSMGroupType.channel.easf02.label = EASF02
channel-group-type.teleinfo.commonLSMGroupType.channel.easf02.description = Active energy withdrawn from provider on index 02
channel-group-type.teleinfo.commonLSMGroupType.channel.easf03.label = EASF03
channel-group-type.teleinfo.commonLSMGroupType.channel.easf03.description = Active energy withdrawn from provider on index 03
channel-group-type.teleinfo.commonLSMGroupType.channel.easf04.label = EASF04
channel-group-type.teleinfo.commonLSMGroupType.channel.easf04.description = Active energy withdrawn from provider on index 04
channel-group-type.teleinfo.commonLSMGroupType.channel.easf05.label = EASF05
channel-group-type.teleinfo.commonLSMGroupType.channel.easf05.description = Active energy withdrawn from provider on index 05
channel-group-type.teleinfo.commonLSMGroupType.channel.easf06.label = EASF06
channel-group-type.teleinfo.commonLSMGroupType.channel.easf06.description = Active energy withdrawn from provider on index 06
channel-group-type.teleinfo.commonLSMGroupType.channel.easf07.label = EASF07
channel-group-type.teleinfo.commonLSMGroupType.channel.easf07.description = Active energy withdrawn from provider on index 07
channel-group-type.teleinfo.commonLSMGroupType.channel.easf08.label = EASF08
channel-group-type.teleinfo.commonLSMGroupType.channel.easf08.description = Active energy withdrawn from provider on index 08
channel-group-type.teleinfo.commonLSMGroupType.channel.easf09.label = EASF09
channel-group-type.teleinfo.commonLSMGroupType.channel.easf09.description = Active energy withdrawn from provider on index 09
channel-group-type.teleinfo.commonLSMGroupType.channel.easf10.label = EASF10
channel-group-type.teleinfo.commonLSMGroupType.channel.easf10.description = Active energy withdrawn from provider on index 10
channel-group-type.teleinfo.commonLSMGroupType.channel.east.label = EAST
channel-group-type.teleinfo.commonLSMGroupType.channel.east.description = Total active energy withdrawn
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm1.label = FPM1
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm1.description = End of mobile peak period 1
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm1Date.label = FPM1 TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm1Date.description = Date of FPM1
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm2.label = FPM2
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm2.description = End of mobile peak period 2
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm2Date.label = FPM2 TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm2Date.description = Date of FPM2
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm3.label = FPM3
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm3.description = End of mobile peak period 3
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm3Date.label = FPM3 TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.fpm3Date.description = Date of FPM3
channel-group-type.teleinfo.commonLSMGroupType.channel.irms1.label = IRMS1
channel-group-type.teleinfo.commonLSMGroupType.channel.irms1.description = RMS Current on phase 1
channel-group-type.teleinfo.commonLSMGroupType.channel.ltarf.label = LTARF
channel-group-type.teleinfo.commonLSMGroupType.channel.ltarf.description = Current pricing label
channel-group-type.teleinfo.commonLSMGroupType.channel.msg1.label = MSG1
channel-group-type.teleinfo.commonLSMGroupType.channel.msg1.description = Short message
channel-group-type.teleinfo.commonLSMGroupType.channel.msg2.label = MSG2
channel-group-type.teleinfo.commonLSMGroupType.channel.msg2.description = Very short message
channel-group-type.teleinfo.commonLSMGroupType.channel.ngtf.label = NGTF
channel-group-type.teleinfo.commonLSMGroupType.channel.ngtf.description = Provider schedule name
channel-group-type.teleinfo.commonLSMGroupType.channel.njourf.label = NJOURF
channel-group-type.teleinfo.commonLSMGroupType.channel.njourf.description = Number of current provider schedule
channel-group-type.teleinfo.commonLSMGroupType.channel.njourfPlus1.label = NJOURF+1
channel-group-type.teleinfo.commonLSMGroupType.channel.njourfPlus1.description = Number of next day provider schedule
channel-group-type.teleinfo.commonLSMGroupType.channel.ntarf.label = NTARF
channel-group-type.teleinfo.commonLSMGroupType.channel.ntarf.description = Index of current pricing
channel-group-type.teleinfo.commonLSMGroupType.channel.pcoup.label = PCOUP
channel-group-type.teleinfo.commonLSMGroupType.channel.pcoup.description = Apparent power rupture capacity
channel-group-type.teleinfo.commonLSMGroupType.channel.pjourfPlus1.label = PJOURF+1
channel-group-type.teleinfo.commonLSMGroupType.channel.pjourfPlus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.commonLSMGroupType.channel.ppointe.label = PPOINTE
channel-group-type.teleinfo.commonLSMGroupType.channel.ppointe.description = Profile of next rush day
channel-group-type.teleinfo.commonLSMGroupType.channel.pref.label = PREF
channel-group-type.teleinfo.commonLSMGroupType.channel.pref.description = Reference apparent power
channel-group-type.teleinfo.commonLSMGroupType.channel.prm.label = PRM
channel-group-type.teleinfo.commonLSMGroupType.channel.prm.description = PRM
channel-group-type.teleinfo.commonLSMGroupType.channel.relais1.label = Relais 1
channel-group-type.teleinfo.commonLSMGroupType.channel.relais2.label = Relais 2
channel-group-type.teleinfo.commonLSMGroupType.channel.relais3.label = Relais 3
channel-group-type.teleinfo.commonLSMGroupType.channel.relais4.label = Relais 4
channel-group-type.teleinfo.commonLSMGroupType.channel.relais5.label = Relais 5
channel-group-type.teleinfo.commonLSMGroupType.channel.relais6.label = Relais 6
channel-group-type.teleinfo.commonLSMGroupType.channel.relais7.label = Relais 7
channel-group-type.teleinfo.commonLSMGroupType.channel.relais8.label = Relais 8
channel-group-type.teleinfo.commonLSMGroupType.channel.sinsts.label = SINSTS
channel-group-type.teleinfo.commonLSMGroupType.channel.sinsts.description = Instantaneous withdrawn apparent power
channel-group-type.teleinfo.commonLSMGroupType.channel.smaxsn.label = SMAXSN
channel-group-type.teleinfo.commonLSMGroupType.channel.smaxsn.description = Maximum withdrawn apparent power of the day
channel-group-type.teleinfo.commonLSMGroupType.channel.smaxsnDate.label = SMAXSN TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.smaxsnDate.description = Timestamp of SMAXSN value
channel-group-type.teleinfo.commonLSMGroupType.channel.smaxsnMinus1.label = SMAXSN-1
channel-group-type.teleinfo.commonLSMGroupType.channel.smaxsnMinus1.description = Maximum withdrawn apparent power of the previous day
channel-group-type.teleinfo.commonLSMGroupType.channel.smaxsnMinus1Date.label = SMAXSN-1 TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.smaxsnMinus1Date.description = Timestamp of SMAXSN-1 value
channel-group-type.teleinfo.commonLSMGroupType.channel.stge.label = STGE
channel-group-type.teleinfo.commonLSMGroupType.channel.stge.description = Status registry
channel-group-type.teleinfo.commonLSMGroupType.channel.umoy1.label = UMOY1
channel-group-type.teleinfo.commonLSMGroupType.channel.umoy1.description = Mean Voltage on phase 1
channel-group-type.teleinfo.commonLSMGroupType.channel.umoy1Date.label = UMOY1 TIMESTAMP
channel-group-type.teleinfo.commonLSMGroupType.channel.umoy1Date.description = Timestamp of UMOY1 value
channel-group-type.teleinfo.commonLSMGroupType.channel.urms1.label = URMS1
channel-group-type.teleinfo.commonLSMGroupType.channel.urms1.description = RMS Voltage on phase 1
channel-group-type.teleinfo.producerLSMGroupType.label = Producer
channel-group-type.teleinfo.producerLSMGroupType.description = Producer channels for Linky telemeter in standard teleinformation mode
channel-group-type.teleinfo.producerLSMGroupType.channel.ccain.label = CCAIN
channel-group-type.teleinfo.producerLSMGroupType.channel.ccain.description = Injected active charge point N
channel-group-type.teleinfo.producerLSMGroupType.channel.ccainDate.label = CCAIN TIMESTAMP
channel-group-type.teleinfo.producerLSMGroupType.channel.ccainDate.description = Timestamp of CCAIN value
channel-group-type.teleinfo.producerLSMGroupType.channel.ccainMinus1.label = CCAIN-1
channel-group-type.teleinfo.producerLSMGroupType.channel.ccainMinus1.description = Injected active charge point N-1
channel-group-type.teleinfo.producerLSMGroupType.channel.ccainMinus1Date.label = CCAIN-1 TIMESTAMP
channel-group-type.teleinfo.producerLSMGroupType.channel.ccainMinus1Date.description = Timestamp of CCAIN-1 value
channel-group-type.teleinfo.producerLSMGroupType.channel.eait.label = EAIT
channel-group-type.teleinfo.producerLSMGroupType.channel.eait.description = Total active energy injected
channel-group-type.teleinfo.producerLSMGroupType.channel.erq1.label = ERQ1
channel-group-type.teleinfo.producerLSMGroupType.channel.erq1.description = Total reactive energy Q1
channel-group-type.teleinfo.producerLSMGroupType.channel.erq2.label = ERQ2
channel-group-type.teleinfo.producerLSMGroupType.channel.erq2.description = Total reactive energy Q2
channel-group-type.teleinfo.producerLSMGroupType.channel.erq3.label = ERQ3
channel-group-type.teleinfo.producerLSMGroupType.channel.erq3.description = Total reactive energy Q3
channel-group-type.teleinfo.producerLSMGroupType.channel.erq4.label = ERQ4
channel-group-type.teleinfo.producerLSMGroupType.channel.erq4.description = Total reactive energy Q4
channel-group-type.teleinfo.producerLSMGroupType.channel.sinsti.label = SINSTI
channel-group-type.teleinfo.producerLSMGroupType.channel.sinsti.description = Instantaneous injected apparent power
channel-group-type.teleinfo.producerLSMGroupType.channel.smaxin.label = SMAXIN
channel-group-type.teleinfo.producerLSMGroupType.channel.smaxin.description = Maximum injected apparent power of the day
channel-group-type.teleinfo.producerLSMGroupType.channel.smaxinDate.label = SMAXIN TIMESTAMP
channel-group-type.teleinfo.producerLSMGroupType.channel.smaxinDate.description = Timestamp of SMAXIN value
channel-group-type.teleinfo.producerLSMGroupType.channel.smaxinMinus1.label = SMAXIN-1
channel-group-type.teleinfo.producerLSMGroupType.channel.smaxinMinus1.description = Maximum injected apparent power of the previous day
channel-group-type.teleinfo.producerLSMGroupType.channel.smaxinMinus1Date.label = SMAXIN-1 TIMESTAMP
channel-group-type.teleinfo.producerLSMGroupType.channel.smaxinMinus1Date.description = Timestamp of SMAXIN-1 value
channel-group-type.teleinfo.threePhasedLSMGroupType.label = Three-phase
channel-group-type.teleinfo.threePhasedLSMGroupType.description = Three-phased channels for Linky telemeter in standard teleinformation mode
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.irms2.label = IRMS2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.irms2.description = RMS Current on phase 2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.irms3.label = IRMS3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.irms3.description = RMS Current on phase 3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.sinsts1.label = SINSTS1
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.sinsts1.description = Instantaneous withdrawn apparent power on phase 1
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.sinsts2.label = SINSTS2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.sinsts2.description = Instantaneous withdrawn apparent power on phase 2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.sinsts3.label = SINSTS3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.sinsts3.description = Instantaneous withdrawn apparent power on phase 3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn1.label = SMAXSN1
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn1.description = Maximum withdrawn apparent power of the day on phase 1
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn1Date.label = SMAXSN1 TIMESTAMP
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn1Date.description = Timestamp of SMAXSN1 value
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn1Minus1.label = SMAXSN1-1
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn1Minus1.description = Maximum withdrawn apparent power of the previous day on phase 1
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn1Minus1Date.label = SMAXSN1-1 TIMESTAMP
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn1Minus1Date.description = Timestamp of SMAXSN1-1 value
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn2.label = SMAXSN2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn2.description = Maximum withdrawn apparent power of the day on phase 2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn2Date.label = SMAXSN2 TIMESTAMP
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn2Date.description = Timestamp of SMAXSN2 value
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn2Minus1.label = SMAXSN2-1
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn2Minus1.description = Maximum withdrawn apparent power of the previous day on phase 2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn2Minus1Date.label = SMAXSN2-1 TIMESTAMP
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn2Minus1Date.description = Timestamp of SMAXSN2-1 value
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn3.label = SMAXSN3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn3.description = Maximum withdrawn apparent power of the day on phase 3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn3Date.label = SMAXSN3 TIMESTAMP
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn3Date.description = Timestamp of SMAXSN3 value
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn3Minus1.label = SMAXSN3-1
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn3Minus1.description = Maximum withdrawn apparent power of the previous day on phase 3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn3Minus1Date.label = SMAXSN3-1 TIMESTAMP
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.smaxsn3Minus1Date.description = Timestamp of SMAXSN3-1 value
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.umoy2.label = UMOY2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.umoy2.description = Mean Voltage on phase 2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.umoy2Date.label = UMOY2 TIMESTAMP
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.umoy2Date.description = Timestamp of UMOY2 value
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.umoy3.label = UMOY3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.umoy3.description = Mean Voltage on phase 3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.umoy3Date.label = UMOY3 TIMESTAMP
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.umoy3Date.description = Timestamp of UMOY3 value
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.urms2.label = URMS2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.urms2.description = RMS Voltage on phase 2
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.urms3.label = URMS3
channel-group-type.teleinfo.threePhasedLSMGroupType.channel.urms3.description = RMS Voltage on phase 3
channel-group-type.teleinfo.common-lsm-group-type.label = Common
channel-group-type.teleinfo.common-lsm-group-type.description = Common channels for Linky telemeter in standard teleinformation mode
channel-group-type.teleinfo.common-lsm-group-type.channel.advice-moving-tips.label = Moving Tips Advice
channel-group-type.teleinfo.common-lsm-group-type.channel.advice-moving-tips.description = State of moving tips adviceh
channel-group-type.teleinfo.common-lsm-group-type.channel.cache.label = Cache
channel-group-type.teleinfo.common-lsm-group-type.channel.cache.description = State of linky cache switch
channel-group-type.teleinfo.common-lsm-group-type.channel.ccasn.label = CCASN
channel-group-type.teleinfo.common-lsm-group-type.channel.ccasn.description = Active charge point N
channel-group-type.teleinfo.common-lsm-group-type.channel.ccasnDate.label = CCASN TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.ccasnDate.description = Timestamp of CCASN value
channel-group-type.teleinfo.common-lsm-group-type.channel.ccasnMinus1.label = CCASN-1
channel-group-type.teleinfo.common-lsm-group-type.channel.ccasnMinus1.description = Active charge point N-1
channel-group-type.teleinfo.common-lsm-group-type.channel.ccasnMinus1Date.label = CCASN-1 TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.ccasnMinus1Date.description = Timestamp of CCASN-1 value
channel-group-type.teleinfo.common-lsm-group-type.channel.clock.label = Clock State
channel-group-type.teleinfo.common-lsm-group-type.channel.clock.description = State Of Clock
channel-group-type.teleinfo.common-lsm-group-type.channel.contact-sec.label = Dry Contact
channel-group-type.teleinfo.common-lsm-group-type.channel.contact-sec.description = State of main relay
channel-group-type.teleinfo.common-lsm-group-type.channel.cosphi.label = CosPhi
channel-group-type.teleinfo.common-lsm-group-type.channel.cosphi.description = CosPhi (floating value)
channel-group-type.teleinfo.common-lsm-group-type.channel.cut-off.label = Cut Off
channel-group-type.teleinfo.common-lsm-group-type.channel.cut-off.description = State of Cut Off switch
channel-group-type.teleinfo.common-lsm-group-type.channel.date.label = DATE
channel-group-type.teleinfo.common-lsm-group-type.channel.date.description = Date and Time
channel-group-type.teleinfo.common-lsm-group-type.channel.direction.label = Direction
channel-group-type.teleinfo.common-lsm-group-type.channel.direction.description = Direction of the active energy
channel-group-type.teleinfo.common-lsm-group-type.channel.distributor-rate.label = Distributor Rate
channel-group-type.teleinfo.common-lsm-group-type.channel.distributor-rate.description = The distributor rate
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm1.label = DPM1
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm1.description = Start of mobile peak period 1
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm1Date.label = DPM1 TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm1Date.description = Date of DPM1
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm2.label = DPM2
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm2.description = Start of mobile peak period 2
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm2Date.label = DPM2 TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm2Date.description = Date of DPM2
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm3.label = DPM3
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm3.description = Start of mobile peak period 3
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm3Date.label = DPM3 TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.dpm3Date.description = Date of DPM3
channel-group-type.teleinfo.common-lsm-group-type.channel.easd01.label = EASD01
channel-group-type.teleinfo.common-lsm-group-type.channel.easd01.description = Active energy withdrawn from distributor on index 01
channel-group-type.teleinfo.common-lsm-group-type.channel.easd02.label = EASD02
channel-group-type.teleinfo.common-lsm-group-type.channel.easd02.description = Active energy withdrawn from distributor on index 02
channel-group-type.teleinfo.common-lsm-group-type.channel.easd03.label = EASD03
channel-group-type.teleinfo.common-lsm-group-type.channel.easd03.description = Active energy withdrawn from distributor on index 03
channel-group-type.teleinfo.common-lsm-group-type.channel.easd04.label = EASD04
channel-group-type.teleinfo.common-lsm-group-type.channel.easd04.description = Active energy withdrawn from distributor on index 04
channel-group-type.teleinfo.common-lsm-group-type.channel.easf01.label = EASF01
channel-group-type.teleinfo.common-lsm-group-type.channel.easf01.description = Active energy withdrawn from provider on index 01
channel-group-type.teleinfo.common-lsm-group-type.channel.easf02.label = EASF02
channel-group-type.teleinfo.common-lsm-group-type.channel.easf02.description = Active energy withdrawn from provider on index 02
channel-group-type.teleinfo.common-lsm-group-type.channel.easf03.label = EASF03
channel-group-type.teleinfo.common-lsm-group-type.channel.easf03.description = Active energy withdrawn from provider on index 03
channel-group-type.teleinfo.common-lsm-group-type.channel.easf04.label = EASF04
channel-group-type.teleinfo.common-lsm-group-type.channel.easf04.description = Active energy withdrawn from provider on index 04
channel-group-type.teleinfo.common-lsm-group-type.channel.easf05.label = EASF05
channel-group-type.teleinfo.common-lsm-group-type.channel.easf05.description = Active energy withdrawn from provider on index 05
channel-group-type.teleinfo.common-lsm-group-type.channel.easf06.label = EASF06
channel-group-type.teleinfo.common-lsm-group-type.channel.easf06.description = Active energy withdrawn from provider on index 06
channel-group-type.teleinfo.common-lsm-group-type.channel.easf07.label = EASF07
channel-group-type.teleinfo.common-lsm-group-type.channel.easf07.description = Active energy withdrawn from provider on index 07
channel-group-type.teleinfo.common-lsm-group-type.channel.easf08.label = EASF08
channel-group-type.teleinfo.common-lsm-group-type.channel.easf08.description = Active energy withdrawn from provider on index 08
channel-group-type.teleinfo.common-lsm-group-type.channel.easf09.label = EASF09
channel-group-type.teleinfo.common-lsm-group-type.channel.easf09.description = Active energy withdrawn from provider on index 09
channel-group-type.teleinfo.common-lsm-group-type.channel.easf10.label = EASF10
channel-group-type.teleinfo.common-lsm-group-type.channel.easf10.description = Active energy withdrawn from provider on index 10
channel-group-type.teleinfo.common-lsm-group-type.channel.east.label = EAST
channel-group-type.teleinfo.common-lsm-group-type.channel.east.description = Total active energy withdrawn
channel-group-type.teleinfo.common-lsm-group-type.channel.exceeding-power.label = Exceeding
channel-group-type.teleinfo.common-lsm-group-type.channel.exceeding-power.description = State of exceeding
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm1.label = FPM1
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm1.description = End of mobile peak period 1
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm1Date.label = FPM1 TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm1Date.description = Date of FPM1
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm2.label = FPM2
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm2.description = End of mobile peak period 2
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm2Date.label = FPM2 TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm2Date.description = Date of FPM2
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm3.label = FPM3
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm3.description = End of mobile peak period 3
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm3Date.label = FPM3 TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.fpm3Date.description = Date of FPM3
channel-group-type.teleinfo.common-lsm-group-type.channel.function.label = Function
channel-group-type.teleinfo.common-lsm-group-type.channel.function.description = State of functionnality : consummer/producer
channel-group-type.teleinfo.common-lsm-group-type.channel.irms1.label = IRMS1
channel-group-type.teleinfo.common-lsm-group-type.channel.irms1.description = RMS Current on phase 1
channel-group-type.teleinfo.common-lsm-group-type.channel.irms1f.label = Irms 1f
channel-group-type.teleinfo.common-lsm-group-type.channel.irms1f.description = Intensity (floating value)
channel-group-type.teleinfo.common-lsm-group-type.channel.ltarf.label = LTARF
channel-group-type.teleinfo.common-lsm-group-type.channel.ltarf.description = Current pricing label
channel-group-type.teleinfo.common-lsm-group-type.channel.moving-tips.label = Moving Tips
channel-group-type.teleinfo.common-lsm-group-type.channel.moving-tips.description = State of moving tips
channel-group-type.teleinfo.common-lsm-group-type.channel.msg1.label = MSG1
channel-group-type.teleinfo.common-lsm-group-type.channel.msg1.description = Short message
channel-group-type.teleinfo.common-lsm-group-type.channel.msg2.label = MSG2
channel-group-type.teleinfo.common-lsm-group-type.channel.msg2.description = Very short message
channel-group-type.teleinfo.common-lsm-group-type.channel.ngtf.label = NGTF
channel-group-type.teleinfo.common-lsm-group-type.channel.ngtf.description = Provider schedule name
channel-group-type.teleinfo.common-lsm-group-type.channel.njourf.label = NJOURF
channel-group-type.teleinfo.common-lsm-group-type.channel.njourf.description = Number of current provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.njourfPlus1.label = NJOURF+1
channel-group-type.teleinfo.common-lsm-group-type.channel.njourfPlus1.description = Number of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.ntarf.label = NTARF
channel-group-type.teleinfo.common-lsm-group-type.channel.ntarf.description = Index of current pricing
channel-group-type.teleinfo.common-lsm-group-type.channel.outputcom.label = Communication Output State
channel-group-type.teleinfo.common-lsm-group-type.channel.outputcom.description = State of communication output
channel-group-type.teleinfo.common-lsm-group-type.channel.over-voltage.label = Over Voltage
channel-group-type.teleinfo.common-lsm-group-type.channel.over-voltage.description = State of over voltage
channel-group-type.teleinfo.common-lsm-group-type.channel.pcoup.label = PCOUP
channel-group-type.teleinfo.common-lsm-group-type.channel.pcoup.description = Apparent power rupture capacity
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf1-plus1.label = Pjour f1 +1
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf1-plus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf2-plus1.label = Pjour f2 +1
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf2-plus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf3-plus1.label = Pjour f3 +1
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf3-plus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf4-plus1.label = Pjour f4 +1
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf4-plus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf5-plus1.label = Pjour f5 +1
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf5-plus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf6-plus1.label = Pjour f6 +1
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf6-plus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf7-plus1.label = Pjour f7 +1
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf7-plus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf8-plus1.label = Pjour f8 +1
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourf8-plus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourfPlus1.label = PJOURF+1
channel-group-type.teleinfo.common-lsm-group-type.channel.pjourfPlus1.description = Profile of next day provider schedule
channel-group-type.teleinfo.common-lsm-group-type.channel.plc.label = Plc Type
channel-group-type.teleinfo.common-lsm-group-type.channel.plc.description = Type of PLC
channel-group-type.teleinfo.common-lsm-group-type.channel.plc-state.label = Plc State
channel-group-type.teleinfo.common-lsm-group-type.channel.plc-state.description = State of PLC
channel-group-type.teleinfo.common-lsm-group-type.channel.plc-synchro.label = Plc Synchro
channel-group-type.teleinfo.common-lsm-group-type.channel.plc-synchro.description = State of PLC Synchro
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe.label = PPOINTE
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe.description = Profile of next rush day
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe1.label = Ppointe 1
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe1.description = Profile of next rush day
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe2.label = Ppointe 2
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe2.description = Profile of next rush day
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe3.label = Ppointe 3
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe3.description = Profile of next rush day
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe4.label = Ppointe 4
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe4.description = Profile of next rush day
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe5.label = Ppointe 5
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe5.description = Profile of next rush day
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe6.label = Ppointe 6
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe6.description = Profile of next rush day
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe7.label = Ppointe 7
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe7.description = Profile of next rush day
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe8.label = Ppointe 8
channel-group-type.teleinfo.common-lsm-group-type.channel.ppointe8.description = Profile of next rush day
channel-group-type.teleinfo.common-lsm-group-type.channel.pref.label = PREF
channel-group-type.teleinfo.common-lsm-group-type.channel.pref.description = Reference apparent power
channel-group-type.teleinfo.common-lsm-group-type.channel.prm.label = PRM
channel-group-type.teleinfo.common-lsm-group-type.channel.prm.description = PRM
channel-group-type.teleinfo.common-lsm-group-type.channel.relais1.label = Relais 1
channel-group-type.teleinfo.common-lsm-group-type.channel.relais2.label = Relais 2
channel-group-type.teleinfo.common-lsm-group-type.channel.relais3.label = Relais 3
channel-group-type.teleinfo.common-lsm-group-type.channel.relais4.label = Relais 4
channel-group-type.teleinfo.common-lsm-group-type.channel.relais5.label = Relais 5
channel-group-type.teleinfo.common-lsm-group-type.channel.relais6.label = Relais 6
channel-group-type.teleinfo.common-lsm-group-type.channel.relais7.label = Relais 7
channel-group-type.teleinfo.common-lsm-group-type.channel.relais8.label = Relais 8
channel-group-type.teleinfo.common-lsm-group-type.channel.sactive.label = Sactive
channel-group-type.teleinfo.common-lsm-group-type.channel.sactive.description = Instantaneous withdrawn active power
channel-group-type.teleinfo.common-lsm-group-type.channel.sinsts.label = SINSTS
channel-group-type.teleinfo.common-lsm-group-type.channel.sinsts.description = Instantaneous withdrawn apparent power
channel-group-type.teleinfo.common-lsm-group-type.channel.smaxsn.label = SMAXSN
channel-group-type.teleinfo.common-lsm-group-type.channel.smaxsn.description = Maximum withdrawn apparent power of the day
channel-group-type.teleinfo.common-lsm-group-type.channel.smaxsnDate.label = SMAXSN TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.smaxsnDate.description = Timestamp of SMAXSN value
channel-group-type.teleinfo.common-lsm-group-type.channel.smaxsnMinus1.label = SMAXSN-1
channel-group-type.teleinfo.common-lsm-group-type.channel.smaxsnMinus1.description = Maximum withdrawn apparent power of the previous day
channel-group-type.teleinfo.common-lsm-group-type.channel.smaxsnMinus1Date.label = SMAXSN-1 TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.smaxsnMinus1Date.description = Timestamp of SMAXSN-1 value
channel-group-type.teleinfo.common-lsm-group-type.channel.sreactive.label = Sreactive
channel-group-type.teleinfo.common-lsm-group-type.channel.sreactive.description = Instantaneous withdrawn reactive power
channel-group-type.teleinfo.common-lsm-group-type.channel.stge.label = STGE
channel-group-type.teleinfo.common-lsm-group-type.channel.stge.description = Status registry
channel-group-type.teleinfo.common-lsm-group-type.channel.supplier-rate.label = Supplier Rate
channel-group-type.teleinfo.common-lsm-group-type.channel.supplier-rate.description = The supplier rate
channel-group-type.teleinfo.common-lsm-group-type.channel.tempo-today.label = Tempo Today
channel-group-type.teleinfo.common-lsm-group-type.channel.tempo-today.description = State of coupure switch
channel-group-type.teleinfo.common-lsm-group-type.channel.tempo-tomorrow.label = Tempo Tomorrow
channel-group-type.teleinfo.common-lsm-group-type.channel.tempo-tomorrow.description = State of coupure switch
channel-group-type.teleinfo.common-lsm-group-type.channel.umoy1.label = UMOY1
channel-group-type.teleinfo.common-lsm-group-type.channel.umoy1.description = Mean Voltage on phase 1
channel-group-type.teleinfo.common-lsm-group-type.channel.umoy1Date.label = UMOY1 TIMESTAMP
channel-group-type.teleinfo.common-lsm-group-type.channel.umoy1Date.description = Timestamp of UMOY1 value
channel-group-type.teleinfo.common-lsm-group-type.channel.urms1.label = URMS1
channel-group-type.teleinfo.common-lsm-group-type.channel.urms1.description = RMS Voltage on phase 1
channel-group-type.teleinfo.producer-lsm-group-type.label = Producer
channel-group-type.teleinfo.producer-lsm-group-type.description = Producer channels for Linky telemeter in standard teleinformation mode
channel-group-type.teleinfo.producer-lsm-group-type.channel.ccain.label = CCAIN
channel-group-type.teleinfo.producer-lsm-group-type.channel.ccain.description = Injected active charge point N
channel-group-type.teleinfo.producer-lsm-group-type.channel.ccainDate.label = CCAIN TIMESTAMP
channel-group-type.teleinfo.producer-lsm-group-type.channel.ccainDate.description = Timestamp of CCAIN value
channel-group-type.teleinfo.producer-lsm-group-type.channel.ccainMinus1.label = CCAIN-1
channel-group-type.teleinfo.producer-lsm-group-type.channel.ccainMinus1.description = Injected active charge point N-1
channel-group-type.teleinfo.producer-lsm-group-type.channel.ccainMinus1Date.label = CCAIN-1 TIMESTAMP
channel-group-type.teleinfo.producer-lsm-group-type.channel.ccainMinus1Date.description = Timestamp of CCAIN-1 value
channel-group-type.teleinfo.producer-lsm-group-type.channel.eait.label = EAIT
channel-group-type.teleinfo.producer-lsm-group-type.channel.eait.description = Total active energy injected
channel-group-type.teleinfo.producer-lsm-group-type.channel.erq1.label = ERQ1
channel-group-type.teleinfo.producer-lsm-group-type.channel.erq1.description = Total reactive energy Q1
channel-group-type.teleinfo.producer-lsm-group-type.channel.erq2.label = ERQ2
channel-group-type.teleinfo.producer-lsm-group-type.channel.erq2.description = Total reactive energy Q2
channel-group-type.teleinfo.producer-lsm-group-type.channel.erq3.label = ERQ3
channel-group-type.teleinfo.producer-lsm-group-type.channel.erq3.description = Total reactive energy Q3
channel-group-type.teleinfo.producer-lsm-group-type.channel.erq4.label = ERQ4
channel-group-type.teleinfo.producer-lsm-group-type.channel.erq4.description = Total reactive energy Q4
channel-group-type.teleinfo.producer-lsm-group-type.channel.sinsti.label = SINSTI
channel-group-type.teleinfo.producer-lsm-group-type.channel.sinsti.description = Instantaneous injected apparent power
channel-group-type.teleinfo.producer-lsm-group-type.channel.smaxin.label = SMAXIN
channel-group-type.teleinfo.producer-lsm-group-type.channel.smaxin.description = Maximum injected apparent power of the day
channel-group-type.teleinfo.producer-lsm-group-type.channel.smaxinDate.label = SMAXIN TIMESTAMP
channel-group-type.teleinfo.producer-lsm-group-type.channel.smaxinDate.description = Timestamp of SMAXIN value
channel-group-type.teleinfo.producer-lsm-group-type.channel.smaxinMinus1.label = SMAXIN-1
channel-group-type.teleinfo.producer-lsm-group-type.channel.smaxinMinus1.description = Maximum injected apparent power of the previous day
channel-group-type.teleinfo.producer-lsm-group-type.channel.smaxinMinus1Date.label = SMAXIN-1 TIMESTAMP
channel-group-type.teleinfo.producer-lsm-group-type.channel.smaxinMinus1Date.description = Timestamp of SMAXIN-1 value
channel-group-type.teleinfo.three-phased-lsm-group-type.label = Three-phase
channel-group-type.teleinfo.three-phased-lsm-group-type.description = Three-phased channels for Linky telemeter in standard teleinformation mode
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.irms2.label = IRMS2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.irms2.description = RMS Current on phase 2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.irms3.label = IRMS3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.irms3.description = RMS Current on phase 3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.sinsts1.label = SINSTS1
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.sinsts1.description = Instantaneous withdrawn apparent power on phase 1
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.sinsts2.label = SINSTS2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.sinsts2.description = Instantaneous withdrawn apparent power on phase 2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.sinsts3.label = SINSTS3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.sinsts3.description = Instantaneous withdrawn apparent power on phase 3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn1.label = SMAXSN1
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn1.description = Maximum withdrawn apparent power of the day on phase 1
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn1Date.label = SMAXSN1 TIMESTAMP
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn1Date.description = Timestamp of SMAXSN1 value
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn1Minus1.label = SMAXSN1-1
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn1Minus1.description = Maximum withdrawn apparent power of the previous day on phase 1
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn1Minus1Date.label = SMAXSN1-1 TIMESTAMP
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn1Minus1Date.description = Timestamp of SMAXSN1-1 value
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn2.label = SMAXSN2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn2.description = Maximum withdrawn apparent power of the day on phase 2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn2Date.label = SMAXSN2 TIMESTAMP
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn2Date.description = Timestamp of SMAXSN2 value
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn2Minus1.label = SMAXSN2-1
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn2Minus1.description = Maximum withdrawn apparent power of the previous day on phase 2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn2Minus1Date.label = SMAXSN2-1 TIMESTAMP
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn2Minus1Date.description = Timestamp of SMAXSN2-1 value
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn3.label = SMAXSN3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn3.description = Maximum withdrawn apparent power of the day on phase 3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn3Date.label = SMAXSN3 TIMESTAMP
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn3Date.description = Timestamp of SMAXSN3 value
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn3Minus1.label = SMAXSN3-1
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn3Minus1.description = Maximum withdrawn apparent power of the previous day on phase 3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn3Minus1Date.label = SMAXSN3-1 TIMESTAMP
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.smaxsn3Minus1Date.description = Timestamp of SMAXSN3-1 value
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.umoy2.label = UMOY2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.umoy2.description = Mean Voltage on phase 2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.umoy2Date.label = UMOY2 TIMESTAMP
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.umoy2Date.description = Timestamp of UMOY2 value
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.umoy3.label = UMOY3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.umoy3.description = Mean Voltage on phase 3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.umoy3Date.label = UMOY3 TIMESTAMP
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.umoy3Date.description = Timestamp of UMOY3 value
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.urms2.label = URMS2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.urms2.description = RMS Voltage on phase 2
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.urms3.label = URMS3
channel-group-type.teleinfo.three-phased-lsm-group-type.channel.urms3.description = RMS Voltage on phase 3
# channel types
@@ -278,23 +366,50 @@ channel-type.teleinfo.bbrhpjrType.label = BBRHPJR
channel-type.teleinfo.bbrhpjrType.description = Total consumed energy at high rate pricing on red days
channel-type.teleinfo.bbrhpjwType.label = BBRHPJW
channel-type.teleinfo.bbrhpjwType.description = Total consumed energy at high rate pricing on white days
channel-type.teleinfo.clockStateType.label = Clock State
channel-type.teleinfo.clockStateType.description = State of the clock.
channel-type.teleinfo.clockStateType.state.option.0 = Clock ok
channel-type.teleinfo.clockStateType.state.option.1 = Clock degrade
channel-type.teleinfo.contactType.label = Contact Type
channel-type.teleinfo.contactType.label = Contact Type
channel-type.teleinfo.couleurDemainType.label = DEMAIN
channel-type.teleinfo.couleurDemainType.description = Following day color
channel-type.teleinfo.couleurDemainType.state.option.Bleu = Bleu
channel-type.teleinfo.couleurDemainType.state.option.Blanc = Blanc
channel-type.teleinfo.couleurDemainType.state.option.Rouge = Rouge
channel-type.teleinfo.currentType.label = Teleinfo Current Type
channel-type.teleinfo.cutoffType.label = Cutoff Type
channel-type.teleinfo.cutoffType.description = This status describes the current cutoff type.
channel-type.teleinfo.cutoffType.state.option.0 = Not cutoff
channel-type.teleinfo.cutoffType.state.option.1 = Cutoff over power
channel-type.teleinfo.cutoffType.state.option.2 = Cutoff over voltage
channel-type.teleinfo.cutoffType.state.option.3 = Cutoff for delest
channel-type.teleinfo.cutoffType.state.option.4 = Cutoff from Eredis
channel-type.teleinfo.cutoffType.state.option.5 = Cutoff over heating with over currency
channel-type.teleinfo.cutoffType.state.option.6 = Cutoff over heating without over currency
channel-type.teleinfo.dateTimeType.label = Teleinfo DateTime Type
channel-type.teleinfo.dateTimeType.state.pattern = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS
channel-type.teleinfo.directionType.label = Active Energy
channel-type.teleinfo.directionType.description = Tell about energy direction, if negative we take energy from network, if positive we inject energy.
channel-type.teleinfo.directionType.state.option.0 = Active energy positive
channel-type.teleinfo.directionType.state.option.1 = Active energy negative
channel-type.teleinfo.ejphnType.label = EJPHN
channel-type.teleinfo.ejphnType.description = Total consumed energy at low rate pricing
channel-type.teleinfo.ejphpmType.label = EJPHPM
channel-type.teleinfo.ejphpmType.description = Total consumed energy at high rate pricing
channel-type.teleinfo.energyType.label = Teleinfo Energy Type
channel-type.teleinfo.exceedingPowerStateType.label = Exceeding Power State
channel-type.teleinfo.exceedingPowerStateType.description = Describe an Exceeding power condition state papp > pmax.
channel-type.teleinfo.exceedingPowerStateType.state.option.0 = No exceeding power
channel-type.teleinfo.exceedingPowerStateType.state.option.1 = Exceeding power
channel-type.teleinfo.frameTypeType.label = frameType
channel-type.teleinfo.frameTypeType.description = frameType
channel-type.teleinfo.frameTypeType.state.option.Long = Long
channel-type.teleinfo.frameTypeType.state.option.Short = Short
channel-type.teleinfo.functionType.label = Function Mode
channel-type.teleinfo.functionType.description = Tell if the meter is in Consummer mode or Producer mode.
channel-type.teleinfo.functionType.state.option.0 = Consummer
channel-type.teleinfo.functionType.state.option.1 = Producer
channel-type.teleinfo.hchcType.label = HCHC
channel-type.teleinfo.hchcType.description = Total consumed energy at low rate pricing
channel-type.teleinfo.hchpType.label = HCHP
@@ -322,19 +437,45 @@ channel-type.teleinfo.imax3Type.label = IMAX3
channel-type.teleinfo.imax3Type.description = Maximum consumed electric current on phase 3
channel-type.teleinfo.imaxType.label = IMAX
channel-type.teleinfo.imaxType.description = Maximum consumed electric current
channel-type.teleinfo.invalidFrameCounterType.label = Frames Corrupted
channel-type.teleinfo.invalidFrameCounterType.description = Counter tracking the number of frames invalid/corrupted (checksum)
channel-type.teleinfo.invalidFrameCounter.label = Frames Corrupted
channel-type.teleinfo.invalidFrameCounter.description = Counter tracking the number of frames invalid/corrupted (checksum)
channel-type.teleinfo.isouscType.label = ISOUSC
channel-type.teleinfo.isouscType.description = Subscribed electric current
channel-type.teleinfo.lastUpdateType.label = Last Update
channel-type.teleinfo.lastUpdateType.description = Timestamp of last received Teleinfo frame
channel-type.teleinfo.movingTipsType.label = Moving Tips
channel-type.teleinfo.movingTipsType.description = Indicate a special tariff slot for a specific period.
channel-type.teleinfo.movingTipsType.state.option.0 = Not moving tips advice
channel-type.teleinfo.movingTipsType.state.option.1 = Moving tips advice 1
channel-type.teleinfo.movingTipsType.state.option.2 = Moving tips advice 2
channel-type.teleinfo.movingTipsType.state.option.3 = Moving tips advice 3
channel-type.teleinfo.outputcomStateType.label = Output Com State
channel-type.teleinfo.outputcomStateType.description = State of the communication output
channel-type.teleinfo.outputcomStateType.state.option.0 = Desactivated
channel-type.teleinfo.outputcomStateType.state.option.1 = Activated without security
channel-type.teleinfo.outputcomStateType.state.option.2 = Unknow
channel-type.teleinfo.outputcomStateType.state.option.3 = Activated with security
channel-type.teleinfo.overVoltageStateType.label = Overvoltage State
channel-type.teleinfo.overVoltageStateType.description = Describes an over voltage condition possible state.
channel-type.teleinfo.overVoltageStateType.state.option.0 = No overvoltage
channel-type.teleinfo.overVoltageStateType.state.option.1 = Overvoltage
channel-type.teleinfo.pappType.label = PAPP
channel-type.teleinfo.pappType.description = Instantaneous apparent power
channel-type.teleinfo.pejpType.label = PEJP
channel-type.teleinfo.pejpType.description = Prior notice to EJP start
channel-type.teleinfo.plcStateType.label = PLC State
channel-type.teleinfo.plcStateType.description = State of the PLC
channel-type.teleinfo.plcStateType.state.option.0 = New/Unlock
channel-type.teleinfo.plcStateType.state.option.1 = New/Lock
channel-type.teleinfo.plcStateType.state.option.1 = Registered
channel-type.teleinfo.plcType.label = PLC Mode
channel-type.teleinfo.plcType.description = Mode of the PLC
channel-type.teleinfo.plcType.state.option.0 = Historic Mode
channel-type.teleinfo.plcType.state.option.1 = Standard mode
channel-type.teleinfo.pmaxType.label = PMAX
channel-type.teleinfo.pmaxType.description = Maximum consumed electric power on all phases
channel-type.teleinfo.potentialType.label = Teleinfo Potential Type
channel-type.teleinfo.powerFactorType.label = Teleinfo PowerFactor Type
channel-type.teleinfo.powerType.label = Teleinfo Power Type
channel-type.teleinfo.ppotType.label = PPOT
channel-type.teleinfo.ppotType.description = Electrical potential presence
@@ -366,5 +507,17 @@ channel-type.teleinfo.ptecType.state.option.HCJR = HCJR
channel-type.teleinfo.ptecType.state.option.HPJB = HPJB
channel-type.teleinfo.ptecType.state.option.HPJW = HPJW
channel-type.teleinfo.ptecType.state.option.HPJR = HPJR
channel-type.teleinfo.rateType.label = Numeric Rate Type
channel-type.teleinfo.stringType.label = Teleinfo String Type
channel-type.teleinfo.switchType.label = Teleinfo Switch Type
channel-type.teleinfo.switchType.label = Switch Type
channel-type.teleinfo.synchroPlcStateType.label = PLC Synchro State
channel-type.teleinfo.synchroPlcStateType.description = State of the PLC Synchro
channel-type.teleinfo.synchroPlcStateType.state.option.0 = PLC Sync
channel-type.teleinfo.synchroPlcStateType.state.option.1 = PLC Not Sync
channel-type.teleinfo.tempoType.label = Tempo Color Information
channel-type.teleinfo.tempoType.description = This status describes the tempo color of a day.
channel-type.teleinfo.tempoType.state.option.0 = Unknow
channel-type.teleinfo.tempoType.state.option.1 = Blue
channel-type.teleinfo.tempoType.state.option.2 = White
channel-type.teleinfo.tempoType.state.option.3 = Red
@@ -4,3 +4,4 @@ teleinfo.thingstate.serial_unsupported=Serial Error: Unsupported operation on po
teleinfo.thingstate.serial_listeners=Serial Error: Too many listeners on port {0}
teleinfo.thingstate.controller_offline=Controller is offline
teleinfo.thingstate.controller_unknown_retry_inprogress=Serial Error: Retry in progress...
teleinfo.thingstate.listenning_port_not_defined=ListenningPort is not defined
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbemm_base_electricitymeter" listed="false">
<thing-type id="cbemm_base_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,13 +14,13 @@
Multitarif")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="imax" typeId="imaxType"/>
<channel id="adps" typeId="adpsType"/>
<channel id="iinst" typeId="iinstType"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="base" typeId="baseType"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="imax" typeId="i-max"/>
<channel id="adps" typeId="adps"/>
<channel id="iinst" typeId="i-inst"/>
<channel id="lastUpdate" typeId="last-update"/>
<channel id="base" typeId="base"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbemm_ejp_electricitymeter" listed="false">
<thing-type id="cbemm_ejp_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,15 +14,15 @@
Multitarif")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="imax" typeId="imaxType"/>
<channel id="adps" typeId="adpsType"/>
<channel id="iinst" typeId="iinstType"/>
<channel id="pejp" typeId="pejpType"/>
<channel id="ejphpm" typeId="ejphpmType"/>
<channel id="ejphn" typeId="ejphnType"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="imax" typeId="i-max"/>
<channel id="adps" typeId="adps"/>
<channel id="iinst" typeId="i-inst"/>
<channel id="pejp" typeId="p-ejp"/>
<channel id="ejphpm" typeId="ejp-hpm"/>
<channel id="ejphn" typeId="ejp-hn"/>
<channel id="lastUpdate" typeId="last-update"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbemm_evolution_icc_base_electricitymeter" listed="false">
<thing-type id="cbemm_evolution_icc_base_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,14 +14,14 @@
Monophasé Multitarif Evolution ICC")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="imax" typeId="imaxType"/>
<channel id="adps" typeId="adpsType"/>
<channel id="papp" typeId="pappType"/>
<channel id="iinst" typeId="iinstType"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="base" typeId="baseType"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="imax" typeId="i-max"/>
<channel id="adps" typeId="adps"/>
<channel id="papp" typeId="p-app"/>
<channel id="iinst" typeId="i-inst"/>
<channel id="lastUpdate" typeId="last-update"/>
<channel id="base" typeId="base"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbemm_evolution_icc_ejp_electricitymeter" listed="false">
<thing-type id="cbemm_evolution_icc_ejp_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -15,16 +15,16 @@
Multitarif")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="imax" typeId="imaxType"/>
<channel id="adps" typeId="adpsType"/>
<channel id="papp" typeId="pappType"/>
<channel id="iinst" typeId="iinstType"/>
<channel id="pejp" typeId="pejpType"/>
<channel id="ejphpm" typeId="ejphpmType"/>
<channel id="ejphn" typeId="ejphnType"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="imax" typeId="i-max"/>
<channel id="adps" typeId="adps"/>
<channel id="papp" typeId="p-app"/>
<channel id="iinst" typeId="i-inst"/>
<channel id="pejp" typeId="p-ejp"/>
<channel id="ejphpm" typeId="ejp-hpm"/>
<channel id="ejphn" typeId="ejp-hn"/>
<channel id="lastUpdate" typeId="last-update"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbemm_evolution_icc_hc_electricitymeter" listed="false">
<thing-type id="cbemm_evolution_icc_hc_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,16 +14,16 @@
Monophasé Multitarif Evolution ICC")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="imax" typeId="imaxType"/>
<channel id="adps" typeId="adpsType"/>
<channel id="papp" typeId="pappType"/>
<channel id="iinst" typeId="iinstType"/>
<channel id="hchc" typeId="hchcType"/>
<channel id="hchp" typeId="hchpType"/>
<channel id="hhphc" typeId="hhphcType"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="imax" typeId="i-max"/>
<channel id="adps" typeId="adps"/>
<channel id="papp" typeId="p-app"/>
<channel id="iinst" typeId="i-inst"/>
<channel id="hchc" typeId="hc-hc"/>
<channel id="hchp" typeId="hc-hp"/>
<channel id="hhphc" typeId="h-hphc"/>
<channel id="lastUpdate" typeId="last-update"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbemm_evolution_icc_tempo_electricitymeter" listed="false">
<thing-type id="cbemm_evolution_icc_tempo_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -15,23 +15,23 @@
Monophasé Multitarif Evolution ICC")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="imax" typeId="imaxType"/>
<channel id="adps" typeId="adpsType"/>
<channel id="papp" typeId="pappType"/>
<channel id="iinst" typeId="iinstType"/>
<channel id="bbrhpjr" typeId="bbrhpjrType"/>
<channel id="bbrhcjr" typeId="bbrhcjrType"/>
<channel id="bbrhpjw" typeId="bbrhpjwType"/>
<channel id="bbrhcjw" typeId="bbrhcjwType"/>
<channel id="bbrhpjb" typeId="bbrhpjbType"/>
<channel id="bbrhcjb" typeId="bbrhcjbType"/>
<channel id="demain" typeId="couleurDemainType"/>
<channel id="hhphc" typeId="hhphcType"/>
<channel id="programmeCircuit1" typeId="programmeCircuit1Type"/>
<channel id="programmeCircuit2" typeId="programmeCircuit2Type"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="imax" typeId="i-max"/>
<channel id="adps" typeId="adps"/>
<channel id="papp" typeId="p-app"/>
<channel id="iinst" typeId="i-inst"/>
<channel id="bbrhpjr" typeId="bbr-hp-jr"/>
<channel id="bbrhcjr" typeId="bbr-hc-jr"/>
<channel id="bbrhpjw" typeId="bbr-hp-jw"/>
<channel id="bbrhcjw" typeId="bbr-hc-jw"/>
<channel id="bbrhpjb" typeId="bbr-hp-jb"/>
<channel id="bbrhcjb" typeId="bbr-hc-jb"/>
<channel id="demain" typeId="couleur-demain"/>
<channel id="hhphc" typeId="h-hphc"/>
<channel id="programmeCircuit1" typeId="programme-circuit-1"/>
<channel id="programmeCircuit2" typeId="programme-circuit-2"/>
<channel id="lastUpdate" typeId="last-update"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbemm_hc_electricitymeter" listed="false">
<thing-type id="cbemm_hc_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,15 +14,15 @@
Multitarif")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="imax" typeId="imaxType"/>
<channel id="adps" typeId="adpsType"/>
<channel id="iinst" typeId="iinstType"/>
<channel id="hchc" typeId="hchcType"/>
<channel id="hchp" typeId="hchpType"/>
<channel id="hhphc" typeId="hhphcType"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="imax" typeId="i-max"/>
<channel id="adps" typeId="adps"/>
<channel id="iinst" typeId="i-inst"/>
<channel id="hchc" typeId="hc-hc"/>
<channel id="hchp" typeId="hc-hp"/>
<channel id="hhphc" typeId="h-hphc"/>
<channel id="lastUpdate" typeId="last-update"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbemm_tempo_electricitymeter" listed="false">
<thing-type id="cbemm_tempo_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,22 +14,22 @@
Multitarif")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="imax" typeId="imaxType"/>
<channel id="adps" typeId="adpsType"/>
<channel id="iinst" typeId="iinstType"/>
<channel id="bbrhpjr" typeId="bbrhpjrType"/>
<channel id="bbrhcjr" typeId="bbrhcjrType"/>
<channel id="bbrhpjw" typeId="bbrhpjwType"/>
<channel id="bbrhcjw" typeId="bbrhcjwType"/>
<channel id="bbrhpjb" typeId="bbrhpjbType"/>
<channel id="bbrhcjb" typeId="bbrhcjbType"/>
<channel id="demain" typeId="couleurDemainType"/>
<channel id="hhphc" typeId="hhphcType"/>
<channel id="programmeCircuit1" typeId="programmeCircuit1Type"/>
<channel id="programmeCircuit2" typeId="programmeCircuit2Type"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="imax" typeId="i-max"/>
<channel id="adps" typeId="adps"/>
<channel id="iinst" typeId="i-inst"/>
<channel id="bbrhpjr" typeId="bbr-hp-jr"/>
<channel id="bbrhcjr" typeId="bbr-hc-jr"/>
<channel id="bbrhpjw" typeId="bbr-hp-jw"/>
<channel id="bbrhcjw" typeId="bbr-hc-jw"/>
<channel id="bbrhpjb" typeId="bbr-hp-jb"/>
<channel id="bbrhcjb" typeId="bbr-hc-jb"/>
<channel id="demain" typeId="couleur-demain"/>
<channel id="hhphc" typeId="h-hphc"/>
<channel id="programmeCircuit1" typeId="programme-circuit-1"/>
<channel id="programmeCircuit2" typeId="programme-circuit-2"/>
<channel id="lastUpdate" typeId="last-update"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbetm_base_electricitymeter" listed="false">
<thing-type id="cbetm_base_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,23 +14,23 @@
Multitarif")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="frameType" typeId="frameTypeType"/>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="iinst1" typeId="iinst1Type"/>
<channel id="iinst2" typeId="iinst2Type"/>
<channel id="iinst3" typeId="iinst3Type"/>
<channel id="imax1" typeId="imax1Type"/>
<channel id="imax2" typeId="imax2Type"/>
<channel id="imax3" typeId="imax3Type"/>
<channel id="pmax" typeId="pmaxType"/>
<channel id="papp" typeId="pappType"/>
<channel id="ppot" typeId="ppotType"/>
<channel id="adir1" typeId="adir1Type"/>
<channel id="adir2" typeId="adir2Type"/>
<channel id="adir3" typeId="adir3Type"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="base" typeId="baseType"/>
<channel id="frame" typeId="frame"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="iinst1" typeId="i-inst-1"/>
<channel id="iinst2" typeId="i-inst-2"/>
<channel id="iinst3" typeId="i-inst-3"/>
<channel id="imax1" typeId="i-max-1"/>
<channel id="imax2" typeId="i-max-2"/>
<channel id="imax3" typeId="i-max-3"/>
<channel id="pmax" typeId="p-max"/>
<channel id="papp" typeId="p-app"/>
<channel id="ppot" typeId="p-pot"/>
<channel id="adir1" typeId="a-dir-1"/>
<channel id="adir2" typeId="a-dir-2"/>
<channel id="adir3" typeId="a-dir-3"/>
<channel id="lastUpdate" typeId="last-update"/>
<channel id="base" typeId="base"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbetm_ejp_electricitymeter" listed="false">
<thing-type id="cbetm_ejp_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,25 +14,25 @@
Multitarif")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="frameType" typeId="frameTypeType"/>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="iinst1" typeId="iinst1Type"/>
<channel id="iinst2" typeId="iinst2Type"/>
<channel id="iinst3" typeId="iinst3Type"/>
<channel id="imax1" typeId="imax1Type"/>
<channel id="imax2" typeId="imax2Type"/>
<channel id="imax3" typeId="imax3Type"/>
<channel id="pmax" typeId="pmaxType"/>
<channel id="papp" typeId="pappType"/>
<channel id="ppot" typeId="ppotType"/>
<channel id="adir1" typeId="adir1Type"/>
<channel id="adir2" typeId="adir2Type"/>
<channel id="adir3" typeId="adir3Type"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="pejp" typeId="pejpType"/>
<channel id="ejphpm" typeId="ejphpmType"/>
<channel id="ejphn" typeId="ejphnType"/>
<channel id="frame" typeId="frame"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="iinst1" typeId="i-inst-1"/>
<channel id="iinst2" typeId="i-inst-2"/>
<channel id="iinst3" typeId="i-inst-3"/>
<channel id="imax1" typeId="i-max-1"/>
<channel id="imax2" typeId="i-max-2"/>
<channel id="imax3" typeId="i-max-3"/>
<channel id="pmax" typeId="p-max"/>
<channel id="papp" typeId="p-app"/>
<channel id="ppot" typeId="p-pot"/>
<channel id="adir1" typeId="a-dir-1"/>
<channel id="adir2" typeId="a-dir-2"/>
<channel id="adir3" typeId="a-dir-3"/>
<channel id="lastUpdate" typeId="last-update"/>
<channel id="pejp" typeId="p-ejp"/>
<channel id="ejphpm" typeId="ejp-hpm"/>
<channel id="ejphn" typeId="ejp-hn"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbetm_hc_electricitymeter" listed="false">
<thing-type id="cbetm_hc_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,25 +14,25 @@
Multitarif")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="frameType" typeId="frameTypeType"/>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="iinst1" typeId="iinst1Type"/>
<channel id="iinst2" typeId="iinst2Type"/>
<channel id="iinst3" typeId="iinst3Type"/>
<channel id="imax1" typeId="imax1Type"/>
<channel id="imax2" typeId="imax2Type"/>
<channel id="imax3" typeId="imax3Type"/>
<channel id="pmax" typeId="pmaxType"/>
<channel id="papp" typeId="pappType"/>
<channel id="ppot" typeId="ppotType"/>
<channel id="adir1" typeId="adir1Type"/>
<channel id="adir2" typeId="adir2Type"/>
<channel id="adir3" typeId="adir3Type"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="hchc" typeId="hchcType"/>
<channel id="hchp" typeId="hchpType"/>
<channel id="hhphc" typeId="hhphcType"/>
<channel id="frame" typeId="frame"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="iinst1" typeId="i-inst-1"/>
<channel id="iinst2" typeId="i-inst-2"/>
<channel id="iinst3" typeId="i-inst-3"/>
<channel id="imax1" typeId="i-max-1"/>
<channel id="imax2" typeId="i-max-2"/>
<channel id="imax3" typeId="i-max-3"/>
<channel id="pmax" typeId="p-max"/>
<channel id="papp" typeId="p-app"/>
<channel id="ppot" typeId="p-pot"/>
<channel id="adir1" typeId="a-dir-1"/>
<channel id="adir2" typeId="a-dir-2"/>
<channel id="adir3" typeId="a-dir-3"/>
<channel id="lastUpdate" typeId="last-update"/>
<channel id="hchc" typeId="hc-hc"/>
<channel id="hchp" typeId="hc-hp"/>
<channel id="hhphc" typeId="h-hphc"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="cbetm_tempo_electricitymeter" listed="false">
<thing-type id="cbetm_tempo_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
</supported-bridge-type-refs>
@@ -14,32 +14,32 @@
Multitarif")</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="frameType" typeId="frameTypeType"/>
<channel id="isousc" typeId="isouscType"/>
<channel id="ptec" typeId="ptecType"/>
<channel id="iinst1" typeId="iinst1Type"/>
<channel id="iinst2" typeId="iinst2Type"/>
<channel id="iinst3" typeId="iinst3Type"/>
<channel id="imax1" typeId="imax1Type"/>
<channel id="imax2" typeId="imax2Type"/>
<channel id="imax3" typeId="imax3Type"/>
<channel id="pmax" typeId="pmaxType"/>
<channel id="papp" typeId="pappType"/>
<channel id="ppot" typeId="ppotType"/>
<channel id="adir1" typeId="adir1Type"/>
<channel id="adir2" typeId="adir2Type"/>
<channel id="adir3" typeId="adir3Type"/>
<channel id="bbrhpjr" typeId="bbrhpjrType"/>
<channel id="bbrhcjr" typeId="bbrhcjrType"/>
<channel id="bbrhpjw" typeId="bbrhpjwType"/>
<channel id="bbrhcjw" typeId="bbrhcjwType"/>
<channel id="bbrhpjb" typeId="bbrhpjbType"/>
<channel id="bbrhcjb" typeId="bbrhcjbType"/>
<channel id="demain" typeId="couleurDemainType"/>
<channel id="hhphc" typeId="hhphcType"/>
<channel id="programmeCircuit1" typeId="programmeCircuit1Type"/>
<channel id="programmeCircuit2" typeId="programmeCircuit2Type"/>
<channel id="lastUpdate" typeId="lastUpdateType"/>
<channel id="frame" typeId="frame"/>
<channel id="isousc" typeId="i-sousc"/>
<channel id="ptec" typeId="p-tec"/>
<channel id="iinst1" typeId="i-inst-1"/>
<channel id="iinst2" typeId="i-inst-2"/>
<channel id="iinst3" typeId="i-inst-3"/>
<channel id="imax1" typeId="i-max-1"/>
<channel id="imax2" typeId="i-max-2"/>
<channel id="imax3" typeId="i-max-3"/>
<channel id="pmax" typeId="p-max"/>
<channel id="papp" typeId="p-app"/>
<channel id="ppot" typeId="p-pot"/>
<channel id="adir1" typeId="a-dir-1"/>
<channel id="adir2" typeId="a-dir-2"/>
<channel id="adir3" typeId="a-dir-3"/>
<channel id="bbrhpjr" typeId="bbr-hp-jr"/>
<channel id="bbrhcjr" typeId="bbr-hc-jr"/>
<channel id="bbrhpjw" typeId="bbr-hp-jw"/>
<channel id="bbrhcjw" typeId="bbr-hc-jw"/>
<channel id="bbrhpjb" typeId="bbr-hp-jb"/>
<channel id="bbrhcjb" typeId="bbr-hc-jb"/>
<channel id="demain" typeId="couleur-demain"/>
<channel id="hhphc" typeId="h-hphc"/>
<channel id="programmeCircuit1" typeId="programme-circuit-1"/>
<channel id="programmeCircuit2" typeId="programme-circuit-2"/>
<channel id="lastUpdate" typeId="last-update"/>
</channels>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<channel-type id="baseType">
<channel-type id="base">
<item-type>Number:Energy</item-type>
<label>BASE</label>
<description>Total consumed energy</description>
@@ -16,4 +16,10 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="invalid-frame-counter">
<item-type>Number</item-type>
<label>Frames Corrupted</label>
<description>Counter tracking the number of frames invalid/corrupted (checksum)</description>
<state pattern="%d" readOnly="true"></state>
</channel-type>
</thing:thing-descriptions>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<channel-type id="imaxType">
<channel-type id="i-max">
<item-type>Number:ElectricCurrent</item-type>
<label>IMAX</label>
<description>Maximum consumed electric current</description>
@@ -16,7 +16,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="iinstType">
<channel-type id="i-inst">
<item-type>Number:ElectricCurrent</item-type>
<label>IINST</label>
<description>Instantaneous electric current</description>
@@ -28,7 +28,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="adpsType">
<channel-type id="adps">
<item-type>Number:ElectricCurrent</item-type>
<label>ADPS</label>
<description>Excess electric current warning</description>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<channel-type id="frameTypeType" advanced="true">
<channel-type id="frame" advanced="true">
<item-type>String</item-type>
<label>frameType</label>
<description>frameType</description>
@@ -17,7 +17,7 @@
</state>
</channel-type>
<channel-type id="iinst1Type">
<channel-type id="i-inst-1">
<item-type>Number:ElectricCurrent</item-type>
<label>IINST1</label>
<description>Instantaneous electric current on phase 1</description>
@@ -29,7 +29,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="iinst2Type">
<channel-type id="i-inst-2">
<item-type>Number:ElectricCurrent</item-type>
<label>IINST2</label>
<description>Instantaneous electric current on phase 2</description>
@@ -41,7 +41,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="iinst3Type">
<channel-type id="i-inst-3">
<item-type>Number:ElectricCurrent</item-type>
<label>IINST3</label>
<description>Instantaneous electric current on phase 3</description>
@@ -53,7 +53,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="imax1Type">
<channel-type id="i-max-1">
<item-type>Number:ElectricCurrent</item-type>
<label>IMAX1</label>
<description>Maximum consumed electric current on phase 1</description>
@@ -65,7 +65,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="imax2Type">
<channel-type id="i-max-2">
<item-type>Number:ElectricCurrent</item-type>
<label>IMAX2</label>
<description>Maximum consumed electric current on phase 2</description>
@@ -77,7 +77,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="imax3Type">
<channel-type id="i-max-3">
<item-type>Number:ElectricCurrent</item-type>
<label>IMAX3</label>
<description>Maximum consumed electric current on phase 3</description>
@@ -89,7 +89,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="pmaxType">
<channel-type id="p-max">
<item-type>Number:Power</item-type>
<label>PMAX</label>
<description>Maximum consumed electric power on all phases</description>
@@ -101,7 +101,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="pappType">
<channel-type id="p-app">
<item-type>Number:Power</item-type>
<label>PAPP</label>
<description>Instantaneous apparent power</description>
@@ -113,35 +113,50 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="ppotType">
<channel-type id="p-pot">
<item-type>String</item-type>
<label>PPOT</label>
<description>Electrical potential presence</description>
<category>Energy</category>
<tags>
<tag>Measurement</tag>
</tags>
<state pattern="%s" readOnly="true"/>
</channel-type>
<channel-type id="adir1Type">
<channel-type id="a-dir-1">
<item-type>Number:ElectricCurrent</item-type>
<label>ADIR1</label>
<description>Excess electric current on phase 1 warning</description>
<category>Energy</category>
<tags>
<tag>Measurement</tag>
<tag>Current</tag>
</tags>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="adir2Type">
<channel-type id="a-dir-2">
<item-type>Number:ElectricCurrent</item-type>
<label>ADIR2</label>
<description>Excess electric current on phase 2 warning</description>
<category>Energy</category>
<tags>
<tag>Measurement</tag>
<tag>Current</tag>
</tags>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="adir3Type">
<channel-type id="a-dir-3">
<item-type>Number:ElectricCurrent</item-type>
<label>ADIR3</label>
<description>Excess electric current on phase 3 warning</description>
<category>Energy</category>
<tags>
<tag>Measurement</tag>
<tag>Current</tag>
</tags>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
</thing:thing-descriptions>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<channel-type id="isouscType">
<channel-type id="i-sousc">
<item-type>Number:ElectricCurrent</item-type>
<label>ISOUSC</label>
<description>Subscribed electric current</description>
@@ -16,7 +16,7 @@
<state pattern="%d A" readOnly="true"/>
</channel-type>
<channel-type id="ptecType">
<channel-type id="p-tec">
<item-type>String</item-type>
<label>PTEC</label>
<description>Current pricing period</description>
@@ -42,7 +42,7 @@
</state>
</channel-type>
<channel-type id="hhphcType">
<channel-type id="h-hphc">
<item-type>String</item-type>
<label>HHPHC</label>
<description>Pricing schedule group</description>
@@ -62,7 +62,7 @@
</state>
</channel-type>
<channel-type id="lastUpdateType">
<channel-type id="last-update">
<item-type>DateTime</item-type>
<label>Last Update</label>
<description>Timestamp of last received Teleinfo frame</description>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<channel-type id="ejphpmType">
<channel-type id="ejp-hpm">
<item-type>Number:Energy</item-type>
<label>EJPHPM</label>
<description>Total consumed energy at high rate pricing</description>
@@ -16,7 +16,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="ejphnType">
<channel-type id="ejp-hn">
<item-type>Number:Energy</item-type>
<label>EJPHN</label>
<description>Total consumed energy at low rate pricing</description>
@@ -28,11 +28,15 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="pejpType">
<channel-type id="p-ejp">
<item-type>Number:Time</item-type>
<label>PEJP</label>
<description>Prior notice to EJP start</description>
<category>Energy</category>
<tags>
<tag>Status</tag>
</tags>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
</thing:thing-descriptions>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<channel-type id="hchcType">
<channel-type id="hc-hc">
<item-type>Number:Energy</item-type>
<label>HCHC</label>
<description>Total consumed energy at low rate pricing</description>
@@ -16,7 +16,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="hchpType">
<channel-type id="hc-hp">
<item-type>Number:Energy</item-type>
<label>HCHP</label>
<description>Total consumed energy at high rate pricing</description>
@@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<channel-type id="bbrhpjrType">
<channel-type id="bbr-hp-jr">
<item-type>Number:Energy</item-type>
<label>BBRHPJR</label>
<description>Total consumed energy at high rate pricing on red days</description>
@@ -16,7 +16,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="bbrhcjrType">
<channel-type id="bbr-hc-jr">
<item-type>Number:Energy</item-type>
<label>BBRHCJR</label>
<description>Total consumed energy at low rate pricing on red days</description>
@@ -28,7 +28,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="bbrhpjwType">
<channel-type id="bbr-hp-jw">
<item-type>Number:Energy</item-type>
<label>BBRHPJW</label>
<description>Total consumed energy at high rate pricing on white days</description>
@@ -40,7 +40,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="bbrhcjwType">
<channel-type id="bbr-hc-jw">
<item-type>Number:Energy</item-type>
<label>BBRHCJW</label>
<description>Total consumed energy at low rate pricing on white days</description>
@@ -52,7 +52,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="bbrhpjbType">
<channel-type id="bbr-hp-jb">
<item-type>Number:Energy</item-type>
<label>BBRHPJB</label>
<description>Total consumed energy at high rate pricing on blue days</description>
@@ -64,7 +64,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="bbrhcjbType">
<channel-type id="bbr-hc-jb">
<item-type>Number:Energy</item-type>
<label>BBRHCJB</label>
<description>Total consumed energy at low rate pricing on blue days</description>
@@ -76,7 +76,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="couleurDemainType">
<channel-type id="couleur-demain">
<item-type>String</item-type>
<label>DEMAIN</label>
<description>Following day color</description>
@@ -94,7 +94,7 @@
</state>
</channel-type>
<channel-type id="programmeCircuit1Type">
<channel-type id="programme-circuit-1">
<item-type>String</item-type>
<label>ProgrammeCircuit1</label>
<description>Circuit 1 program</description>
@@ -112,7 +112,7 @@
</state>
</channel-type>
<channel-type id="programmeCircuit2Type">
<channel-type id="programme-circuit-2">
<item-type>String</item-type>
<label>ProgrammeCircuit2</label>
<description>Circuit 2 program</description>
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="teleinfo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<bridge-type id="d2lcontroller">
<label>D2L Controller</label>
<description>D2L dongle with Wifi Interface</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channels>
<channel id="invalidFrameCounter" typeId="invalid-frame-counter"/>
</channels>
<config-description>
<parameter name="listenningPort" type="text" required="false">
<label>TCP Port</label>
<description>The tcp port we receive data from d2l</description>
</parameter>
<parameter name="encryptionKeys" type="text" required="true">
<label>Encryption Key</label>
<description>The different encryptionKey of your d2l</description>
</parameter>
<parameter name="ticMode" type="text" required="true">
<label>TIC Mode</label>
<description>TIC Mode of the telemeter (Standard TIC mode is only available on Linky telemeters)</description>
<default>HISTORICAL</default>
<options>
<option value="HISTORICAL">Historical</option>
<option value="STANDARD">Standard</option>
</options>
<limitToOptions>true</limitToOptions>
</parameter>
<parameter name="verifyChecksum" type="boolean" required="true">
<label>Checksum Verification</label>
<description>Activate checksum verification</description>
<default>true</default>
<advanced>true</advanced>
</parameter>
<parameter name="autoRepairInvalidADPSgroupLine" type="boolean" required="false">
<label>Auto Repair Malformed ADPS Data</label>
<description>Try to auto repair malformed ADPS data from hardware issues (e.g: "ADPS032" instead of "ADPS 032"
expected/well-formed data)</description>
<default>true</default>
<advanced>true</advanced>
</parameter>
</config-description>
</bridge-type>
</thing:thing-descriptions>
@@ -4,506 +4,696 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<channel-group-type id="commonLSMGroupType">
<channel-group-type id="common-lsm-group-type">
<label>Common</label>
<description>Common channels for Linky telemeter in standard teleinformation mode</description>
<category>Energy</category>
<channels>
<channel id="ngtf" typeId="stringType">
<channel id="ngtf" typeId="string">
<label>NGTF</label>
<description>Provider schedule name</description>
</channel>
<channel id="ltarf" typeId="stringType">
<channel id="ltarf" typeId="string">
<label>LTARF</label>
<description>Current pricing label</description>
</channel>
<channel id="east" typeId="energyType">
<channel id="east" typeId="energy">
<label>EAST</label>
<description>Total active energy withdrawn</description>
</channel>
<channel id="easf01" typeId="energyType">
<channel id="easf01" typeId="energy">
<label>EASF01</label>
<description>Active energy withdrawn from provider on index 01</description>
</channel>
<channel id="easf02" typeId="energyType">
<channel id="easf02" typeId="energy">
<label>EASF02</label>
<description>Active energy withdrawn from provider on index 02</description>
</channel>
<channel id="easf03" typeId="energyType">
<channel id="easf03" typeId="energy">
<label>EASF03</label>
<description>Active energy withdrawn from provider on index 03</description>
</channel>
<channel id="easf04" typeId="energyType">
<channel id="easf04" typeId="energy">
<label>EASF04</label>
<description>Active energy withdrawn from provider on index 04</description>
</channel>
<channel id="easf05" typeId="energyType">
<channel id="easf05" typeId="energy">
<label>EASF05</label>
<description>Active energy withdrawn from provider on index 05</description>
</channel>
<channel id="easf06" typeId="energyType">
<channel id="easf06" typeId="energy">
<label>EASF06</label>
<description>Active energy withdrawn from provider on index 06</description>
</channel>
<channel id="easf07" typeId="energyType">
<channel id="easf07" typeId="energy">
<label>EASF07</label>
<description>Active energy withdrawn from provider on index 07</description>
</channel>
<channel id="easf08" typeId="energyType">
<channel id="easf08" typeId="energy">
<label>EASF08</label>
<description>Active energy withdrawn from provider on index 08</description>
</channel>
<channel id="easf09" typeId="energyType">
<channel id="easf09" typeId="energy">
<label>EASF09</label>
<description>Active energy withdrawn from provider on index 09</description>
</channel>
<channel id="easf10" typeId="energyType">
<channel id="easf10" typeId="energy">
<label>EASF10</label>
<description>Active energy withdrawn from provider on index 10</description>
</channel>
<channel id="easd01" typeId="energyType">
<channel id="easd01" typeId="energy">
<label>EASD01</label>
<description>Active energy withdrawn from distributor on index 01</description>
</channel>
<channel id="easd02" typeId="energyType">
<channel id="easd02" typeId="energy">
<label>EASD02</label>
<description>Active energy withdrawn from distributor on index 02</description>
</channel>
<channel id="easd03" typeId="energyType">
<channel id="easd03" typeId="energy">
<label>EASD03</label>
<description>Active energy withdrawn from distributor on index 03</description>
</channel>
<channel id="easd04" typeId="energyType">
<channel id="easd04" typeId="energy">
<label>EASD04</label>
<description>Active energy withdrawn from distributor on index 04</description>
</channel>
<channel id="irms1" typeId="currentType">
<channel id="irms1" typeId="current">
<label>IRMS1</label>
<description>RMS Current on phase 1</description>
</channel>
<channel id="urms1" typeId="potentialType">
<channel id="urms1" typeId="potential">
<label>URMS1</label>
<description>RMS Voltage on phase 1</description>
</channel>
<channel id="pref" typeId="powerType">
<channel id="pref" typeId="power">
<label>PREF</label>
<description>Reference apparent power</description>
</channel>
<channel id="pcoup" typeId="powerType">
<channel id="pcoup" typeId="power">
<label>PCOUP</label>
<description>Apparent power rupture capacity</description>
</channel>
<channel id="sinsts" typeId="powerType">
<channel id="sinsts" typeId="power">
<label>SINSTS</label>
<description>Instantaneous withdrawn apparent power</description>
</channel>
<channel id="smaxsn" typeId="powerType">
<channel id="smaxsn" typeId="power">
<label>SMAXSN</label>
<description>Maximum withdrawn apparent power of the day</description>
</channel>
<channel id="smaxsnMinus1" typeId="powerType">
<channel id="smaxsnMinus1" typeId="power">
<label>SMAXSN-1</label>
<description>Maximum withdrawn apparent power of the previous day</description>
</channel>
<channel id="ccasn" typeId="powerType">
<channel id="ccasn" typeId="power">
<label>CCASN</label>
<description>Active charge point N</description>
</channel>
<channel id="ccasnMinus1" typeId="powerType">
<channel id="ccasnMinus1" typeId="power">
<label>CCASN-1</label>
<description>Active charge point N-1</description>
</channel>
<channel id="umoy1" typeId="potentialType">
<channel id="umoy1" typeId="potential">
<label>UMOY1</label>
<description>Mean Voltage on phase 1</description>
</channel>
<channel id="stge" typeId="stringType">
<channel id="stge" typeId="string">
<label>STGE</label>
<description>Status registry</description>
</channel>
<channel id="dpm1" typeId="stringType">
<channel id="dpm1" typeId="string">
<label>DPM1</label>
<description>Start of mobile peak period 1</description>
</channel>
<channel id="fpm1" typeId="stringType">
<channel id="fpm1" typeId="string">
<label>FPM1</label>
<description>End of mobile peak period 1</description>
</channel>
<channel id="dpm2" typeId="stringType">
<channel id="dpm2" typeId="string">
<label>DPM2</label>
<description>Start of mobile peak period 2</description>
</channel>
<channel id="fpm2" typeId="stringType">
<channel id="fpm2" typeId="string">
<label>FPM2</label>
<description>End of mobile peak period 2</description>
</channel>
<channel id="dpm3" typeId="stringType">
<channel id="dpm3" typeId="string">
<label>DPM3</label>
<description>Start of mobile peak period 3</description>
</channel>
<channel id="fpm3" typeId="stringType">
<channel id="fpm3" typeId="string">
<label>FPM3</label>
<description>End of mobile peak period 3</description>
</channel>
<channel id="msg1" typeId="stringType">
<channel id="msg1" typeId="string">
<label>MSG1</label>
<description>Short message</description>
</channel>
<channel id="msg2" typeId="stringType">
<channel id="msg2" typeId="string">
<label>MSG2</label>
<description>Very short message</description>
</channel>
<channel id="prm" typeId="stringType">
<channel id="prm" typeId="string">
<label>PRM</label>
<description>PRM</description>
</channel>
<channel id="ntarf" typeId="stringType">
<channel id="ntarf" typeId="string">
<label>NTARF</label>
<description>Index of current pricing</description>
</channel>
<channel id="njourf" typeId="stringType">
<channel id="njourf" typeId="string">
<label>NJOURF</label>
<description>Number of current provider schedule</description>
</channel>
<channel id="njourfPlus1" typeId="stringType">
<channel id="njourfPlus1" typeId="string">
<label>NJOURF+1</label>
<description>Number of next day provider schedule</description>
</channel>
<channel id="pjourfPlus1" typeId="stringType">
<channel id="pjourfPlus1" typeId="string">
<label>PJOURF+1</label>
<description>Profile of next day provider schedule</description>
</channel>
<channel id="ppointe" typeId="stringType">
<channel id="ppointe" typeId="string">
<label>PPOINTE</label>
<description>Profile of next rush day</description>
</channel>
<channel id="date" typeId="dateTimeType">
<channel id="date" typeId="date-time">
<label>DATE</label>
<description>Date and Time</description>
</channel>
<channel id="smaxsnDate" typeId="dateTimeType">
<channel id="smaxsnDate" typeId="date-time">
<label>SMAXSN TIMESTAMP</label>
<description>Timestamp of SMAXSN value</description>
</channel>
<channel id="smaxsnMinus1Date" typeId="dateTimeType">
<channel id="smaxsnMinus1Date" typeId="date-time">
<label>SMAXSN-1 TIMESTAMP</label>
<description>Timestamp of SMAXSN-1 value</description>
</channel>
<channel id="ccasnDate" typeId="dateTimeType">
<channel id="ccasnDate" typeId="date-time">
<label>CCASN TIMESTAMP</label>
<description>Timestamp of CCASN value</description>
</channel>
<channel id="ccasnMinus1Date" typeId="dateTimeType">
<channel id="ccasnMinus1Date" typeId="date-time">
<label>CCASN-1 TIMESTAMP</label>
<description>Timestamp of CCASN-1 value</description>
</channel>
<channel id="umoy1Date" typeId="dateTimeType">
<channel id="umoy1Date" typeId="date-time">
<label>UMOY1 TIMESTAMP</label>
<description>Timestamp of UMOY1 value</description>
</channel>
<channel id="dpm1Date" typeId="dateTimeType">
<channel id="dpm1Date" typeId="date-time">
<label>DPM1 TIMESTAMP</label>
<description>Date of DPM1</description>
</channel>
<channel id="fpm1Date" typeId="dateTimeType">
<channel id="fpm1Date" typeId="date-time">
<label>FPM1 TIMESTAMP</label>
<description>Date of FPM1</description>
</channel>
<channel id="dpm2Date" typeId="dateTimeType">
<channel id="dpm2Date" typeId="date-time">
<label>DPM2 TIMESTAMP</label>
<description>Date of DPM2</description>
</channel>
<channel id="fpm2Date" typeId="dateTimeType">
<channel id="fpm2Date" typeId="date-time">
<label>FPM2 TIMESTAMP</label>
<description>Date of FPM2</description>
</channel>
<channel id="dpm3Date" typeId="dateTimeType">
<channel id="dpm3Date" typeId="date-time">
<label>DPM3 TIMESTAMP</label>
<description>Date of DPM3</description>
</channel>
<channel id="fpm3Date" typeId="dateTimeType">
<channel id="fpm3Date" typeId="date-time">
<label>FPM3 TIMESTAMP</label>
<description>Date of FPM3</description>
</channel>
<channel id="relais1" typeId="switchType">
<channel id="relais1" typeId="switch">
<label>Relais 1</label>
</channel>
<channel id="relais2" typeId="switchType">
<channel id="relais2" typeId="switch">
<label>Relais 2</label>
</channel>
<channel id="relais3" typeId="switchType">
<channel id="relais3" typeId="switch">
<label>Relais 3</label>
</channel>
<channel id="relais4" typeId="switchType">
<channel id="relais4" typeId="switch">
<label>Relais 4</label>
</channel>
<channel id="relais5" typeId="switchType">
<channel id="relais5" typeId="switch">
<label>Relais 5</label>
</channel>
<channel id="relais6" typeId="switchType">
<channel id="relais6" typeId="switch">
<label>Relais 6</label>
</channel>
<channel id="relais7" typeId="switchType">
<channel id="relais7" typeId="switch">
<label>Relais 7</label>
</channel>
<channel id="relais8" typeId="switchType">
<channel id="relais8" typeId="switch">
<label>Relais 8</label>
</channel>
<channel id="irms1f" typeId="current">
<label>Irms 1f</label>
<description>Intensity (floating value)</description>
</channel>
<channel id="cosphi" typeId="power-factor">
<label>CosPhi</label>
<description>CosPhi (floating value)</description>
</channel>
<channel id="sactive" typeId="power">
<label>Sactive</label>
<description>Instantaneous withdrawn active power</description>
</channel>
<channel id="sreactive" typeId="power">
<label>Sreactive</label>
<description>Instantaneous withdrawn reactive power</description>
</channel>
<channel id="contact-sec" typeId="contact">
<label>Dry Contact</label>
<description>State of main relay</description>
</channel>
<channel id="cut-off" typeId="cut-off">
<label>Cut Off</label>
<description>State of Cut Off switch</description>
</channel>
<channel id="cache" typeId="contact">
<label>Cache</label>
<description>State of linky cache switch</description>
</channel>
<channel id="over-voltage" typeId="over-voltage-state">
<label>Over Voltage</label>
<description>State of over voltage</description>
</channel>
<channel id="exceeding-power" typeId="exceeding-power-state">
<label>Exceeding</label>
<description>State of exceeding</description>
</channel>
<channel id="function" typeId="function">
<label>Function</label>
<description>State of functionnality : consummer/producer</description>
</channel>
<channel id="direction" typeId="direction">
<label>Direction</label>
<description>Direction of the active energy</description>
</channel>
<channel id="supplier-rate" typeId="rate">
<label>Supplier Rate</label>
<description>The supplier rate</description>
</channel>
<channel id="distributor-rate" typeId="rate">
<label>Distributor Rate</label>
<description>The distributor rate</description>
</channel>
<channel id="clock" typeId="clock-state">
<label>Clock State</label>
<description>State Of Clock</description>
</channel>
<channel id="plc" typeId="plc">
<label>Plc Type</label>
<description>Type of PLC</description>
</channel>
<channel id="outputcom" typeId="outputcom-state">
<label>Communication Output State</label>
<description>State of communication output</description>
</channel>
<channel id="plc-state" typeId="plc-state">
<label>Plc State</label>
<description>State of PLC</description>
</channel>
<channel id="plc-synchro" typeId="synchro-plc-state">
<label>Plc Synchro</label>
<description>State of PLC Synchro</description>
</channel>
<channel id="tempo-today" typeId="tempo">
<label>Tempo Today</label>
<description>The state of tempo tariff for today</description>
</channel>
<channel id="tempo-tomorrow" typeId="tempo">
<label>Tempo Tomorrow</label>
<description>The state of tempo tariff for tomorrow</description>
</channel>
<channel id="advice-moving-tips" typeId="moving-tips">
<label>Moving Tips Advice</label>
<description>State of moving tips advice</description>
</channel>
<channel id="moving-tips" typeId="moving-tips">
<label>Moving Tips</label>
<description>State of moving tips</description>
</channel>
<channel id="pjourf1-plus1" typeId="string">
<label>NextDay Provider Schedule Slot 1</label>
<description>Profile of next day provider schedule, slot 1</description>
</channel>
<channel id="ppointe1" typeId="string">
<label>Next Rush Day Slot 1</label>
<description>Profile of next rush day, slot 1</description>
</channel>
<channel id="pjourf2-plus1" typeId="string">
<label>NextDay Provider Schedule Slot 2</label>
<description>Profile of next day provider schedule, slot 2</description>
</channel>
<channel id="ppointe2" typeId="string">
<label>Next Rush Day Slot 2</label>
<description>Profile of next rush day, slot 2</description>
</channel>
<channel id="pjourf3-plus1" typeId="string">
<label>NextDay Provider Schedule Slot 3</label>
<description>Profile of next day provider schedule, slot 3</description>
</channel>
<channel id="ppointe3" typeId="string">
<label>Next Rush Day Slot 3</label>
<description>Profile of next rush day, slot 3</description>
</channel>
<channel id="pjourf4-plus1" typeId="string">
<label>NextDay Provider Schedule Slot 4</label>
<description>Profile of next day provider schedule, slot 4</description>
</channel>
<channel id="ppointe4" typeId="string">
<label>Next Rush Day Slot 4</label>
<description>Profile of next rush day, slot 4</description>
</channel>
<channel id="pjourf5-plus1" typeId="string">
<label>NextDay Provider Schedule Slot 5</label>
<description>Profile of next day provider schedule, slot 5</description>
</channel>
<channel id="ppointe5" typeId="string">
<label>Next Rush Day Slot 5</label>
<description>Profile of next rush day, slot 5</description>
</channel>
<channel id="pjourf6-plus1" typeId="string">
<label>NextDay Provider Schedule Slot 6</label>
<description>Profile of next day provider schedule, slot 6</description>
</channel>
<channel id="ppointe6" typeId="string">
<label>Next Rush Day Slot 6</label>
<description>Profile of next rush day, slot 6</description>
</channel>
<channel id="pjourf7-plus1" typeId="string">
<label>NextDay Provider Schedule Slot 7</label>
<description>Profile of next day provider schedule, slot 7</description>
</channel>
<channel id="ppointe7" typeId="string">
<label>Next Rush Day Slot 7</label>
<description>Profile of next rush day, slot 7</description>
</channel>
<channel id="pjourf8-plus1" typeId="string">
<label>NextDay Provider Schedule Slot 8</label>
<description>Profile of next day provider schedule, slot 8</description>
</channel>
<channel id="ppointe8" typeId="string">
<label>Next Rush Day Slot 8</label>
<description>Profile of next rush day, slot 8</description>
</channel>
</channels>
</channel-group-type>
<channel-group-type id="producerLSMGroupType">
<channel-group-type id="producer-lsm-group-type">
<label>Producer</label>
<description>Producer channels for Linky telemeter in standard teleinformation mode</description>
<category>Energy</category>
<channels>
<channel id="eait" typeId="energyType">
<channel id="eait" typeId="energy">
<label>EAIT</label>
<description>Total active energy injected</description>
</channel>
<channel id="erq1" typeId="energyType">
<channel id="erq1" typeId="energy">
<label>ERQ1</label>
<description>Total reactive energy Q1</description>
</channel>
<channel id="erq2" typeId="energyType">
<channel id="erq2" typeId="energy">
<label>ERQ2</label>
<description>Total reactive energy Q2</description>
</channel>
<channel id="erq3" typeId="energyType">
<channel id="erq3" typeId="energy">
<label>ERQ3</label>
<description>Total reactive energy Q3</description>
</channel>
<channel id="erq4" typeId="energyType">
<channel id="erq4" typeId="energy">
<label>ERQ4</label>
<description>Total reactive energy Q4</description>
</channel>
<channel id="sinsti" typeId="powerType">
<channel id="sinsti" typeId="power">
<label>SINSTI</label>
<description>Instantaneous injected apparent power</description>
</channel>
<channel id="smaxin" typeId="powerType">
<channel id="smaxin" typeId="power">
<label>SMAXIN</label>
<description>Maximum injected apparent power of the day</description>
</channel>
<channel id="smaxinMinus1" typeId="powerType">
<channel id="smaxinMinus1" typeId="power">
<label>SMAXIN-1</label>
<description>Maximum injected apparent power of the previous day</description>
</channel>
<channel id="ccain" typeId="powerType">
<channel id="ccain" typeId="power">
<label>CCAIN</label>
<description>Injected active charge point N</description>
</channel>
<channel id="ccainMinus1" typeId="powerType">
<channel id="ccainMinus1" typeId="power">
<label>CCAIN-1</label>
<description>Injected active charge point N-1</description>
</channel>
<channel id="smaxinDate" typeId="dateTimeType">
<channel id="smaxinDate" typeId="date-time">
<label>SMAXIN TIMESTAMP</label>
<description>Timestamp of SMAXIN value</description>
</channel>
<channel id="smaxinMinus1Date" typeId="dateTimeType">
<channel id="smaxinMinus1Date" typeId="date-time">
<label>SMAXIN-1 TIMESTAMP</label>
<description>Timestamp of SMAXIN-1 value</description>
</channel>
<channel id="ccainDate" typeId="dateTimeType">
<channel id="ccainDate" typeId="date-time">
<label>CCAIN TIMESTAMP</label>
<description>Timestamp of CCAIN value</description>
</channel>
<channel id="ccainMinus1Date" typeId="dateTimeType">
<channel id="ccainMinus1Date" typeId="date-time">
<label>CCAIN-1 TIMESTAMP</label>
<description>Timestamp of CCAIN-1 value</description>
</channel>
</channels>
</channel-group-type>
<channel-group-type id="threePhasedLSMGroupType">
<channel-group-type id="three-phased-lsm-group-type">
<label>Three-phase</label>
<description>Three-phased channels for Linky telemeter in standard teleinformation mode</description>
<category>Energy</category>
<channels>
<channel id="irms2" typeId="currentType">
<channel id="irms2" typeId="current">
<label>IRMS2</label>
<description>RMS Current on phase 2</description>
</channel>
<channel id="irms3" typeId="currentType">
<channel id="irms3" typeId="current">
<label>IRMS3</label>
<description>RMS Current on phase 3</description>
</channel>
<channel id="urms2" typeId="potentialType">
<channel id="urms2" typeId="potential">
<label>URMS2</label>
<description>RMS Voltage on phase 2</description>
</channel>
<channel id="urms3" typeId="potentialType">
<channel id="urms3" typeId="potential">
<label>URMS3</label>
<description>RMS Voltage on phase 3</description>
</channel>
<channel id="sinsts1" typeId="powerType">
<channel id="sinsts1" typeId="power">
<label>SINSTS1</label>
<description>Instantaneous withdrawn apparent power on phase 1</description>
</channel>
<channel id="sinsts2" typeId="powerType">
<channel id="sinsts2" typeId="power">
<label>SINSTS2</label>
<description>Instantaneous withdrawn apparent power on phase 2</description>
</channel>
<channel id="sinsts3" typeId="powerType">
<channel id="sinsts3" typeId="power">
<label>SINSTS3</label>
<description>Instantaneous withdrawn apparent power on phase 3</description>
</channel>
<channel id="smaxsn1" typeId="powerType">
<channel id="smaxsn1" typeId="power">
<label>SMAXSN1</label>
<description>Maximum withdrawn apparent power of the day on phase 1</description>
</channel>
<channel id="smaxsn2" typeId="powerType">
<channel id="smaxsn2" typeId="power">
<label>SMAXSN2</label>
<description>Maximum withdrawn apparent power of the day on phase 2</description>
</channel>
<channel id="smaxsn3" typeId="powerType">
<channel id="smaxsn3" typeId="power">
<label>SMAXSN3</label>
<description>Maximum withdrawn apparent power of the day on phase 3</description>
</channel>
<channel id="smaxsn1Minus1" typeId="powerType">
<channel id="smaxsn1Minus1" typeId="power">
<label>SMAXSN1-1</label>
<description>Maximum withdrawn apparent power of the previous day on phase 1</description>
</channel>
<channel id="smaxsn2Minus1" typeId="powerType">
<channel id="smaxsn2Minus1" typeId="power">
<label>SMAXSN2-1</label>
<description>Maximum withdrawn apparent power of the previous day on phase 2</description>
</channel>
<channel id="smaxsn3Minus1" typeId="powerType">
<channel id="smaxsn3Minus1" typeId="power">
<label>SMAXSN3-1</label>
<description>Maximum withdrawn apparent power of the previous day on phase 3</description>
</channel>
<channel id="umoy2" typeId="potentialType">
<channel id="umoy2" typeId="potential">
<label>UMOY2</label>
<description>Mean Voltage on phase 2</description>
</channel>
<channel id="umoy3" typeId="potentialType">
<channel id="umoy3" typeId="potential">
<label>UMOY3</label>
<description>Mean Voltage on phase 3</description>
</channel>
<channel id="smaxsn1Date" typeId="dateTimeType">
<channel id="smaxsn1Date" typeId="date-time">
<label>SMAXSN1 TIMESTAMP</label>
<description>Timestamp of SMAXSN1 value</description>
</channel>
<channel id="smaxsn2Date" typeId="dateTimeType">
<channel id="smaxsn2Date" typeId="date-time">
<label>SMAXSN2 TIMESTAMP</label>
<description>Timestamp of SMAXSN2 value</description>
</channel>
<channel id="smaxsn3Date" typeId="dateTimeType">
<channel id="smaxsn3Date" typeId="date-time">
<label>SMAXSN3 TIMESTAMP</label>
<description>Timestamp of SMAXSN3 value</description>
</channel>
<channel id="smaxsn1Minus1Date" typeId="dateTimeType">
<channel id="smaxsn1Minus1Date" typeId="date-time">
<label>SMAXSN1-1 TIMESTAMP</label>
<description>Timestamp of SMAXSN1-1 value</description>
</channel>
<channel id="smaxsn2Minus1Date" typeId="dateTimeType">
<channel id="smaxsn2Minus1Date" typeId="date-time">
<label>SMAXSN2-1 TIMESTAMP</label>
<description>Timestamp of SMAXSN2-1 value</description>
</channel>
<channel id="smaxsn3Minus1Date" typeId="dateTimeType">
<channel id="smaxsn3Minus1Date" typeId="date-time">
<label>SMAXSN3-1 TIMESTAMP</label>
<description>Timestamp of SMAXSN3-1 value</description>
</channel>
<channel id="umoy2Date" typeId="dateTimeType">
<channel id="umoy2Date" typeId="date-time">
<label>UMOY2 TIMESTAMP</label>
<description>Timestamp of UMOY2 value</description>
</channel>
<channel id="umoy3Date" typeId="dateTimeType">
<channel id="umoy3Date" typeId="date-time">
<label>UMOY3 TIMESTAMP</label>
<description>Timestamp of UMOY3 value</description>
</channel>
@@ -4,14 +4,14 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<channel-type id="stringType">
<channel-type id="string">
<item-type>String</item-type>
<label>Teleinfo String Type</label>
<category>Energy</category>
<state pattern="%s" readOnly="true"/>
</channel-type>
<channel-type id="energyType">
<channel-type id="energy">
<item-type>Number:Energy</item-type>
<label>Teleinfo Energy Type</label>
<category>Energy</category>
@@ -22,7 +22,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="currentType">
<channel-type id="current">
<item-type>Number:ElectricCurrent</item-type>
<label>Teleinfo Current Type</label>
<category>Energy</category>
@@ -33,7 +33,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="potentialType">
<channel-type id="potential">
<item-type>Number:ElectricPotential</item-type>
<label>Teleinfo Potential Type</label>
<category>Energy</category>
@@ -44,7 +44,7 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="powerType">
<channel-type id="power">
<item-type>Number:Power</item-type>
<label>Teleinfo Power Type</label>
<category>Energy</category>
@@ -55,18 +55,246 @@
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="switchType">
<channel-type id="power-factor">
<item-type>Number</item-type>
<label>Teleinfo PowerFactor Type</label>
<category>Energy</category>
<tags>
<tag>Measurement</tag>
<tag>Power</tag>
</tags>
<state pattern="%d" readOnly="false"/>
</channel-type>
<channel-type id="switch">
<item-type>Switch</item-type>
<label>Teleinfo Switch Type</label>
<category>Energy</category>
<state readOnly="true"/>
</channel-type>
<channel-type id="dateTimeType">
<channel-type id="date-time">
<item-type>DateTime</item-type>
<label>Teleinfo DateTime Type</label>
<category>Energy</category>
<state readOnly="true" pattern="%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS"/>
</channel-type>
<channel-type id="contact">
<item-type>Contact</item-type>
<label>Contact Type</label>
<category>Energy</category>
<state readOnly="true"/>
</channel-type>
<channel-type id="cut-off">
<item-type>Number</item-type>
<label>Cutoff Type</label>
<description>This status describes the current cutoff type.</description>
<tags>
<tag>Status</tag>
</tags>
<state>
<options>
<option value="0">Not cutoff</option>
<option value="1">Cutoff over power</option>
<option value="2">Cutoff over voltage</option>
<option value="3">Cutoff for delest</option>
<option value="4">Cutoff from Eredis</option>
<option value="5">Cutoff over heating with over currency</option>
<option value="6">Cutoff over heating without over currency</option>
</options>
</state>
</channel-type>
<channel-type id="over-voltage-state">
<item-type>Number</item-type>
<label>Overvoltage State</label>
<description>Describes an over voltage condition possible state.</description>
<tags>
<tag>Alarm</tag>
<tag>Voltage</tag>
</tags>
<state>
<options>
<option value="0">No overvoltage</option>
<option value="1">Overvoltage</option>
</options>
</state>
</channel-type>
<channel-type id="exceeding-power-state">
<item-type>Number</item-type>
<label>Exceeding Power State</label>
<description>Describe an Exceeding power condition state papp > pmax.</description>
<tags>
<tag>Alarm</tag>
<tag>Power</tag>
</tags>
<state>
<options>
<option value="0">No exceeding power</option>
<option value="1">Exceeding power</option>
</options>
</state>
</channel-type>
<channel-type id="function">
<item-type>Number</item-type>
<label>Function Mode</label>
<description>Tell if the meter is in Consummer mode or Producer mode.</description>
<tags>
<tag>Measurement</tag>
<tag>Mode</tag>
</tags>
<state>
<options>
<option value="0">Consummer</option>
<option value="1">Producer</option>
</options>
</state>
</channel-type>
<channel-type id="direction">
<item-type>Number</item-type>
<label>Active Energy</label>
<description>Tell about energy direction, if negative we take energy from network, if positive we inject energy.</description>
<tags>
<tag>Measurement</tag>
</tags>
<state>
<options>
<option value="0">Active energy positive</option>
<option value="1">Active energy negative</option>
</options>
</state>
</channel-type>
<channel-type id="clock-state">
<item-type>Number</item-type>
<label>Clock State</label>
<description>State of the clock.</description>
<tags>
<tag>Measurement</tag>
<tag>Alarm</tag>
</tags>
<state>
<options>
<option value="0">Clock ok</option>
<option value="1">Clock degrade</option>
</options>
</state>
</channel-type>
<channel-type id="plc">
<item-type>Number</item-type>
<label>PLC Mode</label>
<description>Mode of the PLC</description>
<tags>
<tag>Status</tag>
<tag>Mode</tag>
</tags>
<state>
<options>
<option value="0">Historic mode</option>
<option value="1">Standard mode</option>
</options>
</state>
</channel-type>
<channel-type id="outputcom-state">
<item-type>Number</item-type>
<label>Output Com State</label>
<description>State of the communication output</description>
<tags>
<tag>Status</tag>
<tag>Mode</tag>
</tags>
<state>
<options>
<option value="0">Desactivated</option>
<option value="1">Activated without security</option>
<option value="2">Unknow</option>
<option value="3">Activated with security</option>
</options>
</state>
</channel-type>
<channel-type id="plc-state">
<item-type>Number</item-type>
<label>PLC State</label>
<description>State of the PLC</description>
<tags>
<tag>Status</tag>
</tags>
<state>
<options>
<option value="0">New/Unlock</option>
<option value="1">New/Lock</option>
<option value="2">Registered</option>
</options>
</state>
</channel-type>
<channel-type id="synchro-plc-state">
<item-type>Number</item-type>
<label>PLC Synchro State</label>
<description>State of the PLC Synchro</description>
<tags>
<tag>Status</tag>
</tags>
<state>
<options>
<option value="0">PLC Sync</option>
<option value="1">PLC Not Sync</option>
</options>
</state>
</channel-type>
<channel-type id="moving-tips">
<item-type>Number</item-type>
<label>Moving Tips</label>
<description>Indicate a special tariff slot for a specific period.</description>
<tags>
<tag>Status</tag>
</tags>
<state>
<options>
<option value="0">Not moving tips advice</option>
<option value="1">Moving tips advice 1</option>
<option value="2">Moving tips advice 2</option>
<option value="3">Moving tips advice 3</option>
</options>
</state>
</channel-type>
<channel-type id="tempo">
<item-type>Number</item-type>
<label>Tempo Color Information</label>
<description>This status describes the tempo color of a day.</description>
<tags>
<tag>Status</tag>
</tags>
<state>
<options>
<option value="0">Unknow</option>
<option value="1">Blue</option>
<option value="2">White</option>
<option value="3">Red</option>
</options>
</state>
</channel-type>
<channel-type id="rate">
<item-type>Number</item-type>
<label>Numeric Rate Type</label>
<category>energy</category>
<tags>
<tag>Status</tag>
</tags>
<state readOnly="true" pattern="%.0f"/>
</channel-type>
</thing:thing-descriptions>
@@ -4,16 +4,17 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="lsmm_electricitymeter" listed="false">
<thing-type id="lsmm_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
<bridge-type-ref id="d2lcontroller"/>
</supported-bridge-type-refs>
<label>Linky Single-phase</label>
<description>Single-phase Linky Electricity meter in standard mode</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channel-groups>
<channel-group id="commonLSMGroup" typeId="commonLSMGroupType"/>
<channel-group id="commonLSMGroup" typeId="common-lsm-group-type"/>
</channel-groups>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,17 +4,18 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="lsmm_prod_electricitymeter" listed="false">
<thing-type id="lsmm_prod_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
<bridge-type-ref id="d2lcontroller"/>
</supported-bridge-type-refs>
<label>Linky Single-phase Producer</label>
<description>Single-phase producer Linky Electricity meter in standard mode</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channel-groups>
<channel-group id="commonLSMGroup" typeId="commonLSMGroupType"/>
<channel-group id="producerLSMGroup" typeId="producerLSMGroupType"/>
<channel-group id="commonLSMGroup" typeId="common-lsm-group-type"/>
<channel-group id="producerLSMGroup" typeId="three-phased-lsm-group-type"/>
</channel-groups>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,17 +4,18 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="lsmt_electricitymeter" listed="false">
<thing-type id="lsmt_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
<bridge-type-ref id="d2lcontroller"/>
</supported-bridge-type-refs>
<label>Linky Three-phase</label>
<description>Three-phase Linky Electricity meter in standard mode</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channel-groups>
<channel-group id="commonLSMGroup" typeId="commonLSMGroupType"/>
<channel-group id="threePhasedLSMGroup" typeId="threePhasedLSMGroupType"/>
<channel-group id="commonLSMGroup" typeId="common-lsm-group-type"/>
<channel-group id="threePhasedLSMGroup" typeId="three-phased-lsm-group-type"/>
</channel-groups>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -4,18 +4,19 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="lsmt_prod_electricitymeter" listed="false">
<thing-type id="lsmt_prod_electricitymeter" listed="true">
<supported-bridge-type-refs>
<bridge-type-ref id="serialcontroller"/>
<bridge-type-ref id="d2lcontroller"/>
</supported-bridge-type-refs>
<label>Linky Three-phase Producer</label>
<description>Three-phase producer Linky Electricity meter in standard mode</description>
<semantic-equipment-tag>ElectricMeter</semantic-equipment-tag>
<channel-groups>
<channel-group id="commonLSMGroup" typeId="commonLSMGroupType"/>
<channel-group id="producerLSMGroup" typeId="producerLSMGroupType"/>
<channel-group id="threePhasedLSMGroup" typeId="threePhasedLSMGroupType"/>
<channel-group id="commonLSMGroup" typeId="three-phased-lsm-group-type"/>
<channel-group id="producerLSMGroup" typeId="producer-lsm-group-type"/>
<channel-group id="threePhasedLSMGroup" typeId="three-phased-lsm-group-type"/>
</channel-groups>
<config-description-ref uri="thing-type:teleinfo:adco"/>
@@ -9,7 +9,7 @@
<description>Teleinfo USB Stick with Serial Interface</description>
<channels>
<channel id="invalidFrameCounter" typeId="invalidFrameCounterType"/>
<channel id="invalidFrameCounter" typeId="invalid-frame-counter"/>
</channels>
<config-description>
@@ -44,14 +44,4 @@
</parameter>
</config-description>
</bridge-type>
<channel-type id="invalidFrameCounterType">
<item-type>Number</item-type>
<label>Frames Corrupted</label>
<description>Counter tracking the number of frames invalid/corrupted (checksum)</description>
<category></category>
<state pattern="%d" readOnly="true"></state>
</channel-type>
</thing:thing-descriptions>
@@ -33,35 +33,37 @@ public class FrameUtilTest {
@Test
public void testComputeGroupLineChecksumThreePhaseProd() throws Exception {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
new FileInputStream(TestUtils.getTestFile("linky-tic-mode-standard-three-phase-prod.raw"))));
String groupLine;
int i = 0;
while ((groupLine = bufferedReader.readLine()) != null) {
if (i >= 1 && !TeleinfoInputStream.isHeaderFrame(groupLine)) {
char expected = groupLine.charAt(groupLine.length() - 1);
char actual = FrameUtil.computeGroupLineChecksum(groupLine.substring(0, groupLine.length() - 2),
TeleinfoTicMode.STANDARD);
assertEquals(expected, actual, i + " " + groupLine + " " + (int) expected + " " + (int) actual);
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
new FileInputStream(TestUtils.getTestFile("linky-tic-mode-standard-three-phase-prod.raw"))))) {
String groupLine;
int i = 0;
while ((groupLine = bufferedReader.readLine()) != null) {
if (i >= 1 && !TeleinfoInputStream.isHeaderFrame(groupLine)) {
char expected = groupLine.charAt(groupLine.length() - 1);
char actual = FrameUtil.computeGroupLineChecksum(groupLine.substring(0, groupLine.length() - 2),
TeleinfoTicMode.STANDARD);
assertEquals(expected, actual, i + " " + groupLine + " " + (int) expected + " " + (int) actual);
}
i++;
}
i++;
}
}
@Test
public void testComputeGroupLineChecksumSinglePhaseProd() throws Exception {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
new FileInputStream(TestUtils.getTestFile("linky-tic-mode-standard-single-phase-prod.raw"))));
String groupLine;
int i = 0;
while ((groupLine = bufferedReader.readLine()) != null) {
if (i >= 1 && !TeleinfoInputStream.isHeaderFrame(groupLine)) {
char expected = groupLine.charAt(groupLine.length() - 1);
char actual = FrameUtil.computeGroupLineChecksum(groupLine.substring(0, groupLine.length() - 2),
TeleinfoTicMode.STANDARD);
assertEquals(expected, actual, i + " " + groupLine + " " + (int) expected + " " + (int) actual);
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
new FileInputStream(TestUtils.getTestFile("linky-tic-mode-standard-single-phase-prod.raw"))))) {
String groupLine;
int i = 0;
while ((groupLine = bufferedReader.readLine()) != null) {
if (i >= 1 && !TeleinfoInputStream.isHeaderFrame(groupLine)) {
char expected = groupLine.charAt(groupLine.length() - 1);
char actual = FrameUtil.computeGroupLineChecksum(groupLine.substring(0, groupLine.length() - 2),
TeleinfoTicMode.STANDARD);
assertEquals(expected, actual, i + " " + groupLine + " " + (int) expected + " " + (int) actual);
}
i++;
}
i++;
}
}
@@ -12,6 +12,8 @@
*/
package org.openhab.binding.teleinfo.util;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
@@ -30,7 +32,12 @@ public final class TestUtils {
}
public static File getTestFile(String testResourceName) {
URL url = TestUtils.class.getClassLoader().getResource(testResourceName);
ClassLoader classLoader = TestUtils.class.getClassLoader();
assertNotNull(classLoader);
URL url = classLoader.getResource(testResourceName);
assertNotNull(url);
try {
return new File(url.toURI());
} catch (URISyntaxException e) {