]> git.basschouten.com Git - openhab-addons.git/blob
ea77d6baf9e26502b5c9e19e731f08cd99e2a443
[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.danfossairunit.internal;
14
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.eclipse.jdt.annotation.Nullable;
17
18 /**
19  * This enum holds the available channels with their properties (name, ...) and read/write accessors to access
20  * the corresponding values on the air unit.
21  *
22  * @author Robert Bach - Initial contribution
23  */
24 @NonNullByDefault
25 public enum Channel {
26
27     // Main Channels
28
29     CHANNEL_CURRENT_TIME("current_time", ChannelGroup.MAIN, DanfossAirUnit::getCurrentTime),
30     CHANNEL_MODE("mode", ChannelGroup.MAIN, DanfossAirUnit::getMode, DanfossAirUnit::setMode),
31     // Backwards compatibility as channel was renamed from manual_fan_speed to manual_fan_step.
32     CHANNEL_MANUAL_FAN_SPEED("manual_fan_speed", ChannelGroup.MAIN, DanfossAirUnit::getManualFanStep,
33             DanfossAirUnit::setManualFanStep),
34     CHANNEL_MANUAL_FAN_STEP("manual_fan_step", ChannelGroup.MAIN, DanfossAirUnit::getManualFanStep,
35             DanfossAirUnit::setManualFanStep),
36     CHANNEL_EXTRACT_FAN_SPEED("extract_fan_speed", ChannelGroup.MAIN, DanfossAirUnit::getExtractFanSpeed),
37     CHANNEL_SUPPLY_FAN_SPEED("supply_fan_speed", ChannelGroup.MAIN, DanfossAirUnit::getSupplyFanSpeed),
38     CHANNEL_EXTRACT_FAN_STEP("extract_fan_step", ChannelGroup.MAIN, DanfossAirUnit::getExtractFanStep),
39     CHANNEL_SUPPLY_FAN_STEP("supply_fan_step", ChannelGroup.MAIN, DanfossAirUnit::getSupplyFanStep),
40
41     CHANNEL_BOOST("boost", ChannelGroup.MAIN, DanfossAirUnit::getBoost, DanfossAirUnit::setBoost),
42     CHANNEL_NIGHT_COOLING("night_cooling", ChannelGroup.MAIN, DanfossAirUnit::getNightCooling,
43             DanfossAirUnit::setNightCooling),
44
45     // Main Temperature Channels
46     CHANNEL_ROOM_TEMP("room_temp", ChannelGroup.TEMPS, DanfossAirUnit::getRoomTemperature),
47     CHANNEL_ROOM_TEMP_CALCULATED("room_temp_calculated", ChannelGroup.TEMPS,
48             DanfossAirUnit::getRoomTemperatureCalculated),
49     CHANNEL_OUTDOOR_TEMP("outdoor_temp", ChannelGroup.TEMPS, DanfossAirUnit::getOutdoorTemperature),
50
51     // Humidity Channel
52     CHANNEL_HUMIDITY("humidity", ChannelGroup.HUMIDITY, DanfossAirUnit::getHumidity),
53
54     // recuperator channels
55     CHANNEL_BYPASS("bypass", ChannelGroup.RECUPERATOR, DanfossAirUnit::getBypass, DanfossAirUnit::setBypass),
56     CHANNEL_SUPPLY_TEMP("supply_temp", ChannelGroup.RECUPERATOR, DanfossAirUnit::getSupplyTemperature),
57     CHANNEL_EXTRACT_TEMP("extract_temp", ChannelGroup.RECUPERATOR, DanfossAirUnit::getExtractTemperature),
58     CHANNEL_EXHAUST_TEMP("exhaust_temp", ChannelGroup.RECUPERATOR, DanfossAirUnit::getExhaustTemperature),
59
60     // service channels
61     CHANNEL_BATTERY_LIFE("battery_life", ChannelGroup.SERVICE, DanfossAirUnit::getBatteryLife),
62     CHANNEL_FILTER_LIFE("filter_life", ChannelGroup.SERVICE, DanfossAirUnit::getFilterLife);
63
64     private final String channelName;
65     private final ChannelGroup group;
66     private final DanfossAirUnitReadAccessor readAccessor;
67     @Nullable
68     private final DanfossAirUnitWriteAccessor writeAccessor;
69
70     static Channel getByName(String name) {
71         for (Channel channel : values()) {
72             if (channel.getChannelName().equals(name)) {
73                 return channel;
74             }
75         }
76         throw new IllegalArgumentException(String.format("Unknown channel name: %s", name));
77     }
78
79     Channel(String channelName, ChannelGroup group, DanfossAirUnitReadAccessor readAccessor) {
80         this(channelName, group, readAccessor, null);
81     }
82
83     Channel(String channelName, ChannelGroup group, DanfossAirUnitReadAccessor readAccessor,
84             @Nullable DanfossAirUnitWriteAccessor writeAccessor) {
85         this.channelName = channelName;
86         this.group = group;
87         this.readAccessor = readAccessor;
88         this.writeAccessor = writeAccessor;
89     }
90
91     public String getChannelName() {
92         return channelName;
93     }
94
95     public ChannelGroup getGroup() {
96         return group;
97     }
98
99     public DanfossAirUnitReadAccessor getReadAccessor() {
100         return readAccessor;
101     }
102
103     @Nullable
104     public DanfossAirUnitWriteAccessor getWriteAccessor() {
105         return writeAccessor;
106     }
107 }