]> git.basschouten.com Git - openhab-addons.git/blob
b39740cd8d38d891e02fb2ff0a3616b8cb4d6af4
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 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.library.types.OnOffType;
23 import org.openhab.core.thing.Bridge;
24 import org.openhab.core.thing.ChannelUID;
25 import org.openhab.core.thing.Thing;
26 import org.openhab.core.thing.ThingStatus;
27 import org.openhab.core.thing.ThingStatusDetail;
28 import org.openhab.core.types.Command;
29 import org.openhab.core.types.RefreshType;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 /**
34  * The Filter Handler
35  *
36  * @author Matt Myers - Initial contribution
37  */
38 @NonNullByDefault
39 public class HaywardFilterHandler extends HaywardThingHandler {
40     private final Logger logger = LoggerFactory.getLogger(HaywardFilterHandler.class);
41
42     public HaywardFilterHandler(Thing thing) {
43         super(thing);
44     }
45
46     @Override
47     public void initialize() {
48         updateStatus(ThingStatus.ONLINE);
49     }
50
51     @Override
52     public void getTelemetry(String xmlResponse) throws HaywardException {
53         List<String> systemIDs = new ArrayList<>();
54         List<String> data = new ArrayList<>();
55
56         Bridge bridge = getBridge();
57         if (bridge != null) {
58             HaywardBridgeHandler bridgehandler = (HaywardBridgeHandler) bridge.getHandler();
59             if (bridgehandler != null) {
60                 systemIDs = bridgehandler.evaluateXPath("//Filter/@systemId", xmlResponse);
61                 String thingSystemID = getThing().getUID().getId();
62                 for (int i = 0; i < systemIDs.size(); i++) {
63                     if (systemIDs.get(i).equals(thingSystemID)) {
64                         // Operating Mode
65                         data = bridgehandler.evaluateXPath("//Chlorinator/@operatingMode", xmlResponse);
66                         updateData(HaywardBindingConstants.CHANNEL_CHLORINATOR_OPERATINGMODE, data.get(i));
67
68                         // Valve Position
69                         data = bridgehandler.evaluateXPath("//Filter/@valvePosition", xmlResponse);
70                         updateData(HaywardBindingConstants.CHANNEL_FILTER_VALVEPOSITION, data.get(i));
71
72                         // Speed
73                         data = bridgehandler.evaluateXPath("//Filter/@filterSpeed", xmlResponse);
74                         updateData(HaywardBindingConstants.CHANNEL_FILTER_SPEED, data.get(i));
75
76                         if (data.get(i).equals("0")) {
77                             updateData(HaywardBindingConstants.CHANNEL_FILTER_ENABLE, "0");
78                         } else {
79                             updateData(HaywardBindingConstants.CHANNEL_FILTER_ENABLE, "1");
80                         }
81
82                         // State
83                         data = bridgehandler.evaluateXPath("//Filter/@filterState", xmlResponse);
84                         updateData(HaywardBindingConstants.CHANNEL_FILTER_STATE, data.get(i));
85
86                         // lastSpeed
87                         data = bridgehandler.evaluateXPath("//Filter/@lastSpeed", xmlResponse);
88                         updateData(HaywardBindingConstants.CHANNEL_FILTER_LASTSPEED, data.get(i));
89                     }
90                 }
91                 this.updateStatus(ThingStatus.ONLINE);
92             } else {
93                 this.updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED);
94             }
95         }
96     }
97
98     @Override
99     public void handleCommand(ChannelUID channelUID, Command command) {
100         if ((command instanceof RefreshType)) {
101             return;
102         }
103
104         String systemID = getThing().getProperties().get(HaywardBindingConstants.PROPERTY_SYSTEM_ID);
105         String poolID = getThing().getProperties().get(HaywardBindingConstants.PROPERTY_BOWID);
106
107         Bridge bridge = getBridge();
108         if (bridge != null) {
109             HaywardBridgeHandler bridgehandler = (HaywardBridgeHandler) bridge.getHandler();
110             if (bridgehandler != null) {
111                 String cmdString = this.cmdToString(command);
112                 try {
113                     switch (channelUID.getId()) {
114                         case HaywardBindingConstants.CHANNEL_FILTER_ENABLE:
115                             if (command == OnOffType.ON) {
116                                 cmdString = "100";
117                             } else {
118                                 cmdString = "0";
119                             }
120                             break;
121                         case HaywardBindingConstants.CHANNEL_FILTER_SPEED:
122                             break;
123                         default:
124                             logger.warn("haywardCommand Unsupported type {}", channelUID);
125                             return;
126                     }
127
128                     String cmdURL = HaywardBindingConstants.COMMAND_PARAMETERS
129                             + "<Name>SetUIEquipmentCmd</Name><Parameters>"
130                             + "<Parameter name=\"Token\" dataType=\"String\">" + bridgehandler.account.token
131                             + "</Parameter>" + "<Parameter name=\"MspSystemID\" dataType=\"int\">"
132                             + bridgehandler.account.mspSystemID + "</Parameter>"
133                             + "<Parameter name=\"PoolID\" dataType=\"int\">" + poolID + "</Parameter>"
134                             + "<Parameter name=\"EquipmentID\" dataType=\"int\">" + systemID + "</Parameter>"
135                             + "<Parameter name=\"IsOn\" dataType=\"int\">" + cmdString + "</Parameter>"
136                             + HaywardBindingConstants.COMMAND_SCHEDULE + "</Parameters></Request>";
137
138                     // *****Send Command to Hayward server
139                     String xmlResponse = bridgehandler.httpXmlResponse(cmdURL);
140                     String status = bridgehandler.evaluateXPath("//Parameter[@name='Status']/text()", xmlResponse)
141                             .get(0);
142
143                     if (!(status.equals("0"))) {
144                         logger.debug("haywardCommand XML response: {}", xmlResponse);
145                         return;
146                     }
147                 } catch (HaywardException e) {
148                     logger.debug("Unable to send command to Hayward's server {}:{}:{}",
149                             bridgehandler.config.endpointUrl, bridgehandler.config.username, e.getMessage());
150                 } catch (InterruptedException e) {
151                     return;
152                 }
153                 this.updateStatus(ThingStatus.ONLINE);
154             } else {
155                 this.updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED);
156             }
157         }
158     }
159 }