]> git.basschouten.com Git - openhab-addons.git/commitdiff
API changed location of event counts (#11159)
authorMark Hilbush <mark@hilbush.com>
Thu, 26 Aug 2021 17:09:26 +0000 (13:09 -0400)
committerGitHub <noreply@github.com>
Thu, 26 Aug 2021 17:09:26 +0000 (19:09 +0200)
Signed-off-by: Mark Hilbush <mark@hilbush.com>
bundles/org.openhab.binding.zoneminder/src/main/java/org/openhab/binding/zoneminder/internal/dto/EventSummaryDTO.java [new file with mode: 0644]
bundles/org.openhab.binding.zoneminder/src/main/java/org/openhab/binding/zoneminder/internal/dto/MonitorItemDTO.java
bundles/org.openhab.binding.zoneminder/src/main/java/org/openhab/binding/zoneminder/internal/handler/ZmBridgeHandler.java

diff --git a/bundles/org.openhab.binding.zoneminder/src/main/java/org/openhab/binding/zoneminder/internal/dto/EventSummaryDTO.java b/bundles/org.openhab.binding.zoneminder/src/main/java/org/openhab/binding/zoneminder/internal/dto/EventSummaryDTO.java
new file mode 100644 (file)
index 0000000..dd8c8ba
--- /dev/null
@@ -0,0 +1,54 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.zoneminder.internal.dto;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * The {@link EventSummaryDTO} contains event counts for the monitor. If this object
+ * doesn't exist in the JSON response, the event counts will be in the monitor object.
+ *
+ * @author Mark Hilbush - Initial contribution
+ */
+public class EventSummaryDTO {
+
+    /**
+     * Number of events in last hour
+     */
+    @SerializedName("HourEvents")
+    public String hourEvents;
+
+    /**
+     * Number of events in last day
+     */
+    @SerializedName("DayEvents")
+    public String dayEvents;
+
+    /**
+     * Number of events in last week
+     */
+    @SerializedName("WeekEvents")
+    public String weekEvents;
+
+    /**
+     * Number of events in last month
+     */
+    @SerializedName("MonthEvents")
+    public String monthEvents;
+
+    /**
+     * Total number of events
+     */
+    @SerializedName("TotalEvents")
+    public String totalEvents;
+}
index 6e618ec484fb585337511557efdbd92e07b200a1..3332a4b8f33d6217def5244b8c482ef0edfe6279 100644 (file)
@@ -32,4 +32,10 @@ public class MonitorItemDTO {
      */
     @SerializedName("Monitor_Status")
     public MonitorStatusDTO monitorStatus;
+
+    /**
+     * Event counts
+     */
+    @SerializedName("Event_Summary")
+    public EventSummaryDTO eventSummary;
 }
index fc71e50f13cd6d895593f9be075e40bbe500849d..4fd9a2362e9e52baf7047bdb469939bb67f0535f 100644 (file)
@@ -41,6 +41,7 @@ import org.openhab.binding.zoneminder.internal.ZmStateDescriptionOptionsProvider
 import org.openhab.binding.zoneminder.internal.config.ZmBridgeConfig;
 import org.openhab.binding.zoneminder.internal.discovery.MonitorDiscoveryService;
 import org.openhab.binding.zoneminder.internal.dto.EventDTO;
+import org.openhab.binding.zoneminder.internal.dto.EventSummaryDTO;
 import org.openhab.binding.zoneminder.internal.dto.EventsDTO;
 import org.openhab.binding.zoneminder.internal.dto.MonitorDTO;
 import org.openhab.binding.zoneminder.internal.dto.MonitorItemDTO;
@@ -302,23 +303,20 @@ public class ZmBridgeHandler extends BaseBridgeHandler {
         }
         try {
             String response = executeGet(buildUrl("/api/monitors.json"));
-            MonitorsDTO monitors = GSON.fromJson(response, MonitorsDTO.class);
-            if (monitors != null && monitors.monitorItems != null) {
+            MonitorsDTO monitorsDTO = GSON.fromJson(response, MonitorsDTO.class);
+            if (monitorsDTO != null && monitorsDTO.monitorItems != null) {
                 List<StateOption> options = new ArrayList<>();
-                for (MonitorItemDTO monitorItem : monitors.monitorItems) {
-                    MonitorDTO m = monitorItem.monitor;
-                    MonitorStatusDTO mStatus = monitorItem.monitorStatus;
-                    if (m != null && mStatus != null) {
-                        Monitor monitor = new Monitor(m.id, m.name, m.function, m.enabled, mStatus.status);
-                        monitor.setHourEvents(m.hourEvents);
-                        monitor.setDayEvents(m.dayEvents);
-                        monitor.setWeekEvents(m.weekEvents);
-                        monitor.setMonthEvents(m.monthEvents);
-                        monitor.setTotalEvents(m.totalEvents);
-                        monitor.setImageUrl(buildStreamUrl(m.id, STREAM_IMAGE));
-                        monitor.setVideoUrl(buildStreamUrl(m.id, STREAM_VIDEO));
+                for (MonitorItemDTO monitorItemDTO : monitorsDTO.monitorItems) {
+                    MonitorDTO monitorDTO = monitorItemDTO.monitor;
+                    MonitorStatusDTO monitorStatusDTO = monitorItemDTO.monitorStatus;
+                    if (monitorDTO != null && monitorStatusDTO != null) {
+                        Monitor monitor = new Monitor(monitorDTO.id, monitorDTO.name, monitorDTO.function,
+                                monitorDTO.enabled, monitorStatusDTO.status);
+                        extractEventCounts(monitor, monitorItemDTO);
+                        monitor.setImageUrl(buildStreamUrl(monitorDTO.id, STREAM_IMAGE));
+                        monitor.setVideoUrl(buildStreamUrl(monitorDTO.id, STREAM_VIDEO));
                         monitorList.add(monitor);
-                        options.add(new StateOption(m.id, "Monitor " + m.id));
+                        options.add(new StateOption(monitorDTO.id, "Monitor " + monitorDTO.id));
                     }
                     stateDescriptionProvider
                             .setStateOptions(new ChannelUID(getThing().getUID(), CHANNEL_IMAGE_MONITOR_ID), options);
@@ -340,6 +338,30 @@ public class ZmBridgeHandler extends BaseBridgeHandler {
         return monitorList;
     }
 
+    private void extractEventCounts(Monitor monitor, MonitorItemDTO monitorItemDTO) {
+        /*
+         * The Zoneminder API changed in version 1.36.x such that the event counts moved from the
+         * monitor object to a new event summary object. Therefore, if the event summary object
+         * exists in the JSON response, pull the event counts from that object, otherwise get the
+         * counts from the monitor object.
+         */
+        if (monitorItemDTO.eventSummary != null) {
+            EventSummaryDTO eventSummaryDTO = monitorItemDTO.eventSummary;
+            monitor.setHourEvents(eventSummaryDTO.hourEvents);
+            monitor.setDayEvents(eventSummaryDTO.dayEvents);
+            monitor.setWeekEvents(eventSummaryDTO.weekEvents);
+            monitor.setMonthEvents(eventSummaryDTO.monthEvents);
+            monitor.setTotalEvents(eventSummaryDTO.totalEvents);
+        } else {
+            MonitorDTO monitorDTO = monitorItemDTO.monitor;
+            monitor.setHourEvents(monitorDTO.hourEvents);
+            monitor.setDayEvents(monitorDTO.dayEvents);
+            monitor.setWeekEvents(monitorDTO.weekEvents);
+            monitor.setMonthEvents(monitorDTO.monthEvents);
+            monitor.setTotalEvents(monitorDTO.totalEvents);
+        }
+    }
+
     @SuppressWarnings("null")
     private @Nullable Event getLastEvent(String id) {
         if (!zmAuth.isAuthorized()) {