[digitalSTROM] Shade angle support for GR things (#10444)
Signed-off-by: Rouven Schürch <r.schuerch@gmx.ch>
This commit is contained in:
parent
79d3ff1ec1
commit
4dbb449a14
@ -12,7 +12,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.openhab.binding.digitalstrom.internal.discovery;
|
package org.openhab.binding.digitalstrom.internal.discovery;
|
||||||
|
|
||||||
import static org.openhab.binding.digitalstrom.internal.DigitalSTROMBindingConstants.*;
|
import static org.openhab.binding.digitalstrom.internal.DigitalSTROMBindingConstants.BINDING_ID;
|
||||||
|
import static org.openhab.binding.digitalstrom.internal.DigitalSTROMBindingConstants.GROUP_ID;
|
||||||
|
import static org.openhab.binding.digitalstrom.internal.DigitalSTROMBindingConstants.SCENE_ID;
|
||||||
|
import static org.openhab.binding.digitalstrom.internal.DigitalSTROMBindingConstants.ZONE_ID;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -21,7 +24,8 @@ import java.util.HashSet;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.openhab.binding.digitalstrom.internal.handler.BridgeHandler;
|
import org.openhab.binding.digitalstrom.internal.handler.BridgeHandler;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.FuncNameAndColorGroupEnum;
|
import org.openhab.binding.digitalstrom.internal.handler.SceneHandler;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ApplicationGroup;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.InternalScene;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.InternalScene;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.SceneEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.SceneEnum;
|
||||||
import org.openhab.core.config.discovery.AbstractDiscoveryService;
|
import org.openhab.core.config.discovery.AbstractDiscoveryService;
|
||||||
@ -119,9 +123,10 @@ public class SceneDiscoveryService extends AbstractDiscoveryService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean ignoreGroup(Short groupID) {
|
private boolean ignoreGroup(Short groupID) {
|
||||||
if (FuncNameAndColorGroupEnum.getMode(groupID) != null) {
|
ApplicationGroup group = ApplicationGroup.getGroup(groupID);
|
||||||
switch (FuncNameAndColorGroupEnum.getMode(groupID)) {
|
if (group != null) {
|
||||||
case TEMPERATION_CONTROL:
|
switch (group) {
|
||||||
|
case TEMPERATURE_CONTROL:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -458,7 +458,8 @@ public class DeviceHandler extends BaseThingHandler implements DeviceStatusListe
|
|||||||
} else if (this.device.isBlind()) {
|
} else if (this.device.isBlind()) {
|
||||||
// load channel for set the angle of jalousie devices
|
// load channel for set the angle of jalousie devices
|
||||||
String channelTypeID = DsChannelTypeProvider.getOutputChannelTypeID(
|
String channelTypeID = DsChannelTypeProvider.getOutputChannelTypeID(
|
||||||
((Device) device).getFunctionalColorGroup(), ((Device) device).getOutputMode());
|
((Device) device).getFunctionalColorGroup().getColor(), ((Device) device).getOutputMode(),
|
||||||
|
((Device) device).getOutputChannels());
|
||||||
loadOutputChannel(new ChannelTypeUID(BINDING_ID, channelTypeID),
|
loadOutputChannel(new ChannelTypeUID(BINDING_ID, channelTypeID),
|
||||||
DsChannelTypeProvider.getItemType(channelTypeID));
|
DsChannelTypeProvider.getItemType(channelTypeID));
|
||||||
}
|
}
|
||||||
@ -712,10 +713,11 @@ public class DeviceHandler extends BaseThingHandler implements DeviceStatusListe
|
|||||||
if (!device.isDeviceWithOutput()) {
|
if (!device.isDeviceWithOutput()) {
|
||||||
loadOutputChannel(null, null);
|
loadOutputChannel(null, null);
|
||||||
}
|
}
|
||||||
String channelTypeID = DsChannelTypeProvider.getOutputChannelTypeID(device.getFunctionalColorGroup(),
|
String channelTypeID = DsChannelTypeProvider.getOutputChannelTypeID(device.getFunctionalColorGroup().getColor(),
|
||||||
device.getOutputMode());
|
device.getOutputMode(), device.getOutputChannels());
|
||||||
logger.debug("load channel: typeID={}, itemType={}",
|
logger.debug("load channel: typeID={}, itemType={}",
|
||||||
DsChannelTypeProvider.getOutputChannelTypeID(device.getFunctionalColorGroup(), device.getOutputMode()),
|
DsChannelTypeProvider.getOutputChannelTypeID(device.getFunctionalColorGroup().getColor(),
|
||||||
|
device.getOutputMode(), device.getOutputChannels()),
|
||||||
DsChannelTypeProvider.getItemType(channelTypeID));
|
DsChannelTypeProvider.getItemType(channelTypeID));
|
||||||
if (channelTypeID != null && (currentChannel == null || !currentChannel.equals(channelTypeID))) {
|
if (channelTypeID != null && (currentChannel == null || !currentChannel.equals(channelTypeID))) {
|
||||||
loadOutputChannel(new ChannelTypeUID(BINDING_ID, channelTypeID),
|
loadOutputChannel(new ChannelTypeUID(BINDING_ID, channelTypeID),
|
||||||
|
|||||||
@ -29,7 +29,8 @@ import org.openhab.binding.digitalstrom.internal.lib.climate.jsonresponsecontain
|
|||||||
import org.openhab.binding.digitalstrom.internal.lib.listener.TemperatureControlStatusListener;
|
import org.openhab.binding.digitalstrom.internal.lib.listener.TemperatureControlStatusListener;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.manager.StructureManager;
|
import org.openhab.binding.digitalstrom.internal.lib.manager.StructureManager;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.manager.impl.TemperatureControlManager;
|
import org.openhab.binding.digitalstrom.internal.lib.manager.impl.TemperatureControlManager;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.FunctionalColorGroupEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ApplicationGroup;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputChannelEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.providers.DsChannelTypeProvider;
|
import org.openhab.binding.digitalstrom.internal.providers.DsChannelTypeProvider;
|
||||||
import org.openhab.core.config.core.Configuration;
|
import org.openhab.core.config.core.Configuration;
|
||||||
@ -280,14 +281,14 @@ public class ZoneTemperatureControlHandler extends BaseThingHandler implements T
|
|||||||
&& (currentChannelID == null
|
&& (currentChannelID == null
|
||||||
|| !currentChannelID.contains(DsChannelTypeProvider.TEMPERATURE_CONTROLLED))
|
|| !currentChannelID.contains(DsChannelTypeProvider.TEMPERATURE_CONTROLLED))
|
||||||
&& !controlState.equals(ControlStates.EMERGENCY)) {
|
&& !controlState.equals(ControlStates.EMERGENCY)) {
|
||||||
currentChannelID = DsChannelTypeProvider.getOutputChannelTypeID(FunctionalColorGroupEnum.BLUE,
|
currentChannelID = DsChannelTypeProvider.getOutputChannelTypeID(ApplicationGroup.Color.BLUE,
|
||||||
OutputModeEnum.TEMPRETURE_PWM);
|
OutputModeEnum.TEMPRETURE_PWM, new ArrayList<OutputChannelEnum>());
|
||||||
loadChannel();
|
loadChannel();
|
||||||
currentValue = tempControlStatus.getNominalValue();
|
currentValue = tempControlStatus.getNominalValue();
|
||||||
updateState(currentChannelID, new DecimalType(currentValue.doubleValue()));
|
updateState(currentChannelID, new DecimalType(currentValue.doubleValue()));
|
||||||
} else if (!controlMode.equals(ControlModes.PID_CONTROL) && !controlMode.equals(ControlModes.OFF)) {
|
} else if (!controlMode.equals(ControlModes.PID_CONTROL) && !controlMode.equals(ControlModes.OFF)) {
|
||||||
currentChannelID = DsChannelTypeProvider.getOutputChannelTypeID(FunctionalColorGroupEnum.BLUE,
|
currentChannelID = DsChannelTypeProvider.getOutputChannelTypeID(ApplicationGroup.Color.BLUE,
|
||||||
OutputModeEnum.HEATING_PWM);
|
OutputModeEnum.HEATING_PWM, new ArrayList<OutputChannelEnum>());
|
||||||
loadChannel();
|
loadChannel();
|
||||||
currentValue = tempControlStatus.getControlValue();
|
currentValue = tempControlStatus.getControlValue();
|
||||||
updateState(currentChannelID, new PercentType(fixPercent(currentValue.intValue())));
|
updateState(currentChannelID, new PercentType(fixPercent(currentValue.intValue())));
|
||||||
|
|||||||
@ -30,7 +30,7 @@ import org.openhab.binding.digitalstrom.internal.lib.listener.SystemStateChangeL
|
|||||||
import org.openhab.binding.digitalstrom.internal.lib.listener.TemperatureControlStatusListener;
|
import org.openhab.binding.digitalstrom.internal.lib.listener.TemperatureControlStatusListener;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.manager.ConnectionManager;
|
import org.openhab.binding.digitalstrom.internal.lib.manager.ConnectionManager;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.serverconnection.DsAPI;
|
import org.openhab.binding.digitalstrom.internal.lib.serverconnection.DsAPI;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.FuncNameAndColorGroupEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ApplicationGroup;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.SensorEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.SensorEnum;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -406,7 +406,7 @@ public class TemperatureControlManager implements EventHandler, TemperatureContr
|
|||||||
public boolean pushControlValue(Integer zoneID, Float newValue) {
|
public boolean pushControlValue(Integer zoneID, Float newValue) {
|
||||||
if (checkAndGetTemperatureControlStatus(zoneID) != null) {
|
if (checkAndGetTemperatureControlStatus(zoneID) != null) {
|
||||||
if (dSapi.pushZoneSensorValue(connectionMananager.getSessionToken(), zoneID, null,
|
if (dSapi.pushZoneSensorValue(connectionMananager.getSessionToken(), zoneID, null,
|
||||||
FuncNameAndColorGroupEnum.TEMPERATION_CONTROL.getFunctionalColorGroup(), null, newValue,
|
ApplicationGroup.TEMPERATURE_CONTROL.getId(), null, newValue,
|
||||||
SensorEnum.ROOM_TEMPERATURE_CONTROL_VARIABLE)) {
|
SensorEnum.ROOM_TEMPERATURE_CONTROL_VARIABLE)) {
|
||||||
addEcho(zoneID, SensorEnum.ROOM_TEMPERATURE_CONTROL_VARIABLE, newValue);
|
addEcho(zoneID, SensorEnum.ROOM_TEMPERATURE_CONTROL_VARIABLE, newValue);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -103,6 +103,9 @@ public enum JSONApiResponseKeysEnum {
|
|||||||
TAGS("tags"),
|
TAGS("tags"),
|
||||||
REVISION_ID("revisionID"),
|
REVISION_ID("revisionID"),
|
||||||
|
|
||||||
|
// channel
|
||||||
|
OUTPUT_CHANNELS("outputChannels"),
|
||||||
|
|
||||||
// config
|
// config
|
||||||
CLASS("class"),
|
CLASS("class"),
|
||||||
INDEX("index"),
|
INDEX("index"),
|
||||||
|
|||||||
@ -16,11 +16,14 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.config.Config;
|
import org.openhab.binding.digitalstrom.internal.lib.config.Config;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.event.constants.EventNames;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.event.types.EventItem;
|
import org.openhab.binding.digitalstrom.internal.lib.event.types.EventItem;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.sensorjobexecutor.sensorjob.impl.DeviceConsumptionSensorJob;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceSceneSpec;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceSceneSpec;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceStateUpdate;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceStateUpdate;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ApplicationGroup;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.DeviceBinarayInputEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.DeviceBinarayInputEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.FunctionalColorGroupEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputChannelEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.SensorEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.SensorEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.DSID;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.DSID;
|
||||||
@ -133,14 +136,14 @@ public interface Device extends GeneralDeviceInformation {
|
|||||||
*
|
*
|
||||||
* @return current functional color group
|
* @return current functional color group
|
||||||
*/
|
*/
|
||||||
FunctionalColorGroupEnum getFunctionalColorGroup();
|
ApplicationGroup getFunctionalColorGroup();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the functional color group of this device.
|
* Sets the functional color group of this device.
|
||||||
*
|
*
|
||||||
* @param fuctionalColorGroup to set
|
* @param fuctionalColorGroup to set
|
||||||
*/
|
*/
|
||||||
void setFunctionalColorGroup(FunctionalColorGroupEnum fuctionalColorGroup);
|
void setFunctionalColorGroup(ApplicationGroup fuctionalColorGroup);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the current output mode of this device.
|
* Returns the current output mode of this device.
|
||||||
@ -152,6 +155,8 @@ public interface Device extends GeneralDeviceInformation {
|
|||||||
*/
|
*/
|
||||||
OutputModeEnum getOutputMode();
|
OutputModeEnum getOutputMode();
|
||||||
|
|
||||||
|
List<OutputChannelEnum> getOutputChannels();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds an increase command as {@link DeviceStateUpdate} to the list of outstanding commands.
|
* Adds an increase command as {@link DeviceStateUpdate} to the list of outstanding commands.
|
||||||
*/
|
*/
|
||||||
@ -215,9 +220,9 @@ public interface Device extends GeneralDeviceInformation {
|
|||||||
short getMaxOutputValue();
|
short getMaxOutputValue();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list with group id's in which the device is part of.
|
* Returns a list with group ids which the device is part of.
|
||||||
*
|
*
|
||||||
* @return List of group id's
|
* @return List of group ids
|
||||||
*/
|
*/
|
||||||
List<Short> getGroups();
|
List<Short> getGroups();
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,113 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* digitalSTROM Application Groups.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
| Group ID | Name | Color | Application |
|
||||||
|
| -------- | --------------------- | ------- | ----------------------------------- |
|
||||||
|
| 1 | Lights | Yellow | Room lights |
|
||||||
|
| 2 | Blinds | Gray | Blinds, curtains, shades, awnings |
|
||||||
|
| 3 | Heating | Blue | Heating |
|
||||||
|
| 9 | Cooling | Blue | Cooling |
|
||||||
|
| 10 | Ventilation | Blue | Ventilation |
|
||||||
|
| 11 | Window | Blue | Windows |
|
||||||
|
| 12 | Recirculation | Blue | Ceiling fan, Fan coil units |
|
||||||
|
| 64 | Apartment Ventilation | Blue | Ventilation system |
|
||||||
|
| 48 | Temperature Control | Blue | Single room temperature control |
|
||||||
|
| 4 | Audio | Cyan | Playing music or radio |
|
||||||
|
| 5 | Video | Magenta | TV, Video |
|
||||||
|
| 8 | Joker | Black | Configurable |
|
||||||
|
| n/a | Single Device | White | Various, individual per device |
|
||||||
|
| n/a | Security | Red | Security related functions, Alarms |
|
||||||
|
| n/a | Access | Green | Access related functions, door bell |
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author Rouven Schürch - Initial contribution
|
||||||
|
* @see <a href="https://developer.digitalstrom.org/Architecture/ds-basics.pdf">ds-basics.pdf</a> (Version 1.4/1.6),
|
||||||
|
* chapter 3.2 (Group), Table 2.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum ApplicationGroup {
|
||||||
|
|
||||||
|
LIGHTS((short) 1, Color.YELLOW),
|
||||||
|
BLINDS((short) 2, Color.GREY),
|
||||||
|
HEATING((short) 3, Color.BLUE),
|
||||||
|
COOLING((short) 9, Color.BLUE),
|
||||||
|
VENTILATION((short) 10, Color.BLUE),
|
||||||
|
WINDOW((short) 11, Color.BLUE),
|
||||||
|
RECIRCULATION((short) 12, Color.BLUE),
|
||||||
|
APARTMENT_VENTILATION((short) 64, Color.BLUE),
|
||||||
|
TEMPERATURE_CONTROL((short) 48, Color.BLUE),
|
||||||
|
AUDIO((short) 4, Color.CYAN),
|
||||||
|
VIDEO((short) 5, Color.MAGENTA),
|
||||||
|
JOKER((short) 8, Color.BLACK),
|
||||||
|
SINGLE_DEVICE((short) -1, Color.WHITE),
|
||||||
|
SECURITY((short) -2, Color.RED),
|
||||||
|
ACCESS((short) -3, Color.GREEN),
|
||||||
|
UNDEFINED(null, Color.UNDEFINED);
|
||||||
|
|
||||||
|
public enum Color {
|
||||||
|
YELLOW,
|
||||||
|
GREY,
|
||||||
|
BLUE,
|
||||||
|
CYAN,
|
||||||
|
MAGENTA,
|
||||||
|
BLACK,
|
||||||
|
WHITE,
|
||||||
|
RED,
|
||||||
|
GREEN,
|
||||||
|
UNDEFINED
|
||||||
|
}
|
||||||
|
|
||||||
|
private Short groupId;
|
||||||
|
|
||||||
|
static final Map<Short, ApplicationGroup> APPLICATION_GROUPS = new HashMap<>();
|
||||||
|
|
||||||
|
private Color color;
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (ApplicationGroup applications : ApplicationGroup.values()) {
|
||||||
|
APPLICATION_GROUPS.put(applications.getId(), applications);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ApplicationGroup(Short groupId, Color color) {
|
||||||
|
this.groupId = groupId;
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Short getId() {
|
||||||
|
return groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the corresponding ApplicationGroup or ApplicationGroup.UNDEFINED if
|
||||||
|
* there is no ApplicationGroup for the given groupId.
|
||||||
|
*
|
||||||
|
* @param groupId
|
||||||
|
* @return ApplicationGroup or ApplicationGroup.UNDEFINED
|
||||||
|
*/
|
||||||
|
public static ApplicationGroup getGroup(Short groupId) {
|
||||||
|
return APPLICATION_GROUPS.containsKey(groupId) ? APPLICATION_GROUPS.get(groupId) : ApplicationGroup.UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,115 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
|
||||||
*
|
|
||||||
* See the NOTICE file(s) distributed with this work for additional
|
|
||||||
* information.
|
|
||||||
*
|
|
||||||
* This program and the accompanying materials are made available under the
|
|
||||||
* terms of the Eclipse Public License 2.0 which is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-2.0
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: EPL-2.0
|
|
||||||
*/
|
|
||||||
package org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The {@link FuncNameAndColorGroupEnum} contains all digitalSTROM functional group names and links to their
|
|
||||||
* {@link FunctionalColorGroupEnum}.
|
|
||||||
*
|
|
||||||
* @author Michael Ochel - Initial contribution
|
|
||||||
* @author Matthias Siegele - Initial contribution
|
|
||||||
* @see <a href="http://developer.digitalstrom.org/Architecture/ds-basics.pdf">ds-basics.pdf
|
|
||||||
* "Table 1: digitalSTROM functional groups and their colors", page 9</a>
|
|
||||||
*/
|
|
||||||
public enum FuncNameAndColorGroupEnum {
|
|
||||||
/*
|
|
||||||
* | Number | Name | Color | Function |
|
|
||||||
* --------------------------------------------------------------------------------------
|
|
||||||
* | 1 | Lights | Yellow | Room lights |
|
|
||||||
* | 2 | Blinds | Gray | Blinds or shades outside |
|
|
||||||
* | 12 | Curtains | Gray | Curtains and blinds inside |
|
|
||||||
* | 3 | Heating | Blue | Heating |
|
|
||||||
* | 9 | Cooling | Blue | Cooling |
|
|
||||||
* | 10 | Ventilation | Blue | Ventilation |
|
|
||||||
* | 11 | Window | Blue | Window |
|
|
||||||
* | 48 | Temperature Control | Blue | Single room temperature control |
|
|
||||||
* | 4 | Audio | Cyan | Playing music or radio |
|
|
||||||
* | 5 | Video | Magenta | TV, Video |
|
|
||||||
* | 8 | Joker | Black | Configurable behaviour |
|
|
||||||
* | n/a | Single Device | White | Various, individual per device |
|
|
||||||
* | n/a | Security | Red | Security related functions, Alarms |
|
|
||||||
* | n/a | Access | Green | Access related functions, door bell |
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
LIGHTS((short) 1, FunctionalColorGroupEnum.getColorGroup((short) 1)),
|
|
||||||
BLINDS((short) 2, FunctionalColorGroupEnum.getColorGroup((short) 2)),
|
|
||||||
CURTAINS((short) 12, FunctionalColorGroupEnum.getColorGroup((short) 12)),
|
|
||||||
HEATING((short) 3, FunctionalColorGroupEnum.getColorGroup((short) 3)),
|
|
||||||
COOLING((short) 9, FunctionalColorGroupEnum.getColorGroup((short) 9)),
|
|
||||||
VENTILATION((short) 10, FunctionalColorGroupEnum.getColorGroup((short) 10)),
|
|
||||||
WINDOW((short) 11, FunctionalColorGroupEnum.getColorGroup((short) 11)),
|
|
||||||
TEMPERATION_CONTROL((short) 48, FunctionalColorGroupEnum.getColorGroup((short) 48)),
|
|
||||||
AUDIO((short) 4, FunctionalColorGroupEnum.getColorGroup((short) 4)),
|
|
||||||
VIDEO((short) 5, FunctionalColorGroupEnum.getColorGroup((short) 5)),
|
|
||||||
JOKER((short) 8, FunctionalColorGroupEnum.getColorGroup((short) 8)),
|
|
||||||
SINGLE_DEVICE((short) -1, FunctionalColorGroupEnum.getColorGroup((short) -1)),
|
|
||||||
SECURITY((short) -2, FunctionalColorGroupEnum.getColorGroup((short) -2)),
|
|
||||||
ACCESS((short) -3, FunctionalColorGroupEnum.getColorGroup((short) -3));
|
|
||||||
|
|
||||||
private final short colorGroup;
|
|
||||||
private final FunctionalColorGroupEnum color;
|
|
||||||
|
|
||||||
static final Map<Short, FuncNameAndColorGroupEnum> COLOR_GROUPS = new HashMap<>();
|
|
||||||
|
|
||||||
static {
|
|
||||||
for (FuncNameAndColorGroupEnum colorGroup : FuncNameAndColorGroupEnum.values()) {
|
|
||||||
COLOR_GROUPS.put(colorGroup.getFunctionalColorGroup(), colorGroup);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true, if contains the given output mode id in DigitalSTROM, otherwise false.
|
|
||||||
*
|
|
||||||
* @param functionalNameGroupID to be checked
|
|
||||||
* @return true, if contains
|
|
||||||
*/
|
|
||||||
public static boolean containsColorGroup(Short functionalNameGroupID) {
|
|
||||||
return COLOR_GROUPS.keySet().contains(functionalNameGroupID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the {@link FuncNameAndColorGroupEnum} of the given functional name group id.
|
|
||||||
*
|
|
||||||
* @param functionalNameGroupID of the {@link FuncNameAndColorGroupEnum}
|
|
||||||
* @return FunctionalNameAndColorGroupEnum
|
|
||||||
*/
|
|
||||||
public static FuncNameAndColorGroupEnum getMode(Short functionalNameGroupID) {
|
|
||||||
return COLOR_GROUPS.get(functionalNameGroupID);
|
|
||||||
}
|
|
||||||
|
|
||||||
private FuncNameAndColorGroupEnum(short functionalColorGroupID, FunctionalColorGroupEnum functionalColorGroup) {
|
|
||||||
this.colorGroup = functionalColorGroupID;
|
|
||||||
this.color = functionalColorGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the functional name group id form this Object.
|
|
||||||
*
|
|
||||||
* @return functional name group id
|
|
||||||
*/
|
|
||||||
public Short getFunctionalColorGroup() {
|
|
||||||
return colorGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the {@link FunctionalColorGroupEnum} form this Object.
|
|
||||||
*
|
|
||||||
* @return FunctionalColorGroupEnum
|
|
||||||
*/
|
|
||||||
public FunctionalColorGroupEnum getFunctionalColor() {
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,102 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
|
||||||
*
|
|
||||||
* See the NOTICE file(s) distributed with this work for additional
|
|
||||||
* information.
|
|
||||||
*
|
|
||||||
* This program and the accompanying materials are made available under the
|
|
||||||
* terms of the Eclipse Public License 2.0 which is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-2.0
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: EPL-2.0
|
|
||||||
*/
|
|
||||||
package org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The {@link FunctionalColorGroupEnum} contains all digitalSTROM functional color groups.
|
|
||||||
*
|
|
||||||
* @author Michael Ochel - Initial contribution
|
|
||||||
* @author Matthias Siegele - Initial contribution
|
|
||||||
* @see <a href="http://developer.digitalstrom.org/Architecture/ds-basics.pdf">ds-basics.pdf,
|
|
||||||
* "Table 1: digitalSTROM functional groups and their colors", page 9 [04.09.2015]</a>
|
|
||||||
*/
|
|
||||||
public enum FunctionalColorGroupEnum {
|
|
||||||
/*
|
|
||||||
* | Number | Name | Color | Function |
|
|
||||||
* --------------------------------------------------------------------------------------
|
|
||||||
* | 1 | Lights | Yellow | Room lights |
|
|
||||||
* | 2 | Blinds | Gray | Blinds or shades outside |
|
|
||||||
* | 12 | Curtains | Gray | Curtains and blinds inside |
|
|
||||||
* | 3 | Heating | Blue | Heating |
|
|
||||||
* | 9 | Cooling | Blue | Cooling |
|
|
||||||
* | 10 | Ventilation | Blue | Ventilation |
|
|
||||||
* | 11 | Window | Blue | Window |
|
|
||||||
* | 48 | Temperature Control | Blue | Single room temperature control |
|
|
||||||
* | 4 | Audio | Cyan | Playing music or radio |
|
|
||||||
* | 5 | Video | Magenta | TV, Video |
|
|
||||||
* | 8 | Joker | Black | Configurable behaviour |
|
|
||||||
* | n/a | Single Device | White | Various, individual per device |
|
|
||||||
* | n/a | Security | Red | Security related functions, Alarms |
|
|
||||||
* | n/a | Access | Green | Access related functions, door bell |
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
YELLOW(Arrays.asList((short) 1)),
|
|
||||||
GREY(Arrays.asList((short) 2, (short) 12)),
|
|
||||||
BLUE(Arrays.asList((short) 3, (short) 9, (short) 10, (short) 11, (short) 48)),
|
|
||||||
CYAN(Arrays.asList((short) 4)),
|
|
||||||
MAGENTA(Arrays.asList((short) 5)),
|
|
||||||
BLACK(Arrays.asList((short) 8)),
|
|
||||||
WHITE(Arrays.asList((short) -1)),
|
|
||||||
RED(Arrays.asList((short) -2)),
|
|
||||||
GREEN(Arrays.asList((short) -3));
|
|
||||||
|
|
||||||
private final List<Short> colorGroup;
|
|
||||||
|
|
||||||
static final Map<Short, FunctionalColorGroupEnum> COLOR_GROUPS = new HashMap<>();
|
|
||||||
|
|
||||||
static {
|
|
||||||
for (FunctionalColorGroupEnum colorGroup : FunctionalColorGroupEnum.values()) {
|
|
||||||
for (Short colorGroupID : colorGroup.getFunctionalColorGroup()) {
|
|
||||||
COLOR_GROUPS.put(colorGroupID, colorGroup);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true, if contains the given functional color group id in digitalSTROM exits, otherwise false.
|
|
||||||
*
|
|
||||||
* @param functionalColorGroupID to be checked
|
|
||||||
* @return true, if contains
|
|
||||||
*/
|
|
||||||
public static boolean containsColorGroup(Short functionalColorGroupID) {
|
|
||||||
return COLOR_GROUPS.keySet().contains(functionalColorGroupID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the {@link FunctionalColorGroupEnum} of the given color id.
|
|
||||||
*
|
|
||||||
* @param functionalColorGroupID of the {@link FunctionalColorGroupEnum}
|
|
||||||
* @return {@link FunctionalColorGroupEnum} of the id
|
|
||||||
*/
|
|
||||||
public static FunctionalColorGroupEnum getColorGroup(Short functionalColorGroupID) {
|
|
||||||
return COLOR_GROUPS.get(functionalColorGroupID);
|
|
||||||
}
|
|
||||||
|
|
||||||
private FunctionalColorGroupEnum(List<Short> functionalColorGroupID) {
|
|
||||||
this.colorGroup = functionalColorGroupID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the functional color group id's as {@link List} of this {@link FunctionalColorGroupEnum}.
|
|
||||||
*
|
|
||||||
* @return functional color group id's
|
|
||||||
*/
|
|
||||||
public List<Short> getFunctionalColorGroup() {
|
|
||||||
return colorGroup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,145 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@link OutputChannelEnum} lists all available digitalSTROM-device output
|
||||||
|
* channels:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
| ID | Description | Channel Name | Min | Max | Unit |
|
||||||
|
| --- | ------------------------------------- | -------------------------------------------------------------------- | --- | ----- | -------------------- |
|
||||||
|
| 1 | Light Brightness | brightness | 0 | 100 | percent |
|
||||||
|
| 2 | Colored Light Hue | hue | 0 | 360 | degrees |
|
||||||
|
| 3 | Colored Light Saturation | saturation | 0 | 100 | percent |
|
||||||
|
| 4 | Color Temperature | colortemp | 100 | 1000 | mired |
|
||||||
|
| 5 | Light CIE Color Model x | x | 0 | 10000 | scaled to 0.0 to 1.0 |
|
||||||
|
| 6 | Light CIE Color Model y | y | 0 | 10000 | scaled to 0.0 to 1.0 |
|
||||||
|
| 7 | Shade Position Outside (blinds) | shadePositionOutside | 0 | 100 | percent |
|
||||||
|
| 8 | Shade Position Outside (curtains) | shadePositionIndoor | 0 | 100 | percent |
|
||||||
|
| 9 | Shade Opening Angle Outside (blinds) | shadeOpeningAngleOutside | 0 | 100 | percent |
|
||||||
|
| 10 | Shade Opening Angle Indoor (curtains) | shadeOpeningAngleIndoor | 0 | 100 | percent |
|
||||||
|
| 11 | Transparency (e.g. smart glass) | transparency | 0 | 100 | percent |
|
||||||
|
| 12 | Air Flow Intensity | airFlowIntensity | 0 | 100 | percent |
|
||||||
|
| 13 | Air Flow Direction | airFlowDirection - 0=both(undefined), 1=supply, (in),2=exhaust (out) | 0 | 2 | specific |
|
||||||
|
| 14 | Flap Opening Angle | airFlapPosition | 0 | 100 | percent |
|
||||||
|
| 15 | Ventilation Louver Position | airLouverPosition | 0 | 100 | percent |
|
||||||
|
| 16 | Heating Power | heatingPower | 0 | 100 | percent |
|
||||||
|
| 17 | Cooling Capacity | coolingCapacity | 0 | 100 | percent |
|
||||||
|
| 18 | Audio Volume (loudness) | audioVolume | 0 | 100 | percent |
|
||||||
|
| 19 | Power State | powerState - 0=powerOff, 1=powerOn, 2=forcedOff, 3=standby | 0 | 2 | specific |
|
||||||
|
| 20 | Ventilation swing mode | airLouverAuto - 0=not active, 1=active | 0 | 1 | specific |
|
||||||
|
| 21 | Ventilation auto intensity | airFlowAuto - 0=not active, 1=active | 0 | 1 | specific |
|
||||||
|
| 22 | Water Temperature | waterTemperature | 0 | 150 | celsius |
|
||||||
|
| 23 | Water Flow Rate | waterFlow | 0 | 100 | percent |
|
||||||
|
| 24 | Power Level | powerLevel | 0 | 100 | percent |
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author Rouven Schürch - Initial contribution
|
||||||
|
* @see <a href="http://developer.digitalstrom.org/Architecture/ds-basics.pdf">ds-basics.pdf</a> (Version 1.4/1.6),
|
||||||
|
* chapter
|
||||||
|
* 9.1 (Output Channel Types), Table 6: Output channel types
|
||||||
|
*/
|
||||||
|
public enum OutputChannelEnum {
|
||||||
|
|
||||||
|
BRIGHTNESS(1, "brightness"),
|
||||||
|
HUE(2, "hue"),
|
||||||
|
SATURATION(3, "saturation"),
|
||||||
|
COLORTEMP(4, "colortemp"),
|
||||||
|
X(5, "x"),
|
||||||
|
Y(6, "y"),
|
||||||
|
SHADE_POSITION_OUTSIDE(7, "shadePositionOutside"),
|
||||||
|
SHADE_POSITION_INDOOR(8, "shadePositionIndoor"),
|
||||||
|
SHADE_OPENING_ANGLE_OUTSIDE(9, "shadeOpeningAngleOutside"),
|
||||||
|
SHADE_OPENING_ANGLE_INDOOR(10, "shadeOpeningAngleIndoor"),
|
||||||
|
TRANSPARENCY(11, "transparency"),
|
||||||
|
AIR_FLOW_INTENSITY(12, "airFlowIntensity"),
|
||||||
|
AIR_FLOW_DIRECTION(13, "airFlowDirection"),
|
||||||
|
AIR_FLAP_POSITION(14, "airFlapPosition"),
|
||||||
|
AIR_LOUVER_POSITION(15, "airLouverPosition"),
|
||||||
|
HEATING_POWER(16, "heatingPower"),
|
||||||
|
COOLING_CAPACITY(17, "coolingCapacity"),
|
||||||
|
AUDIO_VOLUME(18, "audioVolume"),
|
||||||
|
POWER_STATE(19, "powerState"),
|
||||||
|
AIR_LOUVER_AUTO(20, "airLouverAuto"),
|
||||||
|
AIR_FLOW_AUTO(21, "airFlowAuto"),
|
||||||
|
WATER_TEMPERATURE(22, "waterTemperature"),
|
||||||
|
WATER_FLOW(23, "waterFlow"),
|
||||||
|
POWER_LEVEL(24, "powerLevel");
|
||||||
|
|
||||||
|
private final int channelId;
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
static final Map<Integer, OutputChannelEnum> OUTPUT_CHANNELS = new HashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (OutputChannelEnum channels : OutputChannelEnum.values()) {
|
||||||
|
OUTPUT_CHANNELS.put(channels.getChannelId(), channels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true, if the output channel id is contained in digitalSTROM,
|
||||||
|
* otherwise false.
|
||||||
|
*
|
||||||
|
* @param channelID to be checked
|
||||||
|
* @return true, if contains, otherwise false
|
||||||
|
*/
|
||||||
|
public static boolean containsChannel(Integer channelID) {
|
||||||
|
return OUTPUT_CHANNELS.keySet().contains(channelID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link OutputChannelEnum} for the given channelID, otherwise
|
||||||
|
* null.
|
||||||
|
*
|
||||||
|
* @param channelID of the {@link OutputChannelEnum}
|
||||||
|
* @return OutputChannelEnum or null
|
||||||
|
*/
|
||||||
|
public static OutputChannelEnum getChannel(Integer channelID) {
|
||||||
|
return OUTPUT_CHANNELS.get(channelID);
|
||||||
|
}
|
||||||
|
|
||||||
|
private OutputChannelEnum(int channelId, String name) {
|
||||||
|
this.channelId = channelId;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the id of this {@link OutputChannelEnum} object.
|
||||||
|
*
|
||||||
|
* @return mode id
|
||||||
|
*/
|
||||||
|
public int getChannelId() {
|
||||||
|
return channelId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the name of this {@link OutputChannelEnum} object.
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isShadeChannel(OutputChannelEnum outputChannelEnum) {
|
||||||
|
return outputChannelEnum == OutputChannelEnum.SHADE_OPENING_ANGLE_INDOOR
|
||||||
|
|| outputChannelEnum == OutputChannelEnum.SHADE_OPENING_ANGLE_OUTSIDE
|
||||||
|
|| outputChannelEnum == OutputChannelEnum.SHADE_POSITION_INDOOR
|
||||||
|
|| outputChannelEnum == OutputChannelEnum.SHADE_POSITION_OUTSIDE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -33,10 +33,10 @@ import org.openhab.binding.digitalstrom.internal.lib.structure.devices.Device;
|
|||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceConstants;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceConstants;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceSceneSpec;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceSceneSpec;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceStateUpdate;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceStateUpdate;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ApplicationGroup;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ChangeableDeviceConfigEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ChangeableDeviceConfigEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.DeviceBinarayInputEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.DeviceBinarayInputEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.FuncNameAndColorGroupEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputChannelEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.FunctionalColorGroupEnum;
|
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.SensorEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.SensorEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.DSID;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.DSID;
|
||||||
@ -46,6 +46,7 @@ import org.openhab.binding.digitalstrom.internal.lib.structure.devices.devicepar
|
|||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.JSONDeviceSceneSpecImpl;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.impl.JSONDeviceSceneSpecImpl;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.InternalScene;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.InternalScene;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.SceneEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.SceneEnum;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.util.DSJsonParser;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -67,10 +68,8 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
|
|
||||||
private DSID meterDSID;
|
private DSID meterDSID;
|
||||||
private int zoneId = 0;
|
private int zoneId = 0;
|
||||||
private List<Short> groupList = new LinkedList<>();
|
private List<ApplicationGroup> groupList = new LinkedList<>();
|
||||||
|
|
||||||
private FunctionalColorGroupEnum functionalGroup;
|
|
||||||
private FuncNameAndColorGroupEnum functionalName;
|
|
||||||
private String hwInfo;
|
private String hwInfo;
|
||||||
|
|
||||||
private OutputModeEnum outputMode;
|
private OutputModeEnum outputMode;
|
||||||
@ -93,6 +92,7 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
private final List<DeviceBinaryInput> deviceBinaryInputs = Collections.synchronizedList(new ArrayList<>());
|
private final List<DeviceBinaryInput> deviceBinaryInputs = Collections.synchronizedList(new ArrayList<>());
|
||||||
private final List<SensorEnum> devicePowerSensorTypes = new ArrayList<>();
|
private final List<SensorEnum> devicePowerSensorTypes = new ArrayList<>();
|
||||||
private final List<SensorEnum> deviceClimateSensorTypes = new ArrayList<>();
|
private final List<SensorEnum> deviceClimateSensorTypes = new ArrayList<>();
|
||||||
|
private final List<OutputChannelEnum> outputChannels = Collections.synchronizedList(new ArrayList<>());
|
||||||
|
|
||||||
// for scenes
|
// for scenes
|
||||||
private short activeSceneNumber = -1;
|
private short activeSceneNumber = -1;
|
||||||
@ -109,11 +109,11 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
private final List<DeviceStateUpdate> deviceStateUpdates = Collections.synchronizedList(new LinkedList<>());
|
private final List<DeviceStateUpdate> deviceStateUpdates = Collections.synchronizedList(new LinkedList<>());
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Saves the refresh priorities and reading initialized flag of power sensors as an matrix.
|
* Saves the refresh priorities and reading initialized flag of power sensors as
|
||||||
* The first array fields are 0 = active power, 1 = output current, 2 = electric meter, 3 = power consumption and in
|
* an matrix. The first array fields are 0 = active power, 1 = output current, 2
|
||||||
* each field is a
|
* = electric meter, 3 = power consumption and in each field is a string array
|
||||||
* string array with the fields 0 = refresh priority 1 = reading initial flag (true = reading is initialized,
|
* with the fields 0 = refresh priority 1 = reading initial flag (true = reading
|
||||||
* otherwise false)
|
* is initialized, otherwise false)
|
||||||
*/
|
*/
|
||||||
private final Object[] powerSensorRefresh = new Object[] { new String[] { Config.REFRESH_PRIORITY_NEVER, "false" },
|
private final Object[] powerSensorRefresh = new Object[] { new String[] { Config.REFRESH_PRIORITY_NEVER, "false" },
|
||||||
new String[] { Config.REFRESH_PRIORITY_NEVER, "false" },
|
new String[] { Config.REFRESH_PRIORITY_NEVER, "false" },
|
||||||
@ -128,9 +128,10 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
public static final int REFRESH_ELECTRIC_METER_ARRAY_FIELD = 2;
|
public static final int REFRESH_ELECTRIC_METER_ARRAY_FIELD = 2;
|
||||||
public static final int REFRESH_POWER_CONSUMPTION_ARRAY_FIELD = 3;
|
public static final int REFRESH_POWER_CONSUMPTION_ARRAY_FIELD = 3;
|
||||||
/*
|
/*
|
||||||
* Cache the last power sensor value to get power sensor value directly
|
* Cache the last power sensor value to get power sensor value directly the key
|
||||||
* the key is the output value and the value is an Integer array for the sensor values (0 = active power, 1 =
|
* is the output value and the value is an Integer array for the sensor values
|
||||||
* output current, 2 = power consumption, 3 = output current high)
|
* (0 = active power, 1 = output current, 2 = power consumption, 3 = output
|
||||||
|
* current high)
|
||||||
*/
|
*/
|
||||||
private final Map<Short, Integer[]> cachedSensorPowerValues = Collections.synchronizedMap(new HashMap<>());
|
private final Map<Short, Integer[]> cachedSensorPowerValues = Collections.synchronizedMap(new HashMap<>());
|
||||||
|
|
||||||
@ -139,14 +140,18 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
public static final int POWER_CONSUMPTION_ARRAY_FIELD = 2;
|
public static final int POWER_CONSUMPTION_ARRAY_FIELD = 2;
|
||||||
public static final int OUTPUT_CURRENT_HIGH_ARRAY_FIELD = 3;
|
public static final int OUTPUT_CURRENT_HIGH_ARRAY_FIELD = 3;
|
||||||
|
|
||||||
// Preparing for the advance device property setting "Turn 'switched' output off if value below:", but the
|
// Preparing for the advance device property setting "Turn 'switched' output off
|
||||||
// configuration currently not work in digitalSTROM, because of that the value is fix 1.
|
// if value below:", but the
|
||||||
|
// configuration currently not work in digitalSTROM, because of that the value
|
||||||
|
// is fix 1.
|
||||||
private final int switchPercentOff = 1;
|
private final int switchPercentOff = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link DeviceImpl} from the given DigitalSTROM-Device {@link JsonObject}.
|
* Creates a new {@link DeviceImpl} from the given DigitalSTROM-Device
|
||||||
|
* {@link JsonObject}.
|
||||||
*
|
*
|
||||||
* @param deviceJsonObject json response of the digitalSTROM-Server, must not be null
|
* @param deviceJsonObject json response of the digitalSTROM-Server, must not be
|
||||||
|
* null
|
||||||
*/
|
*/
|
||||||
public DeviceImpl(JsonObject deviceJsonObject) {
|
public DeviceImpl(JsonObject deviceJsonObject) {
|
||||||
super(deviceJsonObject);
|
super(deviceJsonObject);
|
||||||
@ -178,13 +183,14 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
JsonArray array = deviceJsonObject.get(JSONApiResponseKeysEnum.GROUPS.getKey()).getAsJsonArray();
|
JsonArray array = deviceJsonObject.get(JSONApiResponseKeysEnum.GROUPS.getKey()).getAsJsonArray();
|
||||||
for (int i = 0; i < array.size(); i++) {
|
for (int i = 0; i < array.size(); i++) {
|
||||||
if (array.get(i) != null) {
|
if (array.get(i) != null) {
|
||||||
initAddGroup(array.get(i).getAsShort());
|
addGroupToList(array.get(i).getAsShort());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (groups != null && groups.isJsonObject()) {
|
} else if (groups != null && groups.isJsonObject()) {
|
||||||
for (Entry<String, JsonElement> entry : deviceJsonObject.get(JSONApiResponseKeysEnum.GROUPS.getKey())
|
for (Entry<String, JsonElement> entry : deviceJsonObject.get(JSONApiResponseKeysEnum.GROUPS.getKey())
|
||||||
.getAsJsonObject().entrySet()) {
|
.getAsJsonObject().entrySet()) {
|
||||||
initAddGroup(entry.getValue().getAsJsonObject().get(JSONApiResponseKeysEnum.ID.getKey()).getAsShort());
|
addGroupToList(
|
||||||
|
entry.getValue().getAsJsonObject().get(JSONApiResponseKeysEnum.ID.getKey()).getAsShort());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (deviceJsonObject.get(JSONApiResponseKeysEnum.OUTPUT_MODE.getKey()) != null) {
|
if (deviceJsonObject.get(JSONApiResponseKeysEnum.OUTPUT_MODE.getKey()) != null) {
|
||||||
@ -220,24 +226,14 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
outputChannels.addAll(DSJsonParser.getOutputChannels(deviceJsonObject));
|
||||||
|
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAddGroup(Short groupID) {
|
|
||||||
if (groupID != -1) {
|
|
||||||
this.groupList.add(groupID);
|
|
||||||
if (FuncNameAndColorGroupEnum.containsColorGroup(groupID)) {
|
|
||||||
if (this.functionalName == null
|
|
||||||
|| !FuncNameAndColorGroupEnum.getMode(groupID).equals(FuncNameAndColorGroupEnum.JOKER)) {
|
|
||||||
this.functionalName = FuncNameAndColorGroupEnum.getMode(groupID);
|
|
||||||
this.functionalGroup = functionalName.getFunctionalColor();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
if (groupList.contains((short) 1)) {
|
if (groupList.contains(ApplicationGroup.LIGHTS)) {
|
||||||
maxOutputValue = DeviceConstants.MAX_OUTPUT_VALUE_LIGHT;
|
maxOutputValue = DeviceConstants.MAX_OUTPUT_VALUE_LIGHT;
|
||||||
if (this.isDimmable()) {
|
if (this.isDimmable()) {
|
||||||
minOutputValue = DeviceConstants.MIN_DIM_VALUE;
|
minOutputValue = DeviceConstants.MIN_DIM_VALUE;
|
||||||
@ -269,21 +265,41 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Short> getGroups() {
|
public List<Short> getGroups() {
|
||||||
return new LinkedList<>(groupList);
|
LinkedList<Short> linkedList = new LinkedList<>();
|
||||||
|
groupList.forEach(group -> linkedList.add(group.getId()));
|
||||||
|
return linkedList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the ApplicationGroup of the given groupId to the internal list
|
||||||
|
*
|
||||||
|
* @param groupID
|
||||||
|
* @return true if the groupId is a valid ApplicationGroup id, false otherwise
|
||||||
|
*/
|
||||||
|
private boolean addGroupToList(Short groupID) {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup(groupID);
|
||||||
|
if (ApplicationGroup.UNDEFINED.equals(group)) {
|
||||||
|
logger.warn("Unknown application group with ID '{}' found! Ignoring group", groupID);
|
||||||
|
} else {
|
||||||
|
if (!this.groupList.contains(group)) {
|
||||||
|
this.groupList.add(group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return group != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addGroup(Short groupID) {
|
public void addGroup(Short groupID) {
|
||||||
if (!this.groupList.contains(groupID)) {
|
addGroupToList(groupID);
|
||||||
this.groupList.add(groupID);
|
|
||||||
}
|
|
||||||
informListenerAboutConfigChange(ChangeableDeviceConfigEnum.GROUPS);
|
informListenerAboutConfigChange(ChangeableDeviceConfigEnum.GROUPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setGroups(List<Short> newGroupList) {
|
public void setGroups(List<Short> newGroupList) {
|
||||||
if (newGroupList != null) {
|
if (newGroupList != null) {
|
||||||
this.groupList = newGroupList;
|
groupList.clear();
|
||||||
|
newGroupList.forEach(groupId -> groupList.add(ApplicationGroup.getGroup(groupId)));
|
||||||
}
|
}
|
||||||
informListenerAboutConfigChange(ChangeableDeviceConfigEnum.GROUPS);
|
informListenerAboutConfigChange(ChangeableDeviceConfigEnum.GROUPS);
|
||||||
}
|
}
|
||||||
@ -369,12 +385,12 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isHeatingDevice() {
|
public boolean isHeatingDevice() {
|
||||||
return functionalName.equals(FuncNameAndColorGroupEnum.HEATING);
|
return groupList.contains(ApplicationGroup.HEATING);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isTemperatureControlledDevice() {
|
public boolean isTemperatureControlledDevice() {
|
||||||
return functionalName.equals(FuncNameAndColorGroupEnum.TEMPERATION_CONTROL);
|
return groupList.contains(ApplicationGroup.TEMPERATURE_CONTROL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -384,17 +400,19 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isBlind() {
|
public boolean isBlind() {
|
||||||
return outputMode.equals(OutputModeEnum.POSITION_CON_US);
|
return (outputMode == OutputModeEnum.POSITION_CON || outputMode == OutputModeEnum.POSITION_CON_US)
|
||||||
|
&& (outputChannels.contains(OutputChannelEnum.SHADE_OPENING_ANGLE_INDOOR)
|
||||||
|
|| outputChannels.contains(OutputChannelEnum.SHADE_OPENING_ANGLE_OUTSIDE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized FunctionalColorGroupEnum getFunctionalColorGroup() {
|
public synchronized ApplicationGroup getFunctionalColorGroup() {
|
||||||
return this.functionalGroup;
|
return groupList.stream().findFirst().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void setFunctionalColorGroup(FunctionalColorGroupEnum fuctionalColorGroup) {
|
public synchronized void setFunctionalColorGroup(ApplicationGroup functionalColorGroup) {
|
||||||
this.functionalGroup = fuctionalColorGroup;
|
groupList.add(functionalColorGroup);
|
||||||
informListenerAboutConfigChange(ChangeableDeviceConfigEnum.FUNCTIONAL_GROUP);
|
informListenerAboutConfigChange(ChangeableDeviceConfigEnum.FUNCTIONAL_GROUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -403,6 +421,11 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
return outputMode;
|
return outputMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<OutputChannelEnum> getOutputChannels() {
|
||||||
|
return outputChannels;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void setOutputMode(OutputModeEnum newOutputMode) {
|
public synchronized void setOutputMode(OutputModeEnum newOutputMode) {
|
||||||
this.outputMode = newOutputMode;
|
this.outputMode = newOutputMode;
|
||||||
@ -1423,7 +1446,8 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks output current sensor to return automatically high output current sensor, if the sensor exists.
|
* Checks output current sensor to return automatically high output current
|
||||||
|
* sensor, if the sensor exists.
|
||||||
*
|
*
|
||||||
* @param devSenVal
|
* @param devSenVal
|
||||||
* @return output current high DeviceSensorValue or the given DeviceSensorValue
|
* @return output current high DeviceSensorValue or the given DeviceSensorValue
|
||||||
@ -1655,7 +1679,8 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* if an {@link DeviceStatusListener} is registered inform him about the new state otherwise do nothing.
|
* if an {@link DeviceStatusListener} is registered inform him about the new
|
||||||
|
* state otherwise do nothing.
|
||||||
*
|
*
|
||||||
* @param deviceStateUpdate
|
* @param deviceStateUpdate
|
||||||
*/
|
*/
|
||||||
@ -1868,9 +1893,8 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "DeviceImpl [meterDSID=" + meterDSID + ", zoneId=" + zoneId + ", groupList=" + groupList
|
return "DeviceImpl [meterDSID=" + meterDSID + ", zoneId=" + zoneId + ", groupList=" + groupList + ", hwInfo="
|
||||||
+ ", functionalGroup=" + functionalGroup + ", functionalName=" + functionalName + ", hwInfo=" + hwInfo
|
+ hwInfo + ", getName()=" + getName() + ", getDSID()=" + getDSID() + ", getDSUID()=" + getDSUID()
|
||||||
+ ", getName()=" + getName() + ", getDSID()=" + getDSID() + ", getDSUID()=" + getDSUID()
|
|
||||||
+ ", isPresent()=" + isPresent() + ", isValide()=" + isValid() + ", getDisplayID()=" + getDisplayID()
|
+ ", isPresent()=" + isPresent() + ", isValide()=" + isValid() + ", getDisplayID()=" + getDisplayID()
|
||||||
+ ", outputMode=" + outputMode + ", getSensorTypes()=" + getSensorTypes() + ", getDeviceSensorValues()="
|
+ ", outputMode=" + outputMode + ", getSensorTypes()=" + getSensorTypes() + ", getDeviceSensorValues()="
|
||||||
+ getDeviceSensorValues() + ", powerSensorRefresh=" + powerSensorRefreshToString() + "]";
|
+ getDeviceSensorValues() + ", powerSensorRefresh=" + powerSensorRefreshToString() + "]";
|
||||||
|
|||||||
@ -26,7 +26,7 @@ import org.openhab.binding.digitalstrom.internal.lib.manager.SceneManager;
|
|||||||
import org.openhab.binding.digitalstrom.internal.lib.manager.StructureManager;
|
import org.openhab.binding.digitalstrom.internal.lib.manager.StructureManager;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.serverconnection.constants.JSONApiResponseKeysEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.serverconnection.constants.JSONApiResponseKeysEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.JSONResponseHandler;
|
import org.openhab.binding.digitalstrom.internal.lib.serverconnection.impl.JSONResponseHandler;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.FunctionalColorGroupEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ApplicationGroup;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.ApartmentSceneEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.ApartmentSceneEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.SceneEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.SceneEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.ZoneSceneEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.scene.constants.ZoneSceneEnum;
|
||||||
@ -263,8 +263,9 @@ public class SceneDiscovery {
|
|||||||
groupIdInter = null;
|
groupIdInter = null;
|
||||||
}
|
}
|
||||||
if (groupID != null) {
|
if (groupID != null) {
|
||||||
if (FunctionalColorGroupEnum.getColorGroup(groupID)
|
|
||||||
.equals(FunctionalColorGroupEnum.YELLOW)) {
|
if (ApplicationGroup.Color.YELLOW
|
||||||
|
.equals(ApplicationGroup.getGroup(groupID).getColor())) {
|
||||||
discoverScene(SceneEnum.AUTO_OFF.getSceneNumber(), groupID);
|
discoverScene(SceneEnum.AUTO_OFF.getSceneNumber(), groupID);
|
||||||
}
|
}
|
||||||
String response = connectionManager.getHttpTransport()
|
String response = connectionManager.getHttpTransport()
|
||||||
|
|||||||
@ -0,0 +1,61 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.digitalstrom.internal.lib.util;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.serverconnection.constants.JSONApiResponseKeysEnum;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputChannelEnum;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.impl.DeviceImpl;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* digitalSTROM JSON Parser class. Externalizes code from {@link DeviceImpl}
|
||||||
|
*
|
||||||
|
* @author Rouven Schürch - Initial contribution
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@NonNullByDefault
|
||||||
|
public final class DSJsonParser {
|
||||||
|
|
||||||
|
private DSJsonParser() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<OutputChannelEnum> getOutputChannels(JsonObject jsonObject) {
|
||||||
|
List<OutputChannelEnum> outputChannels = new ArrayList<>();
|
||||||
|
JsonElement jsonOutputChannels = jsonObject.get(JSONApiResponseKeysEnum.OUTPUT_CHANNELS.getKey());
|
||||||
|
if (jsonOutputChannels != null && jsonOutputChannels.isJsonArray()) {
|
||||||
|
JsonArray array = jsonObject.get(JSONApiResponseKeysEnum.OUTPUT_CHANNELS.getKey()).getAsJsonArray();
|
||||||
|
for (int i = 0; i < array.size(); i++) {
|
||||||
|
if (array.get(i) != null) {
|
||||||
|
int channelId = array.get(i).getAsJsonObject().get("channelID").getAsInt();
|
||||||
|
outputChannels.add(OutputChannelEnum.getChannel(channelId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (jsonOutputChannels != null && jsonOutputChannels.isJsonObject()) {
|
||||||
|
for (Entry<String, JsonElement> entry : jsonObject.get(JSONApiResponseKeysEnum.OUTPUT_CHANNELS.getKey())
|
||||||
|
.getAsJsonObject().entrySet()) {
|
||||||
|
int channelId = entry.getValue().getAsJsonObject().get("channelID").getAsInt();
|
||||||
|
outputChannels.add(OutputChannelEnum.getChannel(channelId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return outputChannels;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -25,10 +25,11 @@ import java.util.Locale;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.openhab.binding.digitalstrom.internal.DigitalSTROMBindingConstants;
|
import org.openhab.binding.digitalstrom.internal.DigitalSTROMBindingConstants;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ApplicationGroup;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.DeviceBinarayInputEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.DeviceBinarayInputEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.FunctionalColorGroupEnum;
|
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.MeteringTypeEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.MeteringTypeEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.MeteringUnitsEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.MeteringUnitsEnum;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputChannelEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
|
||||||
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.SensorEnum;
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.SensorEnum;
|
||||||
import org.openhab.core.i18n.TranslationProvider;
|
import org.openhab.core.i18n.TranslationProvider;
|
||||||
@ -47,8 +48,8 @@ import org.osgi.service.component.annotations.Deactivate;
|
|||||||
import org.osgi.service.component.annotations.Reference;
|
import org.osgi.service.component.annotations.Reference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link DsChannelTypeProvider} implements the {@link ChannelTypeProvider} generates all supported
|
* The {@link DsChannelTypeProvider} implements the {@link ChannelTypeProvider}
|
||||||
* {@link Channel}'s for digitalSTROM.
|
* generates all supported {@link Channel}'s for digitalSTROM.
|
||||||
*
|
*
|
||||||
* @author Michael Ochel - Initial contribution
|
* @author Michael Ochel - Initial contribution
|
||||||
* @author Matthias Siegele - Initial contribution
|
* @author Matthias Siegele - Initial contribution
|
||||||
@ -57,7 +58,8 @@ import org.osgi.service.component.annotations.Reference;
|
|||||||
@Component(service = ChannelTypeProvider.class)
|
@Component(service = ChannelTypeProvider.class)
|
||||||
public class DsChannelTypeProvider extends BaseDsI18n implements ChannelTypeProvider {
|
public class DsChannelTypeProvider extends BaseDsI18n implements ChannelTypeProvider {
|
||||||
|
|
||||||
// channelID building (effect group type + (nothing || SEPERATOR + item type || SEPERATOR + extended item type) e.g.
|
// channelID building (effect group type + (nothing || SEPERATOR + item type ||
|
||||||
|
// SEPERATOR + extended item type) e.g.
|
||||||
// light_switch, shade or shade_angle
|
// light_switch, shade or shade_angle
|
||||||
// channel effect group type
|
// channel effect group type
|
||||||
public static final String LIGHT = "light"; // and tag
|
public static final String LIGHT = "light"; // and tag
|
||||||
@ -112,34 +114,40 @@ public class DsChannelTypeProvider extends BaseDsI18n implements ChannelTypeProv
|
|||||||
public static final String CATEGORY_MOTION = "Motion";
|
public static final String CATEGORY_MOTION = "Motion";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the output channel type id as {@link String} for the given {@link FunctionalColorGroupEnum} and
|
* Returns the output channel type id as {@link String} for the given
|
||||||
* {@link OutputModeEnum} or null, if no channel type exists for the given {@link FunctionalColorGroupEnum} and
|
* {@link ApplicationGroup.Color} and {@link OutputModeEnum} or null, if no
|
||||||
|
* channel type exists for the given {@link ApplicationGroup.Color} and
|
||||||
* {@link OutputModeEnum}.
|
* {@link OutputModeEnum}.
|
||||||
*
|
*
|
||||||
* @param functionalGroup of the {@link Device}
|
* @param functionalGroup of the {@link Device}
|
||||||
* @param outputMode of the {@link Device}
|
* @param outputMode of the {@link Device}
|
||||||
* @return the output channel type id or null
|
* @return the output channel type id or null
|
||||||
*/
|
*/
|
||||||
public static String getOutputChannelTypeID(FunctionalColorGroupEnum functionalGroup, OutputModeEnum outputMode) {
|
public static String getOutputChannelTypeID(ApplicationGroup.Color functionalGroup, OutputModeEnum outputMode,
|
||||||
|
List<OutputChannelEnum> outputChannels) {
|
||||||
if (functionalGroup != null && outputMode != null) {
|
if (functionalGroup != null && outputMode != null) {
|
||||||
String channelPreID = GENERAL;
|
String channelPreID = GENERAL;
|
||||||
if (functionalGroup.equals(FunctionalColorGroupEnum.YELLOW)) {
|
|
||||||
|
switch (functionalGroup) {
|
||||||
|
case YELLOW:
|
||||||
channelPreID = LIGHT;
|
channelPreID = LIGHT;
|
||||||
}
|
break;
|
||||||
if (functionalGroup.equals(FunctionalColorGroupEnum.GREY)) {
|
case GREY:
|
||||||
if (outputMode.equals(OutputModeEnum.POSITION_CON)) {
|
if (outputChannels != null && (outputChannels.contains(OutputChannelEnum.SHADE_OPENING_ANGLE_INDOOR)
|
||||||
|
|| outputChannels.contains(OutputChannelEnum.SHADE_OPENING_ANGLE_OUTSIDE))) {
|
||||||
|
return buildIdentifier(SHADE, ANGLE);
|
||||||
|
} else {
|
||||||
return buildIdentifier(SHADE);
|
return buildIdentifier(SHADE);
|
||||||
}
|
}
|
||||||
if (outputMode.equals(OutputModeEnum.POSITION_CON_US)) {
|
case BLUE:
|
||||||
return buildIdentifier(SHADE, ANGLE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (functionalGroup.equals(FunctionalColorGroupEnum.BLUE)) {
|
|
||||||
channelPreID = HEATING;
|
channelPreID = HEATING;
|
||||||
if (OutputModeEnum.outputModeIsTemperationControlled(outputMode)) {
|
if (OutputModeEnum.outputModeIsTemperationControlled(outputMode)) {
|
||||||
return buildIdentifier(channelPreID, TEMPERATURE_CONTROLLED);
|
return buildIdentifier(channelPreID, TEMPERATURE_CONTROLLED);
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OutputModeEnum.outputModeIsSwitch(outputMode)) {
|
if (OutputModeEnum.outputModeIsSwitch(outputMode)) {
|
||||||
return buildIdentifier(channelPreID, SWITCH);
|
return buildIdentifier(channelPreID, SWITCH);
|
||||||
}
|
}
|
||||||
@ -324,7 +332,8 @@ public class DsChannelTypeProvider extends BaseDsI18n implements ChannelTypeProv
|
|||||||
}
|
}
|
||||||
|
|
||||||
private StateDescriptionFragment getSensorStateDescription(SensorEnum sensorType) {
|
private StateDescriptionFragment getSensorStateDescription(SensorEnum sensorType) {
|
||||||
// the digitalSTROM resolution for temperature in kelvin is not correct but sensor-events and cached values are
|
// the digitalSTROM resolution for temperature in kelvin is not correct but
|
||||||
|
// sensor-events and cached values are
|
||||||
// shown in °C so we will use this unit for temperature sensors
|
// shown in °C so we will use this unit for temperature sensors
|
||||||
String unitShortCut = sensorType.getUnitShortcut();
|
String unitShortCut = sensorType.getUnitShortcut();
|
||||||
if (unitShortCut.equals("%")) {
|
if (unitShortCut.equals("%")) {
|
||||||
@ -424,7 +433,8 @@ public class DsChannelTypeProvider extends BaseDsI18n implements ChannelTypeProv
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the supported item type for the given channel type id or null, if the channel type does not exist.
|
* Returns the supported item type for the given channel type id or null, if the
|
||||||
|
* channel type does not exist.
|
||||||
*
|
*
|
||||||
* @param channelTypeID of the channel
|
* @param channelTypeID of the channel
|
||||||
* @return item type or null
|
* @return item type or null
|
||||||
@ -542,7 +552,8 @@ public class DsChannelTypeProvider extends BaseDsI18n implements ChannelTypeProv
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link ChannelGroupTypeUID} for the given {@link DeviceBinarayInputEnum}.
|
* Returns the {@link ChannelGroupTypeUID} for the given
|
||||||
|
* {@link DeviceBinarayInputEnum}.
|
||||||
*
|
*
|
||||||
* @param binaryInputType (must not be null)
|
* @param binaryInputType (must not be null)
|
||||||
* @return the channel type uid
|
* @return the channel type uid
|
||||||
|
|||||||
@ -0,0 +1,157 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hamcrest.core.Is.is;
|
||||||
|
|
||||||
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test class for {@link ApplicationGroup}
|
||||||
|
*
|
||||||
|
* @author Rouven Schürch - Initial contribution
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
@NonNullByDefault
|
||||||
|
class ApplicationGroupTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test1LightsYellow() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 1);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.YELLOW));
|
||||||
|
assertThat(group, is(ApplicationGroup.LIGHTS));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test2BlindsGray() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 2);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.GREY));
|
||||||
|
assertThat(group, is(ApplicationGroup.BLINDS));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test3HeatingBlue() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 3);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.BLUE));
|
||||||
|
assertThat(group, is(ApplicationGroup.HEATING));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test9CoolingBlue() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 9);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.BLUE));
|
||||||
|
assertThat(group, is(ApplicationGroup.COOLING));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test10VentilationBlue() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 10);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.BLUE));
|
||||||
|
assertThat(group, is(ApplicationGroup.VENTILATION));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test11WindowBlue() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 11);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.BLUE));
|
||||||
|
assertThat(group, is(ApplicationGroup.WINDOW));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test12RecirculationBlue() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 12);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.BLUE));
|
||||||
|
assertThat(group, is(ApplicationGroup.RECIRCULATION));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test64ApartmentVentilationBlue() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 64);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.BLUE));
|
||||||
|
assertThat(group, is(ApplicationGroup.APARTMENT_VENTILATION));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test48TemperatureControlBlue() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 48);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.BLUE));
|
||||||
|
assertThat(group, is(ApplicationGroup.TEMPERATURE_CONTROL));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test4AudioCyan() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 4);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.CYAN));
|
||||||
|
assertThat(group, is(ApplicationGroup.AUDIO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test5VideoMagenta() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 5);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.MAGENTA));
|
||||||
|
assertThat(group, is(ApplicationGroup.VIDEO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test8JokerBlack() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 8);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.BLACK));
|
||||||
|
assertThat(group, is(ApplicationGroup.JOKER));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testNASingleDeviceWhite() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) -1);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.WHITE));
|
||||||
|
assertThat(group, is(ApplicationGroup.SINGLE_DEVICE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testNASecurityRed() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) -2);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.RED));
|
||||||
|
assertThat(group, is(ApplicationGroup.SECURITY));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testNAAccessGreen() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) -3);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.GREEN));
|
||||||
|
assertThat(group, is(ApplicationGroup.ACCESS));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testUndefinedGroup100() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup((short) 100);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.UNDEFINED));
|
||||||
|
assertThat(group, is(ApplicationGroup.UNDEFINED));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testUndefinedGroupNull() {
|
||||||
|
ApplicationGroup group = ApplicationGroup.getGroup(null);
|
||||||
|
assertThat(group.getColor(), is(ApplicationGroup.Color.UNDEFINED));
|
||||||
|
assertThat(group, is(ApplicationGroup.UNDEFINED));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetShortId() {
|
||||||
|
Short id = ApplicationGroup.BLINDS.getId();
|
||||||
|
assertThat(ApplicationGroup.getGroup(id).getId(), is(id));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,196 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hamcrest.core.Is.is;
|
||||||
|
|
||||||
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test class for {@link OutputChannelEnum}
|
||||||
|
*
|
||||||
|
* @author Rouven Schürch - Initial contribution
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@NonNullByDefault
|
||||||
|
class OutputChannelEnumTest {
|
||||||
|
@Test
|
||||||
|
void test1LightBrightness() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(1);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.BRIGHTNESS));
|
||||||
|
assertThat(outputChannel.getName(), is("brightness"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test2Hue() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(2);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.HUE));
|
||||||
|
assertThat(outputChannel.getName(), is("hue"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test3Saturation() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(3);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.SATURATION));
|
||||||
|
assertThat(outputChannel.getName(), is("saturation"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test4Colortemp() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(4);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.COLORTEMP));
|
||||||
|
assertThat(outputChannel.getName(), is("colortemp"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test5X() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(5);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.X));
|
||||||
|
assertThat(outputChannel.getName(), is("x"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test6Y() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(6);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.Y));
|
||||||
|
assertThat(outputChannel.getName(), is("y"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test7ShadePositionOutside() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(7);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.SHADE_POSITION_OUTSIDE));
|
||||||
|
assertThat(outputChannel.getName(), is("shadePositionOutside"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test8ShadePositionIndoor() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(8);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.SHADE_POSITION_INDOOR));
|
||||||
|
assertThat(outputChannel.getName(), is("shadePositionIndoor"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test9ShadeOpeningAngleOutside() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(9);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.SHADE_OPENING_ANGLE_OUTSIDE));
|
||||||
|
assertThat(outputChannel.getName(), is("shadeOpeningAngleOutside"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test10ShadeOpeningAngleIndoor() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(10);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.SHADE_OPENING_ANGLE_INDOOR));
|
||||||
|
assertThat(outputChannel.getName(), is("shadeOpeningAngleIndoor"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test11Transparency() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(11);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.TRANSPARENCY));
|
||||||
|
assertThat(outputChannel.getName(), is("transparency"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test12AirFlowIntensity() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(12);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.AIR_FLOW_INTENSITY));
|
||||||
|
assertThat(outputChannel.getName(), is("airFlowIntensity"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test13AirFlowDirection() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(13);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.AIR_FLOW_DIRECTION));
|
||||||
|
assertThat(outputChannel.getName(), is("airFlowDirection"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test14AirFlapPosition() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(14);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.AIR_FLAP_POSITION));
|
||||||
|
assertThat(outputChannel.getName(), is("airFlapPosition"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test15AirLouverPosition() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(15);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.AIR_LOUVER_POSITION));
|
||||||
|
assertThat(outputChannel.getName(), is("airLouverPosition"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test16HeatingPower() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(16);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.HEATING_POWER));
|
||||||
|
assertThat(outputChannel.getName(), is("heatingPower"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test17CoolingCapacity() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(17);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.COOLING_CAPACITY));
|
||||||
|
assertThat(outputChannel.getName(), is("coolingCapacity"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test18AudioVolume() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(18);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.AUDIO_VOLUME));
|
||||||
|
assertThat(outputChannel.getName(), is("audioVolume"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test19PowerState() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(19);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.POWER_STATE));
|
||||||
|
assertThat(outputChannel.getName(), is("powerState"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test20AirLouverAuto() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(20);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.AIR_LOUVER_AUTO));
|
||||||
|
assertThat(outputChannel.getName(), is("airLouverAuto"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test21AirFlowAuto() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(21);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.AIR_FLOW_AUTO));
|
||||||
|
assertThat(outputChannel.getName(), is("airFlowAuto"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test22WaterTemperature() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(22);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.WATER_TEMPERATURE));
|
||||||
|
assertThat(outputChannel.getName(), is("waterTemperature"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test23WaterFlow() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(23);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.WATER_FLOW));
|
||||||
|
assertThat(outputChannel.getName(), is("waterFlow"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test24PowerLevel() {
|
||||||
|
OutputChannelEnum outputChannel = OutputChannelEnum.getChannel(24);
|
||||||
|
assertThat(outputChannel, is(OutputChannelEnum.POWER_LEVEL));
|
||||||
|
assertThat(outputChannel.getName(), is("powerLevel"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,161 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.digitalstrom.internal.lib.structure.devices.impl;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hamcrest.core.Is.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputChannelEnum;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.util.JsonModel;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.util.OutputChannel;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test class for certain code in {@link DeviceImpl}
|
||||||
|
*
|
||||||
|
* @author Rouven Schürch - Initial contribution
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
@NonNullByDefault
|
||||||
|
class DeviceImplTest {
|
||||||
|
|
||||||
|
private static final List<OutputChannel> EMPTY_CHANNEL = new ArrayList<>();
|
||||||
|
|
||||||
|
private static final List<OutputChannel> SHADE_ANGLE_CHANNELS = Arrays.asList(
|
||||||
|
new OutputChannel(OutputChannelEnum.SHADE_OPENING_ANGLE_OUTSIDE),
|
||||||
|
new OutputChannel(OutputChannelEnum.SHADE_OPENING_ANGLE_INDOOR));
|
||||||
|
|
||||||
|
private static final List<OutputChannel> SHADE_POSITION_CHANNELS = Arrays.asList(
|
||||||
|
new OutputChannel(OutputChannelEnum.SHADE_POSITION_INDOOR),
|
||||||
|
new OutputChannel(OutputChannelEnum.SHADE_POSITION_OUTSIDE));
|
||||||
|
|
||||||
|
private static final List<OutputChannel> NON_SHADE_CHANNEL = Arrays
|
||||||
|
.asList(new OutputChannel(OutputChannelEnum.BRIGHTNESS));
|
||||||
|
|
||||||
|
private static final List<OutputChannel> MIXED_SHADE_CHANNEL = Arrays.asList(
|
||||||
|
new OutputChannel(OutputChannelEnum.BRIGHTNESS),
|
||||||
|
new OutputChannel(OutputChannelEnum.SHADE_OPENING_ANGLE_OUTSIDE));
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindSwitchShadeChannel() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.SINGLE_SWITCH, SHADE_ANGLE_CHANNELS);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindSwitchNoShadeChannel() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.SINGLE_SWITCH, NON_SHADE_CHANNEL);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindSwitchMixedShadeChannel() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.SINGLE_SWITCH, MIXED_SHADE_CHANNEL);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConUsNoChannel() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON_US, EMPTY_CHANNEL);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConUsNonShadeChannel() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON_US, NON_SHADE_CHANNEL);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConUsShadePositionChannels() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON_US, SHADE_POSITION_CHANNELS);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConUsShadeAngleChannels() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON_US, SHADE_ANGLE_CHANNELS);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConUsMixedChannels() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON_US, MIXED_SHADE_CHANNEL);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConNoChannel() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON, EMPTY_CHANNEL);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConNonShadeChannel() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON, NON_SHADE_CHANNEL);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConShadePositionChannels() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON, SHADE_POSITION_CHANNELS);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConShadeAngleChannels() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON, SHADE_ANGLE_CHANNELS);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void isBlindPositionConMixedChannels() {
|
||||||
|
JsonObject jsonObject = createJsonObject(OutputModeEnum.POSITION_CON, MIXED_SHADE_CHANNEL);
|
||||||
|
DeviceImpl deviceImpl = new DeviceImpl(jsonObject);
|
||||||
|
assertThat(deviceImpl.isBlind(), is(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static JsonObject createJsonObject(OutputModeEnum outputMode, List<OutputChannel> channels) {
|
||||||
|
JsonModel model = new JsonModel(outputMode.getMode(), channels);
|
||||||
|
|
||||||
|
Gson gson = new Gson();
|
||||||
|
String json = gson.toJson(model);
|
||||||
|
|
||||||
|
return JsonParser.parseString(json).getAsJsonObject();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.digitalstrom.internal.lib.util;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.*;
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hamcrest.Matchers.contains;
|
||||||
|
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputChannelEnum;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test class for {@link DSJsonParser}
|
||||||
|
*
|
||||||
|
* @author Rouven Schürch - Initial contribution
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@NonNullByDefault
|
||||||
|
class DSJsonParserTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testParseSingleOutputchannels() {
|
||||||
|
JsonObject jsonObject = createJsonObject(Arrays.asList(new OutputChannel(OutputChannelEnum.BRIGHTNESS)));
|
||||||
|
|
||||||
|
List<OutputChannelEnum> channels = DSJsonParser.getOutputChannels(jsonObject);
|
||||||
|
assertThat(channels, contains(OutputChannelEnum.BRIGHTNESS));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testParseMultipleOutputchannels() {
|
||||||
|
JsonObject jsonObject = createJsonObject(Arrays.asList(new OutputChannel(OutputChannelEnum.BRIGHTNESS),
|
||||||
|
new OutputChannel(OutputChannelEnum.AIR_FLAP_POSITION)));
|
||||||
|
|
||||||
|
List<OutputChannelEnum> channels = DSJsonParser.getOutputChannels(jsonObject);
|
||||||
|
assertThat(channels, contains(OutputChannelEnum.BRIGHTNESS, OutputChannelEnum.AIR_FLAP_POSITION));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testParseNoOutputchannels() {
|
||||||
|
JsonObject jsonObject = createJsonObject(Arrays.asList());
|
||||||
|
List<OutputChannelEnum> channels = DSJsonParser.getOutputChannels(jsonObject);
|
||||||
|
assertThat(channels, hasSize(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static JsonObject createJsonObject(List<OutputChannel> channels) {
|
||||||
|
JsonModel model = new JsonModel(channels);
|
||||||
|
|
||||||
|
Gson gson = new Gson();
|
||||||
|
String json = gson.toJson(model);
|
||||||
|
|
||||||
|
return JsonParser.parseString(json).getAsJsonObject();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.digitalstrom.internal.lib.util;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model used in test cases.
|
||||||
|
*
|
||||||
|
* @author Rouven Schürch - Initial contribution
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@NonNullByDefault
|
||||||
|
public class JsonModel {
|
||||||
|
public JsonModel(List<OutputChannel> outputChannels) {
|
||||||
|
this(-1, outputChannels);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JsonModel(int outputMode, List<OutputChannel> outputChannels) {
|
||||||
|
this.outputMode = outputMode;
|
||||||
|
this.outputChannels = new ArrayList<>();
|
||||||
|
if (outputChannels != null) {
|
||||||
|
this.outputChannels = outputChannels;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int outputMode;
|
||||||
|
|
||||||
|
List<OutputChannel> outputChannels;
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.openhab.binding.digitalstrom.internal.lib.util;
|
||||||
|
|
||||||
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputChannelEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model used in test cases.
|
||||||
|
*
|
||||||
|
* @author Rouven Schürch - Initial contribution
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@NonNullByDefault
|
||||||
|
public class OutputChannel {
|
||||||
|
public OutputChannel(OutputChannelEnum outputChannel) {
|
||||||
|
super();
|
||||||
|
this.channelID = outputChannel.getChannelId();
|
||||||
|
this.name = outputChannel.getName();
|
||||||
|
this.id = outputChannel.getName();
|
||||||
|
this.index = outputChannel.getChannelId();
|
||||||
|
}
|
||||||
|
|
||||||
|
int channelID;
|
||||||
|
String name;
|
||||||
|
String id;
|
||||||
|
int index;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user