]> git.basschouten.com Git - openhab-addons.git/blob
c28577c3744d0dc32539c4ce4268a931c6b9dfab
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.haywardomnilogic.internal.handler;
14
15 import java.util.ArrayList;
16 import java.util.List;
17
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.openhab.binding.haywardomnilogic.internal.HaywardBindingConstants;
20 import org.openhab.binding.haywardomnilogic.internal.HaywardException;
21 import org.openhab.binding.haywardomnilogic.internal.HaywardThingHandler;
22 import org.openhab.core.thing.Bridge;
23 import org.openhab.core.thing.Thing;
24 import org.openhab.core.thing.ThingStatus;
25 import org.openhab.core.thing.ThingStatusDetail;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 /**
30  * The Backyard Handler
31  *
32  * @author Matt Myers - Initial contribution
33  */
34 @NonNullByDefault
35 public class HaywardBackyardHandler extends HaywardThingHandler {
36     private final Logger logger = LoggerFactory.getLogger(HaywardBackyardHandler.class);
37
38     public HaywardBackyardHandler(Thing thing) {
39         super(thing);
40     }
41
42     @Override
43     public void getTelemetry(String xmlResponse) throws HaywardException {
44         List<String> data = new ArrayList<>();
45         List<String> systemIDs = new ArrayList<>();
46
47         Bridge bridge = getBridge();
48         if (bridge != null) {
49             HaywardBridgeHandler bridgehandler = (HaywardBridgeHandler) bridge.getHandler();
50             if (bridgehandler != null) {
51                 systemIDs = bridgehandler.evaluateXPath("//Backyard/@systemId", xmlResponse);
52                 String thingSystemID = getThing().getUID().getId();
53                 for (int i = 0; i < systemIDs.size(); i++) {
54                     if (systemIDs.get(i).equals(thingSystemID)) {
55                         // Air temp
56                         data = bridgehandler.evaluateXPath("//Backyard/@airTemp", xmlResponse);
57                         updateData(HaywardBindingConstants.CHANNEL_BACKYARD_AIRTEMP, data.get(0));
58
59                         // Status
60                         data = bridgehandler.evaluateXPath("//Backyard/@status", xmlResponse);
61                         updateData(HaywardBindingConstants.CHANNEL_BACKYARD_STATUS, data.get(0));
62
63                         // State
64                         data = bridgehandler.evaluateXPath("//Backyard/@state", xmlResponse);
65                         updateData(HaywardBindingConstants.CHANNEL_BACKYARD_STATE, data.get(0));
66                     }
67                 }
68                 this.updateStatus(ThingStatus.ONLINE);
69             } else {
70                 this.updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED);
71             }
72         }
73     }
74
75     public boolean getAlarmList(String systemID) throws HaywardException {
76         List<String> bowID = new ArrayList<>();
77         List<String> parameter1 = new ArrayList<>();
78         List<String> message = new ArrayList<>();
79         String alarmStr;
80
81         Bridge bridge = getBridge();
82         if (bridge != null) {
83             HaywardBridgeHandler bridgehandler = (HaywardBridgeHandler) bridge.getHandler();
84             if (bridgehandler != null) {
85                 // *****Request Alarm List from Hayward server
86                 String urlParameters = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request><Name>GetAlarmList</Name><Parameters>"
87                         + "<Parameter name=\"Token\" dataType=\"String\">" + bridgehandler.account.token
88                         + "</Parameter>" + "<Parameter name=\"MspSystemID\" dataType=\"int\">"
89                         + bridgehandler.account.mspSystemID + "</Parameter>"
90                         + "<Parameter name=\"CultureInfoName\" dataType=\"String\">en-us</Parameter></Parameters></Request>";
91
92                 try {
93                     String xmlResponse = bridgehandler.httpXmlResponse(urlParameters);
94
95                     if (xmlResponse.isEmpty()) {
96                         logger.debug("Hayward getAlarmList XML response was empty");
97                         return false;
98                     }
99
100                     String status = bridgehandler
101                             .evaluateXPath("/Response/Parameters//Parameter[@name='Status']/text()", xmlResponse)
102                             .get(0);
103
104                     if (!("0".equals(status))) {
105                         logger.trace("Hayward getAlarm XML response: {}", xmlResponse);
106                         return false;
107                     }
108
109                     bowID = bridgehandler.evaluateXPath("//Property[@name='BowID']/text()", xmlResponse);
110                     parameter1 = bridgehandler.evaluateXPath("//Property[@name='Parameter1']/text()", xmlResponse);
111                     message = bridgehandler.evaluateXPath("//Property[@name='Message']/text()", xmlResponse);
112
113                     for (int i = 0; i < 5; i++) {
114                         if (i < bowID.size()) {
115                             alarmStr = parameter1.get(i) + ": " + message.get(i);
116                         } else {
117                             alarmStr = "";
118                         }
119                         updateData("backyardAlarm" + String.format("%01d", i + 1), alarmStr);
120                     }
121                     this.updateStatus(ThingStatus.ONLINE);
122                     return true;
123                 } catch (InterruptedException e) {
124                     return false;
125                 }
126             } else {
127                 this.updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED);
128                 return false;
129             }
130         } else {
131             this.updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED);
132             return false;
133         }
134     }
135 }