2016-07-16 82 views
0

有一個SmartThings和新的Groovy。找到一些代碼用於溫度/運動傳感器,但需要它還包括「僅在時間A和時間B之間運行」語句。groovy如何設置開始和停止時間

到目前爲止,一直沒有運氣的拖網。
任何人都可以推薦一些我可以添加到此代碼的語句嗎?

感激

拉里

~~~~~~~~~~~~~~

/** 
* Virtual Thermostat 
* 
* Author: SmartThings 
*/ 
preferences { 
    section("Choose a temperature sensor... "){ 
     input "sensor", "capability.temperatureMeasurement", title: "Sensor" 
    } 
    section("Select the heater or air conditioner outlet(s)... "){ 
     input "outlets", "capability.switch", title: "Outlets", multiple: true 
    } 
    section("Set the desired temperature..."){ 
     input "setpoint", "decimal", title: "Set Temp" 
    } 
    section("When there's been movement from (optional, leave blank to not require motion)..."){ 
     input "motion", "capability.motionSensor", title: "Motion", required: false 
    } 
    section("Within this number of minutes..."){ 
     input "minutes", "number", title: "Minutes", required: false 
    } 
    section("But never go below (or above if A/C) this value with or without motion..."){ 
     input "emergencySetpoint", "decimal", title: "Emer Temp", required: false 
    } 
    section("If this is an air conditioner set the mode to 'cool' (defaults to 'heat')..."){ 
     input "mode", "text", title: "Mode", required: false 
    } 
} 

def installed() 
{ 
    subscribe(sensor, "temperature", temperatureHandler) 
    if (motion) { 
     subscribe(motion, "motion", motionHandler) 
    } 
} 

def updated() 
{ 
    unsubscribe() 
    subscribe(sensor, "temperature", temperatureHandler) 
    if (motion) { 
     subscribe(motion, "motion", motionHandler) 
    } 
} 

def temperatureHandler(evt) 
{ 
    def isActive = hasBeenRecentMotion() 
    if (isActive || emergencySetpoint) { 
     evaluate(evt.doubleValue, isActive ? setpoint : emergencySetpoint) 
    } 
    else { 
     outlets.off() 
    } 
} 

def motionHandler(evt) 
{ 
    if (evt.value == "active") { 
     def lastTemp = sensor.latestValue("temperature") 
     if (lastTemp != null) { 
      evaluate(lastTemp, setpoint) 
     } 
    } else if (evt.value == "inactive") { 
     def isActive = hasBeenRecentMotion() 
     log.debug "INACTIVE($isActive)" 
     if (isActive || emergencySetpoint) { 
      def lastTemp = sensor.latestValue("temperature") 
      if (lastTemp != null) { 
       evaluate(lastTemp, isActive ? setpoint : emergencySetpoint) 
      } 
     } 
     else { 
      outlets.off() 
     } 
    } 
} 

private evaluate(currentTemp, desiredTemp) 
{ 
    log.debug "EVALUATE($currentTemp, $desiredTemp)" 
    def threshold = 1.0 
    if (mode == "cool") { 
     // air conditioner 
     if (currentTemp - desiredTemp >= threshold) { 
      outlets.on() 
     } 
     else if (desiredTemp - currentTemp >= threshold) { 
      outlets.off() 
     } 
    } 
    else { 
     // heater 
     if (desiredTemp - currentTemp >= threshold) { 
      outlets.on() 
     } 
     else if (currentTemp - desiredTemp >= threshold) { 
      outlets.off() 
     } 
    } 
} 

private hasBeenRecentMotion() 
{ 
    def isActive = false 
    if (motion && minutes) { 
     def deltaMinutes = minutes as Long 
     if (deltaMinutes) { 
      def motionEvents = motion.eventsSince(new Date(now() - (60000 * deltaMinutes))) 
      log.trace "Found ${motionEvents?.size() ?: 0} events in the last $deltaMinutes minutes" 
      if (motionEvents.find { it.value == "active" }) { 
       isActive = true 
      } 
     } 
    } 
    else { 
     isActive = true 
    } 
    isActive 

回答

0

你可以做(​​很多!):

def hour = Calendar.instance.HOUR_OF_DAY​ 

if(hour >= 8 && hour < 17) { 
    // It's between 8am and 5pm 
} 
+0

時區將是UTC,並且您可以進行輸入以使數字可配置。 –

相關問題