* used across the whole binding.
*
* @author Michael Wodniok - Initial contribution
+ * @author Michael Wodniok - Added last_update related constants
*/
@NonNullByDefault
public class ICalendarBindingConstants {
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";
+ public static final ChannelTypeUID LAST_UPDATE_TYPE_UID = new ChannelTypeUID(BINDING_ID, "last_update");
// additional constants
public static final int HTTP_TIMEOUT_SECS = 60;
import org.openhab.core.thing.ThingStatusDetail;
import org.openhab.core.thing.binding.BaseBridgeHandler;
import org.openhab.core.thing.binding.ThingHandler;
+import org.openhab.core.thing.binding.builder.ChannelBuilder;
+import org.openhab.core.thing.binding.builder.ThingBuilder;
import org.openhab.core.types.Command;
import org.openhab.core.types.RefreshType;
import org.openhab.core.types.UnDefType;
*
* @author Michael Wodniok - Initial contribution
* @author Andrew Fiddian-Green - Support for Command Tags embedded in the Event description
+ * @author Michael Wodniok - Added last_update-channel and additional needed handling of it
*/
@NonNullByDefault
public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdateListener {
case CHANNEL_NEXT_EVENT_TITLE:
case CHANNEL_NEXT_EVENT_START:
case CHANNEL_NEXT_EVENT_END:
+ case CHANNEL_LAST_UPDATE:
if (command instanceof RefreshType) {
updateStates();
}
@Override
public void initialize() {
+ migrateLastUpdateChannel();
+
final ICalendarConfiguration currentConfiguration = getConfigAs(ICalendarConfiguration.class);
configuration = currentConfiguration;
}
}
+ /**
+ * Migration for last_update-channel as this change is compatible to previous instances.
+ */
+ private void migrateLastUpdateChannel() {
+ Thing thing = getThing();
+ if (thing.getChannel(CHANNEL_LAST_UPDATE) == null) {
+ logger.debug("last_update channel is missing in this Thing. Adding it.");
+ ThingBuilder thingBuilder = editThing();
+ ChannelBuilder channelBuilder = ChannelBuilder.create(new ChannelUID(thing.getUID(), CHANNEL_LAST_UPDATE));
+ thingBuilder.withChannel(channelBuilder.withType(LAST_UPDATE_TYPE_UID).build());
+ updateThing(thingBuilder.build());
+ }
+ }
+
/**
* Reloads the calendar from local ical-file. Replaces the class internal calendar - if loading succeeds. Else
* logging details at warn-level logger.