diff --git a/bundles/org.openhab.binding.icalendar/README.md b/bundles/org.openhab.binding.icalendar/README.md index 217743531..b2c98b71a 100644 --- a/bundles/org.openhab.binding.icalendar/README.md +++ b/bundles/org.openhab.binding.icalendar/README.md @@ -59,6 +59,7 @@ They are all read-only. | next_title | String | Title of the next event | | next_start | DateTime | Start of the next event | | next_end | DateTime | End of the next event | +| last_update | DateTime | The time and date of the last successful update of the calendar | ### Channels for `eventfilter` diff --git a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/ICalendarBindingConstants.java b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/ICalendarBindingConstants.java index df0d0845c..ad1aa6428 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/ICalendarBindingConstants.java +++ b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/ICalendarBindingConstants.java @@ -40,6 +40,7 @@ public class ICalendarBindingConstants { public static final String CHANNEL_NEXT_EVENT_TITLE = "next_title"; public static final String CHANNEL_NEXT_EVENT_START = "next_start"; public static final String CHANNEL_NEXT_EVENT_END = "next_end"; + public static final String CHANNEL_LAST_UPDATE = "last_update"; // additional constants public static final int HTTP_TIMEOUT_SECS = 60; diff --git a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/ICalendarHandler.java b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/ICalendarHandler.java index e913fc2ed..06c5c60d3 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/ICalendarHandler.java +++ b/bundles/org.openhab.binding.icalendar/src/main/java/org/openhab/binding/icalendar/internal/handler/ICalendarHandler.java @@ -75,6 +75,7 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat private @Nullable AbstractPresentableCalendar runtimeCalendar; private @Nullable ScheduledFuture updateJobFuture; private Instant updateStatesLastCalledTime; + private @Nullable Instant calendarDownloadedTime; public ICalendarHandler(Bridge bridge, HttpClient httpClient, EventPublisher eventPublisher, TimeZoneProvider tzProvider) { @@ -278,6 +279,7 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat final AbstractPresentableCalendar calendar = AbstractPresentableCalendar.create(fileStream); runtimeCalendar = calendar; rescheduleCalendarStateUpdate(); + calendarDownloadedTime = Instant.ofEpochMilli(calendarFile.lastModified()); } catch (IOException | CalendarException e) { logger.warn("Loading calendar failed: {}", e.getMessage()); return false; @@ -375,6 +377,11 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat updateState(CHANNEL_NEXT_EVENT_END, UnDefType.UNDEF); } + final Instant lastUpdate = calendarDownloadedTime; + updateState(CHANNEL_LAST_UPDATE, + (lastUpdate != null ? new DateTimeType(lastUpdate.atZone(tzProvider.getTimeZone())) + : UnDefType.UNDEF)); + // process all Command Tags in all Calendar Events which ENDED since updateStates was last called // the END Event tags must be processed before the BEGIN ones executeEventCommands(calendar.getJustEndedEvents(updateStatesLastCalledTime, now), CommandTagType.END); diff --git a/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/i18n/icalendar_de.properties b/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/i18n/icalendar_de.properties index e91507ebb..85fd74cd5 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/i18n/icalendar_de.properties +++ b/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/i18n/icalendar_de.properties @@ -66,6 +66,8 @@ channel-type.icalendar.event_next_start.label = Start des n channel-type.icalendar.event_next_start.description = Start des nächsten Eintrags channel-type.icalendar.event_next_end.label = Ende des nächsten Eintrags channel-type.icalendar.event_next_end.description = Ende des nächsten Eintrags +channel-type.icalendar.last_update.label = Letztes Kalender-Update +channel-type.icalendar.last_update.description = Datum und Zeit des letzten erfolgreichen Kalender-Downloads channel-group-type.icalendar.result.label = Ergebnis channel-group-type.icalendar.result.description = Ergebnis, gefunden durch den Filter channel-type.icalendar.result_start.label = Ergebnisstart diff --git a/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/thing/thing-types.xml index bf8cda4fd..8aaccfde1 100644 --- a/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.icalendar/src/main/resources/OH-INF/thing/thing-types.xml @@ -16,6 +16,7 @@ + @@ -118,6 +119,12 @@ Title of the found result in calendar + + DateTime + + The time the calendar was updated successfully last time + + A resulting event found by filter