This page is part of archived documentation for openHAB 3.1. Go to the current stable version

# Ecobee Binding

Ecobee Inc. (opens new window) of Toronto, Canada, sells a range of Wi-Fi enabled thermostats, principally in the Americas. This binding communicates with the Ecobee API (opens new window) over a secure, RESTful API to Ecobee's servers. Monitoring ambient temperature and humidity, changing HVAC mode, changing heat or cool setpoints, changing the backlight intensity, and even sending textual messages to one or a group of thermostats, can be accomplished through this binding.

# Supported Things

The following thing types are supported:

Thing ID Description
Account account Represents an Ecobee account. Manages all communication with the Ecobee API.
Thermostat thermostat Represents a physical Ecobee thermostat associated with the Ecobee Account.
Remote Sensor sensor Represents an Ecobee remote sensor that is associated with an Ecobee Thermostat. Also represents the internal sensor of an Ecobee Thermostat.

# Discovery

Once an Account has been set up, and the API key has been authorized, Thermostats and Remote Sensors will be discovered automatically. First, the thermostats will be added to the inbox. Then, once a Thermostat thing has been created, the Remote Sensors associated with that thermostat will be added to the inbox. The binding will detect the capabilities (e.g. temperature, humidity, occupancy) supported by the sensor, and then dynamically create channels for those capabilities.

# Getting Started

# Getting an API Key

Before you can start using the Ecobee binding, you need to get an API key. The following steps describe what you need to do.

  1. First you need to register your thermostat(s) with Ecobee. To complete this step, follow the directions in your Ecobee set up documentation.

  2. Once the thermostats are registered, the next step is to sign up as a developer. Do this from the Ecobee developer portal (opens new window).

  3. Now that you are set up as an Ecobee developer, login to your Ecobee web portal (opens new window). Once logged in, select the Developer option from the menu. If you don't see the Developer option on the menu, then something went wrong with the previous step.

  4. Finally, create a new application.

Give the application a name and fill in the application summary. Select the Ecobee PIN Authorization Method, then press Create. You now should see the API key for the application you just created.

# Authorization

After you have installed the binding, you can create the Account thing using the API key you just created. Once the Account thing is created, the binding will try to get information about your thermostats from the Ecobee web service. When this happens, the binding will determine that it has not yet been authorized by the Ecobee web service.

At this point the binding will retrieve a multi-character PIN code from the Ecobee web service. The binding will mark the Account thing OFFLINE with a detailed status message that contains the PIN code needed to complete the authorization. The PIN code will be valid for several minutes. The status message will look something like this.

Enter PIN 'JULO-RVLA' in MyApps. PIN expires in 257 minutes.

To complete the authorization, the PIN code must be entered into the Ecobee My Apps settings in your account at ecobee.com (opens new window). This will authorize the binding to work with the thermostats associated with your Ecobee account. Once authorization is complete, the binding will retrieve information about the available thermostats, and add those thermostats to the inbox.

# Ecobee Authorization Changes Effective 1 December 2020

Effective 1 Dec 2020, Ecobee implemented changes to their authorization process. Ecobee recommends that users who authorized with Ecobee prior to 1 Dec 2020 should reauthorize their application as the new process affords greater security. While the binding will continue to work using the old authorization method, it's recommended that you reauthorize the binding using the following process.

  • You may need to update openHAB to get the latest version of the binding

  • In the MyApps section of your Ecobee Portal, remove the application using the Remove App function.

  • Wait up to one hour for the binding to do a token refresh with the Ecobee servers.

  • At this point the Ecobee Account thing should be OFFLINE with a CONFIGURATION_PENDING status.

  • In the MyApps section of your Ecobee Portal, re-add the binding using the Add Application function. Use the PIN code that is displayed in the Ecobee Account thing status, or in the log file.

  • Confirm that the binding is again communicating with the Ecobee servers. You can do this by verifying that your items are updating, or by putting the binding in DEBUG mode and monitoring the log file.

  • Post any issues on the forum.

# Thing Configuration

# Ecobee Account

The following configuration parameters are available on the Ecobee Account:

Parameter Type Required/Optional Description
apiKey String Required This is the Ecobee API key, which is needed to authorize the binding with the Ecobee servers.
refreshIntervalNormal Integer Required Specifies the interval in seconds with which the Ecobee data will be updated under normal operation.
refreshIntervalQuick Integer Required Specifies the interval in seconds with which the Ecobee data will be updated after sending an update or executing a function.
apiTimeout Integer Required Time in seconds to allow an API request against the Ecobee servers to complete.
discoveryEnabled Switch Required Specifies whether the binding should auto-discover thermostats and remote sensors.

# Ecobee Thermostat

The following configuration parameters are available on the Ecobee Thermostat:

Parameter Required/Optional Description
thermostatId Required This is the ID that is assigned to a thermostat by Ecobee. This parameter is used for all communication with Ecobee involving this thermostat.

# Ecobee Remote Sensor

The following configuration parameters are available on the Ecobee Remote Sensor:

Parameter Required/Optional Description
sensorId Required This is the ID that is assigned to a remote and/or internal sensor by Ecobee.

# Channels

# Thermostat Channels

The following channels are available on the Ecobee Thermostat.

Group Channel Type ReadWrite Description
info identifier String Identifier
info name String yes Name
info thermostatRev String Thermostat Rev
info isRegistered Switch Is Registered
info modelNumber String Model Number
info brand String Brand
info features String Features
info lastModified DateTime Last Modified
info thermostatTime DateTime Thermostat Time
equipmentStatus equipmentStatus String Equipment Status
program currentClimateRef String Current Climate Ref
runtime runtimeRev String Runtime Rev
runtime connected Switch Connected
runtime firstConnected DateTime First Connected
runtime connectDateTime DateTime Connected Date Time
runtime disconnectDateTime DateTime Disconnected Date Timee
runtime lastModified DateTime Last Modified
runtime lastStatusModified DateTime Last Status Modified
runtime runtimeDate String Runtime Date
runtime runtimeInterval Number Runtime Interval
runtime actualTemperature Number:Temperature Actual Temperature
runtime actualHumidity Number:Dimensionless Actual Humidity
runtime rawTemperature Number:Temperature Raw Temperature
runtime showIconMode Number Show Icon Mode
runtime desiredHeat Number:Temperature Desired Heat
runtime desiredCool Number:Temperature Desired Cool
runtime desiredHumidity Number:Dimensionless Desired Humidity
runtime desiredDehumidity Number:Dimensionless Desired Dehumidity
runtime desiredFanMode String Desired Fan Mode
runtime desiredHeatRangeLow Number:Temperature Desired Heat Range Low
runtime desiredHeatRangeHigh Number:Temperature Desired Heat Range High
runtime desiredCoolRangeLow Number:Temperature Desired Cool Range Low
runtime desiredCoolRangeHigh Number:Temperature Desired Cool Range High
settings hvacMode String yes HVAC Mode
settings lastServiceDate String yes Last Service Date
settings serviceRemindMe Switch yes Service Remind Me
settings monthsBetweenService Number yes Months Between Service
settings remindMeDate String yes Remind Me Date
settings vent String yes Vent
settings ventilatorMinOnTime Number yes Ventilator Min On Time
settings serviceRemindTechnician Switch yes Service Remind Technician
settings eiLocation String yes EI Location
settings coldTempAlert Number:Temperature yes Cold Temp Alert
settings coldTempAlertEnabled Switch yes Cold Temp Alert Enabled
settings hotTempAlert Number:Temperature yes Hot Temp Alert
settings hotTempAlertEnabled Switch yes Hot Temp Alert Enabled
settings coolStages Number Cool Stages
settings heatStages Number Heat Stages
settings maxSetBack Number yes Max Set Back
settings maxSetForward Number yes Max Set Forward
settings quickSaveSetBack Number yes Quick Save Set Back
settings quickSaveSetForward Number yes Quick Save Set Forward
settings hasHeatPump Switch Has Heat Pump
settings hasForcedAir Switch Has Forced Air
settings hasBoiler Switch Has Boiler
settings hasHumidifier Switch Has Humidifier
settings hasElectric Switch Has Electric
settings hasDehumidifier Switch Has Dehumidifier
settings hasErv Switch Has ERV
settings hasHrv Switch Has HRV
settings condensationAvoid Switch yes Condensation Avoid
settings useCelsius Switch yes Use Celsius
settings useTimeFormat12 Switch yes Use Time Format 12
settings locale String yes Locale
settings humidity String yes Humidity
settings humidifierMode String yes Humidifier Mode
settings backlightOnIntensity Number yes Backlight On Intensity
settings backlightSleepIntensity Number yes Backlight Sleep Intensity
settings backlightOffTime Number yes Backlight Off Time
settings soundTickVolume Number yes Sound Tick Volume
settings soundAlertVolume Number yes Sound Alert Volume
settings compressorProtectionMinTime Number yes Compressor Protection Min Time
settings compressorProtectionMinTemp Number:Temperature yes Compressor Protection Min Temp
settings stage1HeatingDifferentialTemp Number yes Stage 1 Heating Differential Temp
settings stage1CoolingDifferentialTemp Number yes Stage 1 Cooling Differential Temp
settings stage1HeatingDissipationTime Number yes Stage 1 Heating Dissipation Time
settings stage1CoolingDissipationTime Number yes Stage 1 Cooling Dissipation Time
settings heatPumpReversalOnCool Switch yes Heat Pump Reversal On Cool
settings fanControlRequired Switch yes Fan Control Required
settings fanMinOnTime Number yes Fan Min On Time
settings heatCoolMinDelta Number yes Heat Cool Min Delta
settings tempCorrection Number yes Temp Correction
settings holdAction String yes Hold Action
settings heatPumpGroundWater Switch Heat Pump Ground Water
settings dehumidifierMode String yes Dehumidifier Mode
settings dehumidifierLevel Number yes Dehumidifier Level
settings dehumidifyWithAC Switch yes Dehumidify With AC
settings dehumidifyOvercoolOffset Number yes Dehumidify Overcool Effect
settings autoHeatCoolFeatureEnabled Switch yes Auto Heat Cool Feature Enabled
settings wifiOfflineAlert Switch yes WiFi Offline Alert
settings heatMinTemp Number:Temperature Heat Min Temp
settings heatMaxTemp Number:Temperature Heat Max Temp
settings coolMinTemp Number:Temperature Cool Min Temp
settings coolMaxTemp Number:Temperature Cool Max Temp
settings heatRangeHigh Number:Temperature yes Heat Range High
settings heatRangeLow Number:Temperature yes Heat Range Low
settings coolRangeHigh Number:Temperature yes Cool Range High
settings coolRangeLow Number:Temperature yes Cool Range Low
settings userAccessCode String User Access Code
settings userAccessSetting Number User Access Settings
settings auxRuntimeAlert Number yes Aux Runtime Alert
settings auxOutdoorTempAlert Number:Temperature yes Aux Outdoor Temp Alert
settings auxMaxOutdoorTemp Number:Temperature yes Aux Max Outdoor Temp
settings auxRuntimeAlertNotify Switch yes Aux Runtime Alert Notify
settings auxOutdoorTempAlertNotify Switch yes Aux Outdoor Temp Alert Notify
settings auxRuntimeAlertNotifyTechnician Switch yes Aux Runtime Alert Notify Technician
settings auxOutdoorTempAlertNotifyTechnician Switch yes Aux Outdoor Temp Alert Notify Technician
settings disablePreHeating Switch yes Disable Pre Heating
settings disablePreCooling Switch yes Disable Pre Cooling
settings installerCodeRequired Switch yes Installer Code Required
settings drAccept String yes DR Accept
settings isRentalProperty Switch yes Is Rental Property
settings useZoneController Switch yes Use Zone Controller
settings randomStartDelayCool Number yes Random Start Delay Cool
settings randomStartDelayHeat Number yes Random Start Delay Heat
settings humidityHighAlert Number:Dimensionless yes Humidity High Alert
settings humidityLowAlert Number:Dimensionless yes Humidity Low Alert
settings disableHeatPumpAlerts Switch yes Disable Heat Pump Alerts
settings disableAlertsOnIdt Switch yes Disable Alerts On IDT
settings humidityAlertNotify Switch yes Humidity Alert Notify
settings humidityAlertNotifyTechnician Switch yes Humidity Alert Notify Technician
settings tempAlertNotify Switch yes Temp Alert Notify
settings tempAlertNotifyTechnician Switch yes Temp Alert Notify Technician
settings monthlyElectricityBillLimit Number yes Monthly Electricity Bill Limit
settings enableElectricityBillAlert Switch yes Enable Electricity Bill Alert
settings enableProjectedElectricityBillAlert Switch yes Enable Projected Electricity Bill Alert
settings electricityBillingDayOfMonth Number yes Electricity Billing Day Of Month
settings electricityBillCycleMonths Number yes Electricity Bill Cycle Months
settings electricityBillStartMonth Number yes Electricity Bill Start Month
settings ventilatorMinOnTimeHome Number yes Ventilator Min On Time Home
settings ventilatorMinOnTimeAway Number yes Ventilator Min On Time Away
settings backlightOffDuringSleep Switch yes Backlight Off During Sleep
settings autoAway Switch yes Auto Away
settings smartCirculation Switch yes Smart Circulation
settings followMeComfort Switch yes Follow Me Comfort
settings ventilatorType String Ventilator Type
settings isVentilatorTimerOn Switch yes Is Ventilator Timer On
settings ventilatorOffDateTime String Ventilator Off Date Time
settings hasUVFilter Switch yes Has UV Filter
settings coolingLockout Switch yes Cooling Lockout
settings ventilatorFreeCooling Switch yes Ventilator Free Cooling
settings dehumidifyWhenHeating Switch yes Dehumidify When Heating
settings ventilatorDehumidify Switch yes Ventilator Dehumidify
settings groupRef String yes Group Ref
settings groupName String yes Group Name
settings groupSetting Number yes Group Setting
alerts acknowledgeRef String Acknowledge Ref
alerts date String Date
alerts time String Time
alerts severity String Severity
alerts text String Text
alerts number Number Number
alerts type String Type
alerts isOperatorAlert Switch Is Operator Alert
alerts reminder String Reminder
alerts showIdt Switch Show IDT
alerts showWeb Switch Show Web
alerts sendEmail Switch Send Email
alerts acknowledgement String Acknowledgement
alerts remindMeLater Switch Remind Me Later
alerts thermostatIdentifier String Thermostat Identifier
alerts notificationType String Notification Type
events name String Event Name
events type String Event Type
events running Switch Event is Running
events startDate String Event Start Date
events startTime String Event Start Time
events endDate String Event End Date
events endTime String Event End Time
events isOccupied Switch Is Occupied
events isCoolOff Switch Is Cool Off
events isHeatOff Switch Is Heat Off
events coolHoldTemp Number:Temperature Cool Hold Temp
events heatHoldTemp Number:Temperature Heat Hold Temp
events fan String Fan
events vent String Vent
events ventilatorMinOnTime Number Ventilator Min On Time
events isOptional Switch Is Optional
events isTemperatureRelative Switch Is Temperature Relative
events coolRelativeTemp Number Cool Relative Temp
events heatRelativeTemp Number Heat Relative Temp
events isTemperatureAbsolute Switch Is Temperature Absolute
events dutyCyclePercentage Number Duty Cycle Percentage
events fanMinOnTime Number Fan Min On Time
events occupiedSensorActive Switch Occupied Sensor Active
events unoccupiedSensorActive Switch Unoccupied Sensor Active
events drRampUpTemp Number DR Ramp Up Temp
events drRampUpTime Number DR Ramp Up Time
events linkRef String Link Ref
events holdClimateRef String Hold Climate Ref
weather timestamp DateTime Timestamp
weather weatherStation String Weather Station
weather weatherSymbol Number Symbol
weather weatherSymbolText String Symbol Text
forecast0..9 dateTime DateTime Date Time
forecast0..9 condition String Condition
forecast0..9 temperature Number:Temperature Temperature
forecast0..9 pressure Number:Pressure Pressure
forecast0..9 relativeHumidity Number:Dimensionless Relative Humidity
forecast0..9 dewpoint Number:Temperature Dewpoint
forecast0..9 visibility Number Visibility
forecast0..9 windSpeed Number:Speed Wind Speed
forecast0..9 windGust Number:Speed Wind Gust
forecast0..9 windDirection String Wind Direction
forecast0..9 windBearing Number:Angle Wind Bearing
forecast0..9 pop Number:Dimensionless Probability of Precipitation
forecast0..9 tempHigh Number:Temperature High Temperature
forecast0..9 tempLow Number:Temperature Low Temperature
forecast0..9 sky Number Sky
forecast0..9 skyText String Sky Text
location timeZoneOffsetMinutes Number Time Zone Offset Minutes
location timeZone String yes Time Zone
location isDaylightSaving Switch Is Daylight Saving
location streetAddress String yes Street Address
location city String yes City
location provinceState String yes Province/State
location country String yes Country
location postalCode String yes Postal Code
location phoneNumber String yes Phone Number
location mapCoordinates Location yes Thermostat Location
houseDetails style String yes Style
houseDetails size Number yes Size
houseDetails numberOfFloors Number yes Number of Floors
houseDetails numberOfRooms Number yes Number of Rooms
houseDetails numberOfOccupants Number yes Number of Occupants
houseDetails age Number yes Age
houseDetails windowEfficiency Number yes Window Efficiency
management administrativeContact String Administrative Contact
management billingContact String Billing Contact
management name String Name
management phone String Phone
management email String Email
management web String Web
management showAlertIdt Switch Show Alert Idt
management showAlertWeb Switch Show Alert Web
technician contractorRef String Contractor Ref
technician name String Name
technician phone String Phone
technician streetAddress String Street Address
technician city String City
technician provinceState String yes Province/State
technician country String Country
technician postalCode String Postal Code
technician email String Email
technician web String Web
version thermostatFirmwareVersion String Firmware Version

# Remote Sensor Channels

The following channels are available on the Ecobee Remote Sensor.

Channel Type ReadWrite Description
id String Sensor ID assigned by thermostat
name String Name given to the remote sensor by the user
type String The type of sensor
code String The unique 4-digit alphanumeric sensor code
inUse Switch Indicates whether the remote sensor is currently in use by a comfort setting

Some or all of the following Remote Sensor channels will be added dynamically depending on the capabilities of the sensor.

Channel Type ReadWrite Description
temperature Number:Temperature Temperature reported by the sensor
humidity Number:Dimensionless Humidity reported by the sensor
occupancy Switch Occupancy status reported by the sensor
co2 String CO2 reported by the sensor
dryContact String Dry contact status reported by the sensor
adc String ADC reported by the sensor

# Thing Actions

# Acknowledge

The acknowledge function allows an alert to be acknowledged by specifying the alert's acknowledgement ref.

# acknowledge - acknowledge an alert
boolean acknowledge(String ackRef, String ackType, Boolean remindMeLater)
Parameters:
ackRef - The acknowledge ref of alert.
ackType - The type of acknowledgement. Valid values: accept, decline, defer, unacknowledged.
remindMeLater - Whether to remind at a later date, if this is a defer acknowledgement.

Returns - true if the operation was successful, false otherwise

# Control Plug

Control the on/off state of a plug by setting a hold on the plug. Creates a hold for the on or off state of the plug for the specified duration. Note that an event is created regardless of whether the program is in the same state as the requested state.

# controlPlug - Control the on/off state of a plug
boolean controlPlug(String plugName, String plugState, Date startDateTime, Date endDateTime, String holdType, Number holdHours)
Parameters:
plugName - Name of plug to be controlled.
plugState - State to which plug should be set (on, off, resume).
startDateTime - Start time for which the plug state should be applied.
endDateTime - End time for which the plug state should be applied.
holdType - Type of hold that should be applied (dateTime, nextTransityion, indefinite, holdHours).
holdHours - Number of hours for which the plug state should be applied.

Returns - true if the operation was successful, false otherwise

# Create Vacation

If the start/end date/times are not provided for the vacation event, the vacation event will begin immediately and last 14 days. If both the coolHoldTemp and heatHoldTemp parameters provided to this function have the same value, and the Thermostat is in auto mode, then the two values will be adjusted during processing to be separated by the value stored in thermostat.settings.heatCoolMinDelta.

# createVacation - Create a vacation event on the thermostat
boolean createVacation(String name, QuantityType<Temperature> coolHoldTemp, QuantityType<Temperature> heatHoldTemp, Date startDateTime, Date endDateTime, String fan, Number fanMinOnTime)
Parameters:
name - The vacation event name. It must be unique.
coolHoldTemp - The temperature to set the cool vacation hold at.
heatHoldTemp - The temperature to set the heat vacation hold at.
startDateTime - The start date/time.
endDateTime - The end date/time.
fan - The fan mode during the vacation. Values: auto, on Default: auto
fanMinOnTime - The minimum number of minutes to run the fan each hour. Range: 0-60, Default: 0

Returns - true if the operation was successful, false otherwise

# Delete Vacation

The delete vacation function deletes a vacation event from a thermostat. This is the only way to cancel a vacation event. This method is able to remove vacation events not yet started and scheduled in the future.

# deleteVacation - delete a vacation event from a thermostat
boolean deleteVacation(String name)
Parameters:
name - Name of vacation to be deleted.

Returns - true if the operation was successful, false otherwise

# Reset Preferences

The reset preferences function sets all of the user configurable settings back to the factory default values. This function call will not only reset the top level thermostat settings such as hvacMode, lastServiceDate and vent, but also all of the user configurable fields of the thermostat.settings and thermostat.program objects. Note that this does not reset all values. For example, the installer settings and wifi details remain untouched.

# resetPreferences - Sets all user configurable settings back to factory defaults
boolean resetPreferences()
Returns - true if the operation was successful, false otherwise

# Resume program

The resume program function removes the currently running event providing the event is not a mandatory demand response event. If resumeAll parameter is not set, top active event is removed from the stack and the thermostat resumes its program, or enters the next event in the stack if one exists. If resumeAll parameter set to true, the function resumes all events and returns the thermostat to its program.

# resumeProgram - Remove the currently running event
boolean resumeProgram(Boolean resumeAll)
Parameters:
resumeAll - Indicates if the thermostat should be resumed to next event (false) or to its program (true).

Returns - true if the operation was successful, false otherwise

# Send Message

The send message function allows an alert message to be sent to the thermostat. The message properties are same as those of the Alert Object.

# - sendMessage - Send a message to a thermostat
boolean sendMessage(String text)
Parameters:
text - Text of message to be sent to the thermostat.

Returns - true if the operation was successful, false otherwise

# Set Hold

The set hold function sets the thermostat into a hold with the specified temperature. Creates a hold for the specified duration. Note that an event is created regardless of whether the program is in the same state as the requested state.

There is also support for creating a hold by passing a holdClimateRef request parameter/value pair to this function. When an existing and valid Climate.climateRef value is passed to this function, the coolHoldTemp, heatHoldTemp and fan mode from that Climate are used in the creation of the hold event. The values from that Climate will take precedence over any coolHoldTemp, heatHoldTemp and fan mode parameters passed into this function separately.

To resume from a hold and return to the program, use the resumeProgram function.

# setHold - Set an indefinite hold using the supplied coolHoldTemp and heatHoldTemp
boolean setHold(QuantityType<Temperature> coolHoldTemp, QuantityType<Temperature> heatHoldTemp)
Parameters:
coolHoldTemp - The temperature to set the cool hold at.
heatHoldTemp - The temperature to set the heat hold at.

Returns - true if the operation was successful, false otherwise
# setHold - Set a hold using the supplied cool and heat temperatures that lasts for the specified number of hours
boolean setHold(QuantityType<Temperature> coolHoldTemp, QuantityType<Temperature> heatHoldTemp, Number holdHours)
Parameters:
coolHoldTemp - The temperature to set the cool hold at.
heatHoldTemp - The temperature to set the heat hold at.
holdHours - Duration of hold.

Returns - true if the operation was successful, false otherwise
# setHold - Set an indefinite hold using the supplied climate ref
boolean setHold(String climateRef)
Parameters:
climateRef - Climate to be applied to thermostat (e.g. home, away).

Returns - true if the operation was successful, false otherwise
# setHold - Set a hold using the supplied climate ref that lasts for the specified number of hours
boolean setHold(String climateRef, Number holdHours)
Parameters:
climateRef - Climate to be applied to thermostat (e.g. home, away).
holdHours - Duration of hold.

Returns - true if the operation was successful, false otherwise
# setHold
boolean setHold(QuantityType<Temperature> coolHoldTemp, QuantityType<Temperature> heatHoldTemp, String holdClimateRef, Date startDateTime, Date endDateTime, String holdType, Number holdHours)
Parameters:
coolHoldTemp - The temperature to set the cool hold at.
heatHoldTemp - The temperature to set the heat hold at.
holdClimateRef - Climate to be applied to thermostat (e.g. home, away).
startDateTime - The start date/time of the hold.
endDateTime - The end date/time of the hold.
holdType - The hold duration type. Valid values: dateTime, nextTransition, indefinite, holdHours.
holdHours - Duration of hold.

Returns - true if the operation was successful, false otherwise
# setHold
boolean setHold(Map<String,Object> params, String holdType, Number holdHours, Date startDateTime, Date endDateTime)

Parameters:
params - The map of hold parameters.
holdType - The hold duration type. Valid values: dateTime, nextTransition, indefinite, holdHours.
holdHours - Duration of hold.
startDateTime - The start date/time of the hold.
endDateTime - The end date/time of the hold.

Returns - true if the operation was successful, false otherwise

# Set Occupied

The set occupied function may only be used by EMS thermostats. The function switches a thermostat from occupied mode to unoccupied, or vice versa. If used on a Smart thermostat, the function will throw an error. Switch occupancy events are treated as Holds. There may only be one Switch Occupancy at one time, and the new event will replace any previous event.

Note that an occupancy event is created regardless what the program on the thermostat is set to. For example, if the program is currently unoccupied and you set occupied=false, an occupancy event will be created using the heat/cool settings of the unoccupied program climate. If your intent is to go back to the program and remove the occupancy event, use resumeProgram instead.

# setOccupied -
boolean setOccupied(Boolean occupied, Date startDateTime, Date endDateTime, String holdType, Number holdHours)
Parameters:
occupied - The climate to use for the temperature, occupied (true) or unoccupied (false).
holdType - The hold duration type. Valid values: dateTime, nextTransition, indefinite, holdHours.
holdHours - Duration of hold.
startDateTime - The start date/time.
endDateTime - The end date/time.

Returns - true if the operation was successful, false otherwise

# Update Sensor

The update sensor function allows the caller to update the name of an ecobee3 remote sensor.

Each ecobee3 remote sensor "enclosure" contains two distinct sensors types temperature and occupancy. Only one of the sensors is required in the request. Both of the sensors' names will be updated to ensure consistency as they are part of the same remote sensor enclosure. This also reflects accurately what happens on the Thermostat itself.

# updateSensor - Update the name of a sensor
boolean updateSensor(String name, String deviceId, String sensorId)
Parameters:
name - The updated name to give the sensor. Has a max length of 32, but shorter is recommended.
deviceId - The deviceId for the sensor, typically this indicates the enclosure and corresponds to the ThermostatRemoteSensor.id field. For example: rs:100
sensorId - The idendifier for the sensor within the enclosure. Corresponds to the RemoteSensorCapability.id. For example: 1

Returns - true if the operation was successful, false otherwise

# Get Alerts

# getAlerts - Get the list of alerts
String getAlerts()
Returns - A JSON string representing the array of alerts for the thermostat, or null if there are no alerts.

# Get Events

# getEvents - Get the list of events
String getEvents()
Returns - A JSON string representing the array of events for the thermostat, or null if there are no events.

# Get Climates

# getClimates - Get the list of climates configured on this thermostat
String getClimates()
Returns - A JSON string representing the array of climates for the thermostat.

# Full Example

# Things

Bridge ecobee:account:account "Ecobee Account" [ apiKey="kjafhd4YTiucye48yn498n94c8ufn49", refreshIntervalNormal=30, refreshIntervalQuick=5, apiTimeout=20, discoveryEnabled=false ] {
    Bridge thermostat 32122305166 "Ecobee First Floor Thermostat" [ thermostatId="32122305166" ] {
        Thing sensor ei-0 "Ecobee Sensor Thermostat" [ sensorId="ei:0" ] {
            Channels:
                Type sensorTemperature : temperature [ ]
                Type sensorHumidity : humidity [ ]
                Type sensorOccupancy : occupancy [ ]
        }
        Thing sensor rs-101 "Ecobee Sensor Room 1" [ sensorId="rs:101" ] {
            Channels:
                Type sensorTemperature : temperature [ ]
                Type sensorOccupancy : occupancy [ ]
        }
        Thing sensor rs-100 "Ecobee Sensor Room 2" [ sensorId="rs:100" ] {
            Channels:
                Type sensorTemperature : temperature [ ]
                Type sensorOccupancy : occupancy [ ]
        }
    }
    Bridge thermostat 385421394655 "Ecobee Upstairs Thermostat" [ thermostatId="385421394655" ] {
    }
}

# Items

Group gInfo "Information"
Group gRuntime "Runtime"
Group gEquipmentStatus "Equipment Status"
Group gSettings "Settings"
Group gProgram "Program"
Group gAlert "First Alert in Alert List"
Group gEvent "Currently Running Event"
Group gWeather "Weather Forecast"
Group gVersion "Version"
Group gLocation "Location"
Group gHouseDetails "House Details"
Group gManagement "Management"
Group gTechnician "Technician"
Group gThermostatSensor "Thermostat Sensor"
Group gRoom1Sensor "Room 1 Sensor"
Group gRoom2Sensor "Room 2 Sensor"

// Info group
String Info_Identifier "Thermostat Identifier [%s]" <text> (gInfo) { channel="ecobee:thermostat:account:729318833078:info#identifier" }
String Info_Name "Thermostat Name [%s]" <text> (gInfo) { channel="ecobee:thermostat:account:729318833078:info#name" }
String Info_ThermostatRev "Thermostat Rev [%s]" <text> (gInfo) { channel="ecobee:thermostat:account:729318833078:info#thermostatRev" }
Switch Info_IsRegistered "Is Registered [%s]" <switch> (gInfo) { channel="ecobee:thermostat:account:729318833078:info#isRegistered" }
String Info_ModelNumber "Model Number [%s]" <text> (gInfo) { channel="ecobee:thermostat:account:729318833078:info#modelNumber" }
String Info_Brand "Brand [%s]" <text> (gInfo) { channel="ecobee:thermostat:account:729318833078:info#brand" }
String Info_Features "Features [%s]" <text> (gInfo) { channel="ecobee:thermostat:account:729318833078:info#features" }
DateTime Info_LastModified "Last Modified [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gInfo) { channel="ecobee:thermostat:account:729318833078:info#lastModified" }
DateTime Info_ThermostatTime "Thermostat Time [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gInfo) { channel="ecobee:thermostat:account:729318833078:info#thermostatTime" }

// Equipment Status group
String EquipmentStatus_EquipmentStatus "Equipment Status [%s]" <text> (gEquipmentStatus) { channel="ecobee:thermostat:account:729318833078:equipmentStatus#equipmentStatus" }

// Runtime group
String Runtime_RuntimeRev "Runtime Rev [%s]" <text> (gRuntime) ["tag"] { channel="ecobee:thermostat:account:729318833078:runtime#runtimeRev" }
Switch Runtime_Connected "Connected [%s]" <switch> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#connected" }
DateTime Runtime_FirstConnected "First Connected [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#firstConnected" }
DateTime Runtime_ConnectDateTime "Connect Date Time [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#connectDateTime" }
DateTime Runtime_DisconnectDateTime "Disconnect Date Time [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#disconnectDateTime" }
DateTime Runtime_LastModified "Last Modified [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#lastModified" }
DateTime Runtime_LastStatusModified "Last Status Modified [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#lastStatusModified" }
String Runtime_RuntimeDate "Runtime Date [%s]" <text> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#runtimeDate" }
Number Runtime_RuntimeInterval "Runtime Interval [%.0f]" <none> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#runtimeInterval" }
Number:Temperature Runtime_ActualTemperature "Actual Temperature [%.1f %unit%]" <temperature> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#actualTemperature" }
Number:Dimensionless Runtime_ActualHumidity "Actual Humidity [%.0f %unit%]" <humidity> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#actualHumidity" }
Number:Temperature Runtime_RawTemperature "Raw Temperature [%.1f %unit%]" <temperature> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#rawTemperature" }
Number Runtime_ShowIconMode "Show Icon Mode [%.0f]" <none> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#showIconMode" }
Number:Temperature Runtime_DesiredHeat "Desired Heat [%.1f %unit%]" <temperature> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#desiredHeat" }
Number:Temperature Runtime_DesiredCool "Desired Cool [%.1f %unit%]" <temperature> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#desiredCool" }
Number:Dimensionless Runtime_DesiredHumidity "Desired Humidity [%.0f %unit%]" <humidity> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#desiredHumidity" }
Number:Dimensionless Runtime_DesiredDehumidity "Desired Dehumidity [%.0f %unit%]" <humidity> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#desiredDehumidity" }
String Runtime_DesiredFanMode "Desired Fan Mode [%s]" <text> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#desiredFanMode" }
Number:Temperature Runtime_DesiredHeatRangeLow "Desired Heat Range Low [%.1f %unit%]" <temperature> (gRuntime) { channel="ecobee:thermostat:account:729318833078:runtime#desiredHeatRangeLow" }
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" }

// Settings group
String Settings_HvacMode "HVAC Mode [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hvacMode" }
String Settings_LastServiceDate "Last Service Date [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#lastServiceDate" }
Switch Settings_ServiceRemindMe "Service Remind Me [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#serviceRemindMe" }
Number Settings_MonthsBetweenService "Months Between Service [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#monthsBetweenService" }
String Settings_RemindMeDate "Remind Me Date [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#remindMeDate" }
String Settings_Vent "Vent [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#vent" }
Number Settings_VentilatorMinOnTime "Ventilator Min On Time [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#ventilatorMinOnTime" }
Switch Settings_ServiceRemindTechnician "Service Remind Technician [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#serviceRemindTechnician" }
String Settings_Location "EI Location [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#eiLocation" }
Number:Temperature Settings_ColdTempAlert "Cold Temp Alert [%.0f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#coldTempAlert" }
Switch Settings_ColdTempAlertEnabled "Cold Temp Alert Enabled [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#coldTempAlertEnabled" }
Number:Temperature Settings_HotTempAlert "Hot Temp Alert [%.0f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hotTempAlert" }
Switch Settings_HotTempAlertEnabled "Hot Temp Alert Enabled [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hotTempAlertEnabled" }
Number Settings_CoolStages "Cool Stages [%s]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#coolStages" }
Number Settings_HeatStages "Heat Stages [%s]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#heatStages" }
Number Settings_MaxSetBack "Max Set Back [%s]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#maxSetBack" }
Number Settings_MaxSetForward "Max Set Forward [%s]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#maxSetForward" }
Number Settings_QuickSaveSetBack "Quick Save Set Back [%s]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#quickSaveSetBack" }
Number Settings_QuickSaveSetForward "Quick Save Set Forward [%s]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#quickSaveSetForward" }
Switch Settings_HasHeatPump "Has Heat Pump [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hasHeatPump" }
Switch Settings_HasForcedAir "Has Forced Air [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hasForcedAir" }
Switch Settings_HasBoiler "Has Boiler [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hasBoiler" }
Switch Settings_HasHumidifier "Has Humidifier [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hasHumidifier" }
Switch Settings_HasERV "Has ERV [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hasErv" }
Switch Settings_HasHRV "Has HRV [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hasHrv" }
Switch Settings_CondensationAvoid "Condensation Avoid [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#condensationAvoid" }
Switch Settings_UseCelsius "Use Celsius [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#useCelsius" }
Switch Settings_UseTime_Format12 "Use Time Format 12 [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#useTimeFormat12" }
String Settings_Locale "Locale [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#locale" }
String Settings_Humidity "Humidity [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#humidity" }
String Settings_HumidifierMode "Humidifier Mode [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#humidifierMode" }
Number Settings_BacklightOnIntensity "Backlight On Intensity [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#backlightOnIntensity" }
Number Settings_BacklightSleepIntensity "Backlight Sleep Intensity [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#backlightSleepIntensity" }
Number Settings_BacklightOffTime "Backlight Off Time [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#backlightOffTime" }
Number Settings_SoundTickVolume "Sound Tick Volume [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#soundTickVolume" }
Number Settings_SoundAlertVolume "Sound Alert Volume [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#soundAlertVolume" }
Number Settings_CompressorProtectionMinTime "Compressor Protection Min Time [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#compressorProtectionMinTime" }
Number:Temperature Settings_CompressorProtectionMinTemp "Compressor Protection Min Temp [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#compressorProtectionMinTemp" }
Number Settings_Stage1HeatingDifferentialTemp "Stage 1 Heating Differential Temp [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#stage1HeatingDifferentialTemp" }
Number Settings_Stage1CoolingDifferentialTemp "Stage 1 Cooling Differential Temp [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#stage1CoolingDifferentialTemp" }
Number Settings_Stage1HeatingDissipationTime "Stage 1 Heating Dissipation Time [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#stage1HeatingDissipationTime" }
Number Settings_Stage1CoolingDissipationTime "Stage 1 Cooling Dissipation Time [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#stage1CoolingDissipationTime" }
Switch Settings_HeatPumpReversalOnCool "Heat Pump Reversal On Cool [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#heatPumpReversalOnCool" }
Switch Settings_FanControlRequired "Fan Control Required [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#fanControlRequired" }
Number Settings_FanMinOnTime "Fan Min On Time [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#fanMinOnTime" }
Number Settings_HeatCoolMinDelta "Heat Cool Min Delta [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#heatCoolMinDelta" }
Number Settings_TempCorrection "Temp Correction [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#tempCorrection" }
String Settings_HoldAction "Hold Action [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#holdAction" }
Switch Settings_HeatPumpGroundWater "Heat Pump Ground Water [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#heatPumpGroundWater" }
Switch Settings_HasElectric "Has Electric [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hasElectric" }
Switch Settings_HasDehumidifier "Has Dehumidifier [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hasDehumidifier" }
String Settings_DehumidifierMode "Dehumidifier Mode [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#dehumidifierMode" }
Number Settings_DehumidifierLevel "Dehumidifier Level [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#dehumidifierLevel" }
Switch Settings_DehumidifyWithAC "Dehumidify With AC [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#dehumidifyWithAC" }
Number Settings_DehumidifyOvercoolEffect "Dehumidify Overcool Effect [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#dehumidifyOvercoolOffset" }
Switch Settings_AutoHeatCoolFeatureEnabled "Auto Heat Cool Feature Enabled [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#autoHeatCoolFeatureEnabled" }
Switch Settings_WiFiOfflineAlert "WiFi Offline Alert [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#wifiOfflineAlert" }
Number:Temperature Settings_HeatMinTemp "Heat Min Temp [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#heatMinTemp" }
Number:Temperature Settings_HeatMaxTemp "Heat Max Temp [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#heatMaxTemp" }
Number:Temperature Settings_CoolMinTemp "Cool Min Temp [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#coolMinTemp" }
Number:Temperature Settings_CoolMaxTemp "Cool Max Temp [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#coolMaxTemp" }
Number:Temperature Settings_HeatRangeHigh "Heat Range High [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#heatRangeHigh" }
Number:Temperature Settings_HeatRangeLow "Heat Range Low [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#heatRangeLow" }
Number:Temperature Settings_CoolRangeHigh "Cool Range High [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#coolRangeHigh" }
Number:Temperature Settings_CoolRangeLow "Cool Range Low [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#coolRangeLow" }
String Settings_UserAccessCode "User Access Code [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#userAccessCode" }
Number Settings_UserAccessSettings "User Access Settings [%s]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#userAccessSetting" }
Number Settings_AuxRuntimeAlert "Aux Runtime Alert [%s]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#auxRuntimeAlert" }
Number:Temperature Settings_AuxOutdoorTempAlert "Aux Outdoor Temp Alert [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#auxOutdoorTempAlert" }
Number:Temperature Settings_AuxMaxOutdoorTemp "Aux Max Outdoor Temp [%.1f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#auxMaxOutdoorTemp" }
Switch Settings_AuxRuntimeAlertNotify "Aux Runtime Alert Notify [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#auxRuntimeAlertNotify" }
Switch Settings_AuxOutdoorTempAlertNotify "Aux Outdoor Temp Alert Notify [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#auxOutdoorTempAlertNotify" }
Switch Settings_AuxRuntimeAlertNotifyTechnician "Aux Runtime Alert Notifi Technician [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#auxRuntimeAlertNotifyTechnician" }
Switch Settings_AuxOutdoorTempAlertNotifyTechnician "Aux Outdoor Temp Alert Notify Technician [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#auxOutdoorTempAlertNotifyTechnician" }
Switch Settings_DisablePreHeating "Disable Pre Heating [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#disablePreHeating" }
Switch Settings_DisablePreCooling "Disable Pre Cooling [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#disablePreCooling" }
Switch Settings_InstallerCodeRequired "Installer Code Required [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#installerCodeRequired" }
String Settings_DRAccept "DR Accept [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#drAccept" }
Switch Settings_IsRentalProperty "Is Rental Property [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#isRentalProperty" }
Switch Settings_UseZoneController "Use Zone Controller [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#useZoneController" }
Number Settings_RandomStartDelayCool "Random Start Delay Cool [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#randomStartDelayCool" }
Number Settings_RandomStartDelayHeat "Random Start Delay Heat [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#randomStartDelayHeat" }
Number:Dimensionless Settings_HumidityHighAlert "Humidity High Alert [%.0f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#humidityHighAlert" }
Number:Dimensionless Settings_HumidityLowAlert "Humidity Low Alert [%.0f %unit%]" <temperature> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#humidityLowAlert" }
Switch Settings_DisableHeatPumpAlerts "Disable Heat Pump Alerts [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#disableHeatPumpAlerts" }
Switch Settings_DisableAlertsOnIDT "Disable Alerts On IDT [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#disableAlertsOnIdt" }
Switch Settings_HumidityAlertNotify "Humidity Alert Notify [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#humidityAlertNotify" }
Switch Settings_HumidityAlertNotifyTechnicial "Humidity Alert Notify Technician [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#humidityAlertNotify" }
Switch Settings_TempAlertNotify "Temp Alert Notify [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#tempAlertNotify" }
Switch Settings_TempAlertNotifyTechnician "Temp Alert Notify Technician [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#tempAlertNotify" }
Number Settings_MonthlyElectricityBillLimit "Monthly Electricity Bill Limit [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#monthlyElectricityBillLimit" }
Switch Settings_EnableElectricityBillAlert "Enable Electricity Bill Alert [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#enableElectricityBillAlert" }
Switch Settings_EnableProjectedElectricityBillAlert "Enable Projected Electricity Bill Alert [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#enableProjectedElectricityBillAlert" }
Number Settings_ElectricityBillingDayOfMonth "Electricity Billing Day Of Month [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#electricityBillingDayOfMonth" }
Number Settings_ElectricityBillCycleMonths "Electricity Bill Cycle Months [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#electricityBillCycleMonths" }
Number Settings_ElectricityBillStartMonth "Electricity Bill Start Month [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#electricityBillStartMonth" }
Number Settings_VentilatorMinOnTimeHome "Ventilator Min On Time Home [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#ventilatorMinOnTimeHome" }
Number Settings_VentilatorMinOnTimeAway "Ventilator Min On Time Away [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#ventilatorMinOnTimeAway" }
Switch Settings_BacklightOffDuringSleep "Backlight Off During Sleep [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#backlightOffDuringSleep" }
Switch Settings_AutoAway "Auto Away [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#autoAway" }
Switch Settings_SmartCirculation "Smart Circulation [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#smartCirculation" }
Switch Settings_FollowMeComfort "Follow Me Comfort [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#followMeComfort" }
String Settings_VentilatorType "Ventilator Type [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#ventilatorType" }
Switch Settings_IsVentilatorTimerOn "Is Ventilator Timer On [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#isVentilatorTimerOn" }
String Settings_VentilatorOffDateTime "Ventilator Off Date Time [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#ventilatorOffDateTime" }
Switch Settings_HasUVFilter "Has UV Filter [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#hasUVFilter" }
Switch Settings_CoolingLockout "Cooling Lockout [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#coolingLockout" }
Switch Settings_VentilatorFreeCooling "Ventilator Free Cooling [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#ventilatorFreeCooling" }
Switch Settings_DehumidifyWhenHeating "Dehumidify When Heating [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#dehumidifyWhenHeating" }
Switch Settings_VentilatorDehumidify "Ventilator Dehumidify [%s]" <switch> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#ventilatorDehumidify" }
String Settings_GroupRef "Group Ref [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#groupRef" }
String Settings_GroupName "Group Name [%s]" <text> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#groupName" }
Number Settings_GroupSetting "Group Setting [%.0f]" <none> (gSettings) { channel="ecobee:thermostat:account:729318833078:settings#groupSetting" }

// Alert group
String Alert_Achnowledge_Ref "Alert Achnowledge Ref [%s]" <text> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#acknowledgeRef" }
String Alert_Date "Date [%s]" <date> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#date" }
String Alert_Time "Time [%s]" <time> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#time" }
String Alert_Severity "Severity [%s]" <text> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#severity" }
String Alert_Text "Alert Text [%s]" <text> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#text" }
Number Alert_AlertNumber "Alert Number [%.0f]" (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#number" }
String Alert_AlertType "Alert Type [%s]" <text> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#type" }
Switch Alert_IsOperatorAlert "Is Operator Alert [%s]" <switch> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#isOperatorAlert" }
String Alert_Reminder "Reminder [%s]" <text> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#reminder" }
Switch Alert_ShowIdt "Show IDT [%s]" <switch> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#showIdt" }
Switch Alert_ShowWeb "Show Web [%s]" <switch> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#showWeb" }
Switch Alert_SendEmail "Send Email [%s]" <switch> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#sendEmail" }
String Alert_Acknowledgement "Acknowledgement [%s]" <text> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#acknowledgement" }
Switch Alert_RemindMeLater "Remind Me Later [%s]" <switch> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#remindMeLater" }
String Alert_ThermostatIdentifier "Thermostat Identifier [%s]" <text> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#thermostatIdentifier" }
String Alert_NotificationType "Notification Type [%s]" <text> (gAlert) { channel="ecobee:thermostat:account:729318833078:alerts#notificationType" }

// Program group
String Program_CurrentClimateRef "Current Climate Ref [%s]" <text> (gProgram) { channel="ecobee:thermostat:account:729318833078:program#currentClimateRef" }

// Events group
String Event_Name "Name [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#name" }
String Event_Type "Type [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#type" }
Switch Event_Running "Running [%s]" <switch> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#running" }
String Event_StartDate "Start Date [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#startDate" }
String Event_StartTime "Start Time [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#startTime" }
String Event_EndDate "End Date [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#endDate" }
String Event_EndTime "End Time [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#endTime" }
Switch Event_IsOccupied "Running [%s]" <switch> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#isOccupied" }
Switch Event_IsCoolOff "Is Cool Off [%s]" <switch> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#isCoolOff" }
Switch Event_HeatOff "Is Heat Off [%s]" <switch> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#isHeatOff" }
Number:Temperature Event_CoolHoldTemp "Cool Hold Temp [%.1f %unit%]" (gEvent) { channel="ecobee:thermostat:account:729318833078:events#coolHoldTemp" }
Number:Temperature Event_HeatHoldTemp "Heat Hold Temp [%.1f %unit%]" (gEvent) { channel="ecobee:thermostat:account:729318833078:events#heatHoldTemp" }
String Event_Fan "Fan [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#fan" }
String Event_Vent "Vent [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#vent" }
Number Event_VentilatorMinOnTime "Ventilator Min On Time [%.0f]" <none> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#ventilatorMinOnTime" }
Switch Event_IsOptional "Is Optional [%s]" <switch> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#isOptional" }
Switch Event_IsTemperatureRelative "Is Temperature Relative [%s]" <switch> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#isTemperatureRelative" }
Number Event_CoolRelativeTemp "Cool Relative Temp [%.0f]" <none> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#coolRelativeTemp" }
Number Event_HeatRelativeTemp "Heat Relative Temp [%.0f]" <none> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#heatRelativeTemp" }
Switch Event_IsTemperatureAbsolute "Is Temperature Absolute [%s]" <switch> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#isTemperatureAbsolute" }
Number Event_DutyCyclePercentage "Duty Cycle Percentage [%.0f]" <none> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#dutyCyclePercentage" }
Number Event_FanMinOnTime "Fan Min On Time [%.0f]" <none> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#fanMinOnTime" }
Switch Event_OccupiedSensorActive "Occupied Sensor Active [%s]" <switch> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#occupiedSensorActive" }
Switch Event_UnoccupiedSensorActive "Unoccupied Sensor Active [%s]" <switch> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#unoccupiedSensorActive" }
Number Event_DrRampUpTemp "DR Ramp Up Temp [%.0f]" <none> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#drRampUpTemp" }
Number Event_DrRampUpTime "DR Ramp Up Time [%.0f]" <none> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#drRampUpTime" }
String Event_LinkRef "Link Ref [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#linkRef" }
String Event_HoldClimateRef "Hold Climate Ref [%s]" <text> (gEvent) { channel="ecobee:thermostat:account:729318833078:events#holdClimateRef" }

// Version group
String Version_ThermostatFirmwareVersion "Thermostat Firmware Version [%s]" <text> (gVersion) { channel="ecobee:thermostat:account:729318833078:version#thermostatFirmwareVersion" }

// Location group
Number Location_TimeZoneOffsetMinutes "Time Zone Offset Minutes [%.0f]" <none> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#timeZoneOffsetMinutes" }
String Location_TimeZone "Time Zone [%s]" <text> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#timeZone" }
Switch Location_IsDaylightSaving "Is Daylight Saving [%s]" <switch> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#isDaylightSaving" }
String Location_StreetAddress "Street Address [%s]" <text> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#streetAddress" }
String Location_City "City [%s]" <text> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#city" }
String Location_ProvinceState "Province/State [%s]" <text> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#provinceState" }
String Location_Country "Country [%s]" <text> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#country" }
String Location_PostalCode "Postal Code [%s]" <text> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#postalCode" }
String Location_PhoneNumber "Phone Number [%s]" <text> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#phoneNumber" }
Location Location_MapCoordinates "Lat/Lon [%s]" <none> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#mapCoordinates" }
Switch Location_ShowAlertIdt "Show Alert Idt [%s]" <switch> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#showAlertIdt" }
Switch Location_ShowAlertWeb "Show Alert Web [%s]" <switch> (gLocation) { channel="ecobee:thermostat:account:729318833078:location#showAlertWeb" }

// House Details group
String HouseDetails_Style "Style [%s]" <text> (gHouseDetails) { channel="ecobee:thermostat:account:729318833078:houseDetails#style" }
Number HouseDetails_Size "Size [%.0f]" <none> (gHouseDetails) { channel="ecobee:thermostat:account:729318833078:houseDetails#size" }
Number HouseDetails_NumberOfFloors "Number of Floors [%.0f]" <none> (gHouseDetails) { channel="ecobee:thermostat:account:729318833078:houseDetails#numberOfFloors" }
Number HouseDetails_NumberOfRooms "Number of Rooms [%.0f]" <none> (gHouseDetails) { channel="ecobee:thermostat:account:729318833078:houseDetails#numberOfRooms" }
Number HouseDetails_NumberOfOccupants "Number of Occupants [%.0f]" <none> (gHouseDetails) { channel="ecobee:thermostat:account:729318833078:houseDetails#numberOfOccupants" }
Number HouseDetails_Age "Age [%.0f]" <none> (gHouseDetails) { channel="ecobee:thermostat:account:729318833078:houseDetails#age" }
Number HouseDetails_WindowEfficiency "Window Efficiency [%.0f]" <none> (gHouseDetails) { channel="ecobee:thermostat:account:729318833078:houseDetails#windowEfficiency" }

// Management group
String Management_AdministrativeContact "Administrative Contact [%s]" <text> (gManagement) { channel="ecobee:thermostat:account:729318833078:management#administrativeContact" }
String Management_BillingContact "Billing Contact [%s]" <text> (gManagement) { channel="ecobee:thermostat:account:729318833078:management#billingContact" }
String Management_Name "Name [%s]" <text> (gManagement) { channel="ecobee:thermostat:account:729318833078:management#Name" }
String Management_Phone "Phone [%s]" <text> (gManagement) { channel="ecobee:thermostat:account:729318833078:management#phone" }
String Management_Email "Email [%s]" <text> (gManagement) { channel="ecobee:thermostat:account:729318833078:management#email" }
String Management_Web "Web [%s]" <text> (gManagement) { channel="ecobee:thermostat:account:729318833078:management#web" }

// Technician group
String Technician_ContractorRef "Contractor Ref [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#contractorRef" }
String Technician_Name "Name [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#name" }
String Technician_Phone "Phone [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#phone" }
String Technician_StreetAddress "Street Address [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#streetAddress" }
String Technician_City "City [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#city" }
String Technician_ProvinceState "Province/State [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#provinceState" }
String Technician_Country "Country [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#country" }
String Technician_PostalCode "Postal Code [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#postalCode" }
String Technician_Email "Email [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#email" }
String Technician_Web "Web [%s]" <text> (gTechnician) { channel="ecobee:thermostat:account:729318833078:technician#web" }

// Weather group
DateTime Weather_Timestamp "Timestamp [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gWeather) { channel="ecobee:thermostat:account:729318833078:weather#timestamp" }
String Weather_WeatherStation "Weather Station [%s]" <text> (gWeather) { channel="ecobee:thermostat:account:729318833078:weather#weatherStation" }

// Forecast0 group
Number Forecast0_WeatherSymbol "Symbol [%.0f]" <none> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#weatherSymbol" }
String Forecast0_WeatherSymbolText "Symbol Text [%s]" <text> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#weatherSymbolText" }
DateTime Forecast0_DateTime "Date/Time [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#dateTime" }
String Forecast0_Condition "Condition [%s]" <text> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#condition" }
Number:Temperature Forecast0_Temperature "Temperature [%.1f %unit%]" <temperature> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#temperature" }
Number:Pressure Forecast0_Pressure "Pressure [%.1f %unit%]" <pressure> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#pressure" }
Number:Dimensionless Forecast0_RelativeHumidity "Relative Humidity [%.0f %unit%]" <humidity> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#relativeHumidity" }
Number:Temperature Forecast0_Dewpoint "Dewpoint [%.1f %unit%]" <temperature> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#dewpoint" }
Number:Length Forecast0_Visibility "Visibility [%.1f mi]" <none> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#visibility" }
Number:Speed Forecast0_WindSpeed "Wind Speed [%.1f %unit%]" <wind> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#windSpeed" }
Number:Speed Forecast0_WindGust "Wind Gust [%.1f %unit%]" <wind> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#windGust" }
String Forecast0_WindDirection "Wind Direction [%s]" <wind> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#windDirection" }
Number:Angle Forecast0_WindBearing "Wind Bearing [%.0f %unit%]" <wind> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#windBearing" }
Number:Dimensionless Forecast0_ProbabilityOfPrecipitation "Probability of Precipitation [%.0f %unit%]" <none> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#pop" }
Number:Temperature Forecast0_TemperatureHigh "Temperature High [%.1f %unit%]" <temperature> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#tempHigh" }
Number:Temperature Forecast0_TemperatureLow "Temperature Low [%.1f %unit%]" <temperature> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#tempLow" }
Number Forecast0_Sky "Sky [%.0f]" <none> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#sky" }
String Forecast0_SkyText "Sky Text [%s]" <text> (gForecast0) { channel="ecobee:thermostat:account:729318833078:forecast0#skyText" }

// Forecast1 group
Number Forecast1_WeatherSymbol "Symbol [%.0f]" <none> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#weatherSymbol" }
String Forecast1_WeatherSymbolText "Symbol Text [%s]" <text> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#weatherSymbolText" }
DateTime Forecast1_DateTime "Date/Time [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#dateTime" }
String Forecast1_Condition "Condition [%s]" <text> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#condition" }
Number:Temperature Forecast1_Temperature "Temperature [%.1f %unit%]" <temperature> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#temperature" }
Number:Pressure Forecast1_Pressure "Pressure [%.1f %unit%]" <pressure> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#pressure" }
Number:Dimensionless Forecast1_RelativeHumidity "Relative Humidity [%.0f %unit%]" <humidity> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#relativeHumidity" }
Number:Temperature Forecast1_Dewpoint "Dewpoint [%.1f %unit%]" <temperature> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#dewpoint" }
Number:Length Forecast1_Visibility "Visibility [%.1f mi]" <none> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#visibility" }
Number:Speed Forecast1_WindSpeed "Wind Speed [%.1f %unit%]" <wind> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#windSpeed" }
Number:Speed Forecast1_WindGust "Wind Gust [%.1f %unit%]" <wind> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#windGust" }
String Forecast1_WindDirection "Wind Direction [%s]" <wind> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#windDirection" }
Number:Angle Forecast1_WindBearing "Wind Bearing [%.0f %unit%]" <wind> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#windBearing" }
Number:Dimensionless Forecast1_ProbabilityOfPrecipitation "Probability of Precipitation [%.0f %unit%]" <none> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#pop" }
Number:Temperature Forecast1_TemperatureHigh "Temperature High [%.1f %unit%]" <temperature> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#tempHigh" }
Number:Temperature Forecast1_TemperatureLow "Temperature Low [%.1f %unit%]" <temperature> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#tempLow" }
Number Forecast1_Sky "Sky [%.0f]" <none> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#sky" }
String Forecast1_SkyText "Sky Text [%s]" <text> (gForecast1) { channel="ecobee:thermostat:account:729318833078:forecast1#skyText" }

// Remote sensor S0
String S0_Id "Sensor Id [%s]" <text> (gThermostatSensor) { channel="ecobee:sensor:account:729318833078:ei-0:id" }
String S0_Name "Sensor Name [%s]" <text> (gThermostatSensor) { channel="ecobee:sensor:account:729318833078:ei-0:name" }
String S0_Type "Sensor Type [%s]" <text> (gThermostatSensor) { channel="ecobee:sensor:account:729318833078:ei-0:type" }
String S0_Code "Sensor Code [%s]" <text> (gThermostatSensor) { channel="ecobee:sensor:account:729318833078:ei-0:code" }
Switch S0_InUse "Sensor In Use [%s]" <switch> (gThermostatSensor) { channel="ecobee:sensor:account:729318833078:ei-0:inUse" }
Number:Temperature S0_Temperature "Temperature [%.1f %unit%]" <none> (gThermostatSensor) { channel="ecobee:sensor:account:729318833078:ei-0:temperature" }
Number:Dimensionless S0_Humidity "Humidity [%.0f %unit%]" <none> (gThermostatSensor) { channel="ecobee:sensor:account:729318833078:ei-0:humidity" }
Switch S0_Occupancy "Occupancy [%s]" <none> (gThermostatSensor) { channel="ecobee:sensor:account:729318833078:ei-0:occupancy" }

// Remote sensor S1
String S1_Id "Sensor Id [%s]" <text> (gRoom1Sensor) { channel="ecobee:sensor:account:729318833078:rs-101:id" }
String S1_Name "Sensor Name [%s]" <text> (gRoom1Sensor) { channel="ecobee:sensor:account:729318833078:rs-101:name" }
String S1_Type "Sensor Type [%s]" <text> (gRoom1Sensor) { channel="ecobee:sensor:account:729318833078:rs-101:type" }
String S1_Code "Sensor Code [%s]" <text> (gRoom1Sensor) { channel="ecobee:sensor:account:729318833078:rs-101:code" }
Switch S1_InUse "Sensor In Use [%s]" <switch> (gRoom1Sensor) { channel="ecobee:sensor:account:729318833078:rs-101:inUse" }
Number:Temperature S1_Temperature "Temperature [%.1f %unit%]" <none> (gRoom1Sensor) { channel="ecobee:sensor:account:729318833078:rs-101:temperature" }
Switch S1_Occupancy "Occupancy [%s]" <none> (gRoom1Sensor) { channel="ecobee:sensor:account:729318833078:rs-101:occupancy" }

// Remote sensor S2
String S2_Id "Sensor Id [%s]" <text> (gRoom2Sensor) { channel="ecobee:sensor:account:729318833078:rs-100:id" }
String S2_Name "Sensor Name [%s]" <text> (gRoom2Sensor) { channel="ecobee:sensor:account:729318833078:rs-100:name" }
String S2_Type "Sensor Type [%s]" <text> (gRoom2Sensor) { channel="ecobee:sensor:account:729318833078:rs-100:type" }
String S2_Code "Sensor Code [%s]" <text> (gRoom2Sensor) { channel="ecobee:sensor:account:729318833078:rs-100:code" }
Switch S2_InUse "Sensor In Use [%s]" <switch> (gRoom2Sensor) { channel="ecobee:sensor:account:729318833078:rs-100:inUse" }
Number:Temperature S2_Temperature "Temperature [%.1f %unit%]" <none> (gRoom2Sensor) { channel="ecobee:sensor:account:729318833078:rs-100:temperature" }
Switch S2_Occupancy "Occupancy [%s]" <none> (gRoom2Sensor) { channel="ecobee:sensor:account:729318833078:rs-100:occupancy" }

# Sitemap

Frame label="Ecobee Thermostat" {
    Group item=gInfo
    Group item=gEquipmentStatus
    Group item=gRuntime
    Group item=gSettings
    Group item=gProgram
    Group item=gAlert
    Group item=gEvent
    Group item=gWeather
    Group item=gLocation
    Group item=gHouseDetails
    Group item=gVersion
    Group item=gManagement
    Group item=gTechnician
    Group item=gThermostatSensor
    Group item=gRoom1Sensor
    Group item=gRoom2Sensor
}

# Rules

Some of the example rules below depend on the following proxy items.

Switch SetTemperatureHold "Set Temperature Hold [%s]"
Number:Temperature UserCool "User Selected Heat [%.1f %unit%]"
Number:Temperature UserHeat "User Selected Cool [%.1f %unit%]"
String UserClimateRef "User Climate Ref [%s]"
String SendMessage "Send an Message [%s]"
String AcknowledgeAlert "Acknowledge An Alert [%s]"
Switch GetAlerts "Get All Alerts [%s]"
Switch GetEvents "Get All Events [%s]"
Switch GetClimates "Get All Climates [%s]"
rule "Set Temperature Hold"
when
    Item SetTemperatureHold received command
then
    if (UserCool.state instanceof QuantityType &&  UserHeat.state instanceof QuantityType) {
        switch Settings_HvacMode.state.toString {
            case "cool",
            case "heat",
            case "auto" :  {
                val ecobeeActions = getActions("ecobee","ecobee:thermostat:account:103778713388")
                ecobeeActions.setHold(UserCool.state as QuantityType, UserHeat.state as QuantityType)
            }
            case "off"  :  {
                logWarn("ecobee", "HVAC mode is off, temperature hold ignored")
                return
            }
            case "default" : {
                logWarn("ecobee", "HVAC mode '{}' is unknown, temperature hold ignored", Settings_HvacMode.state)
            }
        }
    }
end


rule "Set Climate Ref Hold"
when
    Item UserClimateRef received command
then
    val ecobeeActions = getActions("ecobee","ecobee:thermostat:account:103778713388")
    if (receivedCommand.toString.equals("resume")) {
        ecobeeActions.resumeProgram(true)
    } else {
        ecobeeActions.setHold(receivedCommand.toString)
    }
end


rule "Send Message"
when
    Item SendMessage received command
then
    val ecobeeActions = getActions("ecobee","ecobee:thermostat:account:103778713388")
    var Boolean isSuccess
    isSuccess = ecobeeActions.sendMessage(receivedCommand.toString)
    logInfo("ecobee", "Action 'sendMessage' returned '{}'", isSuccess)
end


rule "Acknowledge Alert"
when
    Item AcknowledgeAlert received command
then
    val ecobeeActions = getActions("ecobee","ecobee:thermostat:account:103778713388")
    var Boolean isSuccess
    isSuccess = ecobeeActions.acknowledge(receivedCommand.toString, "accept", null)
    logInfo("ecobee", "Action 'acknowledge' returned '{}'", isSuccess)
end


rule "Get Alerts"
when
    Item GetAlerts received command
then
    val ecobeeActions = getActions("ecobee","ecobee:thermostat:account:103778713388")
    var String alerts = ecobeeActions.getAlerts()
    if (alerts !== null) {
        val int numElements = Integer.parseInt(transform("JSONPATH", "$.length()", alerts))
        logInfo("ecobee", "Alerts: There are {} alerts in array", numElements)
        var String ref
        var String text
        for (var int i=0; i < numElements; i++) {
            ref = transform("JSONPATH", "$.[" + i + "].acknowledgeRef", alerts)
            text = transform("JSONPATH", "$.[" + i + "].text", alerts)
            logInfo("test", "Alerts: Alert '{}' with acknowledgeRef '{}'", text, ref)
        }
    } else {
        logInfo("ecobee", "Alerts: No alerts!!!")
    }
end


rule "Get Events"
when
    Item GetEvents received command
then
    val ecobeeActions = getActions("ecobee","ecobee:thermostat:account:103778713388")
    var String events = ecobeeActions.getEvents()
    if (events !== null) {
        val int numElements = Integer.parseInt(transform("JSONPATH", "$.length()", events))
        logInfo("ecobee", "Events: There are {} events in array", numElements)
    } else {
        logInfo("ecobee", "Events: No events!!!")
    }
end


rule "Get Climates"
when
    Item GetClimates received command
then
    val ecobeeActions = getActions("ecobee","ecobee:thermostat:account:103778713388")
    var String climates = ecobeeActions.getClimates()
    if (climates !== null) {
        val int numElements = Integer.parseInt(transform("JSONPATH", "$.length()", climates))
        logInfo("ecobee", "Climates: There are {} climates in array", numElements)
        var String climateRef
        for (var int i=0; i < numElements; i++) {
            climateRef = transform("JSONPATH", "$.[" + i + "].climateRef", climates)
            logInfo("test", "Climates: Climate Ref: {}", climateRef)
        }
    } else {
        logInfo("ecobee", "Climates: No climates!!!")
    }
end

# Acnowledgements

Thanks to John Cocula for his openHAB version 1 implementation of the Ecobee binding. It was a valuable starting point for my work on the openHAB version 2 binding.