| totalEvents | Number | Total number of events |
| imageUrl | String | URL for image snapshot |
| videoUrl | String | URL for JPEG video stream |
-| eventId | String | Event ID |
-| eventName | String | Event name |
-| eventCause | String | Event cause |
-| eventNotes | String | Event notes |
-| eventStart | DateTime | Event start date/time |
-| eventEnd | DateTime | Event end date/time |
-| eventFrames | Number | Event frames |
-| eventAlarmFrames | Number | Event alarm frames |
-| eventLength | Number:Time | Event length in seconds |
+| eventId | String | ID of most recently completed event |
+| eventName | String | Name of most recently completed event |
+| eventCause | String | Cause of most recently completed event |
+| eventNotes | String | Notes of most recently completed event |
+| eventStart | DateTime | Start date/time of most recently completed event |
+| eventEnd | DateTime | End date/time of most recently completed event |
+| eventFrames | Number | Number of frames of most recently completed event |
+| eventAlarmFrames | Number | Number of alarm frames of most recently completed event |
+| eventLength | Number:Time | Length in seconds of most recently completed event |
## Thing Actions
```
```
-val int NUM_MONITORS = 6
-var int monitorId = 1
+val monitors = newArrayList("1", "3", "4", "6")
+var int index = 0
-rule "Rotate Through All Monitor Images Every 10 Seconds"
+rule "Rotate Through a List of Monitor Images Every 10 Seconds"
when
Time cron "0/10 * * ? * * *"
then
- var String id = String::format("%d", monitorId)
- ZmServer_ImageMonitorId.sendCommand(id)
- monitorId = monitorId + 1
- if (monitorId > NUM_MONITORS) {
- monitorId = 1
+ ZmServer_ImageMonitorId.sendCommand(monitors.get(index))
+ index = index + 1
+ if (index >= monitors.size) {
+ index = 0
}
end
```
@SuppressWarnings("null")
public void updateStatus(Monitor m) {
- logger.debug("Monitor {}: Updating: {}", m.getId(), m.toString());
+ logger.debug("Monitor {}: Updating Monitor: {}", m.getId(), m);
updateChannelState(CHANNEL_ID, new StringType(m.getId()));
updateChannelState(CHANNEL_NAME, new StringType(m.getName()));
updateChannelState(CHANNEL_FUNCTION, new StringType(m.getFunction()));
if (!m.isAlarm()) {
updateChannelState(CHANNEL_TRIGGER_ALARM, m.isAlarm() ? OnOffType.ON : OnOffType.OFF);
}
- Event event = m.getLastEvent();
+ Event event = m.getMostRecentCompletedEvent();
if (event == null) {
+ // No most recent event, so clear out the event channels
clearEventChannels();
- } else if (event.getEnd() != null) {
- // If end is null, assume event hasn't completed yet
- logger.trace("Monitor {}: Id:{}, Frames:{}, AlarmFrames:{}, Length:{}", m.getId(), event.getId(),
- event.getFrames(), event.getAlarmFrames(), event.getLength());
- updateChannelState(CHANNEL_EVENT_ID, new StringType(event.getId()));
- updateChannelState(CHANNEL_EVENT_NAME, new StringType(event.getName()));
- updateChannelState(CHANNEL_EVENT_CAUSE, new StringType(event.getCause()));
- updateChannelState(CHANNEL_EVENT_NOTES, new StringType(event.getNotes()));
- updateChannelState(CHANNEL_EVENT_START, new DateTimeType(
- ZonedDateTime.ofInstant(event.getStart().toInstant(), timeZoneProvider.getTimeZone())));
- updateChannelState(CHANNEL_EVENT_END, new DateTimeType(
- ZonedDateTime.ofInstant(event.getEnd().toInstant(), timeZoneProvider.getTimeZone())));
- updateChannelState(CHANNEL_EVENT_FRAMES, new DecimalType(event.getFrames()));
- updateChannelState(CHANNEL_EVENT_ALARM_FRAMES, new DecimalType(event.getAlarmFrames()));
- updateChannelState(CHANNEL_EVENT_LENGTH, new QuantityType<Time>(event.getLength(), Units.SECOND));
+ return;
}
+ // Update channels for most recent completed event
+ logger.debug("Monitor {}: Updating Event Id:{}, Name:{}, Frames:{}, AlarmFrames:{}, Length:{}", m.getId(),
+ event.getId(), event.getName(), event.getFrames(), event.getAlarmFrames(), event.getLength());
+ updateChannelState(CHANNEL_EVENT_ID, new StringType(event.getId()));
+ updateChannelState(CHANNEL_EVENT_NAME, new StringType(event.getName()));
+ updateChannelState(CHANNEL_EVENT_CAUSE, new StringType(event.getCause()));
+ updateChannelState(CHANNEL_EVENT_NOTES, new StringType(event.getNotes()));
+ updateChannelState(CHANNEL_EVENT_START, new DateTimeType(
+ ZonedDateTime.ofInstant(event.getStart().toInstant(), timeZoneProvider.getTimeZone())));
+ updateChannelState(CHANNEL_EVENT_END,
+ new DateTimeType(ZonedDateTime.ofInstant(event.getEnd().toInstant(), timeZoneProvider.getTimeZone())));
+ updateChannelState(CHANNEL_EVENT_FRAMES, new DecimalType(event.getFrames()));
+ updateChannelState(CHANNEL_EVENT_ALARM_FRAMES, new DecimalType(event.getAlarmFrames()));
+ updateChannelState(CHANNEL_EVENT_LENGTH, new QuantityType<Time>(event.getLength(), Units.SECOND));
}
private void clearEventChannels() {