[daikin] Fix Special Mode and Streamer support (#12324)
* [daikin] Fix Special Mode support Signed-off-by: Jimmy Tanagra <jcode@tanagra.id.au>
This commit is contained in:
parent
307450352c
commit
c0ebdbdb6b
|
@ -33,17 +33,16 @@ A BRP072C42 adapter requires a registered UUID to authenticate. Upon discovery,
|
||||||
### Additional Thing configurations for BRP072C42 adapter
|
### Additional Thing configurations for BRP072C42 adapter
|
||||||
|
|
||||||
* `secure` - Must be set to true for BRP072C42 to access it through https.
|
* `secure` - Must be set to true for BRP072C42 to access it through https.
|
||||||
* `uuid` - A UUID used to access the BRP072C42 adapter. A handy UUID generator can be found at https://www.uuidgenerator.net/.
|
* `uuid` - A UUID used to access the BRP072C42 adapter. A handy UUID generator can be found at <https://www.uuidgenerator.net/>.
|
||||||
* `key` - The 13-digit key from the Daikin adapter.
|
* `key` - The 13-digit key from the Daikin adapter.
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
The temperature channels have a precision of one half degree Celsius.
|
The temperature channels have a precision of one half degree Celsius.
|
||||||
For the BRP072A42 and BRP072C42:
|
For the BRP072A42 and BRP072C42:
|
||||||
|
|
||||||
| Channel Name | Description |
|
| Channel Name | Description |
|
||||||
|--------------|---------------------------------------------------------------------------------------------|
|
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| power | Turns the power on/off for the air conditioning unit. |
|
| power | Turns the power on/off for the air conditioning unit. |
|
||||||
| settemp | The temperature set for the air conditioning unit. |
|
| settemp | The temperature set for the air conditioning unit. |
|
||||||
| indoortemp | The indoor temperature as measured by the unit. |
|
| indoortemp | The indoor temperature as measured by the unit. |
|
||||||
|
@ -54,8 +53,8 @@ For the BRP072A42 and BRP072C42:
|
||||||
| fanspeed | The fan speed set for the unit (AUTO, SILENCE, LEVEL_1, LEVEL_2, LEVEL_3, LEVEL_4, LEVEL_5) |
|
| fanspeed | The fan speed set for the unit (AUTO, SILENCE, LEVEL_1, LEVEL_2, LEVEL_3, LEVEL_4, LEVEL_5) |
|
||||||
| fandir | The fan blade direction (STOPPED, VERTICAL, HORIZONTAL, VERTICAL_AND_HORIZONTAL) |
|
| fandir | The fan blade direction (STOPPED, VERTICAL, HORIZONTAL, VERTICAL_AND_HORIZONTAL) |
|
||||||
| cmpfrequency | The compressor frequency |
|
| cmpfrequency | The compressor frequency |
|
||||||
| specialmode | The special mode currently active (OFF, STREAMER, ECO, POWERFUL, POWERFUL & STREAMER, ECO & STREAMER). Not all modes might be available on the unit. |
|
| specialmode | The special mode set for the unit (NORMAL, ECO, POWERFUL). This is not available on all units. |
|
||||||
| specialmode-powerful | Turns the powerful mode on/off for the air conditioning unit. |
|
| streamer | Turns the streamer feature on/off for the air conditioning unit. This is not available on all units. |
|
||||||
| energyheatingtoday | The energy consumption when heating for today |
|
| energyheatingtoday | The energy consumption when heating for today |
|
||||||
| energyheatingthisweek | The energy consumption when heating for this week |
|
| energyheatingthisweek | The energy consumption when heating for this week |
|
||||||
| energyheatinglastweek | The energy consumption when heating for last week |
|
| energyheatinglastweek | The energy consumption when heating for last week |
|
||||||
|
@ -90,7 +89,7 @@ For the BRP072A42 and BRP072C42:
|
||||||
For the BRP15B61:
|
For the BRP15B61:
|
||||||
|
|
||||||
| Channel Name | Description |
|
| Channel Name | Description |
|
||||||
|-----------------|---------------------------------------------------------------------------------------------|
|
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| power | Turns the power on/off for the air conditioning unit. |
|
| power | Turns the power on/off for the air conditioning unit. |
|
||||||
| settemp | The temperature set for the air conditioning unit. |
|
| settemp | The temperature set for the air conditioning unit. |
|
||||||
| indoortemp | The indoor temperature as measured by the unit. |
|
| indoortemp | The indoor temperature as measured by the unit. |
|
||||||
|
@ -120,7 +119,6 @@ daikin:ac_unit:living_room_ac [ host="192.168.0.5", secure=true, uuid="xxxxxxxx-
|
||||||
daikin:airbase_ac_unit:living_room_ac [ host="192.168.0.5" ]
|
daikin:airbase_ac_unit:living_room_ac [ host="192.168.0.5" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
daikin.items:
|
daikin.items:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class DaikinBindingConstants {
|
||||||
public static final String CHANNEL_ENERGY_STRING_FORMAT = "%s-%d";
|
public static final String CHANNEL_ENERGY_STRING_FORMAT = "%s-%d";
|
||||||
|
|
||||||
public static final String CHANNEL_AC_SPECIALMODE = "specialmode";
|
public static final String CHANNEL_AC_SPECIALMODE = "specialmode";
|
||||||
public static final String CHANNEL_AC_SPECIALMODE_POWERFUL = "specialmode-powerful";
|
public static final String CHANNEL_AC_STREAMER = "streamer";
|
||||||
|
|
||||||
// additional channels for Airbase Controller
|
// additional channels for Airbase Controller
|
||||||
public static final String CHANNEL_AIRBASE_AC_FAN_SPEED = "airbasefanspeed";
|
public static final String CHANNEL_AIRBASE_AC_FAN_SPEED = "airbasefanspeed";
|
||||||
|
|
|
@ -30,7 +30,7 @@ import org.openhab.binding.daikin.internal.api.BasicInfo;
|
||||||
import org.openhab.binding.daikin.internal.api.ControlInfo;
|
import org.openhab.binding.daikin.internal.api.ControlInfo;
|
||||||
import org.openhab.binding.daikin.internal.api.EnergyInfoDayAndWeek;
|
import org.openhab.binding.daikin.internal.api.EnergyInfoDayAndWeek;
|
||||||
import org.openhab.binding.daikin.internal.api.EnergyInfoYear;
|
import org.openhab.binding.daikin.internal.api.EnergyInfoYear;
|
||||||
import org.openhab.binding.daikin.internal.api.Enums.SpecialModeKind;
|
import org.openhab.binding.daikin.internal.api.Enums.SpecialMode;
|
||||||
import org.openhab.binding.daikin.internal.api.SensorInfo;
|
import org.openhab.binding.daikin.internal.api.SensorInfo;
|
||||||
import org.openhab.binding.daikin.internal.api.airbase.AirbaseBasicInfo;
|
import org.openhab.binding.daikin.internal.api.airbase.AirbaseBasicInfo;
|
||||||
import org.openhab.binding.daikin.internal.api.airbase.AirbaseControlInfo;
|
import org.openhab.binding.daikin.internal.api.airbase.AirbaseControlInfo;
|
||||||
|
@ -137,12 +137,21 @@ public class DaikinWebTargets {
|
||||||
return EnergyInfoDayAndWeek.parse(response);
|
return EnergyInfoDayAndWeek.parse(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean setSpecialMode(SpecialModeKind specialModeKind, boolean state) throws DaikinCommunicationException {
|
public void setSpecialMode(SpecialMode specialMode) throws DaikinCommunicationException {
|
||||||
Map<String, String> queryParams = new HashMap<>();
|
Map<String, String> queryParams = new HashMap<>();
|
||||||
queryParams.put("spmode_kind", String.valueOf(specialModeKind.getValue()));
|
if (specialMode == SpecialMode.NORMAL) {
|
||||||
queryParams.put("set_spmode", state ? "1" : "0");
|
queryParams.put("set_spmode", "0");
|
||||||
|
} else {
|
||||||
|
queryParams.put("set_spmode", "1");
|
||||||
|
queryParams.put("spmode_kind", Integer.toString(specialMode.getValue()));
|
||||||
|
}
|
||||||
|
String response = invoke(setSpecialModeUri, queryParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStreamerMode(boolean state) throws DaikinCommunicationException {
|
||||||
|
Map<String, String> queryParams = new HashMap<>();
|
||||||
|
queryParams.put("en_streamer", state ? "1" : "0");
|
||||||
String response = invoke(setSpecialModeUri, queryParams);
|
String response = invoke(setSpecialModeUri, queryParams);
|
||||||
return !response.contains("ret=OK");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Daikin Airbase API
|
// Daikin Airbase API
|
||||||
|
|
|
@ -17,6 +17,7 @@ import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
import org.openhab.binding.daikin.internal.api.Enums.AdvancedMode;
|
||||||
import org.openhab.binding.daikin.internal.api.Enums.FanMovement;
|
import org.openhab.binding.daikin.internal.api.Enums.FanMovement;
|
||||||
import org.openhab.binding.daikin.internal.api.Enums.FanSpeed;
|
import org.openhab.binding.daikin.internal.api.Enums.FanSpeed;
|
||||||
import org.openhab.binding.daikin.internal.api.Enums.Mode;
|
import org.openhab.binding.daikin.internal.api.Enums.Mode;
|
||||||
|
@ -44,7 +45,7 @@ public class ControlInfo {
|
||||||
public FanMovement fanMovement = FanMovement.STOPPED;
|
public FanMovement fanMovement = FanMovement.STOPPED;
|
||||||
/* Not supported by all units. Sets the target humidity for dehumidifying. */
|
/* Not supported by all units. Sets the target humidity for dehumidifying. */
|
||||||
public Optional<Integer> targetHumidity = Optional.empty();
|
public Optional<Integer> targetHumidity = Optional.empty();
|
||||||
public SpecialMode specialMode = SpecialMode.UNKNOWN;
|
public AdvancedMode advancedMode = AdvancedMode.UNKNOWN;
|
||||||
|
|
||||||
private ControlInfo() {
|
private ControlInfo() {
|
||||||
}
|
}
|
||||||
|
@ -66,8 +67,8 @@ public class ControlInfo {
|
||||||
.map(value -> FanMovement.fromValue(value)).orElse(FanMovement.STOPPED);
|
.map(value -> FanMovement.fromValue(value)).orElse(FanMovement.STOPPED);
|
||||||
info.targetHumidity = Optional.ofNullable(responseMap.get("shum")).flatMap(value -> InfoParser.parseInt(value));
|
info.targetHumidity = Optional.ofNullable(responseMap.get("shum")).flatMap(value -> InfoParser.parseInt(value));
|
||||||
|
|
||||||
info.specialMode = Optional.ofNullable(responseMap.get("adv")).map(value -> SpecialMode.fromValue(value))
|
info.advancedMode = Optional.ofNullable(responseMap.get("adv")).map(value -> AdvancedMode.fromValue(value))
|
||||||
.orElse(SpecialMode.UNKNOWN);
|
.orElse(AdvancedMode.UNKNOWN);
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,4 +83,8 @@ public class ControlInfo {
|
||||||
|
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SpecialMode getSpecialMode() {
|
||||||
|
return SpecialMode.fromAdvancedMode(advancedMode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,7 +139,7 @@ public class Enums {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum SpecialMode {
|
public enum AdvancedMode {
|
||||||
STREAMER("13"),
|
STREAMER("13"),
|
||||||
ECO("12"),
|
ECO("12"),
|
||||||
POWERFUL("2"),
|
POWERFUL("2"),
|
||||||
|
@ -148,10 +148,10 @@ public class Enums {
|
||||||
OFF(""),
|
OFF(""),
|
||||||
UNKNOWN("??");
|
UNKNOWN("??");
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(SpecialMode.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(AdvancedMode.class);
|
||||||
private final String value;
|
private final String value;
|
||||||
|
|
||||||
SpecialMode(String value) {
|
AdvancedMode(String value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,37 +159,35 @@ public class Enums {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPowerfulActive() {
|
public boolean isStreamerActive() {
|
||||||
return this.equals(POWERFUL) || this.equals(POWERFUL_STREAMER);
|
return this.equals(STREAMER) || this.equals(POWERFUL_STREAMER) || this.equals(ECO_STREAMER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUndefined() {
|
public boolean isUndefined() {
|
||||||
return this.equals(UNKNOWN);
|
return this.equals(UNKNOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SpecialMode fromValue(String value) {
|
public static AdvancedMode fromValue(String value) {
|
||||||
for (SpecialMode m : SpecialMode.values()) {
|
for (AdvancedMode m : AdvancedMode.values()) {
|
||||||
if (m.getValue().equals(value)) {
|
if (m.getValue().equals(value)) {
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOGGER.debug("Unexpected SpecialMode value of \"{}\"", value);
|
LOGGER.debug("Unexpected AdvancedMode value of \"{}\"", value);
|
||||||
|
|
||||||
// Default to UNKNOWN
|
// Default to UNKNOWN
|
||||||
return UNKNOWN;
|
return UNKNOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum SpecialModeKind {
|
public enum SpecialMode {
|
||||||
UNKNOWN(-1),
|
NORMAL(0),
|
||||||
STREAMER(0),
|
|
||||||
POWERFUL(1),
|
POWERFUL(1),
|
||||||
ECO(2);
|
ECO(2);
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(SpecialModeKind.class);
|
|
||||||
private final int value;
|
private final int value;
|
||||||
|
|
||||||
SpecialModeKind(int value) {
|
SpecialMode(int value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,16 +195,16 @@ public class Enums {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SpecialModeKind fromValue(int value) {
|
public static SpecialMode fromAdvancedMode(AdvancedMode advMode) {
|
||||||
for (SpecialModeKind m : SpecialModeKind.values()) {
|
switch (advMode) {
|
||||||
if (m.getValue() == value) {
|
case POWERFUL:
|
||||||
return m;
|
case POWERFUL_STREAMER:
|
||||||
|
return SpecialMode.POWERFUL;
|
||||||
|
case ECO:
|
||||||
|
case ECO_STREAMER:
|
||||||
|
return SpecialMode.ECO;
|
||||||
}
|
}
|
||||||
}
|
return NORMAL;
|
||||||
LOGGER.debug("Unexpected SpecialModeKind value of \"{}\"", value);
|
|
||||||
|
|
||||||
// Default to UNKNOWN
|
|
||||||
return UNKNOWN;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ import org.eclipse.jetty.client.HttpClient;
|
||||||
import org.openhab.binding.daikin.internal.DaikinBindingConstants;
|
import org.openhab.binding.daikin.internal.DaikinBindingConstants;
|
||||||
import org.openhab.binding.daikin.internal.DaikinCommunicationException;
|
import org.openhab.binding.daikin.internal.DaikinCommunicationException;
|
||||||
import org.openhab.binding.daikin.internal.DaikinDynamicStateDescriptionProvider;
|
import org.openhab.binding.daikin.internal.DaikinDynamicStateDescriptionProvider;
|
||||||
import org.openhab.binding.daikin.internal.DaikinWebTargets;
|
|
||||||
import org.openhab.binding.daikin.internal.api.ControlInfo;
|
import org.openhab.binding.daikin.internal.api.ControlInfo;
|
||||||
import org.openhab.binding.daikin.internal.api.EnergyInfoDayAndWeek;
|
import org.openhab.binding.daikin.internal.api.EnergyInfoDayAndWeek;
|
||||||
import org.openhab.binding.daikin.internal.api.EnergyInfoYear;
|
import org.openhab.binding.daikin.internal.api.EnergyInfoYear;
|
||||||
|
@ -30,7 +29,7 @@ import org.openhab.binding.daikin.internal.api.Enums.FanMovement;
|
||||||
import org.openhab.binding.daikin.internal.api.Enums.FanSpeed;
|
import org.openhab.binding.daikin.internal.api.Enums.FanSpeed;
|
||||||
import org.openhab.binding.daikin.internal.api.Enums.HomekitMode;
|
import org.openhab.binding.daikin.internal.api.Enums.HomekitMode;
|
||||||
import org.openhab.binding.daikin.internal.api.Enums.Mode;
|
import org.openhab.binding.daikin.internal.api.Enums.Mode;
|
||||||
import org.openhab.binding.daikin.internal.api.Enums.SpecialModeKind;
|
import org.openhab.binding.daikin.internal.api.Enums.SpecialMode;
|
||||||
import org.openhab.binding.daikin.internal.api.SensorInfo;
|
import org.openhab.binding.daikin.internal.api.SensorInfo;
|
||||||
import org.openhab.core.library.types.DecimalType;
|
import org.openhab.core.library.types.DecimalType;
|
||||||
import org.openhab.core.library.types.OnOffType;
|
import org.openhab.core.library.types.OnOffType;
|
||||||
|
@ -69,7 +68,7 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
if (!"OK".equals(controlInfo.ret)) {
|
if (!"OK".equals(controlInfo.ret)) {
|
||||||
throw new DaikinCommunicationException("Invalid response from host");
|
throw new DaikinCommunicationException("Invalid response from host");
|
||||||
}
|
}
|
||||||
updateState(DaikinBindingConstants.CHANNEL_AC_POWER, controlInfo.power ? OnOffType.ON : OnOffType.OFF);
|
updateState(DaikinBindingConstants.CHANNEL_AC_POWER, OnOffType.from(controlInfo.power));
|
||||||
updateTemperatureChannel(DaikinBindingConstants.CHANNEL_AC_TEMP, controlInfo.temp);
|
updateTemperatureChannel(DaikinBindingConstants.CHANNEL_AC_TEMP, controlInfo.temp);
|
||||||
|
|
||||||
updateState(DaikinBindingConstants.CHANNEL_AC_MODE, new StringType(controlInfo.mode.name()));
|
updateState(DaikinBindingConstants.CHANNEL_AC_MODE, new StringType(controlInfo.mode.name()));
|
||||||
|
@ -86,13 +85,14 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
updateState(DaikinBindingConstants.CHANNEL_AC_HOMEKITMODE, new StringType(HomekitMode.AUTO.getValue()));
|
updateState(DaikinBindingConstants.CHANNEL_AC_HOMEKITMODE, new StringType(HomekitMode.AUTO.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
updateState(DaikinBindingConstants.CHANNEL_AC_SPECIALMODE, new StringType(controlInfo.specialMode.name()));
|
if (controlInfo.advancedMode.isUndefined()) {
|
||||||
|
updateState(DaikinBindingConstants.CHANNEL_AC_STREAMER, UnDefType.UNDEF);
|
||||||
if (controlInfo.specialMode.isUndefined()) {
|
updateState(DaikinBindingConstants.CHANNEL_AC_SPECIALMODE, UnDefType.UNDEF);
|
||||||
updateState(DaikinBindingConstants.CHANNEL_AC_SPECIALMODE_POWERFUL, UnDefType.UNDEF);
|
|
||||||
} else {
|
} else {
|
||||||
updateState(DaikinBindingConstants.CHANNEL_AC_SPECIALMODE_POWERFUL,
|
updateState(DaikinBindingConstants.CHANNEL_AC_STREAMER,
|
||||||
controlInfo.specialMode.isPowerfulActive() ? OnOffType.ON : OnOffType.OFF);
|
OnOffType.from(controlInfo.advancedMode.isStreamerActive()));
|
||||||
|
updateState(DaikinBindingConstants.CHANNEL_AC_SPECIALMODE,
|
||||||
|
new StringType(controlInfo.getSpecialMode().name()));
|
||||||
}
|
}
|
||||||
|
|
||||||
SensorInfo sensorInfo = webTargets.getSensorInfo();
|
SensorInfo sensorInfo = webTargets.getSensorInfo();
|
||||||
|
@ -161,9 +161,15 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DaikinBindingConstants.CHANNEL_AC_SPECIALMODE_POWERFUL:
|
case DaikinBindingConstants.CHANNEL_AC_SPECIALMODE:
|
||||||
|
if (command instanceof StringType) {
|
||||||
|
changeSpecialMode(((StringType) command).toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DaikinBindingConstants.CHANNEL_AC_STREAMER:
|
||||||
if (command instanceof OnOffType) {
|
if (command instanceof OnOffType) {
|
||||||
changeSpecialModePowerful(((OnOffType) command).equals(OnOffType.ON));
|
changeStreamer(((OnOffType) command).equals(OnOffType.ON));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -173,10 +179,6 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void changePower(boolean power) throws DaikinCommunicationException {
|
protected void changePower(boolean power) throws DaikinCommunicationException {
|
||||||
DaikinWebTargets webTargets = this.webTargets;
|
|
||||||
if (webTargets == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ControlInfo info = webTargets.getControlInfo();
|
ControlInfo info = webTargets.getControlInfo();
|
||||||
info.power = power;
|
info.power = power;
|
||||||
webTargets.setControlInfo(info);
|
webTargets.setControlInfo(info);
|
||||||
|
@ -184,10 +186,6 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void changeSetPoint(double newTemperature) throws DaikinCommunicationException {
|
protected void changeSetPoint(double newTemperature) throws DaikinCommunicationException {
|
||||||
DaikinWebTargets webTargets = this.webTargets;
|
|
||||||
if (webTargets == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ControlInfo info = webTargets.getControlInfo();
|
ControlInfo info = webTargets.getControlInfo();
|
||||||
info.temp = Optional.of(newTemperature);
|
info.temp = Optional.of(newTemperature);
|
||||||
webTargets.setControlInfo(info);
|
webTargets.setControlInfo(info);
|
||||||
|
@ -195,10 +193,6 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void changeMode(String mode) throws DaikinCommunicationException {
|
protected void changeMode(String mode) throws DaikinCommunicationException {
|
||||||
DaikinWebTargets webTargets = this.webTargets;
|
|
||||||
if (webTargets == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Mode newMode;
|
Mode newMode;
|
||||||
try {
|
try {
|
||||||
newMode = Mode.valueOf(mode);
|
newMode = Mode.valueOf(mode);
|
||||||
|
@ -213,10 +207,6 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void changeFanSpeed(String fanSpeed) throws DaikinCommunicationException {
|
protected void changeFanSpeed(String fanSpeed) throws DaikinCommunicationException {
|
||||||
DaikinWebTargets webTargets = this.webTargets;
|
|
||||||
if (webTargets == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
FanSpeed newSpeed;
|
FanSpeed newSpeed;
|
||||||
try {
|
try {
|
||||||
newSpeed = FanSpeed.valueOf(fanSpeed);
|
newSpeed = FanSpeed.valueOf(fanSpeed);
|
||||||
|
@ -230,10 +220,6 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void changeFanDir(String fanDir) throws DaikinCommunicationException {
|
protected void changeFanDir(String fanDir) throws DaikinCommunicationException {
|
||||||
DaikinWebTargets webTargets = this.webTargets;
|
|
||||||
if (webTargets == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
FanMovement newMovement;
|
FanMovement newMovement;
|
||||||
try {
|
try {
|
||||||
newMovement = FanMovement.valueOf(fanDir);
|
newMovement = FanMovement.valueOf(fanDir);
|
||||||
|
@ -246,18 +232,19 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
webTargets.setControlInfo(info);
|
webTargets.setControlInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected void changeSpecialMode(String specialMode) throws DaikinCommunicationException {
|
||||||
*
|
SpecialMode newMode;
|
||||||
* @param powerfulMode
|
try {
|
||||||
* @return Is change successful
|
newMode = SpecialMode.valueOf(specialMode);
|
||||||
* @throws DaikinCommunicationException
|
} catch (IllegalArgumentException e) {
|
||||||
*/
|
logger.warn("Invalid specialmode: {}. Valid values: {}", specialMode, SpecialMode.values());
|
||||||
protected boolean changeSpecialModePowerful(boolean powerfulMode) throws DaikinCommunicationException {
|
return;
|
||||||
DaikinWebTargets webTargets = this.webTargets;
|
|
||||||
if (webTargets == null) {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return webTargets.setSpecialMode(SpecialModeKind.POWERFUL, powerfulMode);
|
webTargets.setSpecialMode(newMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void changeStreamer(boolean streamerMode) throws DaikinCommunicationException {
|
||||||
|
webTargets.setStreamerMode(streamerMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -295,10 +282,6 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
DaikinWebTargets webTargets = this.webTargets;
|
|
||||||
if (webTargets == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
webTargets.registerUuid(key);
|
webTargets.registerUuid(key);
|
||||||
} catch (DaikinCommunicationException e) {
|
} catch (DaikinCommunicationException e) {
|
||||||
// suppress exceptions
|
// suppress exceptions
|
||||||
|
|
|
@ -92,6 +92,10 @@ public abstract class DaikinBaseHandler extends BaseThingHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleCommand(ChannelUID channelUID, Command command) {
|
public void handleCommand(ChannelUID channelUID, Command command) {
|
||||||
|
if (webTargets == null) {
|
||||||
|
logger.warn("webTargets is null. This is possibly a bug.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
if (handleCommandInternal(channelUID, command)) {
|
if (handleCommandInternal(channelUID, command)) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -125,10 +125,12 @@ channel-type.daikin.acunit-power.label = Power
|
||||||
channel-type.daikin.acunit-power.description = Power for the AC unit
|
channel-type.daikin.acunit-power.description = Power for the AC unit
|
||||||
channel-type.daikin.acunit-settemp.label = Set Point
|
channel-type.daikin.acunit-settemp.label = Set Point
|
||||||
channel-type.daikin.acunit-settemp.description = The set point temperature
|
channel-type.daikin.acunit-settemp.description = The set point temperature
|
||||||
channel-type.daikin.acunit-specialmode-powerful.label = Powerful Mode
|
|
||||||
channel-type.daikin.acunit-specialmode-powerful.description = Powerful mode switch
|
|
||||||
channel-type.daikin.acunit-specialmode.label = Special Mode
|
channel-type.daikin.acunit-specialmode.label = Special Mode
|
||||||
channel-type.daikin.acunit-specialmode.description = Current special mode
|
channel-type.daikin.acunit-specialmode.state.option.NORMAL = Normal
|
||||||
|
channel-type.daikin.acunit-specialmode.state.option.ECO = ECO
|
||||||
|
channel-type.daikin.acunit-specialmode.state.option.POWERFUL = Powerful
|
||||||
|
channel-type.daikin.acunit-streamer.label = Streamer
|
||||||
|
channel-type.daikin.acunit-streamer.description = Streamer Mode
|
||||||
channel-type.daikin.airbase-acunit-fan.label = Fan
|
channel-type.daikin.airbase-acunit-fan.label = Fan
|
||||||
channel-type.daikin.airbase-acunit-fan.description = Current fan speed setting of the AC unit
|
channel-type.daikin.airbase-acunit-fan.description = Current fan speed setting of the AC unit
|
||||||
channel-type.daikin.airbase-acunit-zone1.label = Zone 1
|
channel-type.daikin.airbase-acunit-zone1.label = Zone 1
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
<channel id="fandir" typeId="acunit-fandir"/>
|
<channel id="fandir" typeId="acunit-fandir"/>
|
||||||
<channel id="cmpfrequency" typeId="acunit-cmpfrequency"></channel>
|
<channel id="cmpfrequency" typeId="acunit-cmpfrequency"></channel>
|
||||||
<channel id="specialmode" typeId="acunit-specialmode"></channel>
|
<channel id="specialmode" typeId="acunit-specialmode"></channel>
|
||||||
<channel id="specialmode-powerful" typeId="acunit-specialmode-powerful"></channel>
|
<channel id="streamer" typeId="acunit-streamer"></channel>
|
||||||
<channel id="energyheatingtoday" typeId="acunit-energyheatingtoday"/>
|
<channel id="energyheatingtoday" typeId="acunit-energyheatingtoday"/>
|
||||||
<channel id="energyheatingthisweek" typeId="acunit-energyheatingthisweek"/>
|
<channel id="energyheatingthisweek" typeId="acunit-energyheatingthisweek"/>
|
||||||
<channel id="energyheatinglastweek" typeId="acunit-energyheatinglastweek"/>
|
<channel id="energyheatinglastweek" typeId="acunit-energyheatinglastweek"/>
|
||||||
|
@ -87,6 +87,7 @@
|
||||||
<item-type>Switch</item-type>
|
<item-type>Switch</item-type>
|
||||||
<label>Power</label>
|
<label>Power</label>
|
||||||
<description>Power for the AC unit</description>
|
<description>Power for the AC unit</description>
|
||||||
|
<category>Switch</category>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
<channel-type id="acunit-settemp">
|
<channel-type id="acunit-settemp">
|
||||||
|
@ -117,6 +118,7 @@
|
||||||
<item-type>Number:Dimensionless</item-type>
|
<item-type>Number:Dimensionless</item-type>
|
||||||
<label>Indoor Humidity</label>
|
<label>Indoor Humidity</label>
|
||||||
<description>The indoor humidity as measured by the A/C unit</description>
|
<description>The indoor humidity as measured by the A/C unit</description>
|
||||||
|
<category>Humidity</category>
|
||||||
<state readOnly="true" pattern="%.0f %unit%"/>
|
<state readOnly="true" pattern="%.0f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
|
@ -180,6 +182,31 @@
|
||||||
</state>
|
</state>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="acunit-cmpfrequency" advanced="true">
|
||||||
|
<item-type>Number:Dimensionless</item-type>
|
||||||
|
<label>Compressor Frequency</label>
|
||||||
|
<description>Current compressor frequency</description>
|
||||||
|
<state readOnly="true" pattern="%.0f %unit%"></state>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="acunit-specialmode" advanced="true">
|
||||||
|
<item-type>String</item-type>
|
||||||
|
<label>Special Mode</label>
|
||||||
|
<state>
|
||||||
|
<options>
|
||||||
|
<option value="NORMAL">Normal</option>
|
||||||
|
<option value="ECO">ECO</option>
|
||||||
|
<option value="POWERFUL">Powerful</option>
|
||||||
|
</options>
|
||||||
|
</state>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="acunit-streamer" advanced="true">
|
||||||
|
<item-type>Switch</item-type>
|
||||||
|
<label>Streamer</label>
|
||||||
|
<description>Streamer Mode</description>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
<channel-type id="acunit-energyheatingtoday" advanced="true">
|
<channel-type id="acunit-energyheatingtoday" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Today</label>
|
<label>Energy Heating Today</label>
|
||||||
|
@ -228,169 +255,172 @@
|
||||||
<state readOnly="true" pattern="%.1f %unit%"></state>
|
<state readOnly="true" pattern="%.1f %unit%"></state>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
<channel-type id="acunit-cmpfrequency" advanced="true">
|
|
||||||
<item-type>Number:Dimensionless</item-type>
|
|
||||||
<label>Compressor Frequency</label>
|
|
||||||
<description>Current compressor frequency</description>
|
|
||||||
<state readOnly="true" pattern="%.0f %unit%"></state>
|
|
||||||
</channel-type>
|
|
||||||
<channel-type id="acunit-specialmode" advanced="true">
|
|
||||||
<item-type>String</item-type>
|
|
||||||
<label>Special Mode</label>
|
|
||||||
<description>Current special mode</description>
|
|
||||||
<state readOnly="true" pattern="%s"></state>
|
|
||||||
</channel-type>
|
|
||||||
<channel-type id="acunit-specialmode-powerful" advanced="true">
|
|
||||||
<item-type>Switch</item-type>
|
|
||||||
<label>Powerful Mode</label>
|
|
||||||
<description>Powerful mode switch</description>
|
|
||||||
</channel-type>
|
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-1" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-1" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year January</label>
|
<label>Energy Heating Current Year January</label>
|
||||||
<description>The energy usage for heating this year January</description>
|
<description>The energy usage for heating this year January</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-2" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-2" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year February</label>
|
<label>Energy Heating Current Year February</label>
|
||||||
<description>The energy usage for heating this year February</description>
|
<description>The energy usage for heating this year February</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-3" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-3" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year March</label>
|
<label>Energy Heating Current Year March</label>
|
||||||
<description>The energy usage for heating this year March</description>
|
<description>The energy usage for heating this year March</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-4" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-4" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year April</label>
|
<label>Energy Heating Current Year April</label>
|
||||||
<description>The energy usage for heating this year April</description>
|
<description>The energy usage for heating this year April</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-5" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-5" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year May</label>
|
<label>Energy Heating Current Year May</label>
|
||||||
<description>The energy usage for heating this year May</description>
|
<description>The energy usage for heating this year May</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-6" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-6" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year June</label>
|
<label>Energy Heating Current Year June</label>
|
||||||
<description>The energy usage for heating this year June</description>
|
<description>The energy usage for heating this year June</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-7" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-7" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year July</label>
|
<label>Energy Heating Current Year July</label>
|
||||||
<description>The energy usage for heating this year July</description>
|
<description>The energy usage for heating this year July</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-8" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-8" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year August</label>
|
<label>Energy Heating Current Year August</label>
|
||||||
<description>The energy usage for heating this year August</description>
|
<description>The energy usage for heating this year August</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-9" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-9" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year September</label>
|
<label>Energy Heating Current Year September</label>
|
||||||
<description>The energy usage for heating this year September</description>
|
<description>The energy usage for heating this year September</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-10" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-10" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year October</label>
|
<label>Energy Heating Current Year October</label>
|
||||||
<description>The energy usage for heating this year October</description>
|
<description>The energy usage for heating this year October</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-11" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-11" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year November</label>
|
<label>Energy Heating Current Year November</label>
|
||||||
<description>The energy usage for heating this year November</description>
|
<description>The energy usage for heating this year November</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energyheatingcurrentyear-12" advanced="true">
|
<channel-type id="acunit-energyheatingcurrentyear-12" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Heating Current Year December</label>
|
<label>Energy Heating Current Year December</label>
|
||||||
<description>The energy usage for heating this year December</description>
|
<description>The energy usage for heating this year December</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-1" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-1" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year January</label>
|
<label>Energy Cooling Current Year January</label>
|
||||||
<description>The energy usage for cooling this year January</description>
|
<description>The energy usage for cooling this year January</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-2" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-2" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year February</label>
|
<label>Energy Cooling Current Year February</label>
|
||||||
<description>The energy usage for cooling this year February</description>
|
<description>The energy usage for cooling this year February</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-3" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-3" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year March</label>
|
<label>Energy Cooling Current Year March</label>
|
||||||
<description>The energy usage for cooling this year March</description>
|
<description>The energy usage for cooling this year March</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-4" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-4" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year April</label>
|
<label>Energy Cooling Current Year April</label>
|
||||||
<description>The energy usage for cooling this year April</description>
|
<description>The energy usage for cooling this year April</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-5" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-5" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year May</label>
|
<label>Energy Cooling Current Year May</label>
|
||||||
<description>The energy usage for cooling this year May</description>
|
<description>The energy usage for cooling this year May</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-6" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-6" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year June</label>
|
<label>Energy Cooling Current Year June</label>
|
||||||
<description>The energy usage for cooling this year June</description>
|
<description>The energy usage for cooling this year June</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-7" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-7" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year July</label>
|
<label>Energy Cooling Current Year July</label>
|
||||||
<description>The energy usage for cooling this year July</description>
|
<description>The energy usage for cooling this year July</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-8" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-8" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year August</label>
|
<label>Energy Cooling Current Year August</label>
|
||||||
<description>The energy usage for cooling this year August</description>
|
<description>The energy usage for cooling this year August</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-9" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-9" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year September</label>
|
<label>Energy Cooling Current Year September</label>
|
||||||
<description>The energy usage for cooling this year September</description>
|
<description>The energy usage for cooling this year September</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-10" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-10" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year October</label>
|
<label>Energy Cooling Current Year October</label>
|
||||||
<description>The energy usage for cooling this year October</description>
|
<description>The energy usage for cooling this year October</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-11" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-11" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year November</label>
|
<label>Energy Cooling Current Year November</label>
|
||||||
<description>The energy usage for cooling this year November</description>
|
<description>The energy usage for cooling this year November</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
<channel-type id="acunit-energycoolingcurrentyear-12" advanced="true">
|
<channel-type id="acunit-energycoolingcurrentyear-12" advanced="true">
|
||||||
<item-type>Number:Energy</item-type>
|
<item-type>Number:Energy</item-type>
|
||||||
<label>Energy Cooling Current Year December</label>
|
<label>Energy Cooling Current Year December</label>
|
||||||
<description>The energy usage for cooling this year December</description>
|
<description>The energy usage for cooling this year December</description>
|
||||||
|
<category>Energy</category>
|
||||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue