Skip to content

Commit e4c7ea3

Browse files
authored
Prevent channel updates if an error was raised in API answer. (#21275)
Signed-off-by: clinique <gael@lhopital.org>
1 parent b9119f0 commit e4c7ea3

2 files changed

Lines changed: 18 additions & 10 deletions

File tree

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

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.openhab.binding.netatmo.internal.config.NAThingConfiguration;
3232
import org.openhab.binding.netatmo.internal.handler.capability.Capability;
3333
import org.openhab.binding.netatmo.internal.handler.capability.CapabilityMap;
34+
import org.openhab.binding.netatmo.internal.handler.capability.ChannelHelperCapability;
3435
import org.openhab.binding.netatmo.internal.handler.capability.HomeCapability;
3536
import org.openhab.binding.netatmo.internal.handler.capability.ParentUpdateCapability;
3637
import org.openhab.binding.netatmo.internal.handler.capability.RefreshCapability;
@@ -177,22 +178,29 @@ default <T extends RestCapability<?>> Optional<T> getHomeCapability(Class<T> cla
177178
}
178179

179180
default void setNewData(NAObject newData) {
180-
if (newData instanceof NAThing thingData) {
181-
if (getId().equals(thingData.getBridge())) {
182-
getActiveChildren().stream().filter(child -> child.getId().equals(thingData.getId())).findFirst()
183-
.ifPresent(child -> child.setNewData(thingData));
184-
return;
185-
}
181+
if (newData instanceof NAThing thingData && getId().equals(thingData.getBridge())) {
182+
getActiveChildren().stream().filter(child -> child.getId().equals(thingData.getId())). //
183+
findFirst().ifPresent(child -> child.setNewData(thingData));
184+
return;
186185
}
187186

188187
String finalReason = null;
188+
ChannelHelperCapability channelHelper = null;
189189
for (Capability cap : getCapabilities().values()) {
190-
String statusReason = cap.setNewData(newData);
191-
if (statusReason != null) {
192-
finalReason = statusReason;
190+
if (cap instanceof ChannelHelperCapability) {
191+
channelHelper = (ChannelHelperCapability) cap;
192+
} else {
193+
if (cap.setNewData(newData) instanceof String statusReason) {
194+
finalReason = statusReason;
195+
}
193196
}
194197
}
195198

199+
// Handle channel updates only if no error was raised
200+
if (channelHelper != null && finalReason == null) {
201+
channelHelper.setNewData(newData);
202+
}
203+
196204
if (newData.isIgnoredForThingUpdate()) {
197205
return;
198206
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import org.openhab.binding.netatmo.internal.handler.CommonInterface;
2020

2121
/**
22-
* The {@link DeviceCapability} takes care of handling properties for netatmo devices
22+
* The {@link DeviceCapability} takes care of handling properties for Netatmo devices
2323
*
2424
* @author Gaël L'hopital - Initial contribution
2525
*

0 commit comments

Comments
 (0)