Skip to content

Commit 9af5bd0

Browse files
authored
[netatmo] Thing properties were no more provided (openhab#16530)
Signed-off-by: clinique <[email protected]>
1 parent 67daa7e commit 9af5bd0

File tree

8 files changed

+52
-54
lines changed

8 files changed

+52
-54
lines changed

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/data/NetatmoConstants.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public enum MeasureClass {
105105

106106
channels.put(String.join("-", apiDescriptor, "measurement"),
107107
new MeasureChannelDetails(confFragment, String.join(":", NUMBER, dimension),
108-
String.format("%%.%df %s", measureDefinition.scale, UnitUtils.UNIT_PLACEHOLDER)));
108+
"%%.%df %s".formatted(measureDefinition.scale, UnitUtils.UNIT_PLACEHOLDER)));
109109
if (canScale) {
110110
channels.put(String.join("-", apiDescriptor, GROUP_TIMESTAMP), new MeasureChannelDetails(
111111
GROUP_TIMESTAMP, DATETIME, "@text/extensible-channel-type.timestamp.pattern"));

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/dto/NAThing.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ public boolean isReachable() {
5959
return dashboardData;
6060
}
6161

62-
public @Nullable String getFirmware() {
63-
return firmware;
62+
public Optional<String> getFirmware() {
63+
return Optional.ofNullable(firmware);
6464
}
6565

6666
public int getRadioStatus() {

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/Capability.java

+6-25
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212
*/
1313
package org.openhab.binding.netatmo.internal.handler.capability;
1414

15-
import static org.openhab.binding.netatmo.internal.NetatmoBindingConstants.*;
16-
import static org.openhab.core.thing.Thing.*;
17-
1815
import java.util.Collection;
1916
import java.util.HashMap;
2017
import java.util.List;
@@ -53,7 +50,7 @@ public class Capability {
5350
protected final ModuleType moduleType;
5451
protected final ThingUID thingUID;
5552

56-
protected boolean firstLaunch;
53+
protected boolean firstLaunch = true;
5754
protected Map<String, String> properties = Map.of();
5855
protected @Nullable String statusReason;
5956

@@ -104,32 +101,18 @@ public class Capability {
104101

105102
protected void beforeNewData() {
106103
properties = new HashMap<>(thing.getProperties());
107-
firstLaunch = properties.isEmpty();
108-
if (firstLaunch) {
109-
properties.put(PROPERTY_THING_TYPE_VERSION, moduleType.thingTypeVersion);
110-
if (!moduleType.isLogical()) {
111-
String name = moduleType.apiName.isBlank() ? moduleType.name() : moduleType.apiName;
112-
properties.put(PROPERTY_MODEL_ID, name);
113-
properties.put(PROPERTY_VENDOR, VENDOR);
114-
}
115-
}
116104
statusReason = null;
117105
}
118106

119107
protected void afterNewData(@Nullable NAObject newData) {
120108
if (!properties.equals(thing.getProperties())) {
121109
thing.setProperties(properties);
122110
}
111+
firstLaunch = false;
123112
}
124113

125114
protected void updateNAThing(NAThing newData) {
126-
String firmware = newData.getFirmware();
127-
if (firmware != null && !firmware.isBlank()) {
128-
properties.put(PROPERTY_FIRMWARE_VERSION, firmware);
129-
}
130-
if (!newData.isReachable()) {
131-
statusReason = "@text/device-not-connected";
132-
}
115+
// do nothing by default, can be overridden by subclasses
133116
}
134117

135118
protected void updateNAMain(NAMain newData) {
@@ -169,11 +152,9 @@ public void initialize() {
169152
}
170153

171154
public void expireData() {
172-
if (!handler.getCapabilities().containsKey(RefreshCapability.class)) {
173-
CommonInterface bridgeHandler = handler.getBridgeHandler();
174-
if (bridgeHandler != null) {
175-
bridgeHandler.expireData();
176-
}
155+
CommonInterface bridgeHandler = handler.getBridgeHandler();
156+
if (bridgeHandler != null && !handler.getCapabilities().containsKey(RefreshCapability.class)) {
157+
bridgeHandler.expireData();
177158
}
178159
}
179160

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/ChannelHelperCapability.java

+22-1
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@
1212
*/
1313
package org.openhab.binding.netatmo.internal.handler.capability;
1414

15+
import static org.openhab.binding.netatmo.internal.NetatmoBindingConstants.VENDOR;
16+
import static org.openhab.core.thing.Thing.*;
17+
1518
import java.util.List;
1619

1720
import org.eclipse.jdt.annotation.NonNullByDefault;
1821
import org.eclipse.jdt.annotation.Nullable;
1922
import org.openhab.binding.netatmo.internal.api.dto.NAError;
2023
import org.openhab.binding.netatmo.internal.api.dto.NAObject;
24+
import org.openhab.binding.netatmo.internal.api.dto.NAThing;
2125
import org.openhab.binding.netatmo.internal.handler.CommonInterface;
2226
import org.openhab.binding.netatmo.internal.handler.channelhelper.ChannelHelper;
2327
import org.openhab.core.config.core.Configuration;
@@ -40,9 +44,17 @@ public ChannelHelperCapability(CommonInterface handler, List<ChannelHelper> chan
4044
this.channelHelpers = channelHelpers;
4145
}
4246

47+
@Override
48+
protected void beforeNewData() {
49+
super.beforeNewData();
50+
if (firstLaunch && !moduleType.isLogical()) {
51+
properties.put(PROPERTY_MODEL_ID, moduleType.apiName.isBlank() ? moduleType.name() : moduleType.apiName);
52+
properties.put(PROPERTY_VENDOR, VENDOR);
53+
}
54+
}
55+
4356
@Override
4457
public void afterNewData(@Nullable NAObject newData) {
45-
super.afterNewData(newData);
4658
channelHelpers.forEach(helper -> helper.setNewData(newData));
4759
handler.getActiveChannels().forEach(channel -> {
4860
ChannelUID channelUID = channel.getUID();
@@ -57,6 +69,15 @@ public void afterNewData(@Nullable NAObject newData) {
5769
}
5870
}
5971
});
72+
super.afterNewData(newData);
73+
}
74+
75+
@Override
76+
protected void updateNAThing(NAThing newData) {
77+
newData.getFirmware().map(fw -> properties.put(PROPERTY_FIRMWARE_VERSION, fw));
78+
if (!newData.isReachable()) {
79+
statusReason = "@text/device-not-connected";
80+
}
6081
}
6182

6283
@Override

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/EnergyCapability.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@
4646
@NonNullByDefault
4747
public class EnergyCapability extends RestCapability<EnergyApi> {
4848
private final Logger logger = LoggerFactory.getLogger(EnergyCapability.class);
49+
private final NetatmoDescriptionProvider descriptionProvider;
4950

5051
private int setPointDefaultDuration = -1;
51-
private final NetatmoDescriptionProvider descriptionProvider;
5252
private String energyId = "";
5353

5454
EnergyCapability(CommonInterface handler, NetatmoDescriptionProvider descriptionProvider) {

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/HomeCapability.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public class HomeCapability extends RestCapability<HomeApi> {
4848
private final Logger logger = LoggerFactory.getLogger(HomeCapability.class);
4949
private final Set<FeatureArea> featureAreas = new HashSet<>();
5050
private final NetatmoDescriptionProvider descriptionProvider;
51-
private final Set<String> homeIds = new HashSet<>();
51+
private final Set<String> homeIds = new HashSet<>(3);
5252

5353
public HomeCapability(CommonInterface handler, NetatmoDescriptionProvider descriptionProvider) {
5454
super(handler, HomeApi.class);
@@ -66,6 +66,12 @@ public void initialize() {
6666
if (!config.securityId.isBlank()) {
6767
homeIds.add(config.securityId);
6868
}
69+
if (hasArea(FeatureArea.SECURITY) && !handler.getCapabilities().containsKey(SecurityCapability.class)) {
70+
handler.getCapabilities().put(new SecurityCapability(handler));
71+
}
72+
if (hasArea(FeatureArea.ENERGY) && !handler.getCapabilities().containsKey(EnergyCapability.class)) {
73+
handler.getCapabilities().put(new EnergyCapability(handler, descriptionProvider));
74+
}
6975
}
7076

7177
@Override
@@ -76,12 +82,6 @@ public void dispose() {
7682

7783
@Override
7884
protected void updateHomeData(HomeData home) {
79-
if (hasArea(FeatureArea.SECURITY) && !handler.getCapabilities().containsKey(SecurityCapability.class)) {
80-
handler.getCapabilities().put(new SecurityCapability(handler));
81-
}
82-
if (hasArea(FeatureArea.ENERGY) && !handler.getCapabilities().containsKey(EnergyCapability.class)) {
83-
handler.getCapabilities().put(new EnergyCapability(handler, descriptionProvider));
84-
}
8585
if (firstLaunch) {
8686
home.getCountry().map(country -> properties.put(PROPERTY_COUNTRY, country));
8787
home.getTimezone().map(tz -> properties.put(PROPERTY_TIMEZONE, tz));
@@ -93,13 +93,13 @@ protected void updateHomeData(HomeData home) {
9393

9494
@Override
9595
protected void afterNewData(@Nullable NAObject newData) {
96-
super.afterNewData(newData);
9796
if (firstLaunch && !hasArea(FeatureArea.SECURITY)) {
9897
handler.removeChannels(thing.getChannelsOfGroup(GROUP_SECURITY));
9998
}
10099
if (firstLaunch && !hasArea(FeatureArea.ENERGY)) {
101100
handler.removeChannels(thing.getChannelsOfGroup(GROUP_ENERGY));
102101
}
102+
super.afterNewData(newData);
103103
}
104104

105105
private boolean hasArea(FeatureArea searched) {

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/channelhelper/AirQualityChannelHelper.java

+5-7
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,10 @@ public AirQualityChannelHelper(Set<String> providedGroups) {
3939

4040
@Override
4141
protected @Nullable State internalGetDashboard(String channelId, Dashboard dashboard) {
42-
switch (channelId) {
43-
case CHANNEL_CO2:
44-
return toQuantityType(dashboard.getCo2(), MeasureClass.CO2);
45-
case CHANNEL_HEALTH_INDEX:
46-
return new DecimalType(dashboard.getHealthIdx());
47-
}
48-
return null;
42+
return switch (channelId) {
43+
case CHANNEL_CO2 -> toQuantityType(dashboard.getCo2(), MeasureClass.CO2);
44+
case CHANNEL_HEALTH_INDEX -> new DecimalType(dashboard.getHealthIdx());
45+
default -> null;
46+
};
4947
}
5048
}

bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/channelhelper/SecurityChannelHelper.java

+7-9
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,12 @@ public void setNewData(@Nullable NAObject data) {
6262

6363
@Override
6464
protected @Nullable State internalGetOther(String channelId) {
65-
switch (channelId) {
66-
case CHANNEL_PERSON_COUNT:
67-
return persons != -1 ? new DecimalType(persons) : UnDefType.NULL;
68-
case CHANNEL_UNKNOWN_PERSON_COUNT:
69-
return unknowns != -1 ? new DecimalType(unknowns) : UnDefType.NULL;
70-
case CHANNEL_UNKNOWN_PERSON_PICTURE:
71-
return unknownSnapshot != null ? toRawType(unknownSnapshot) : UnDefType.NULL;
72-
}
73-
return null;
65+
return switch (channelId) {
66+
case CHANNEL_PERSON_COUNT -> persons != -1 ? new DecimalType(persons) : UnDefType.NULL;
67+
case CHANNEL_UNKNOWN_PERSON_COUNT -> unknowns != -1 ? new DecimalType(unknowns) : UnDefType.NULL;
68+
case CHANNEL_UNKNOWN_PERSON_PICTURE ->
69+
unknownSnapshot != null ? toRawType(unknownSnapshot) : UnDefType.NULL;
70+
default -> null;
71+
};
7472
}
7573
}

0 commit comments

Comments
 (0)