mirror of
https://github.com/danieldemus/openhab-addons
synced 2026-07-27 19:50:36 +02:00
[wundergroundupdatereceiver] Fix parsing of dateutc query parameter (#18415)
The parameter is formatted with 1 digit hours, spewing warnings into the log Signed-off-by: Daniel Demus <daniel-github@demus.dk>
This commit is contained in:
+7
-7
@@ -14,7 +14,9 @@ package org.openhab.binding.wundergroundupdatereceiver.internal;
|
||||
|
||||
import static org.openhab.binding.wundergroundupdatereceiver.internal.WundergroundUpdateReceiverBindingConstants.*;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -60,6 +62,9 @@ public class WundergroundUpdateReceiverHandler extends BaseThingHandler {
|
||||
return config.stationId;
|
||||
}
|
||||
|
||||
// The format can be "yyyy-MM-dd H:mm:ss" from the device
|
||||
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd H:mm:ss");
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(WundergroundUpdateReceiverHandler.class);
|
||||
private final WundergroundUpdateReceiverServlet wundergroundUpdateReceiverServlet;
|
||||
private final WundergroundUpdateReceiverDiscoveryService discoveryService;
|
||||
@@ -183,8 +188,7 @@ public class WundergroundUpdateReceiverHandler extends BaseThingHandler {
|
||||
private DateTimeType safeResolvUtcDateTime(String dateUtc) {
|
||||
if (!dateUtc.isEmpty() && !NOW.equals(dateUtc)) {
|
||||
try {
|
||||
// Supposedly the format is "yyyy-MM-dd hh:mm:ss" from the device
|
||||
return new DateTimeType(ZonedDateTime.parse(dateUtc.replace(" ", "T") + "Z"));
|
||||
return new DateTimeType(LocalDateTime.parse(dateUtc, FORMATTER).atZone(ZoneOffset.UTC));
|
||||
} catch (Exception ex) {
|
||||
logger.warn("The device is submitting unparsable datetime values: {}", dateUtc);
|
||||
}
|
||||
@@ -192,10 +196,6 @@ public class WundergroundUpdateReceiverHandler extends BaseThingHandler {
|
||||
return new DateTimeType();
|
||||
}
|
||||
|
||||
public void updateChannelState(String channelId, String[] stateParts) {
|
||||
updateChannelState(channelId, String.join("", stateParts));
|
||||
}
|
||||
|
||||
public void updateChannelState(String parameterName, String state) {
|
||||
Optional<Channel> channel = getThing().getChannels().stream()
|
||||
.filter(ch -> parameterName.equals(ch.getUID().getIdWithoutGroup())).findFirst();
|
||||
|
||||
+1
-1
@@ -134,7 +134,7 @@ class WundergroundUpdateReceiverDiscoveryServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void aRequestWithAnUnregisteredStationidIsAddedToTheQueueOnce()
|
||||
void aRequestWithAnUnregisteredStationIdIsAddedToTheQueueOnce()
|
||||
throws ServletException, NamespaceException, IOException {
|
||||
// Given
|
||||
final String queryString = """
|
||||
|
||||
+5
-5
@@ -179,7 +179,7 @@ class WundergroundUpdateReceiverServletTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void OnDisposeAllHandlersAreRemovedAndServletIsInactiveEvenThoughBackgroundDiscoveryIsEnabled()
|
||||
void onDisposeAllHandlersAreRemovedAndServletIsInactiveEvenThoughBackgroundDiscoveryIsEnabled()
|
||||
throws ServletException, NamespaceException {
|
||||
// Given
|
||||
WundergroundUpdateReceiverServlet sut = new WundergroundUpdateReceiverServlet(discoveryService);
|
||||
@@ -249,7 +249,7 @@ class WundergroundUpdateReceiverServletTest {
|
||||
// Given
|
||||
ThingUID testThingUID = new ThingUID(WundergroundUpdateReceiverBindingConstants.THING_TYPE_UPDATE_RECEIVER,
|
||||
"test-receiver");
|
||||
final String queryString = "ID=dfggger&PASSWORD=XXXXXX&tempf=26.1&humidity=74&dewptf=18.9&windchillf=26.1&winddir=14&windspeedmph=1.34&windgustmph=2.46&rainin=0.00&dailyrainin=0.00&weeklyrainin=0.00&monthlyrainin=0.08&yearlyrainin=3.06&solarradiation=42.24&UV=1&indoortempf=69.3&indoorhumidity=32&baromin=30.39&AqNOX=21&lowbatt=1&dateutc=2021-02-07%2014:04:03&softwaretype=WH2600%20V2.2.8&action=updateraw&realtime=1&rtfreq=5";
|
||||
final String queryString = "ID=dfggger&PASSWORD=XXXXXX&tempf=26.1&humidity=74&dewptf=18.9&windchillf=26.1&winddir=14&windspeedmph=1.34&windgustmph=2.46&rainin=0.00&dailyrainin=0.00&weeklyrainin=0.00&monthlyrainin=0.08&yearlyrainin=3.06&solarradiation=42.24&UV=1&indoortempf=69.3&indoorhumidity=32&baromin=30.39&AqNOX=21&lowbatt=1&dateutc=2021-02-07%209:04:03&softwaretype=WH2600%20V2.2.8&action=updateraw&realtime=1&rtfreq=5";
|
||||
WundergroundUpdateReceiverServlet sut = new WundergroundUpdateReceiverServlet(discoveryService);
|
||||
List<Channel> channels = List.of(
|
||||
ChannelBuilder
|
||||
@@ -337,7 +337,7 @@ class WundergroundUpdateReceiverServletTest {
|
||||
// Then
|
||||
verify(callback).stateUpdated(
|
||||
new ChannelUID(TEST_THING_UID, METADATA_GROUP, WundergroundUpdateReceiverBindingConstants.DATEUTC),
|
||||
StringType.valueOf("2021-02-07 14:04:03"));
|
||||
StringType.valueOf("2021-02-07 9:04:03"));
|
||||
verify(callback).stateUpdated(
|
||||
new ChannelUID(TEST_THING_UID, METADATA_GROUP, WundergroundUpdateReceiverBindingConstants.LOW_BATTERY),
|
||||
OnOffType.ON);
|
||||
@@ -393,7 +393,7 @@ class WundergroundUpdateReceiverServletTest {
|
||||
// Given
|
||||
ThingUID testThingUID = new ThingUID(WundergroundUpdateReceiverBindingConstants.THING_TYPE_UPDATE_RECEIVER,
|
||||
"test-receiver");
|
||||
final String queryString = "ID=dfggger&PASSWORD=XXXXXX&temp1f=26.1&humidity=74&temp2f=25.1&lowbatt=1&soilmoisture1=78&soilmoisture2=73&dateutc=2021-02-07%2014:04:03&softwaretype=WH2600%20V2.2.8&action=updateraw&realtime=1&rtfreq=5";
|
||||
final String queryString = "ID=dfggger&PASSWORD=XXXXXX&temp1f=26.1&humidity=74&temp2f=25.1&lowbatt=1&soilmoisture1=78&soilmoisture2=73&dateutc=2021-02-07%2004:04:03&softwaretype=WH2600%20V2.2.8&action=updateraw&realtime=1&rtfreq=5";
|
||||
WundergroundUpdateReceiverServlet sut = new WundergroundUpdateReceiverServlet(discoveryService);
|
||||
List<Channel> channels = List.of(
|
||||
ChannelBuilder
|
||||
@@ -451,7 +451,7 @@ class WundergroundUpdateReceiverServletTest {
|
||||
// Then
|
||||
verify(callback).stateUpdated(
|
||||
new ChannelUID(TEST_THING_UID, METADATA_GROUP, WundergroundUpdateReceiverBindingConstants.DATEUTC),
|
||||
StringType.valueOf("2021-02-07 14:04:03"));
|
||||
StringType.valueOf("2021-02-07 04:04:03"));
|
||||
verify(callback).stateUpdated(
|
||||
new ChannelUID(TEST_THING_UID, METADATA_GROUP, WundergroundUpdateReceiverBindingConstants.LOW_BATTERY),
|
||||
OnOffType.ON);
|
||||
|
||||
Reference in New Issue
Block a user