2 * Copyright (c) 2010-2022 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.nobohub.internal.model;
15 import java.util.StringJoiner;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
20 * A Component in the Nobø Hub can be an oven, a floor or a switch.
22 * @author Jørgen Austvik - Initial contribution
23 * @author Espen Fossen - Initial contribution
26 public final class Component {
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;
35 public Component(SerialNumber serialNumber, String name, boolean reverse, int zoneId,
36 int temperatureSensorForZoneId) {
37 this.serialNumber = serialNumber;
39 this.reverse = reverse;
41 this.temperatureSensorForZoneId = temperatureSensorForZoneId;
44 public static Component fromH02(String h02) throws NoboDataException {
45 String[] parts = h02.split(" ", 8);
47 if (parts.length != 8) {
48 throw new NoboDataException(
49 String.format("Unexpected number of parts from hub on H2 call: %d", parts.length));
52 SerialNumber serial = new SerialNumber(ModelHelper.toJavaString(parts[1]));
53 if (!serial.isWellFormed()) {
54 throw new NoboDataException(String.format("Illegal serial number: '%s'", serial));
57 return new Component(serial, ModelHelper.toJavaString(parts[3]), "1".equals(parts[4]),
58 Integer.parseInt(parts[5]), Integer.parseInt(parts[7]));
61 public String generateCommandString(final String command) {
62 StringJoiner joiner = new StringJoiner(" ");
63 joiner.add(command).add(ModelHelper.toHubString(serialNumber.toString()));
65 // Status not yet implemented in hub
68 joiner.add(ModelHelper.toHubString(name)).add(reverse ? "1" : "0").add(Integer.toString(zoneId)).add("-1");
70 // Active Override ID not implemented in hub for components yet
71 joiner.add(Integer.toString(temperatureSensorForZoneId));
72 return joiner.toString();
75 public SerialNumber getSerialNumber() {
79 public String getName() {
83 public boolean inReverse() {
87 public int getZoneId() {
91 public int getTemperatureSensorForZoneId() {
92 return temperatureSensorForZoneId;
95 public double getTemperature() {
99 public void setTemperature(double temperature) {
100 this.temperature = temperature;