2 * Copyright (c) 2010-2023 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 CHANNEL_MANUAL_FAN_STEP("manual_fan_step", ChannelGroup.MAIN, DanfossAirUnit::getManualFanStep,
32 DanfossAirUnit::setManualFanStep),
33 CHANNEL_EXTRACT_FAN_SPEED("extract_fan_speed", ChannelGroup.MAIN, DanfossAirUnit::getExtractFanSpeed),
34 CHANNEL_SUPPLY_FAN_SPEED("supply_fan_speed", ChannelGroup.MAIN, DanfossAirUnit::getSupplyFanSpeed),
35 CHANNEL_EXTRACT_FAN_STEP("extract_fan_step", ChannelGroup.MAIN, DanfossAirUnit::getExtractFanStep),
36 CHANNEL_SUPPLY_FAN_STEP("supply_fan_step", ChannelGroup.MAIN, DanfossAirUnit::getSupplyFanStep),
38 CHANNEL_BOOST("boost", ChannelGroup.MAIN, DanfossAirUnit::getBoost, DanfossAirUnit::setBoost),
39 CHANNEL_NIGHT_COOLING("night_cooling", ChannelGroup.MAIN, DanfossAirUnit::getNightCooling,
40 DanfossAirUnit::setNightCooling),
42 // Main Temperature Channels
43 CHANNEL_ROOM_TEMP("room_temp", ChannelGroup.TEMPS, DanfossAirUnit::getRoomTemperature),
44 CHANNEL_ROOM_TEMP_CALCULATED("room_temp_calculated", ChannelGroup.TEMPS,
45 DanfossAirUnit::getRoomTemperatureCalculated),
46 CHANNEL_OUTDOOR_TEMP("outdoor_temp", ChannelGroup.TEMPS, DanfossAirUnit::getOutdoorTemperature),
49 CHANNEL_HUMIDITY("humidity", ChannelGroup.HUMIDITY, DanfossAirUnit::getHumidity),
51 // recuperator channels
52 CHANNEL_BYPASS("bypass", ChannelGroup.RECUPERATOR, DanfossAirUnit::getBypass, DanfossAirUnit::setBypass),
53 CHANNEL_SUPPLY_TEMP("supply_temp", ChannelGroup.RECUPERATOR, DanfossAirUnit::getSupplyTemperature),
54 CHANNEL_EXTRACT_TEMP("extract_temp", ChannelGroup.RECUPERATOR, DanfossAirUnit::getExtractTemperature),
55 CHANNEL_EXHAUST_TEMP("exhaust_temp", ChannelGroup.RECUPERATOR, DanfossAirUnit::getExhaustTemperature),
58 CHANNEL_BATTERY_LIFE("battery_life", ChannelGroup.SERVICE, DanfossAirUnit::getBatteryLife),
59 CHANNEL_FILTER_LIFE("filter_life", ChannelGroup.SERVICE, DanfossAirUnit::getFilterLife),
60 CHANNEL_FILTER_PERIOD("filter_period", ChannelGroup.SERVICE, DanfossAirUnit::getFilterPeriod,
61 DanfossAirUnit::setFilterPeriod);
63 private final String channelName;
64 private final ChannelGroup group;
65 private final DanfossAirUnitReadAccessor readAccessor;
67 private final DanfossAirUnitWriteAccessor writeAccessor;
69 public static Channel getByName(String name) {
70 for (Channel channel : values()) {
71 if (channel.getChannelName().equals(name)) {
75 throw new IllegalArgumentException(String.format("Unknown channel name: %s", name));
78 Channel(String channelName, ChannelGroup group, DanfossAirUnitReadAccessor readAccessor) {
79 this(channelName, group, readAccessor, null);
82 Channel(String channelName, ChannelGroup group, DanfossAirUnitReadAccessor readAccessor,
83 @Nullable DanfossAirUnitWriteAccessor writeAccessor) {
84 this.channelName = channelName;
86 this.readAccessor = readAccessor;
87 this.writeAccessor = writeAccessor;
90 public String getChannelName() {
94 public ChannelGroup getGroup() {
98 public DanfossAirUnitReadAccessor getReadAccessor() {
103 public DanfossAirUnitWriteAccessor getWriteAccessor() {
104 return writeAccessor;