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 CHANNEL_MANUAL_FAN_SPEED("manual_fan_speed", ChannelGroup.MAIN, DanfossAirUnit::getManualFanSpeed,
32 DanfossAirUnit::setManualFanSpeed),
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);
61 private final String channelName;
62 private final ChannelGroup group;
63 private final DanfossAirUnitReadAccessor readAccessor;
65 private final DanfossAirUnitWriteAccessor writeAccessor;
67 static Channel getByName(String name) {
68 for (Channel channel : values()) {
69 if (channel.getChannelName().equals(name)) {
73 throw new IllegalArgumentException(String.format("Unknown channel name: %s", name));
76 Channel(String channelName, ChannelGroup group, DanfossAirUnitReadAccessor readAccessor) {
77 this(channelName, group, readAccessor, null);
80 Channel(String channelName, ChannelGroup group, DanfossAirUnitReadAccessor readAccessor,
81 @Nullable DanfossAirUnitWriteAccessor writeAccessor) {
82 this.channelName = channelName;
84 this.readAccessor = readAccessor;
85 this.writeAccessor = writeAccessor;
88 public String getChannelName() {
92 public ChannelGroup getGroup() {
96 public DanfossAirUnitReadAccessor getReadAccessor() {
101 public DanfossAirUnitWriteAccessor getWriteAccessor() {
102 return writeAccessor;