{"action":"created","comment":{"url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/comments/165796202","pull_request_review_id":93797969,"id":165796202,"diff_hunk":"@@ -1035,6 +1163,366 @@ def zwaveEvent(physicalgraph.zwave.commands.applicationstatusv1.ApplicationRejec\n \tcreateEvent(displayed: true, descriptionText: \"Rejected the last request\")\n }\n \n+/**\n+ * Responsible for parsing ScheduleEntryTypeSupportedReport command\n+ *\n+ * @param cmd: The ScheduleEntryTypeSupportedReport command to be parsed\n+ *\n+ * @return The event(s) to be sent out\n+ *\n+ */\n+def zwaveEvent(physicalgraph.zwave.commands.scheduleentrylockv3.ScheduleEntryTypeSupportedReport cmd) {\n+\tlog.trace \"[DTH] Executing 'zwaveEvent(physicalgraph.zwave.commands.scheduleentrylockv3.ScheduleEntryTypeSupportedReport cmd)' with cmd = $cmd\"\n+\tdef result = []\n+\tdef numberOfSlotsDailyRepeating = cmd.numberOfSlotsDailyRepeating\n+\tdef numberOfSlotsWeekDay = cmd.numberOfSlotsWeekDay\n+\tdef numberOfSlotsYearDay = cmd.numberOfSlotsYearDay\n+\tif (!numberOfSlotsDailyRepeating) {\n+\t\tnumberOfSlotsDailyRepeating = 0\n+\t}\n+\tif (!numberOfSlotsWeekDay) {\n+\t\tnumberOfSlotsWeekDay = 0\n+\t}\n+\tif (!numberOfSlotsYearDay) {\n+\t\tnumberOfSlotsYearDay = 0\n+\t}\n+\tresult << createEvent(name: \"numberOfSlotsDailyRepeating\", value: numberOfSlotsDailyRepeating, displayed: false, descriptionText: \"No. of daily repeating slots supported is ${numberOfSlotsDailyRepeating}\")\n+\tresult << createEvent(name: \"numberOfSlotsWeekDay\", value: numberOfSlotsWeekDay, displayed: false, descriptionText: \"No. of week day slots supported is ${numberOfSlotsWeekDay}\")\n+\tresult << createEvent(name: \"numberOfSlotsYearDay\", value: numberOfSlotsYearDay, displayed: false, descriptionText: \"No. of year day slots supported is ${numberOfSlotsYearDay}\")\n+\treturn result\n+}\n+\n+/**\n+ * Responsible for parsing ScheduleEntryLockDailyRepeatingReport command\n+ *\n+ * @param cmd: The ScheduleEntryLockDailyRepeatingReport command to be parsed\n+ *\n+ * @return The event(s) to be sent out\n+ *\n+ */\n+def zwaveEvent(physicalgraph.zwave.commands.scheduleentrylockv3.ScheduleEntryLockDailyRepeatingReport cmd) {\n+\tlog.trace \"[DTH] Executing 'zwaveEvent(physicalgraph.zwave.commands.scheduleentrylockv3.ScheduleEntryLockDailyRepeatingReport cmd)' with cmd = $cmd\"\n+\tif (device.currentValue(\"numberOfSlotsDailyRepeating\")) {\n+\t\t\n+\t\tdef result = []\n+\t\tdef codeID = cmd.userIdentifier\n+\t\tdef lockCodes = loadLockCodes()\n+\t\tdef codeName = getCodeName(lockCodes, codeID)\n+\n+\t\tif (cmd.durationHour == 255 && cmd.durationMinute == 255 && cmd.startHour == 255 && cmd.startMinute == 255 && cmd.weekDayBitmask == 255) {\n+\t\t\tdef scheduleType = getScheduleType(codeID)\n+\t\t\tif (isScheduleScanningInProgress(codeID) || scheduleType == \"always\" || scheduleType == \"unknown\") {\n+\t\t\t\tlog.trace \"[DTH] ScheduleEntryLockDailyRepeatingReport() -  Schedule found empty while scanning for codeID := $codeID\"\n+\t\t\t\tresult << createEvent(name: \"scheduleChanged\", value: \"$codeID $SCHEDULE_TYPE_DAILY_REPEATING unset\", isStateChange: false, displayed: false)\n+\t\t\t\t// For Kwikset lock, we know the type of schedule type through confugurationGet() and hence an empty schedule case will never be encountered\n+\t\t\t\t// For other locks, the schedule type is not known and hence check for year day and week day schedule now\n+\t\t\t\tif (device.currentValue(\"numberOfSlotsYearDay\")) {\n+\t\t\t\t\tlog.trace \"[DTH] ScheduleEntryLockDailyRepeatingReport() -  Requesting year day schedule for codeID := $codeID\"\n+\t\t\t\t\tresult << response(requestYearDaySchedule(codeID))\n+\t\t\t\t} else if (device.currentValue(\"numberOfSlotsWeekDay\")) {\n+\t\t\t\t\tlog.trace \"[DTH] ScheduleEntryLockDailyRepeatingReport() -  Requesting week day schedule for codeID := $codeID\"\n+\t\t\t\t\tclearWeekdayScanningDataFromState(codeID)\n+\t\t\t\t\tresult << response(requestAllWeekDaySchedule(codeID))\n+\t\t\t\t} else {\n+\t\t\t\t\t// schedule scanning for this codeID is complete\n+\t\t\t\t\tsetUserInfo([codeID: \"\" + codeID, phoneNum: \"\", accessType: \"always\", lastUpdated: new Date().getTime()])\n+\t\t\t\t\tlog.trace \"[DTH] ScheduleEntryLockDailyRepeatingReport() -  Schedule scanning complete for codeID := $codeID\"\n+\t\t\t\t\tcheckAndScanNextSchedule(codeID)\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tlog.trace \"[DTH] ScheduleEntryLockDailyRepeatingReport() -  Schedule deleted successfully for codeID := $codeID\"\n+\t\t\t\tresult << scheduleDeleteEvent(codeID)\n+\t\t\t\tdef deviceName = device.displayName\n+\t\t\t\tdef map = [name: \"scheduleChanged\", value: \"$codeID $SCHEDULE_TYPE_DAILY_REPEATING deleted\", descriptionText: \"Cleared recurring schedule for \\\"$codeName\\\"\", isStateChange: true, displayed: true]\n+\t\t\t\tmap.data = [lockName: deviceName, notify: true, notificationText: \"Cleared recurring schedule for \\\"$codeName\\\" in $deviceName at ${location.name}\"]\n+\t\t\t\tresult << createEvent(map)\n+\t\t\t}\n+\t\t} else {\n+\t\t\tdef savedStartTime = state[\"setDailyRepeatingStartTime$codeID\"]\n+\t\t\tdef savedEndTime = state[\"setDailyRepeatingEndTime$codeID\"]\n+\t\t\tdef savedWeekDayBitmask = state[\"setDailyRepeatingBitMask$codeID\"]\n+\t\t\t\n+\t\t\tdef changeType = getScheduleChangeType(codeID, SCHEDULE_TYPE_DAILY_REPEATING)\n+\t\t\t\n+\t\t\tif (savedStartTime && savedEndTime && savedWeekDayBitmask) {\n+\t\t\t\tdef startTime = getWeekDayHoursAndMinutes(savedStartTime)\n+\t\t\t\tdef endTime = getWeekDayHoursAndMinutes(savedEndTime)\n+\t\t\t\t\n+\t\t\t\tdef startHour = startTime.hour\n+\t\t\t\tdef startMin = startTime.minute\n+\t\t\t\tdef endHour = endTime.hour\n+\t\t\t\tdef endMin = endTime.minute\n+\t\t\n+\t\t\t\tdef durMap = getDurationInHoursAndMinutes(startHour, startMin, endHour, endMin)\n+\t\t\t\tdef durMin = durMap.durMin\n+\t\t\t\tdef durHour = durMap.durHour\n+\t\t\t\t\n+\t\t\t\tif (cmd.durationHour == durHour && cmd.durationMinute == durMin && cmd.startHour == startHour && cmd.startMinute == startMin && cmd.weekDayBitmask == savedWeekDayBitmask) {\n+\t\t\t\t\tlog.trace \"[DTH] ScheduleEntryLockDailyRepeatingReport() -  Schedule set successfully for codeID := $codeID\"\n+\t\t\t\t\tresult << scheduleSetEvent(codeID, SCHEDULE_TYPE_DAILY_REPEATING)\n+\t\t\t\t\tdef deviceName = device.displayName\n+\t\t\t\t\tdef map = [name: \"scheduleChanged\", value: \"$codeID $SCHEDULE_TYPE_DAILY_REPEATING $changeType\", descriptionText: \"${getStatusForDescription(changeType)} recurring schedule for \\\"$codeName\\\"\", isStateChange: true, displayed: true]\n+\t\t\t\t\tmap.data = [lockName: deviceName, notify: true, notificationText: \"${getStatusForDescription(changeType)} \\\"$codeName\\\" with recurring schedule in $deviceName at ${location.name}\"]\n+\t\t\t\t\tresult << createEvent(map)\n+\t\t\t\t} else {\n+\t\t\t\t\tlog.trace \"[DTH] ScheduleEntryLockDailyRepeatingReport() -  Schedule set failed for codeID := $codeID\"\n+\t\t\t\t\tresult << createEvent(name: \"scheduleChanged\", value: \"$codeID $SCHEDULE_TYPE_DAILY_REPEATING failed\", descriptionText: \"Recurring schedule set failed for \\\"$codeName\\\"\", isStateChange: true, displayed: false)\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tlog.trace \"[DTH] ScheduleEntryLockDailyRepeatingReport() -  Schedule found for codeID := $codeID while scanning\"\n+\t\t\t\tdef endHour = cmd.startHour + cmd.durationHour\n+\t\t\t\tdef endMin = cmd.startMinute + cmd.durationMinute\n+\t\t\t\tif (endMin >= 60) {\n+\t\t\t\t\tendMin = endMin % 60\n+\t\t\t\t\tendHour = endHour + 1\n+\t\t\t\t}\n+\t\t\t\t\n+\t\t\t\tstate[\"setDailyRepeatingStartTime$codeID\"] = sprintf(\"%02d:%02d\", cmd.startHour, cmd.startMinute)\n+\t\t\t\tstate[\"setDailyRepeatingEndTime$codeID\"] = sprintf(\"%02d:%02d\", endHour, endMin)\n+\t\t\t\tstate[\"setDailyRepeatingBitMask$codeID\"] = cmd.weekDayBitmask\n+\t\t\t\tresult << scheduleSetEvent(codeID, SCHEDULE_TYPE_DAILY_REPEATING)\n+\t\t\t\tdef map = [name: \"scheduleChanged\", value: \"$codeID $SCHEDULE_TYPE_DAILY_REPEATING $changeType\", descriptionText: \"${getStatusForDescription(changeType)} recurring schedule for \\\"$codeName\\\"\", isStateChange: true, displayed: true]\n+\t\t\t\tif (changeType == \"changed\") {\n+\t\t\t\t\tmap.displayed = false\n+\t\t\t\t}\n+\t\t\t\tresult << createEvent(map)\n+\t\t\t\t\n+\t\t\t\t// schedule scanning for this codeID is complete\n+\t\t\t\tlog.trace \"[DTH] ScheduleEntryLockDailyRepeatingReport() -  Schedule scanning complete for codeID := $codeID\"\n+\t\t\t\tcheckAndScanNextSchedule(codeID)\n+\t\t\t}\n+\t\t\tclearDailyRepeatingScheduleDataFromState(codeID)\n+\t\t}\n+\n+\t\tif (result) {\n+\t\t\tresult = result.flatten()\n+\t\t\treturn result\n+\t\t}\n+\t\treturn null\n+\t}\n+\treturn null\n+}\n+\n+/**\n+ * Responsible for parsing ScheduleEntryLockWeekDayReport command\n+ *\n+ * @param cmd: The ScheduleEntryLockWeekDayReport command to be parsed\n+ *\n+ * @return The event(s) to be sent out\n+ *\n+ */\n+def zwaveEvent(physicalgraph.zwave.commands.scheduleentrylockv3.ScheduleEntryLockWeekDayReport cmd) {\n+\tlog.trace \"[DTH] Executing 'zwaveEvent(physicalgraph.zwave.commands.scheduleentrylockv3.ScheduleEntryLockWeekDayReport cmd)' with cmd = $cmd\"\n+\tif (device.currentValue(\"numberOfSlotsWeekDay\")) {\n+\t\tdef result = []\n+\t\tdef codeID = cmd.userIdentifier\n+\t\tdef lockCodes = loadLockCodes()\n+\t\tdef codeName = getCodeName(lockCodes, codeID)\n+\t\t\n+\t\tdef daysOfWeek = state[\"setWeekDayWeekDays$codeID\"]\n+\t\tif (daysOfWeek && daysOfWeek.size() > 0) {\n+\t\t\tint dayOfWeek = cmd.dayOfWeek\n+\t\t\tif (dayOfWeek in daysOfWeek) {\n+\t\t\t\tdef startTime = getWeekDayHoursAndMinutes(state[\"setWeekDayStartTime$codeID\"])\n+\t\t\t\tdef startHour = startTime.hour\n+\t\t\t\tdef startMin = startTime.minute\n+\t\t\t\t\n+\t\t\t\tdef endTime = getWeekDayHoursAndMinutes(state[\"setWeekDayEndTime$codeID\"])\n+\t\t\t\tdef endHour = endTime.hour\n+\t\t\t\tdef endMin = endTime.minute\n+\t\t\t\t\n+\t\t\t\tif (cmd.startHour == startHour && cmd.startMinute == startMin && cmd.stopHour == endHour && cmd.stopMinute == endMin) {","path":"devicetypes/smartthings/zwave-lock.src/zwave-lock.groovy","position":514,"original_position":514,"commit_id":"130f746bfd6c65f6563b347bb2f780dbb9f6bfd4","original_commit_id":"130f746bfd6c65f6563b347bb2f780dbb9f6bfd4","user":{"login":"greens","id":123942,"avatar_url":"https://avatars1.githubusercontent.com/u/123942?v=4","gravatar_id":"","url":"https://api.github.com/users/greens","html_url":"https://github.com/greens","followers_url":"https://api.github.com/users/greens/followers","following_url":"https://api.github.com/users/greens/following{/other_user}","gists_url":"https://api.github.com/users/greens/gists{/gist_id}","starred_url":"https://api.github.com/users/greens/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greens/subscriptions","organizations_url":"https://api.github.com/users/greens/orgs","repos_url":"https://api.github.com/users/greens/repos","events_url":"https://api.github.com/users/greens/events{/privacy}","received_events_url":"https://api.github.com/users/greens/received_events","type":"User","site_admin":false},"body":"As a general comment, can this be commented a bit more. It's not entirely clear at a glance what is happening in this code.","created_at":"2018-02-03T00:55:49Z","updated_at":"2018-02-03T00:55:49Z","html_url":"https://github.com/SmartThingsCommunity/SmartThingsPublic/pull/2697#discussion_r165796202","pull_request_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/2697","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/comments/165796202"},"html":{"href":"https://github.com/SmartThingsCommunity/SmartThingsPublic/pull/2697#discussion_r165796202"},"pull_request":{"href":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/2697"}}},"pull_request":{"url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/2697","id":162931045,"html_url":"https://github.com/SmartThingsCommunity/SmartThingsPublic/pull/2697","diff_url":"https://github.com/SmartThingsCommunity/SmartThingsPublic/pull/2697.diff","patch_url":"https://github.com/SmartThingsCommunity/SmartThingsPublic/pull/2697.patch","issue_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/issues/2697","number":2697,"state":"open","locked":false,"title":"[DVCSMP-3413] Implemented Lock Code Scheduling functionality.","user":{"login":"vaish-rahul","id":16831274,"avatar_url":"https://avatars2.githubusercontent.com/u/16831274?v=4","gravatar_id":"","url":"https://api.github.com/users/vaish-rahul","html_url":"https://github.com/vaish-rahul","followers_url":"https://api.github.com/users/vaish-rahul/followers","following_url":"https://api.github.com/users/vaish-rahul/following{/other_user}","gists_url":"https://api.github.com/users/vaish-rahul/gists{/gist_id}","starred_url":"https://api.github.com/users/vaish-rahul/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vaish-rahul/subscriptions","organizations_url":"https://api.github.com/users/vaish-rahul/orgs","repos_url":"https://api.github.com/users/vaish-rahul/repos","events_url":"https://api.github.com/users/vaish-rahul/events{/privacy}","received_events_url":"https://api.github.com/users/vaish-rahul/received_events","type":"User","site_admin":false},"body":"info so that the Zigbee Locks get adapted to Smart Locks Version 2\r\nfeatures.","created_at":"2018-01-15T11:42:22Z","updated_at":"2018-02-03T00:55:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0fc4223f4d15fd04f4451983eb49068f0fe3aa41","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"milestone":null,"commits_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/2697/commits","review_comments_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/2697/comments","review_comment_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/issues/2697/comments","statuses_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/statuses/130f746bfd6c65f6563b347bb2f780dbb9f6bfd4","head":{"label":"vaish-rahul:master","ref":"master","sha":"130f746bfd6c65f6563b347bb2f780dbb9f6bfd4","user":{"login":"vaish-rahul","id":16831274,"avatar_url":"https://avatars2.githubusercontent.com/u/16831274?v=4","gravatar_id":"","url":"https://api.github.com/users/vaish-rahul","html_url":"https://github.com/vaish-rahul","followers_url":"https://api.github.com/users/vaish-rahul/followers","following_url":"https://api.github.com/users/vaish-rahul/following{/other_user}","gists_url":"https://api.github.com/users/vaish-rahul/gists{/gist_id}","starred_url":"https://api.github.com/users/vaish-rahul/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vaish-rahul/subscriptions","organizations_url":"https://api.github.com/users/vaish-rahul/orgs","repos_url":"https://api.github.com/users/vaish-rahul/repos","events_url":"https://api.github.com/users/vaish-rahul/events{/privacy}","received_events_url":"https://api.github.com/users/vaish-rahul/received_events","type":"User","site_admin":false},"repo":{"id":94855822,"name":"SmartThingsPublic","full_name":"vaish-rahul/SmartThingsPublic","owner":{"login":"vaish-rahul","id":16831274,"avatar_url":"https://avatars2.githubusercontent.com/u/16831274?v=4","gravatar_id":"","url":"https://api.github.com/users/vaish-rahul","html_url":"https://github.com/vaish-rahul","followers_url":"https://api.github.com/users/vaish-rahul/followers","following_url":"https://api.github.com/users/vaish-rahul/following{/other_user}","gists_url":"https://api.github.com/users/vaish-rahul/gists{/gist_id}","starred_url":"https://api.github.com/users/vaish-rahul/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vaish-rahul/subscriptions","organizations_url":"https://api.github.com/users/vaish-rahul/orgs","repos_url":"https://api.github.com/users/vaish-rahul/repos","events_url":"https://api.github.com/users/vaish-rahul/events{/privacy}","received_events_url":"https://api.github.com/users/vaish-rahul/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vaish-rahul/SmartThingsPublic","description":"SmartThings open-source DeviceTypeHandlers and SmartApps code","fork":true,"url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic","forks_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/forks","keys_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/teams","hooks_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/hooks","issue_events_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/issues/events{/number}","events_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/events","assignees_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/assignees{/user}","branches_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/branches{/branch}","tags_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/tags","blobs_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/git/refs{/sha}","trees_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/statuses/{sha}","languages_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/languages","stargazers_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/stargazers","contributors_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/contributors","subscribers_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/subscribers","subscription_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/subscription","commits_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/commits{/sha}","git_commits_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/git/commits{/sha}","comments_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/comments{/number}","issue_comment_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/issues/comments{/number}","contents_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/contents/{+path}","compare_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/merges","archive_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/downloads","issues_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/issues{/number}","pulls_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/pulls{/number}","milestones_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/milestones{/number}","notifications_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/labels{/name}","releases_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/releases{/id}","deployments_url":"https://api.github.com/repos/vaish-rahul/SmartThingsPublic/deployments","created_at":"2017-06-20T06:09:34Z","updated_at":"2017-06-20T06:15:39Z","pushed_at":"2018-01-29T05:33:29Z","git_url":"git://github.com/vaish-rahul/SmartThingsPublic.git","ssh_url":"git@github.com:vaish-rahul/SmartThingsPublic.git","clone_url":"https://github.com/vaish-rahul/SmartThingsPublic.git","svn_url":"https://github.com/vaish-rahul/SmartThingsPublic","homepage":"http://developer.smartthings.com/","size":6965,"stargazers_count":0,"watchers_count":0,"language":"Groovy","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"SmartThingsCommunity:master","ref":"master","sha":"eeb0ede963226e560530ceb4ea608505d7875cca","user":{"login":"SmartThingsCommunity","id":7317431,"avatar_url":"https://avatars0.githubusercontent.com/u/7317431?v=4","gravatar_id":"","url":"https://api.github.com/users/SmartThingsCommunity","html_url":"https://github.com/SmartThingsCommunity","followers_url":"https://api.github.com/users/SmartThingsCommunity/followers","following_url":"https://api.github.com/users/SmartThingsCommunity/following{/other_user}","gists_url":"https://api.github.com/users/SmartThingsCommunity/gists{/gist_id}","starred_url":"https://api.github.com/users/SmartThingsCommunity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SmartThingsCommunity/subscriptions","organizations_url":"https://api.github.com/users/SmartThingsCommunity/orgs","repos_url":"https://api.github.com/users/SmartThingsCommunity/repos","events_url":"https://api.github.com/users/SmartThingsCommunity/events{/privacy}","received_events_url":"https://api.github.com/users/SmartThingsCommunity/received_events","type":"Organization","site_admin":false},"repo":{"id":40212802,"name":"SmartThingsPublic","full_name":"SmartThingsCommunity/SmartThingsPublic","owner":{"login":"SmartThingsCommunity","id":7317431,"avatar_url":"https://avatars0.githubusercontent.com/u/7317431?v=4","gravatar_id":"","url":"https://api.github.com/users/SmartThingsCommunity","html_url":"https://github.com/SmartThingsCommunity","followers_url":"https://api.github.com/users/SmartThingsCommunity/followers","following_url":"https://api.github.com/users/SmartThingsCommunity/following{/other_user}","gists_url":"https://api.github.com/users/SmartThingsCommunity/gists{/gist_id}","starred_url":"https://api.github.com/users/SmartThingsCommunity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SmartThingsCommunity/subscriptions","organizations_url":"https://api.github.com/users/SmartThingsCommunity/orgs","repos_url":"https://api.github.com/users/SmartThingsCommunity/repos","events_url":"https://api.github.com/users/SmartThingsCommunity/events{/privacy}","received_events_url":"https://api.github.com/users/SmartThingsCommunity/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SmartThingsCommunity/SmartThingsPublic","description":"SmartThings open-source DeviceTypeHandlers and SmartApps code","fork":false,"url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic","forks_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/forks","keys_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/teams","hooks_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/hooks","issue_events_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/issues/events{/number}","events_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/events","assignees_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/assignees{/user}","branches_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/branches{/branch}","tags_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/tags","blobs_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/git/refs{/sha}","trees_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/statuses/{sha}","languages_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/languages","stargazers_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/stargazers","contributors_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/contributors","subscribers_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/subscribers","subscription_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/subscription","commits_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/commits{/sha}","git_commits_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/git/commits{/sha}","comments_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/comments{/number}","issue_comment_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/issues/comments{/number}","contents_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/contents/{+path}","compare_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/merges","archive_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/downloads","issues_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/issues{/number}","pulls_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls{/number}","milestones_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/milestones{/number}","notifications_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/labels{/name}","releases_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/releases{/id}","deployments_url":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/deployments","created_at":"2015-08-04T22:48:02Z","updated_at":"2018-02-02T05:00:30Z","pushed_at":"2018-02-02T18:17:23Z","git_url":"git://github.com/SmartThingsCommunity/SmartThingsPublic.git","ssh_url":"git@github.com:SmartThingsCommunity/SmartThingsPublic.git","clone_url":"https://github.com/SmartThingsCommunity/SmartThingsPublic.git","svn_url":"https://github.com/SmartThingsCommunity/SmartThingsPublic","homepage":"http://developer.smartthings.com/","size":7937,"stargazers_count":813,"watchers_count":813,"language":"Groovy","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":35071,"mirror_url":null,"archived":false,"open_issues_count":856,"license":null,"forks":35071,"open_issues":856,"watchers":813,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/2697"},"html":{"href":"https://github.com/SmartThingsCommunity/SmartThingsPublic/pull/2697"},"issue":{"href":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/issues/2697"},"comments":{"href":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/issues/2697/comments"},"review_comments":{"href":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/2697/comments"},"review_comment":{"href":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/pulls/2697/commits"},"statuses":{"href":"https://api.github.com/repos/SmartThingsCommunity/SmartThingsPublic/statuses/130f746bfd6c65f6563b347bb2f780dbb9f6bfd4"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"greens"}}