Skip to content

Commit 217f25f

Browse files
[teleinfo] code cleanup and remove timeout (openhab#9902)
* Remove timeout when waiting frame Signed-off-by: Olivier Marceau <[email protected]> * Add olivierkeke to code owners list Signed-off-by: Olivier Marceau <[email protected]> * Code cleanup Signed-off-by: Olivier Marceau <[email protected]> * Refactor data objects Signed-off-by: Olivier Marceau <[email protected]> * Apply some sonarlint suggestions Signed-off-by: Olivier Marceau <[email protected]> * Fix typo Signed-off-by: Olivier Marceau <[email protected]> * Simplify thing compatibility test Co-authored-by: Connor Petty <[email protected]> Signed-off-by: Olivier Marceau <[email protected]> * Remove dot from PTEC values Signed-off-by: Olivier Marceau <[email protected]> Co-authored-by: Connor Petty <[email protected]>
1 parent b675160 commit 217f25f

File tree

66 files changed

+618
-3630
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+618
-3630
lines changed

CODEOWNERS

+1-1
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@
267267
/bundles/org.openhab.binding.tado/ @dfrommi
268268
/bundles/org.openhab.binding.tankerkoenig/ @dolic @JueBag
269269
/bundles/org.openhab.binding.telegram/ @ZzetT
270-
/bundles/org.openhab.binding.teleinfo/ @Nokyyz
270+
/bundles/org.openhab.binding.teleinfo/ @Nokyyz @olivierkeke
271271
/bundles/org.openhab.binding.tellstick/ @openhab/add-ons-maintainers
272272
/bundles/org.openhab.binding.tesla/ @kgoderis
273273
/bundles/org.openhab.binding.tibber/ @kjoglum

bundles/org.openhab.binding.teleinfo/src/main/java/org/openhab/binding/teleinfo/internal/TeleinfoBindingConstants.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
@NonNullByDefault
2525
public class TeleinfoBindingConstants {
2626

27+
private TeleinfoBindingConstants() {
28+
}
29+
2730
private static final String BINDING_ID = "teleinfo";
2831

2932
// List of all Thing Type UIDs
@@ -35,7 +38,7 @@ public class TeleinfoBindingConstants {
3538
// List of HC frames channel ids
3639
public static final String CHANNEL_HC_FRAME_HCHC = "hchc";
3740
public static final String CHANNEL_HC_FRAME_HCHP = "hchp";
38-
public static final String CHANNEL_HC_FRAME_HHPHC = "hhphc";
41+
public static final String CHANNEL_HHPHC = "hhphc";
3942
// List of BASE frames channel ids
4043
public static final String CHANNEL_BASE_FRAME_BASE = "base";
4144
// List of TEMPO frames channel ids
@@ -46,40 +49,37 @@ public class TeleinfoBindingConstants {
4649
public static final String CHANNEL_TEMPO_FRAME_BBRHPJB = "bbrhpjb";
4750
public static final String CHANNEL_TEMPO_FRAME_BBRHCJB = "bbrhcjb";
4851
public static final String CHANNEL_TEMPO_FRAME_DEMAIN = "demain";
49-
public static final String CHANNEL_TEMPO_FRAME_HHPHC = "hhphc";
5052
public static final String CHANNEL_TEMPO_FRAME_PROGRAMME_CIRCUIT_1 = "programmeCircuit1";
5153
public static final String CHANNEL_TEMPO_FRAME_PROGRAMME_CIRCUIT_2 = "programmeCircuit2";
5254
// List of EJP frames channel ids
5355
public static final String CHANNEL_EJP_FRAME_PEJP = "pejp";
5456
public static final String CHANNEL_EJP_FRAME_EJPHPM = "ejphpm";
5557
public static final String CHANNEL_EJP_FRAME_EJPHN = "ejphn";
5658
// List of CBEMM Channel ids
57-
public static final String CHANNEL_CBEMM_ISOUSC = "isousc";
58-
public static final String CHANNEL_CBEMM_PTEC = "ptec";
59+
public static final String CHANNEL_ISOUSC = "isousc";
60+
public static final String CHANNEL_PTEC = "ptec";
5961
public static final String CHANNEL_CBEMM_IMAX = "imax";
6062
public static final String CHANNEL_CBEMM_ADPS = "adps";
6163
public static final String CHANNEL_CBEMM_IINST = "iinst";
62-
public static final String CHANNEL_CBEMM_MOTDETAT = "motdetat";
64+
public static final String CHANNEL_MOTDETAT = "motdetat";
6365
// List of CBEMM EVOLUTION ICC Channel ids
64-
public static final String CHANNEL_CBEMM_EVOLUTION_ICC_PAPP = "papp";
66+
public static final String CHANNEL_PAPP = "papp";
6567
// List of CBETM Channel ids
6668
public static final String CHANNEL_CBETM_IINST1 = "iinst1";
6769
public static final String CHANNEL_CBETM_IINST2 = "iinst2";
6870
public static final String CHANNEL_CBETM_IINST3 = "iinst3";
6971
public static final String CHANNEL_CBETM_FRAME_TYPE = "frameType";
70-
public static final String CHANNEL_CBETM_LONG_ISOUSC = "isousc";
7172
public static final String CHANNEL_CBETM_LONG_IMAX1 = "imax1";
7273
public static final String CHANNEL_CBETM_LONG_IMAX2 = "imax2";
7374
public static final String CHANNEL_CBETM_LONG_IMAX3 = "imax3";
74-
public static final String CHANNEL_CBETM_LONG_PTEC = "ptec";
7575
public static final String CHANNEL_CBETM_LONG_PMAX = "pmax";
76-
public static final String CHANNEL_CBETM_LONG_PAPP = "papp";
77-
public static final String CHANNEL_CBETM_LONG_MOTDETAT = "motdetat";
7876
public static final String CHANNEL_CBETM_LONG_PPOT = "ppot";
7977
public static final String CHANNEL_CBETM_SHORT_ADIR1 = "adir1";
8078
public static final String CHANNEL_CBETM_SHORT_ADIR2 = "adir2";
8179
public static final String CHANNEL_CBETM_SHORT_ADIR3 = "adir3";
8280

81+
public static final String NOT_A_CHANNEL = "";
82+
8383
public static final String THING_ELECTRICITY_METER_PROPERTY_ADCO = "adco";
8484

8585
public static final ThingTypeUID THING_HC_CBEMM_ELECTRICITY_METER_TYPE_UID = new ThingTypeUID(BINDING_ID,

bundles/org.openhab.binding.teleinfo/src/main/java/org/openhab/binding/teleinfo/internal/TeleinfoDiscoveryService.java

+32-61
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,11 @@
2222

2323
import org.eclipse.jdt.annotation.NonNullByDefault;
2424
import org.eclipse.jdt.annotation.Nullable;
25-
import org.openhab.binding.teleinfo.internal.dto.Frame;
26-
import org.openhab.binding.teleinfo.internal.dto.cbemm.FrameCbemmBaseOption;
27-
import org.openhab.binding.teleinfo.internal.dto.cbemm.FrameCbemmEjpOption;
28-
import org.openhab.binding.teleinfo.internal.dto.cbemm.FrameCbemmHcOption;
29-
import org.openhab.binding.teleinfo.internal.dto.cbemm.FrameCbemmTempoOption;
30-
import org.openhab.binding.teleinfo.internal.dto.cbemm.evoicc.FrameCbemmEvolutionIccBaseOption;
31-
import org.openhab.binding.teleinfo.internal.dto.cbemm.evoicc.FrameCbemmEvolutionIccEjpOption;
32-
import org.openhab.binding.teleinfo.internal.dto.cbemm.evoicc.FrameCbemmEvolutionIccHcOption;
33-
import org.openhab.binding.teleinfo.internal.dto.cbemm.evoicc.FrameCbemmEvolutionIccTempoOption;
34-
import org.openhab.binding.teleinfo.internal.dto.cbetm.FrameCbetmLongBaseOption;
35-
import org.openhab.binding.teleinfo.internal.dto.cbetm.FrameCbetmLongEjpOption;
36-
import org.openhab.binding.teleinfo.internal.dto.cbetm.FrameCbetmLongHcOption;
37-
import org.openhab.binding.teleinfo.internal.dto.cbetm.FrameCbetmLongTempoOption;
38-
import org.openhab.binding.teleinfo.internal.dto.common.FrameAdco;
25+
import org.openhab.binding.teleinfo.internal.data.Frame;
3926
import org.openhab.binding.teleinfo.internal.handler.TeleinfoAbstractControllerHandler;
4027
import org.openhab.binding.teleinfo.internal.handler.TeleinfoControllerHandlerListener;
28+
import org.openhab.binding.teleinfo.internal.reader.io.serialport.InvalidFrameException;
29+
import org.openhab.binding.teleinfo.internal.reader.io.serialport.Label;
4130
import org.openhab.core.config.discovery.AbstractDiscoveryService;
4231
import org.openhab.core.config.discovery.DiscoveryResult;
4332
import org.openhab.core.config.discovery.DiscoveryResultBuilder;
@@ -85,6 +74,7 @@ public Set<ThingTypeUID> getSupportedThingTypes() {
8574
return SUPPORTED_THING_TYPES;
8675
}
8776

77+
@Override
8878
public void activate() {
8979
TeleinfoAbstractControllerHandler controllerHandlerRef = controllerHandler;
9080
if (controllerHandlerRef != null) {
@@ -142,75 +132,56 @@ protected synchronized void stopScan() {
142132
}
143133

144134
@Override
145-
public void onFrameReceived(TeleinfoAbstractControllerHandler controllerHandler, Frame frame) {
135+
public void onFrameReceived(Frame frame) {
146136
detectNewElectricityMeterFromReceivedFrame(frame);
147137
}
148138

149139
private void detectNewElectricityMeterFromReceivedFrame(final Frame frameSample) {
150140
TeleinfoAbstractControllerHandler controllerHandlerRef = controllerHandler;
151141
if (controllerHandlerRef != null) {
152-
logger.debug("New eletricity meter detection from frame {}", frameSample.getId());
153-
if (!(frameSample instanceof FrameAdco)) {
154-
throw new IllegalStateException("Teleinfo frame type not supported: " + frameSample.getClass());
142+
logger.debug("New eletricity meter detection from frame {}", frameSample);
143+
if (frameSample.get(Label.ADCO) == null) {
144+
throw new IllegalStateException("Missing ADCO key");
155145
}
156-
final FrameAdco frameAdco = (FrameAdco) frameSample;
157146

158-
ThingUID thingUID = new ThingUID(getThingTypeUID(frameAdco), frameAdco.getAdco(),
159-
controllerHandlerRef.getThing().getUID().getId());
147+
String adco = frameSample.get(Label.ADCO);
148+
if (adco != null) {
149+
ThingUID thingUID = new ThingUID(getThingTypeUID(frameSample), adco,
150+
controllerHandlerRef.getThing().getUID().getId());
160151

161-
final Map<String, Object> properties = getThingProperties(frameAdco);
162-
final String representationProperty = THING_ELECTRICITY_METER_PROPERTY_ADCO;
163-
DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(thingUID).withProperties(properties)
164-
.withLabel("Teleinfo ADCO " + frameAdco.getAdco()).withThingType(getThingTypeUID(frameAdco))
165-
.withBridge(controllerHandlerRef.getThing().getUID())
166-
.withRepresentationProperty(representationProperty).build();
152+
final Map<String, Object> properties = getThingProperties(adco);
153+
final String representationProperty = THING_ELECTRICITY_METER_PROPERTY_ADCO;
154+
DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(thingUID).withProperties(properties)
155+
.withLabel("Teleinfo ADCO " + adco).withThingType(getThingTypeUID(frameSample))
156+
.withBridge(controllerHandlerRef.getThing().getUID())
157+
.withRepresentationProperty(representationProperty).build();
167158

168-
thingDiscovered(discoveryResult);
159+
thingDiscovered(discoveryResult);
160+
}
169161
} else {
170162
logNullControllerHandler();
171163
}
172164
}
173165

174166
private ThingTypeUID getThingTypeUID(final Frame teleinfoFrame) {
175-
if (teleinfoFrame instanceof FrameCbemmHcOption) {
176-
return THING_HC_CBEMM_ELECTRICITY_METER_TYPE_UID;
177-
} else if (teleinfoFrame instanceof FrameCbemmBaseOption) {
178-
return THING_BASE_CBEMM_ELECTRICITY_METER_TYPE_UID;
179-
} else if (teleinfoFrame instanceof FrameCbemmEjpOption) {
180-
return THING_EJP_CBEMM_ELECTRICITY_METER_TYPE_UID;
181-
} else if (teleinfoFrame instanceof FrameCbemmTempoOption) {
182-
return THING_TEMPO_CBEMM_ELECTRICITY_METER_TYPE_UID;
183-
} else if (teleinfoFrame instanceof FrameCbemmEvolutionIccHcOption) {
184-
return THING_HC_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID;
185-
} else if (teleinfoFrame instanceof FrameCbemmEvolutionIccBaseOption) {
186-
return THING_BASE_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID;
187-
} else if (teleinfoFrame instanceof FrameCbemmEvolutionIccEjpOption) {
188-
return THING_EJP_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID;
189-
} else if (teleinfoFrame instanceof FrameCbemmEvolutionIccTempoOption) {
190-
return THING_TEMPO_CBEMM_EVO_ICC_ELECTRICITY_METER_TYPE_UID;
191-
} else if (teleinfoFrame instanceof FrameCbetmLongHcOption) {
192-
return THING_HC_CBETM_ELECTRICITY_METER_TYPE_UID;
193-
} else if (teleinfoFrame instanceof FrameCbetmLongBaseOption) {
194-
return THING_BASE_CBETM_ELECTRICITY_METER_TYPE_UID;
195-
} else if (teleinfoFrame instanceof FrameCbetmLongEjpOption) {
196-
return THING_EJP_CBETM_ELECTRICITY_METER_TYPE_UID;
197-
} else if (teleinfoFrame instanceof FrameCbetmLongTempoOption) {
198-
return THING_TEMPO_CBETM_ELECTRICITY_METER_TYPE_UID;
167+
ThingTypeUID thingTypeUID;
168+
try {
169+
thingTypeUID = teleinfoFrame.getType().getThingTypeUid();
170+
} catch (InvalidFrameException e) {
171+
throw new IllegalStateException("Frame type can not be evaluated");
172+
}
173+
if (thingTypeUID != null) {
174+
return thingTypeUID;
199175
} else {
200176
throw new IllegalStateException("Teleinfo frame type not supported: " + teleinfoFrame.getClass());
201177
}
202178
}
203179

204-
private Map<String, Object> getThingProperties(final Frame teleinfoFrame) {
205-
Map<String, Object> properties = new HashMap<String, Object>();
206-
if (teleinfoFrame instanceof FrameAdco) {
207-
final FrameAdco frameAdco = (FrameAdco) teleinfoFrame;
208-
properties.put(THING_ELECTRICITY_METER_PROPERTY_ADCO, frameAdco.getAdco());
209-
210-
return properties;
211-
}
180+
private Map<String, Object> getThingProperties(String adco) {
181+
Map<String, Object> properties = new HashMap<>();
182+
properties.put(THING_ELECTRICITY_METER_PROPERTY_ADCO, adco);
212183

213-
throw new IllegalStateException("Teleinfo frame type not supported: " + teleinfoFrame.getClass());
184+
return properties;
214185
}
215186

216187
@Override

bundles/org.openhab.binding.teleinfo/src/main/java/org/openhab/binding/teleinfo/internal/dto/common/Hhphc.java bundles/org.openhab.binding.teleinfo/src/main/java/org/openhab/binding/teleinfo/internal/data/Evolution.java

+7-9
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,15 @@
1010
*
1111
* SPDX-License-Identifier: EPL-2.0
1212
*/
13-
package org.openhab.binding.teleinfo.internal.dto.common;
13+
package org.openhab.binding.teleinfo.internal.data;
1414

1515
/**
16-
* The {@link Hhphc} enumeration defines all HHPHC values.
16+
* Define the evolution option values
17+
*
18+
* @author Olivier MARCEAU - Initial contribution
1719
*
18-
* @author Nicolas SIBERIL - Initial contribution
1920
*/
20-
public enum Hhphc {
21-
A,
22-
C,
23-
D,
24-
E,
25-
Y
21+
public enum Evolution {
22+
ICC,
23+
NONE
2624
}

0 commit comments

Comments
 (0)