Compare commits

...

19 Commits

Author SHA1 Message Date
narges noori
9558191c49 MSA-1782: This is a convenience application: We have a TV in our lab which is always on and causes a lot of distraction for people who are working there. The purpose of this application is manage the time that the screen is on as follows: The application turns on the outlet if the entrace door opens (multipurpose sensor) and there is motion in front of the motion sensor for a user defined amount of time (say 5 minutes). If there is no activity in front of the motion sensor for a user defined amount of time (say 10 minutes) the outlet is turned off. 2017-02-13 12:58:50 -08:00
Vinay Rao
2d82b05f90 Merge pull request #1660 from SmartThingsCommunity/staging
Rolling down staging hotfixes to master
2017-02-09 17:54:06 -06:00
Vinay Rao
1611fd0144 Merge pull request #1640 from skt123/device_filtering_1
[CHANGE-840] Adding new capabilities to DTHs
2017-02-09 17:51:50 -06:00
Vinay Rao
c416c39ac4 Merge pull request #1639 from pchomal/devicefiltering1
[CHANGE-839] Adding New Capabilities (Light & Outlet)
2017-02-09 17:51:19 -06:00
Vinay Rao
bc0f849dad Merge pull request #1655 from SmartThingsCommunity/master
Rolling up master to staging
2017-02-07 14:24:23 -08:00
Vinay Rao
459e69607b Merge pull request #1654 from SmartThingsCommunity/staging
Rolling down staging to master
2017-02-07 14:23:24 -08:00
Juan Pablo Risso
cfdc61d72a DVCSMP-2290 - Ecobee Localization (#1628)
Split Files

Updated
2017-02-07 14:11:38 -06:00
Zach Varberg
0c26d75792 Merge pull request #1652 from varzac/dimmer-fixes
DPROT-242 Properly handle setLevel for zigbee-dimmer
2017-02-07 13:07:30 -06:00
Zach Varberg
bf491270a9 Properly handle setLevel for zigbee-dimmer
This works around a few devices that use this DTH that do not properly
handle the setLevel command.

This resolves: https://smartthings.atlassian.net/browse/DPROT-242
2017-02-07 13:06:26 -06:00
Vinay Rao
871d75aea6 Merge pull request #1650 from larsfinander/DVCSMP-2395_Update_OPenT2T_staging
DVCSMP-2395 Update OpenT2T with bugfixes
2017-02-06 11:44:13 -08:00
Lars Finander
3905d48235 DVCSMP-2395 Update OpenT2T with bugfixes 2017-02-06 12:34:00 -07:00
Vinay Rao
d91c02b970 Merge pull request #1644 from varzac/fix-zigbee-dimmer-set-level
DPROT-238 Fix typo on toInteger zigbee dimmer power
2017-02-03 16:35:48 -08:00
Zach Varberg
e019d22aff Fix typo on toInteger zigbee dimmer power
This relates to: https://smartthings.atlassian.net/browse/DPROT-238
2017-02-03 16:22:20 -06:00
Vinay Rao
900ab9f70e Merge pull request #1638 from dkirker/DEVC-488
DEVC-488 Add fingerprint for DL15S In-wall Switch
2017-02-03 13:53:48 -08:00
Vinay Rao
e8d205c775 Merge pull request #1643 from varzac/fix-zigbee-dimmer-set-level
[DPROT-238] Manually call on with setLevel
2017-02-03 13:14:14 -08:00
Zach Varberg
1800ea2bad Manually call on with setLevel
This is to work around misbehaving devices that don't properly honor the
move to level with on off command.

This resolves: https://smartthings.atlassian.net/browse/DPROT-238
2017-02-03 13:01:05 -06:00
sushant.k1
f164b8832c [CHANGE-840]
Added new capabilities for following DTHs:
1. Dimmer Switch
2. Zigbee RGB Bulb
3. Zigbee Dimmer
2017-02-03 16:33:30 +05:30
piyush.c
2d3fa22e07 [CHANGE-839]
Adding New Capabilities (Light & Outlet) to the DTHs
2017-02-03 16:22:56 +05:30
Donald Kirker
54a4620c9b DEVC-488 Add fingerprint for DL15S In-wall Switch 2017-02-02 22:00:49 -08:00
15 changed files with 269 additions and 17 deletions

View File

@@ -23,6 +23,7 @@ metadata {
capability "Switch"
capability "Switch Level"
capability "Health Check"
capability "Light"
fingerprint profileId: "C05E", inClusters: "0000,0003,0004,0005,0006,0008,1000", outClusters: "0000,0019"
}

View File

@@ -21,6 +21,7 @@ metadata {
capability "Refresh"
capability "Sensor"
capability "Health Check"
capability "Light"
fingerprint mfr:"0063", prod:"4457", deviceJoinName: "GE In-Wall Smart Dimmer "
fingerprint mfr:"0063", prod:"4944", deviceJoinName: "GE In-Wall Smart Dimmer "

View File

@@ -23,6 +23,8 @@ metadata {
capability "Refresh"
capability "Sensor"
capability "Health Check"
capability "Light"
capability "Outlet"
fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3200", deviceJoinName: "Outlet"
fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0B04,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3200-Sgb", deviceJoinName: "Outlet"

View File

@@ -97,7 +97,7 @@ def on() {
}
def setLevel(value) {
zigbee.setLevel(value)
zigbee.setLevel(value) + (value?.toInteger() > 0 ? zigbee.on() : [])
}
/**

View File

@@ -20,6 +20,7 @@ metadata {
capability "Switch"
capability "Switch Level"
capability "Health Check"
capability "Light"
fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008"
@@ -93,7 +94,13 @@ def on() {
}
def setLevel(value) {
zigbee.setLevel(value)
def additionalCmds = []
if (device.getDataValue("model") == "iQBR30" && value.toInteger() > 0) { // Handle iQ bulb not following spec
additionalCmds = zigbee.on()
} else if (device.getDataValue("manufacturer") == "MRVL") { // Handle marvel stack not reporting
additionalCmds = refresh()
}
zigbee.setLevel(value) + additionalCmds
}
/**
* PING is used by Device-Watch in attempt to reach the Device
@@ -103,7 +110,7 @@ def ping() {
}
def refresh() {
zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig()
zigbee.onOffRefresh() + zigbee.levelRefresh()
}
def configure() {
@@ -113,5 +120,5 @@ def configure() {
sendEvent(name: "checkInterval", value: 2 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
// OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity
zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig()
refresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig()
}

View File

@@ -28,6 +28,7 @@ metadata {
capability "Switch"
capability "Switch Level"
capability "Health Check"
capability "Light"
fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0008,0300,0B04,FC0F", outClusters: "0019", manufacturer: "OSRAM", model: "Gardenspot RGB", deviceJoinName: "SYLVANIA Smart Gardenspot mini RGB"
fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0008,0300,0B04,FC0F", outClusters: "0019", manufacturer: "OSRAM", model: "LIGHTIFY Gardenspot RGB", deviceJoinName: "SYLVANIA Smart Gardenspot mini RGB"

View File

@@ -29,6 +29,7 @@ metadata {
capability "Switch"
capability "Switch Level"
capability "Health Check"
capability "Light"
attribute "colorName", "string"
command "setGenericName"

View File

@@ -23,6 +23,7 @@ metadata {
fingerprint profileId: "0104", inClusters: "0000, 0003, 0006", outClusters: "0003, 0006, 0019, 0406", manufacturer: "Leviton", model: "ZSS-10", deviceJoinName: "Leviton Switch"
fingerprint profileId: "0104", inClusters: "0000, 0003, 0006", outClusters: "000A", manufacturer: "HAI", model: "65A21-1", deviceJoinName: "Leviton Wireless Load Control Module-30amp"
fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL15A", deviceJoinName: "Leviton Lumina RF Plug-In Appliance Module"
fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL15S", deviceJoinName: "Leviton Lumina RF Switch"
}
// simulator metadata

View File

@@ -26,6 +26,7 @@ metadata {
capability "Refresh"
capability "Switch"
capability "Switch Level"
capability "Light"
attribute "colorName", "string"
command "setGenericName"

View File

@@ -0,0 +1,179 @@
/**
* Switch control based on motion/door sensors
*
* Copyright 2017 narges noori
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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. See the License
* for the specific language governing permissions and limitations under the License.
*
*/
definition(
name: "Switch control based on motion/door sensors",
namespace: "nnoori0527",
author: "narges noori",
description: "This application turns on the outlet if the entrace door opens (multipurpose sensor) and there is motion in front of the motion sensor for a user defined amount of time (say 5 minutes). If there is no activity in front of the motion sensor for a user defined amount of time (say 10 minutes) the outlet is turned off.",
category: "Convenience",
iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png",
iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png",
iconX3Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png",
oauth: [displayName: "Switch/outlet control", displayLink: ""])
preferences {
section ("Allow external service to control these things...") {
input "switches", "capability.switch", multiple: true, required: true
}
section("Turn on when motion detected after someone opens the door:") {
input "motionSensor", "capability.motionSensor", required: true, title: "Where?"
}
section("Turn on when there's movement for:") {
input "minutes", "number", required: true, title: "Minutes to turn on TV?"
}
section("Turn on when there's movement for:") {
input "minutesInactive", "number", required: true, title: "Minutes to wait before turning off TV?"
}
section("Turn on when door open:") {
input "doorOpenCloseDetector", "capability.contactSensor", required: true, title: "Where?"
}
section("Turn on this outlet") {
input "tvOutlet", "capability.switch", required: true
}
}
def installed() {
initialize()
}
def updated() {
unsubscribe()
initialize()
}
def initialize() {
subscribe(doorOpenCloseDetector, "contact.open", doorOpenedHandler)
subscribe(motionSensor, "motion.inactive", motionStoppedHandler)
}
def doorOpenedHandler(evt){
log.debug "doorOpenedHandler called: $evt"
runIn(60 * minutes, checkMotion)
//tvOutlet.on()
}
def checkMotion() {
log.debug "In checkMotion scheduled method"
def motionState = motionSensor.currentState("motion")
if (motionState.value == "active") {
// get the time elapsed between now and when the motion reported inactive
def elapsed = now() - motionState.date.time
// elapsed time is in milliseconds, so the threshold must be converted to milliseconds too
def threshold = 1000 * 60 * minutes
if (elapsed <= threshold) {
log.debug "Motion has stayed active long enough since last check ($elapsed ms): turning outlet on"
//myswitch.on()
tvOutlet.on()
} else {
log.debug "Motion has not stayed active long enough since last check ($elapsed ms): doing nothing"
}
} else {
// Motion active; just log it and do nothing
log.debug "Motion is inactive, do nothing and wait for active"
}
}
def motionStoppedHandler(evt) {
log.debug "motionStoppedHandler called: $evt"
runIn(60 * (minutesInactive+1), checkMotionTurnOff)
}
def checkMotionTurnOff() {
log.debug "In checkMotionTurnOff scheduled method"
def motionState = motionSensor.currentState("motion")
if (motionState.value == "inactive") {
// get the time elapsed between now and when the motion reported inactive
def elapsed = now() - motionState.date.time
// elapsed time is in milliseconds, so the threshold must be converted to milliseconds too
def threshold = 1000 * 60 * minutesInactive
if (elapsed >= threshold) {
log.debug "Motion has stayed inactive long enough since last check ($elapsed ms): turning switch off"
tvOutlet.off()
} else {
log.debug "Motion has not stayed inactive long enough since last check ($elapsed ms): doing nothing"
}
} else {
// Motion active; just log it and do nothing
log.debug "Motion is active, do nothing and wait for inactive"
}
}
mappings {
path("/switches") {
action: [
GET: "listSwitches"
]
}
path("/switches/:command") {
action: [
PUT: "updateSwitches"
]
}
}
// returns a list like
// [[name: "kitchen lamp", value: "off"], [name: "bathroom", value: "on"]]
def listSwitches() {
def resp = []
switches.each {
resp << [name: it.displayName, value: it.currentValue("switch")]
}
return resp
}
void updateSwitches() {
// use the built-in request object to get the command parameter
def command = params.command
// all switches have the comand
// execute the command on all switches
// (note we can do this on the array - the command will be invoked on every element
switch(command) {
case "on":
switches.on()
break
case "off":
switches.off()
break
default:
httpError(400, "$command is not a valid command for all switches specified")
}
}

View File

@@ -51,7 +51,7 @@ definition(
//Device Inputs
preferences {
section("Allow <PLACEHOLDER: Your App Name> to control these things...") {
section("Allow OpenT2T to control these things...") {
input "contactSensors", "capability.contactSensor", title: "Which Contact Sensors", multiple: true, required: false
input "garageDoors", "capability.garageDoorControl", title: "Which Garage Doors?", multiple: true, required: false
input "locks", "capability.lock", title: "Which Locks?", multiple: true, required: false
@@ -329,34 +329,38 @@ private getDeviceType(device) {
switch (it.name.toLowerCase()) {
case "switch":
deviceType = "switch"
break
case "switch level":
deviceType = "light"
if (caps.any { it.name.toLowerCase() == "power meter" }) {
return deviceType
}
if (caps.any { it.name.toLowerCase() == "switch level" }) {
deviceType = "light"
return deviceType
}
break
case "contact sensor":
deviceType = "contactSensor"
break
return deviceType
case "garageDoorControl":
deviceType = "garageDoor"
break
return deviceType
case "lock":
deviceType = "lock"
break
return deviceType
case "video camera":
deviceType = "camera"
break
return deviceType
case "motion sensor":
deviceType = "motionSensor"
break
return deviceType
case "presence sensor":
deviceType = "presenceSensor"
break
return deviceType
case "thermostat":
deviceType = "thermostat"
break
return deviceType
case "water sensor":
deviceType = "waterSensor"
break
return deviceType
default:
break
}

View File

@@ -20,6 +20,9 @@
* JLH - 02-15-2014 - Fuller use of ecobee API
* 10-28-2015 DVCSMP-604 - accessory sensor, DVCSMP-1174, DVCSMP-1111 - not respond to routines
*/
include 'localization'
definition(
name: "Ecobee (Connect)",
namespace: "smartthings",
@@ -86,7 +89,7 @@ def authPage() {
if (numFound > 0) {
section("") {
paragraph "Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings."
input(name: "ecobeesensors", title:"Select Ecobee Sensors (${numFound} found)", type: "enum", required:false, description: "Tap to choose", multiple:true, options:options)
input(name: "ecobeesensors", title: "Select Ecobee Sensors ({{numFound}} found)", messageArgs: [numFound: numFound], type: "enum", required:false, description: "Tap to choose", multiple:true, options:options)
}
}
}

View File

@@ -0,0 +1,17 @@
'''Connect your Ecobee thermostat to SmartThings.'''.ar=قم بتوصيل ثرموستات Ecobee بـ SmartThings.
'''You are connected.'''.ar=أنت متصل.
'''Click to enter Ecobee Credentials'''.ar=النقر لإدخال بيانات اعتماد Ecobee
'''Login'''.ar=تسجيل الدخول
'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''.ar=انقر أدناه لتسجيل الدخول إلى خدمة ecobee والمصادقة على الوصول إلى SmartThings. تأكد من التمرير للأسفل على الصفحة ٢ والضغط على زر ”السماح“.
'''Select Your Thermostats'''.ar=تحديد الثرموستات
'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''.ar=انقر أدناه لرؤية قائمة أجهزة ثرموستات ecobee المتوفرة في حساب ecobee، وحدد الأجهزة التي ترغب في توصيلها بـ SmartThings.
'''Tap to choose'''.ar=النقر لاختيار
'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''.ar=انقر أدناه لرؤية قائمة مستشعرات ecobee المتوفرة في حساب ecobee، وحدد الأجهزة التي ترغب في توصيلها بـ SmartThings.
'''Select Ecobee Sensors ({{numFound}} found)'''.ar=تحديد مستشعرات Ecobee ({{numFound}} found)
'''Your ecobee Account is now connected to SmartThings!'''.ar=حساب ecobee متصل الآن بـ SmartThings!
'''Click 'Done' to finish setup.'''.ar=انقر فوق ”تم“ لإنهاء الإعداد.
'''The connection could not be established!'''.ar=يتعذر إنشاء الاتصال!
'''Click 'Done' to return to the menu.'''.ar=انقر فوق ”تم“ للعودة إلى القائمة.
'''{{deviceName}} is connected to SmartThings'''.ar={{deviceName}} متصل بـ SmartThings
'''{{deviceName}} is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''.ar=تم قطع اتصال {{deviceName}} بـ SmartThings، لأن بيانات اعتماد الوصول قد تغيرت أو فُقدت. يُرجى الانتقال إلى التطبيق الذكي Ecobee (Connect) وإعادة إدخال بيانات اعتماد تسجيل الدخول إلى حسابك.
'''Your Ecobee thermostat'''.ar=ثرموستات Ecobee

View File

@@ -0,0 +1,17 @@
'''Connect your Ecobee thermostat to SmartThings.'''.th=เชื่อมต่อตัวควบคุมอุณหภูมิ Ecobee ของคุณเข้ากับ SmartThings
'''You are connected.'''.th=คุณได้เชื่อมต่อแล้ว
'''Click to enter Ecobee Credentials'''.th=คลิกเพื่อใส่ ข้อมูลยืนยันตัวตน Ecobee
'''Login'''.th=เข้าสู่ระบบ
'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''.th=แตะด้านล่างเพื่อเข้าสู่บริการ Ecobee และอนุญาตการเข้าถึงของ SmartThings ดูให้แน่ใจว่าได้เลื่อนลงมาที่หน้า 2 แล้วกดปุ่ม 'อนุญาต'
'''Select Your Thermostats'''.th=เลือกตัวควบคุมอุณหภูมิของคุณ
'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''.th=แตะที่ด้านล่างเพื่อดูรายการตัวควบคุมอุณหภูมิ Ecobee ที่มีอยู่ในบัญชีผู้ใช้ Ecobee ของคุณ และเลือกตัวควบคุมอุณหภูมิที่คุณต้องการจะเชื่อมต่อกับ SmartThings
'''Tap to choose'''.th=แตะเพื่อเลือก
'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''.th=แตะที่ด้านล่างเพื่อดูรายการเซ็นเซอร์ Ecobee ที่มีอยู่ในบัญชีผู้ใช้ Ecobee ของคุณ และเลือกเซ็นเซอร์ที่คุณต้องการจะเชื่อมต่อกับ SmartThings
'''Select Ecobee Sensors ({{numFound} found)'''.th=เลือกเซ็นเซอร์ Ecobee ({{numFound}} found)
'''Your ecobee Account is now connected to SmartThings!'''.th=ตอนนี้บัญชีผู้ใช้ Ecobee ของคุณเชื่อมต่อกับ SmartThings แล้ว
'''Click 'Done' to finish setup.'''.th=คลิก 'เสร็จสิ้น' เพื่อทำการตั้งค่าให้เสร็จสิ้น
'''The connection could not be established!'''.th=ไม่สามารถสร้างการเชื่อมต่อได้!
'''Click 'Done' to return to the menu.'''.th=คลิก 'เสร็จสิ้น' เพื่อกลับไปยังเมนู
'''{{deviceName}} is connected to SmartThings'''.th={{deviceName}} เชื่อมต่อกับ SmartThings แล้ว
'''{{deviceName}} is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''.th={{deviceName}} ถูกตัดการเชื่อมต่อจาก SmartThings เนื่องจากข้อมูลการเข้าถึงถูกเปลี่ยนแปลงหรือหายไป กรุณาไปที่ Ecobee (การเชื่อมต่อ) SmartApp และใส่ข้อมูลยืนยันตัวตนการเข้าสู่บัญชีผู้ใช้ของคุณอีกครั้ง
'''Your Ecobee thermostat'''.th=ตัวควบคุมอุณหภูมิ Ecobee ของคุณ

View File

@@ -0,0 +1,17 @@
'''Connect your Ecobee thermostat to SmartThings.'''.tr=Ecobee termostatınızı SmartThings'e bağlayın.
'''You are connected.'''.tr=Bağlantı kurdunuz.
'''Click to enter Ecobee Credentials'''.tr=Ecobee Kimlik Bilgilerinizi girmek için tıklayın
'''Login'''.tr=Oturum aç
'''Tap below to log in to the ecobee service and authorize SmartThings access. Be sure to scroll down on page 2 and press the 'Allow' button.'''.tr=Ecobee servisinde oturum açmak ve SmartThings erişimine izin vermek için aşağıya dokunun. Ekranı 2. sayfaya kaydırdığınızdan emin olun ve 'İzin Ver' tuşuna basın.
'''Select Your Thermostats'''.tr=Termostatlarınızı Seçin
'''Tap below to see the list of ecobee thermostats available in your ecobee account and select the ones you want to connect to SmartThings.'''.tr=Ecobee hesabınızda mevcut olan ecobee termostatlarının listesini görüntülemek için aşağıya dokunun ve SmartThings'e bağlamak istediklerinizi seçin.
'''Tap to choose'''.tr=Seçmek için dokunun
'''Tap below to see the list of ecobee sensors available in your ecobee account and select the ones you want to connect to SmartThings.'''.tr=Ecobee hesabınızda mevcut olan ecobee sensörlerinin listesini görüntülemek için aşağıya dokunun ve SmartThings'e bağlamak istediklerinizi seçin.
'''Select Ecobee Sensors ({{numFound}} found)'''.tr=Ecobee Sensörlerini seçin ({{numFound}} bulundu)
'''Your ecobee Account is now connected to SmartThings!'''.tr=Ecobee Hesabınız artık SmartThings'e bağlandı!
'''Click 'Done' to finish setup.'''.tr=Kurulumu bitirmek için 'Bitti' öğesine tıklayın.
'''The connection could not be established!'''.tr=Bağlantı kurulamadı!
'''Click 'Done' to return to the menu.'''.tr=Menüye dönmek için 'Bitti' öğesine tıklayın.
'''{{deviceName}} is connected to SmartThings'''.tr={{cihazİsmi}} SmartThings'e bağlandı
'''{{deviceName}} is disconnected from SmartThings, because the access credential changed or was lost. Please go to the Ecobee (Connect) SmartApp and re-enter your account login credentials.'''.tr=Ecobee termostatınız
'''Your Ecobee thermostat'''.tr=Ecobee termostatınız