]> git.basschouten.com Git - openhab-addons.git/blob
4f87ac8ee213d65938c227b9bc604e3bf3391d6b
[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.daikin.internal.api.airbase;
14
15 import java.util.HashMap;
16 import java.util.Map;
17 import java.util.Optional;
18
19 import org.eclipse.jdt.annotation.NonNullByDefault;
20 import org.openhab.binding.daikin.internal.api.InfoParser;
21 import org.openhab.binding.daikin.internal.api.airbase.AirbaseEnums.AirbaseFanMovement;
22 import org.openhab.binding.daikin.internal.api.airbase.AirbaseEnums.AirbaseFanSpeed;
23 import org.openhab.binding.daikin.internal.api.airbase.AirbaseEnums.AirbaseMode;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 /**
28  * Class for holding the set of parameters used by set and get control info.
29  *
30  * @author Tim Waterhouse - Initial Contribution
31  * @author Paul Smedley <paul@smedley.id.au> - Mods for Daikin Airbase Units
32  *
33  */
34 @NonNullByDefault
35 public class AirbaseControlInfo {
36     private static final Logger LOGGER = LoggerFactory.getLogger(AirbaseControlInfo.class);
37
38     public String ret = "";
39     public boolean power = false;
40     public AirbaseMode mode = AirbaseMode.AUTO;
41     /** Degrees in Celsius. */
42     public Optional<Double> temp = Optional.empty();
43     public AirbaseFanSpeed fanSpeed = AirbaseFanSpeed.LEVEL_1;
44     public AirbaseFanMovement fanMovement = AirbaseFanMovement.STOPPED;
45     /* Not supported by all units. Sets the target humidity for dehumidifying. */
46     public Optional<Integer> targetHumidity = Optional.empty();
47
48     private AirbaseControlInfo() {
49     }
50
51     public static AirbaseControlInfo parse(String response) {
52         LOGGER.trace("Parsing string: \"{}\"", response);
53
54         Map<String, String> responseMap = InfoParser.parse(response);
55
56         AirbaseControlInfo info = new AirbaseControlInfo();
57         info.ret = Optional.ofNullable(responseMap.get("ret")).orElse("");
58         info.power = "1".equals(responseMap.get("pow"));
59         info.mode = Optional.ofNullable(responseMap.get("mode")).flatMap(value -> InfoParser.parseInt(value))
60                 .map(value -> AirbaseMode.fromValue(value)).orElse(AirbaseMode.AUTO);
61         info.temp = Optional.ofNullable(responseMap.get("stemp")).flatMap(value -> InfoParser.parseDouble(value));
62         int fRate = Optional.ofNullable(responseMap.get("f_rate")).flatMap(value -> InfoParser.parseInt(value))
63                 .orElse(1);
64         boolean fAuto = "1".equals(responseMap.getOrDefault("f_auto", "0"));
65         boolean fAirside = "1".equals(responseMap.getOrDefault("f_airside", "0"));
66         info.fanSpeed = AirbaseFanSpeed.fromValue(fRate, fAuto, fAirside);
67         info.fanMovement = Optional.ofNullable(responseMap.get("f_dir")).flatMap(value -> InfoParser.parseInt(value))
68                 .map(value -> AirbaseFanMovement.fromValue(value)).orElse(AirbaseFanMovement.STOPPED);
69         info.targetHumidity = Optional.ofNullable(responseMap.get("shum")).flatMap(value -> InfoParser.parseInt(value));
70         return info;
71     }
72
73     public Map<String, String> getParamString() {
74         Map<String, String> params = new HashMap<>();
75         params.put("pow", power ? "1" : "0");
76         params.put("mode", Integer.toString(mode.getValue()));
77         params.put("f_rate", Integer.toString(fanSpeed.getLevel()));
78         params.put("f_auto", fanSpeed.getAuto() ? "1" : "0");
79         params.put("f_airside", fanSpeed.getAirside() ? "1" : "0");
80         params.put("f_dir", Integer.toString(fanMovement.getValue()));
81         params.put("stemp", temp.orElse(20.0).toString());
82         params.put("shum", targetHumidity.map(value -> value.toString()).orElse(""));
83
84         return params;
85     }
86 }