]> git.basschouten.com Git - openhab-addons.git/blob
4c0dc646381e5dd9a49732bcbc192872cf8c4bff
[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                         // Valve Position
65                         data = bridgehandler.evaluateXPath("//Filter/@valvePosition", xmlResponse);
66                         updateData(HaywardBindingConstants.CHANNEL_FILTER_VALVEPOSITION, data.get(i));
67
68                         // Speed
69                         data = bridgehandler.evaluateXPath("//Filter/@filterSpeed", xmlResponse);
70                         updateData(HaywardBindingConstants.CHANNEL_FILTER_SPEED, data.get(i));
71
72                         if (data.get(i).equals("0")) {
73                             updateData(HaywardBindingConstants.CHANNEL_FILTER_ENABLE, "0");
74                         } else {
75                             updateData(HaywardBindingConstants.CHANNEL_FILTER_ENABLE, "1");
76                         }
77
78                         // State
79                         data = bridgehandler.evaluateXPath("//Filter/@filterState", xmlResponse);
80                         updateData(HaywardBindingConstants.CHANNEL_FILTER_STATE, data.get(i));
81
82                         // lastSpeed
83                         data = bridgehandler.evaluateXPath("//Filter/@lastSpeed", xmlResponse);
84                         updateData(HaywardBindingConstants.CHANNEL_FILTER_LASTSPEED, data.get(i));
85                     }
86                 }
87                 this.updateStatus(ThingStatus.ONLINE);
88             } else {
89                 this.updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED);
90             }
91         }
92     }
93
94     @Override
95     public void handleCommand(ChannelUID channelUID, Command command) {
96         if ((command instanceof RefreshType)) {
97             return;
98         }
99
100         String systemID = getThing().getProperties().get(HaywardBindingConstants.PROPERTY_SYSTEM_ID);
101         String poolID = getThing().getProperties().get(HaywardBindingConstants.PROPERTY_BOWID);
102
103         Bridge bridge = getBridge();
104         if (bridge != null) {
105             HaywardBridgeHandler bridgehandler = (HaywardBridgeHandler) bridge.getHandler();
106             if (bridgehandler != null) {
107                 String cmdString = this.cmdToString(command);
108                 try {
109                     switch (channelUID.getId()) {
110                         case HaywardBindingConstants.CHANNEL_FILTER_ENABLE:
111                             if (command == OnOffType.ON) {
112                                 cmdString = "100";
113                             } else {
114                                 cmdString = "0";
115                             }
116                             break;
117                         case HaywardBindingConstants.CHANNEL_FILTER_SPEED:
118                             break;
119                         default:
120                             logger.warn("haywardCommand Unsupported type {}", channelUID);
121                             return;
122                     }
123
124                     String cmdURL = HaywardBindingConstants.COMMAND_PARAMETERS
125                             + "<Name>SetUIEquipmentCmd</Name><Parameters>"
126                             + "<Parameter name=\"Token\" dataType=\"String\">" + bridgehandler.account.token
127                             + "</Parameter>" + "<Parameter name=\"MspSystemID\" dataType=\"int\">"
128                             + bridgehandler.account.mspSystemID + "</Parameter>"
129                             + "<Parameter name=\"PoolID\" dataType=\"int\">" + poolID + "</Parameter>"
130                             + "<Parameter name=\"EquipmentID\" dataType=\"int\">" + systemID + "</Parameter>"
131                             + "<Parameter name=\"IsOn\" dataType=\"int\">" + cmdString + "</Parameter>"
132                             + HaywardBindingConstants.COMMAND_SCHEDULE + "</Parameters></Request>";
133
134                     // *****Send Command to Hayward server
135                     String xmlResponse = bridgehandler.httpXmlResponse(cmdURL);
136                     String status = bridgehandler.evaluateXPath("//Parameter[@name='Status']/text()", xmlResponse)
137                             .get(0);
138
139                     if (!("0".equals(status))) {
140                         logger.debug("haywardCommand XML response: {}", xmlResponse);
141                         return;
142                     }
143                 } catch (HaywardException e) {
144                     logger.debug("Unable to send command to Hayward's server {}:{}:{}",
145                             bridgehandler.config.endpointUrl, bridgehandler.config.username, e.getMessage());
146                 } catch (InterruptedException e) {
147                     return;
148                 }
149                 this.updateStatus(ThingStatus.ONLINE);
150             } else {
151                 this.updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_UNINITIALIZED);
152             }
153         }
154     }
155 }