]> git.basschouten.com Git - openhab-addons.git/blob
c0d0cfd465ab62ade47d1706bfb79462e01a5f14
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2022 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.nobohub.internal.model;
14
15 import java.util.StringJoiner;
16
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18
19 /**
20  * A Component in the Nobø Hub can be an oven, a floor or a switch.
21  *
22  * @author Jørgen Austvik - Initial contribution
23  * @author Espen Fossen - Initial contribution
24  */
25 @NonNullByDefault
26 public final class Component {
27
28     private final SerialNumber serialNumber;
29     private final String name;
30     private final boolean reverse;
31     private final int zoneId;
32     private final int temperatureSensorForZoneId;
33     private double temperature;
34
35     public Component(SerialNumber serialNumber, String name, boolean reverse, int zoneId,
36             int temperatureSensorForZoneId) {
37         this.serialNumber = serialNumber;
38         this.name = name;
39         this.reverse = reverse;
40         this.zoneId = zoneId;
41         this.temperatureSensorForZoneId = temperatureSensorForZoneId;
42     }
43
44     public static Component fromH02(String h02) throws NoboDataException {
45         String[] parts = h02.split(" ", 8);
46
47         if (parts.length != 8) {
48             throw new NoboDataException(
49                     String.format("Unexpected number of parts from hub on H2 call: %d", parts.length));
50         }
51
52         SerialNumber serial = new SerialNumber(ModelHelper.toJavaString(parts[1]));
53         if (!serial.isWellFormed()) {
54             throw new NoboDataException(String.format("Illegal serial number: '%s'", serial));
55         }
56
57         return new Component(serial, ModelHelper.toJavaString(parts[3]), "1".equals(parts[4]),
58                 Integer.parseInt(parts[5]), Integer.parseInt(parts[7]));
59     }
60
61     public String generateCommandString(final String command) {
62         StringJoiner joiner = new StringJoiner(" ");
63         joiner.add(command).add(ModelHelper.toHubString(serialNumber.toString()));
64
65         // Status not yet implemented in hub
66         joiner.add("0");
67
68         joiner.add(ModelHelper.toHubString(name)).add(reverse ? "1" : "0").add(Integer.toString(zoneId)).add("-1");
69
70         // Active Override ID not implemented in hub for components yet
71         joiner.add(Integer.toString(temperatureSensorForZoneId));
72         return joiner.toString();
73     }
74
75     public SerialNumber getSerialNumber() {
76         return serialNumber;
77     }
78
79     public String getName() {
80         return name;
81     }
82
83     public boolean inReverse() {
84         return reverse;
85     }
86
87     public int getZoneId() {
88         return zoneId;
89     }
90
91     public int getTemperatureSensorForZoneId() {
92         return temperatureSensorForZoneId;
93     }
94
95     public double getTemperature() {
96         return temperature;
97     }
98
99     public void setTemperature(double temperature) {
100         this.temperature = temperature;
101     }
102 }