44 * Contributors: Ben W. (@desertblade), Eric S. (@E_Sch)
55 * A Huge thanks goes out to Greg (@ghesp) for all of your help getting this working.
66 *
7- * Copyright (C) 2017, 2018 Anthony S.
7+ * Copyright (C) 2017, 2018, 2019 Anthony S.
88 * Licensing Info: Located at https://raw.githubusercontent.com/tonesto7/nest-manager/master/LICENSE.md
99 */
1010
@@ -13,7 +13,7 @@ import groovy.time.TimeCategory
1313
1414preferences { }
1515
16- def devVer () { return " 5.4.4 " }
16+ def devVer () { return " 5.4.5 " }
1717
1818metadata {
1919 definition (name : " ${ textDevName()} " , author : " Anthony S." , namespace : " tonesto7" ) {
@@ -325,7 +325,7 @@ def processEvent() {
325325 audioInputEnabledEvent(results?. is_audio_input_enabled?. toString())
326326 softwareVerEvent(results?. software_version?. toString())
327327 if (results?. activity_zones) { state?. activityZones = results?. activity_zones }
328-
328+
329329 // if(results?.snapshot_url) { state?.snapshot_url = results?.snapshot_url?.toString() }
330330 imageEvent(results?. snapshot_url?. toString())
331331 if (results?. app_url) { state?. app_url = results?. app_url?. toString() }
@@ -370,7 +370,7 @@ def getDeviceStateData() {
370370}
371371
372372def evtSnapShotOk () {
373- if (state?. takeSnapOnEvt != true ) { return false }
373+ if (! state?. isOnline || ! state ?. isStreaming || ! state ?. takeSnapOnEvt ) { return false }
374374 return settings?. enableEvtSnapShot == false ? false : true
375375}
376376
@@ -572,19 +572,19 @@ def lastEventDataEvent(data) {
572572 def curEndDt = device?. currentState(" lastEventEnd" )?. value ? tf?. format(Date . parse(" E MMM dd HH:mm:ss z yyyy" , device?. currentState(" lastEventEnd" )?. value?. toString())) : null
573573 def newStartDt = data?. start_time ? tf. format(Date . parse(" yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" , data?. start_time?. toString())) : " Not Available"
574574 def newEndDt = data?. end_time ? tf. format(Date . parse(" yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" , data?. end_time?. toString())) : " Not Available"
575-
575+
576576 def camMotionZones = state?. camMotionZones && state?. camMotionZones != [] ? state?. camMotionZones : []
577577
578- def hasPerson = data?. has_person ? data?. has_person? . toBoolean() : false
579- state? . motionPerson = hasPerson
580- def hasMotion = data?. has_motion ? data?. has_motion? . toBoolean() : false
581- def hasSound = data?. has_sound ? data?. has_sound? . toBoolean() : false
578+ def hasPerson = data?. has_person != null ? data?. has_person. toBoolean() : false
579+ state. motionPerson = hasPerson
580+ def hasMotion = data?. has_motion != null ? data?. has_motion. toBoolean() : false
581+ def hasSound = data?. has_sound != null ? data?. has_sound. toBoolean() : false
582582 def actZones = state?. activityZones
583583 def evtZoneIds = data?. activity_zone_ids
584584 def evtZoneNames = null
585585
586- String evtType = ! hasMotion ? " Sound Event" : " Motion Event${ hasPerson ? " (Person)${hasSound ? " (Sound)" : ""} " : ""} "
587- state?. lastEventTypeHtml = ! hasMotion && hasSound ? " Sound Event" : " Motion Event${ hasPerson ? "<br>(Person)${hasSound ? "<br>(Sound)" : ""} " : ""} "
586+ String evtType = ( ! hasMotion ? " Sound Event" : " Motion Event" ) + " ${ hasPerson ? " (Person)" : "" } " + " ${ hasSound ? " (Sound)" : ""} "
587+ state?. lastEventTypeHtml = ( ! hasMotion && hasSound ? " Sound Event" : " Motion Event" ) + " ${ hasPerson ? "<br>(Person)" : "" } " + " ${ hasSound ? "<br>(Sound)" : ""} "
588588 if (actZones && evtZoneIds) {
589589 evtZoneNames = actZones. findAll { it?. id?. toString() in evtZoneIds }. collect { it?. name }
590590 def zstr = " "
@@ -605,7 +605,9 @@ def lastEventDataEvent(data) {
605605
606606 def tryPic = false
607607
608- if (! state?. lastCamEvtData || (curStartDt != newStartDt || curEndDt != newEndDt) && (hasPerson || hasMotion || hasSound) || isStateChange(device, " lastEventType" , evtType?. toString()) || isStateChange(device, " lastEventZones" , evtZoneNames?. toString())) {
608+ // if(!state?.lastCamEvtData || (curStartDt != newStartDt || curEndDt != newEndDt) || (hasPerson || hasMotion || hasSound) || isStateChange(device, "lastEventType", evtType?.toString()) || isStateChange(device, "lastEventZones", evtZoneNames?.toString())) {
609+ if (! state?. lastCamEvtData || (curStartDt != newStartDt || curEndDt != newEndDt) || isStateChange(device, " lastEventType" , evtType?. toString()) || isStateChange(device, " lastEventZones" , evtZoneNames?. toString())) {
610+ if (hasPerson || hasMotion || hasSound) {
609611 sendEvent(name : ' lastEventStart' , value : newStartDt, descriptionText : " Last Event Start is ${ newStartDt} " , displayed : false )
610612 sendEvent(name : ' lastEventEnd' , value : newEndDt, descriptionText : " Last Event End is ${ newEndDt} " , displayed : false )
611613 sendEvent(name : ' lastEventType' , value : evtType, descriptionText : " Last Event Type was ${ evtType} " , displayed : false )
@@ -622,6 +624,7 @@ def lastEventDataEvent(data) {
622624 Logger (" │ Type: ${ evtType} " )
623625 Logger (state?. enRemDiagLogging ? " ┌───New Camera Event────" : " ┌────────New Camera Event────────" )
624626 addCheckinReason(" lastEventData" )
627+ }
625628 } else {
626629 LogAction (" Last Event Start Time: (${ newStartDt} ) - Zones: ${ evtZoneNames} | Original State: (${ curStartDt} )" )
627630 LogAction (" Last Event End Time: (${ newEndDt} ) - Zones: ${ evtZoneNames} | Original State: (${ curEndDt} )" )
@@ -658,7 +661,7 @@ def motionSoundEvtHandler(zoneOk=true) {
658661}
659662
660663void motionEvtHandler (data , zoneOk ) {
661-
664+
662665 def curMotion = device. currentState(" motion" )?. stringValue
663666 def motionStat = " inactive"
664667 def motionPerStat = " inactive"
@@ -688,8 +691,8 @@ void motionEvtHandler(data, zoneOk) {
688691 // log.trace "motionEvtHandler(zoneOk: $zoneOk) | motionStat: $motionStat | curMotion: $curMotion"
689692 if (isStateChange(device, " motion" , motionStat?. toString()) || isStateChange(device, " motionPerson" , motionPerStat?. toString())) {
690693 Logger (" UPDATED | Motion Sensor is: (${ motionStat} ) | Person: (${ motionPerStat} ) | Original State: (${ curMotion} )" )
691- sendEvent(name : " motion" , value : motionStat, descriptionText : " Motion Sensor is: ${ motionStat} " , displayed : true , isStateChange : true , state : motionStat)
692- sendEvent(name : " motionPerson" , value : motionPerStat, descriptionText : " Motion Person is: ${ motionPerStat} " , displayed : true , isStateChange : true , state : motionPerStat)
694+ sendEvent(name : " motion" , value : motionStat, descriptionText : " Motion Sensor is: ${ motionStat} " , displayed : true , /* isStateChange: true,*/ state : motionStat)
695+ sendEvent(name : " motionPerson" , value : motionPerStat, descriptionText : " Motion Person is: ${ motionPerStat} " , displayed : true , /* isStateChange: true,*/ state : motionPerStat)
693696 addCheckinReason(" motion" )
694697 } else { LogAction (" Motion Sensor is: (${ motionStat} ) | Original State: (${ curMotion} )" ) }
695698}
@@ -732,13 +735,13 @@ def imageEvent(url) {
732735 clearUrl = false
733736 if (isStateChange(device, " image" , url?. toString())) {
734737 LogAction (" UPDATED | Image Url: (${ url} ) | Original State: (${ curImage} )" )
735- sendEvent(name : " image" , value : url, descriptionText : " Image URL ${ url} " , displayed : false , isStateChange : true , state : url)
738+ sendEvent(name : " image" , value : url, descriptionText : " Image URL ${ url} " , displayed : false , isStateChange : true , state : url)
736739 }
737740 }
738741 }
739742 if (clearUrl) {
740743 state. snapshot_url = null
741- sendEvent(name : " image" , value : " " , descriptionText : " Image URL Cleared" , displayed : false )
744+ sendEvent(name : " image" , value : " " , descriptionText : " Image URL Cleared" , displayed : false )
742745 }
743746}
744747
@@ -799,17 +802,17 @@ def videoQualityEvent() {
799802 Dropcam, Dropcam HD
800803 * Low: 30GB
801804 * Medium: 120GB
802-
805+
803806 Nest Hello Doorbell
804807 * Low: 50GB
805808 * Medium: 150GB
806809 * High: 300GB
807-
810+
808811 */
809812 def vals = []
810813 camData?. each { item ->
811814 log. debug " ${ item?.split(".")} "
812-
815+
813816 // if(t[2]?.isNumber()) {
814817 // vals.push(t[2] as Integer)
815818 // }
@@ -820,7 +823,7 @@ def videoQualityEvent() {
820823def findCameraModel () {
821824 // if(!state?.camApiServerData) { return }
822825 // def camData = state?.camApiServerData?.items[0]?.capabilities?.findAll { it?.startsWith("streaming.cameraprofile") }
823-
826+
824827}
825828
826829def publicShareUrlEvent (url ) {
@@ -844,7 +847,7 @@ def publicShareUrlEvent(url) {
844847 def camData
845848 def ldtSec = getTimeDiffSeconds(state?. lastGetCamApiServerData)
846849 if (state?. camUUID && (state?. camApiServerData == null || ldtSec > (180 * 60 )) ) {
847- camData = getCamApiServerData(state?. camUUID)
850+ camData = getCamApiServerData(state?. camUUID)
848851 }
849852 if (camData && state?. lastCamApiServerData != camData) {
850853 state?. lastCamApiServerData = camData
0 commit comments