--- /dev/null
+/**
+ * ecobeeManageClimate
+ *
+ * Copyright 2014 Yves Racine
+ * LinkedIn profile: ca.linkedin.com/pub/yves-racine-m-sc-a/0/406/4b/
+ *
+ * Developer retains all right, title, copyright, and interest, including all copyright, patent rights, trade secret
+ * in the Background technology. May be subject to consulting fees under the Agreement between the Developer and the Customer.
+ * Developer grants a non exclusive perpetual license to use the Background technology in the Software developed for and delivered
+ * to Customer under this Agreement. However, the Customer shall make no commercial use of the Background technology without
+ * Developer's written consent.
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *
+ * Software Distribution is restricted and shall be done only with Developer's written approval.
+ * N.B. Requires MyEcobee device available at
+ * http://www.ecomatiqhomes.com/#!store/tc3yr
+ */
+definition(
+ name: "ecobeeManageClimate",
+ namespace: "yracine",
+ author: "Yves Racine",
+ description: "Allows a user to manage ecobee's climates",
+ category: "My Apps",
+ iconUrl: "https://s3.amazonaws.com/smartapp-icons/Partner/ecobee.png",
+ iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Partner/ecobee@2x.png"
+)
+
+
+preferences {
+ section("About") {
+ paragraph "ecobeeManageClimate, the smartapp that manages your ecobee climates ['creation', 'update', 'delete']"
+ paragraph "Version 1.9.5"
+ paragraph "If you like this smartapp, please support the developer via PayPal and click on the Paypal link below "
+ href url: "https://www.paypal.me/ecomatiqhomes",
+ title:"Paypal donation..."
+ paragraph "Copyright©2014 Yves Racine"
+ href url:"http://github.com/yracine/device-type.myecobee", style:"embedded", required:false, title:"More information..."
+ description: "http://github.com/yracine/device-type.myecobee/blob/master/README.md"
+ }
+
+ section("For this ecobee thermostat") {
+ input "ecobee", "device.myEcobeeDevice", title: "Ecobee Thermostat"
+ }
+ section("Create (if not present) or update this climate") {
+ input "climateName", "text", title: "Climate Name"
+ }
+ section("Or delete the Climate [default=false]") {
+ input "deleteClimate", "Boolean", title: "delete?", metadata: [values: ["true", "false"]], required: false
+ }
+ section("Substitute Climate name in schedule (used for delete)") {
+ input "subClimateName", "text", title: "Climate Name", required: false
+ }
+ section("Cool Temp [default = 75°F/23°C]") {
+ input "givenCoolTemp", "decimal", title: "Cool Temp", required: false
+ }
+ section("Heat Temp [default=72°F/21°C]") {
+ input "givenHeatTemp", "decimal", title: "Heat Temp", required: false
+ }
+ section("isOptimized [default=false]") {
+ input "isOptimizedFlag", "Boolean", title: "isOptimized?", metadata: [values: ["true", "false"]], required: false
+ }
+ section("isOccupied [default=false]") {
+ input "isOccupiedFlag", "Boolean", title: "isOccupied?", metadata: [values: ["true", "false"]], required: false
+ }
+ section("Cool Fan Mode [default=auto]") {
+ input "givenCoolFanMode", "enum", title: "Cool Fan Mode ?", metadata: [values: ["auto", "on"]], required: false
+ }
+ section("Heat Fan Mode [default=auto]") {
+ input "givenHeatFanMode", "enum", title: "Heat Fan Mode ?", metadata: [values: ["auto", "on"]], required: false
+ }
+ section("Notifications") {
+ input "sendPushMessage", "enum", title: "Send a push notification?", metadata: [values: ["Yes", "No"]], required: false
+ input "phoneNumber", "phone", title: "Send a text message?", required: false
+ }
+
+
+}
+
+
+
+def installed() {
+
+ subscribe(app, appTouch)
+ takeAction()
+
+}
+
+
+def updated() {
+
+
+ unsubscribe()
+ subscribe(app, appTouch)
+ takeAction()
+
+
+}
+
+def appTouch(evt) {
+ takeAction()
+}
+
+def takeAction() {
+ def scale = getTemperatureScale()
+ def heatTemp, coolTemp
+ if (scale == 'C') {
+ heatTemp = givenHeatTemp ?: 21 // by default, 21°C is the heat temp
+ coolTemp = givenCoolTemp ?: 23 // by default, 23°C is the cool temp
+ } else {
+ heatTemp = givenHeatTemp ?: 72 // by default, 72°F is the heat temp
+ coolTemp = givenCoolTemp ?: 75 // by default, 75°F is the cool temp
+ }
+
+ def isOptimized = (isOptimizedFlag != null) ? isOptimizedFlag : false // by default, isOptimized flag is false
+ def isOccupied = (isOccupiedFlag != null) ? isOccupiedFlag : false // by default, isOccupied flag is false
+ def coolFanMode = givenCoolFanMode ?: 'auto' // By default, fanMode is auto
+ def heatFanMode = givenHeatFanMode ?: 'auto' // By default, fanMode is auto
+ def deleteClimateFlag = (deleteClimate != null) ? deleteClimate : 'false'
+
+ log.debug "ecobeeManageClimate> about to take actions"
+
+
+ log.trace "ecobeeManageClimate>climateName =${climateName},deleteClimateFlag =${deleteClimateFlag},subClimateName= ${subClimateName}, isOptimized=${isOptimized}" +
+ ",isOccupied=${isOccupied},coolTemp = ${coolTemp},heatTemp = ${heatTemp},coolFanMode= ${coolFanMode}, heatFanMode= ${heatFanMode}"
+
+ if (deleteClimateFlag == 'true') {
+ send("ecobeeManageClimate>about to delete climateName = ${climateName}")
+ ecobee.deleteClimate("", climateName, subClimateName)
+
+ } else {
+
+ send("ecobeeManageClimate>about to create or update climateName = ${climateName}")
+ ecobee.updateClimate("", climateName, deleteClimateFlag, subClimateName,
+ coolTemp, heatTemp, isOptimized, isOccupied, coolFanMode, heatFanMode)
+ }
+
+}
+
+private send(msg) {
+ if (sendPushMessage != "No") {
+ log.debug("sending push message")
+ sendPush(msg)
+ }
+
+ if (phone) {
+ log.debug("sending text message")
+ sendSms(phone, msg)
+ }
+
+ log.debug msg
+}