[ecobee] Add air quality channels for Ecobee Smart Thermostat Premium (#13705)
* [ecobee] Add air quality channels for Ecobee Smart Thermostat Premium Signed-off-by: Rob Nielsen <rob.nielsen@yahoo.com>pull/13721/head
parent
11d3c641e5
commit
0276d32897
|
@ -169,6 +169,10 @@ The following channels are available on the Ecobee Thermostat.
|
|||
| runtime | desiredHeatRangeHigh | Number:Temperature | | Desired Heat Range High |
|
||||
| runtime | desiredCoolRangeLow | Number:Temperature | | Desired Cool Range Low |
|
||||
| runtime | desiredCoolRangeHigh | Number:Temperature | | Desired Cool Range High |
|
||||
| runtime | actualAQAccuracy | Number | | Actual Air Quality Accuracy |
|
||||
| runtime | actualAQScore | Number | | Actual Air Quality Score |
|
||||
| runtime | actualCO2 | Number:Dimensionless | | Actual CO2 |
|
||||
| runtime | actualVOC | Number:Dimensionless | | Actual VOC |
|
||||
||||||
|
||||
| settings | hvacMode | String | yes | HVAC Mode |
|
||||
| settings | lastServiceDate | String | yes | Last Service Date |
|
||||
|
@ -853,6 +857,10 @@ Number:Temperature Runtime_DesiredHeatRangeLow "Desired Heat Range Low [%.1f %un
|
|||
Number:Temperature Runtime_DesiredHeatRangeHigh "Desired Heat Range High [%.1f %unit%]" <temperature> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#desiredHeatRangeHigh" }
|
||||
Number:Temperature Runtime_DesiredCoolRangeLow "Desired Cool Range Low [%.1f %unit%]" <temperature> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#desiredCoolRangeLow" }
|
||||
Number:Temperature Runtime_DesiredCoolRangeHigh "Desired Cool Range High [%.1f %unit%]" <temperature> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#desiredCoolRangeHigh" }
|
||||
Number Runtime_ActualAQAccuracy "Actual Air Quality Accuracy [%d]" <none> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#actualAQAccuracy" }
|
||||
Number Runtime_ActualAQScore "Actual Air Quality Score [%d]" <none> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#actualAQScore" }
|
||||
Number:Dimensionless Runtime_ActualCO2 "Actual CO2 [%d %unit%]" <carbondioxide> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#actualCO2" }
|
||||
Number:Dimensionless Runtime_ActualVOC "Actual VOC [%d %unit%]" <none> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#actualVOC" }
|
||||
|
||||
// Settings group
|
||||
String Settings_HvacMode "HVAC Mode [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hvacMode" }
|
||||
|
|
|
@ -224,6 +224,10 @@ public class EcobeeBindingConstants {
|
|||
public static final String CH_DESIRED_HEAT_RANGE_HIGH = "desiredHeatRangeHigh";
|
||||
public static final String CH_DESIRED_COOL_RANGE_LOW = "desiredCoolRangeLow";
|
||||
public static final String CH_DESIRED_COOL_RANGE_HIGH = "desiredCoolRangeHigh";
|
||||
public static final String CH_ACTUAL_AQ_ACCURACY = "actualAQAccuracy";
|
||||
public static final String CH_ACTUAL_AQ_SCORE = "actualAQScore";
|
||||
public static final String CH_ACTUAL_CO2 = "actualCO2";
|
||||
public static final String CH_ACTUAL_VOC = "actualVOC";
|
||||
|
||||
// Thermostat bridge SETTINGS channels
|
||||
public static final String CH_HVAC_MODE = "hvacMode";
|
||||
|
|
|
@ -81,6 +81,26 @@ public class ExtendedRuntimeDTO {
|
|||
*/
|
||||
public List<Integer> desiredDehumidity;
|
||||
|
||||
/*
|
||||
* The last three 5 minute actual air quality accuracy readings
|
||||
*/
|
||||
public List<Integer> actualAQAccuracy;
|
||||
|
||||
/*
|
||||
* The last three 5 minute actual air quality score readings
|
||||
*/
|
||||
public List<Integer> actualAQScore;
|
||||
|
||||
/*
|
||||
* The last three 5 minute actual CO2 readings
|
||||
*/
|
||||
public List<Integer> actualCO2;
|
||||
|
||||
/*
|
||||
* The last three 5 minute actual VOC readings
|
||||
*/
|
||||
public List<Integer> actualVOC;
|
||||
|
||||
/*
|
||||
* The last three 5 minute desired Demand Management temeprature offsets.
|
||||
* This value is Demand Management adjustment value which was applied by
|
||||
|
|
|
@ -152,4 +152,24 @@ public class RuntimeDTO {
|
|||
* minimum and maximim, e.g. [650,920].
|
||||
*/
|
||||
public List<Integer> desiredCoolRange;
|
||||
|
||||
/*
|
||||
* The current air quality accuracy
|
||||
*/
|
||||
public Integer actualAQAccuracy;
|
||||
|
||||
/*
|
||||
* The current air quality score
|
||||
*/
|
||||
public Integer actualAQScore;
|
||||
|
||||
/*
|
||||
* The current CO2 in ppm
|
||||
*/
|
||||
public Integer actualCO2;
|
||||
|
||||
/*
|
||||
* The current VOC in ppb
|
||||
*/
|
||||
public Integer actualVOC;
|
||||
}
|
||||
|
|
|
@ -417,6 +417,10 @@ public class EcobeeThermostatBridgeHandler extends BaseBridgeHandler {
|
|||
updateChannel(grp + CH_DESIRED_COOL_RANGE_HIGH,
|
||||
EcobeeUtils.undefOrTemperature(runtime.desiredCoolRange.get(1)));
|
||||
}
|
||||
updateChannel(grp + CH_ACTUAL_AQ_ACCURACY, EcobeeUtils.undefOrLong(runtime.actualAQAccuracy));
|
||||
updateChannel(grp + CH_ACTUAL_AQ_SCORE, EcobeeUtils.undefOrLong(runtime.actualAQScore));
|
||||
updateChannel(grp + CH_ACTUAL_CO2, EcobeeUtils.undefOrQuantity(runtime.actualCO2, Units.PARTS_PER_MILLION));
|
||||
updateChannel(grp + CH_ACTUAL_VOC, EcobeeUtils.undefOrQuantity(runtime.actualVOC, Units.PARTS_PER_BILLION));
|
||||
}
|
||||
|
||||
private void updateSettings(@Nullable SettingsDTO settings) {
|
||||
|
|
|
@ -70,6 +70,10 @@ public final class EcobeeUtils {
|
|||
return (value == null || isUnknown(value)) ? UnDefType.UNDEF : new DecimalType(value.doubleValue());
|
||||
}
|
||||
|
||||
public static State undefOrLong(@Nullable Number value) {
|
||||
return (value == null || isUnknown(value)) ? UnDefType.UNDEF : new DecimalType(value.longValue());
|
||||
}
|
||||
|
||||
public static State undefOrQuantity(@Nullable Number value, Unit<?> unit) {
|
||||
return (value == null || isUnknown(value)) ? UnDefType.UNDEF : new QuantityType<>(value, unit);
|
||||
}
|
||||
|
|
|
@ -70,8 +70,12 @@ channel-group-type.ecobee.weather.label = Weather
|
|||
|
||||
# channel types
|
||||
|
||||
channel-type.ecobee.actualAQAccuracy.label = Actual Air Quality Accuracy
|
||||
channel-type.ecobee.actualAQScore.label = Actual Air Quality Score
|
||||
channel-type.ecobee.actualHumidity.label = Actual Humidity
|
||||
channel-type.ecobee.actualTemperature.label = Actual Temperature
|
||||
channel-type.ecobee.actualCO2.label = Actual CO2
|
||||
channel-type.ecobee.actualVOC.label = Actual VOC
|
||||
channel-type.ecobee.alertAcknowledgeRef.label = Acknowledge Ref
|
||||
channel-type.ecobee.alertAcknowledgement.label = Acknowledgement
|
||||
channel-type.ecobee.alertDate.label = Date
|
||||
|
|
|
@ -202,6 +202,10 @@
|
|||
<channel id="desiredHeatRangeHigh" typeId="desiredHeatRangeHigh"/>
|
||||
<channel id="desiredCoolRangeLow" typeId="desiredCoolRangeLow"/>
|
||||
<channel id="desiredCoolRangeHigh" typeId="desiredCoolRangeHigh"/>
|
||||
<channel id="actualAQAccuracy" typeId="actualAQAccuracy"/>
|
||||
<channel id="actualAQScore" typeId="actualAQScore"/>
|
||||
<channel id="actualCO2" typeId="actualCO2"/>
|
||||
<channel id="actualVOC" typeId="actualVOC"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
|
@ -315,6 +319,26 @@
|
|||
<label>Desired Cool Range High</label>
|
||||
<state readOnly="true" pattern="%.1f %unit%"/>
|
||||
</channel-type>
|
||||
<channel-type id="actualAQAccuracy" advanced="true">
|
||||
<item-type>Number</item-type>
|
||||
<label>Actual Air Quality Accuracy</label>
|
||||
<state readOnly="true" pattern="%d"/>
|
||||
</channel-type>
|
||||
<channel-type id="actualAQScore" advanced="true">
|
||||
<item-type>Number</item-type>
|
||||
<label>Actual Air Quality Score</label>
|
||||
<state readOnly="true" pattern="%d"/>
|
||||
</channel-type>
|
||||
<channel-type id="actualCO2" advanced="true">
|
||||
<item-type>Number:Dimensionless</item-type>
|
||||
<label>Actual CO2</label>
|
||||
<state readOnly="true" pattern="%d %unit%"/>
|
||||
</channel-type>
|
||||
<channel-type id="actualVOC" advanced="true">
|
||||
<item-type>Number:Dimensionless</item-type>
|
||||
<label>Actual VOC</label>
|
||||
<state readOnly="true" pattern="%d %unit%"/>
|
||||
</channel-type>
|
||||
|
||||
<channel-group-type id="settings">
|
||||
<label>Thermostat Settings</label>
|
||||
|
|
Loading…
Reference in New Issue