2 * Copyright (c) 2010-2021 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.danfossairunit.internal;
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.eclipse.jdt.annotation.Nullable;
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.
22 * @author Robert Bach - Initial contribution
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),
41 CHANNEL_BOOST("boost", ChannelGroup.MAIN, DanfossAirUnit::getBoost, DanfossAirUnit::setBoost),
42 CHANNEL_NIGHT_COOLING("night_cooling", ChannelGroup.MAIN, DanfossAirUnit::getNightCooling,
43 DanfossAirUnit::setNightCooling),
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),
52 CHANNEL_HUMIDITY("humidity", ChannelGroup.HUMIDITY, DanfossAirUnit::getHumidity),
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),
61 CHANNEL_BATTERY_LIFE("battery_life", ChannelGroup.SERVICE, DanfossAirUnit::getBatteryLife),
62 CHANNEL_FILTER_LIFE("filter_life", ChannelGroup.SERVICE, DanfossAirUnit::getFilterLife),
63 CHANNEL_FILTER_PERIOD("filter_period", ChannelGroup.SERVICE, DanfossAirUnit::getFilterPeriod,
64 DanfossAirUnit::setFilterPeriod);
66 private final String channelName;
67 private final ChannelGroup group;
68 private final DanfossAirUnitReadAccessor readAccessor;
70 private final DanfossAirUnitWriteAccessor writeAccessor;
72 static Channel getByName(String name) {
73 for (Channel channel : values()) {
74 if (channel.getChannelName().equals(name)) {
78 throw new IllegalArgumentException(String.format("Unknown channel name: %s", name));
81 Channel(String channelName, ChannelGroup group, DanfossAirUnitReadAccessor readAccessor) {
82 this(channelName, group, readAccessor, null);
85 Channel(String channelName, ChannelGroup group, DanfossAirUnitReadAccessor readAccessor,
86 @Nullable DanfossAirUnitWriteAccessor writeAccessor) {
87 this.channelName = channelName;
89 this.readAccessor = readAccessor;
90 this.writeAccessor = writeAccessor;
93 public String getChannelName() {
97 public ChannelGroup getGroup() {
101 public DanfossAirUnitReadAccessor getReadAccessor() {
106 public DanfossAirUnitWriteAccessor getWriteAccessor() {
107 return writeAccessor;