{"action":"created","comment":{"url":"https://api.github.com/repos/openhab/openhab2/pulls/comments/42952601","id":42952601,"diff_hunk":"@@ -0,0 +1,248 @@\n+/**\r\n+ * Copyright (c) 2014-2015 openHAB UG (haftungsbeschraenkt) and others.\r\n+ * All rights reserved. This program and the accompanying materials\r\n+ * are made available under the terms of the Eclipse Public License v1.0\r\n+ * which accompanies this distribution, and is available at\r\n+ * http://www.eclipse.org/legal/epl-v10.html\r\n+ */\r\n+package org.openhab.binding.opensprinkler.handler;\r\n+\r\n+import static org.openhab.binding.opensprinkler.OpenSprinklerBindingConstants.*;\r\n+\r\n+import java.util.concurrent.ScheduledFuture;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import org.eclipse.smarthome.core.library.types.OnOffType;\r\n+import org.eclipse.smarthome.core.library.types.OpenClosedType;\r\n+import org.eclipse.smarthome.core.thing.ChannelUID;\r\n+import org.eclipse.smarthome.core.thing.Thing;\r\n+import org.eclipse.smarthome.core.thing.ThingStatus;\r\n+import org.eclipse.smarthome.core.thing.ThingStatusDetail;\r\n+import org.eclipse.smarthome.core.thing.binding.BaseThingHandler;\r\n+import org.eclipse.smarthome.core.types.Command;\r\n+import org.eclipse.smarthome.core.types.State;\r\n+import org.openhab.binding.opensprinkler.OpenSprinklerBindingConstants.Station;\r\n+import org.openhab.binding.opensprinkler.config.OpenSprinklerConfig;\r\n+import org.openhab.binding.opensprinkler.internal.api.OpenSprinklerApi;\r\n+import org.openhab.binding.opensprinkler.internal.api.OpenSprinklerApiFactory;\r\n+import org.slf4j.Logger;\r\n+import org.slf4j.LoggerFactory;\r\n+\r\n+/**\r\n+ * The {@link OpenSprinklerHandler} is responsible for handling commands, which are\r\n+ * sent to one of the channels.\r\n+ *\r\n+ * @author Chris Graham - Initial contribution\r\n+ */\r\n+public class OpenSprinklerHandler extends BaseThingHandler {\r\n+    private Logger logger = LoggerFactory.getLogger(OpenSprinklerHandler.class);\r\n+\r\n+    private ScheduledFuture<?> pollingJob;\r\n+\r\n+    private OpenSprinklerConfig openSprinklerConfig = null;\r\n+\r\n+    private OpenSprinklerApi openSprinklerDevice = null;\r\n+\r\n+    protected int refreshInterval = DEFAULT_REFRESH_RATE;\r\n+\r\n+    public OpenSprinklerHandler(Thing thing) {\r\n+        super(thing);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void handleCommand(ChannelUID channelUID, Command command) {\r\n+        int stationId;\r\n+\r\n+        try {\r\n+            stationId = Station.get(channelUID.getId()).toNumber();\r\n+            handleStationCommand(stationId, command);\r\n+        } catch (Exception exp) {\r\n+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR,\r\n+                    \"Could not control the OpenSprinkler device.\");\r\n+            logger.error(\"Error controlling and OpenSprinkler station.\");\r\n+            logger.debug(\"Exception received: \" + exp.toString());\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void initialize() {\r\n+        openSprinklerConfig = getConfig().as(OpenSprinklerConfig.class);\r\n+\r\n+        logger.debug(\"Initializing OpenSprinkler Thing with config (Hostname: \" + openSprinklerConfig.hostname\r\n+                + \", Port: \" + openSprinklerConfig.port + \", Password: \" + openSprinklerConfig.password + \", Refresh: \"\r\n+                + openSprinklerConfig.refresh + \").\");\r\n+\r\n+        if (openSprinklerConfig == null) {\r\n+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.CONFIGURATION_ERROR,\r\n+                    \"Could not parse the config for the OpenSprinkler thing.\");\r\n+            logger.error(\"Could not parse config for the OpenSprinkler device.\");\r\n+\r\n+            return;\r\n+        }\r\n+\r\n+        try {\r\n+            openSprinklerDevice = OpenSprinklerApiFactory.getHttpApi(openSprinklerConfig.hostname,\r\n+                    openSprinklerConfig.port, openSprinklerConfig.password);\r\n+        } catch (Exception exp) {\r\n+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR,\r\n+                    \"Could not create a connection to the OpenSprinkler thing.\");\r\n+            logger.error(\"Could not create API connection to the OpenSprinkler device.\");\r\n+            logger.debug(\"Exception received: \" + exp.toString());\r\n+\r\n+            return;\r\n+        }\r\n+\r\n+        logger.debug(\"Successfully created API connection to the OpenSprinkler device.\");\r\n+\r\n+        try {\r\n+            openSprinklerDevice.openConnection();\r\n+        } catch (Exception exp) {\r\n+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR,\r\n+                    \"Could not open the connection to the OpenSprinkler thing.\");\r\n+            logger.error(\"Could not open API connection to the OpenSprinkler device.\");\r\n+            logger.debug(\"Exception received: \" + exp.toString());\r\n+        }\r\n+\r\n+        if (openSprinklerDevice.isConnected()) {\r\n+            updateStatus(ThingStatus.ONLINE);\r\n+            logger.debug(\"OpenSprinkler connected.\");\r\n+        } else {\r\n+            updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR,\r\n+                    \"Could not initialize the connection to the OpenSprinkler thing.\");\r\n+            logger.error(\"Could not initialize the OpenSprinkler device.\");\r\n+\r\n+            return;\r\n+        }\r\n+\r\n+        onUpdate();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void dispose() {\r\n+        if (openSprinklerDevice != null) {\r\n+            try {\r\n+                openSprinklerDevice.closeConnection();\r\n+            } catch (Exception exp) {\r\n+                logger.error(\"Could not close API connection to the OpenSprinkler device.\");\r","path":"addons/binding/org.openhab.binding.opensprinkler/src/main/java/org/openhab/binding/opensprinkler/handler/OpenSprinklerHandler.java","position":126,"original_position":126,"commit_id":"69be756aae80711071d3a23ba5933ceae4197a16","original_commit_id":"69be756aae80711071d3a23ba5933ceae4197a16","user":{"login":"kaikreuzer","id":3244965,"avatar_url":"https://avatars.githubusercontent.com/u/3244965?v=3","gravatar_id":"","url":"https://api.github.com/users/kaikreuzer","html_url":"https://github.com/kaikreuzer","followers_url":"https://api.github.com/users/kaikreuzer/followers","following_url":"https://api.github.com/users/kaikreuzer/following{/other_user}","gists_url":"https://api.github.com/users/kaikreuzer/gists{/gist_id}","starred_url":"https://api.github.com/users/kaikreuzer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaikreuzer/subscriptions","organizations_url":"https://api.github.com/users/kaikreuzer/orgs","repos_url":"https://api.github.com/users/kaikreuzer/repos","events_url":"https://api.github.com/users/kaikreuzer/events{/privacy}","received_events_url":"https://api.github.com/users/kaikreuzer/received_events","type":"User","site_admin":false},"body":"on a dispose, the user will not really care - so reduce to debug level (i.e. merge with next line)","created_at":"2015-10-26T00:02:36Z","updated_at":"2015-10-26T00:02:36Z","html_url":"https://github.com/openhab/openhab2/pull/337#discussion_r42952601","pull_request_url":"https://api.github.com/repos/openhab/openhab2/pulls/337","_links":{"self":{"href":"https://api.github.com/repos/openhab/openhab2/pulls/comments/42952601"},"html":{"href":"https://github.com/openhab/openhab2/pull/337#discussion_r42952601"},"pull_request":{"href":"https://api.github.com/repos/openhab/openhab2/pulls/337"}}},"pull_request":{"url":"https://api.github.com/repos/openhab/openhab2/pulls/337","id":42092687,"html_url":"https://github.com/openhab/openhab2/pull/337","diff_url":"https://github.com/openhab/openhab2/pull/337.diff","patch_url":"https://github.com/openhab/openhab2/pull/337.patch","issue_url":"https://api.github.com/repos/openhab/openhab2/issues/337","number":337,"state":"open","locked":false,"title":"Initial contribution of the OpenSprinkler 2.0 binding.","user":{"login":"CrackerStealth","id":6298759,"avatar_url":"https://avatars.githubusercontent.com/u/6298759?v=3","gravatar_id":"","url":"https://api.github.com/users/CrackerStealth","html_url":"https://github.com/CrackerStealth","followers_url":"https://api.github.com/users/CrackerStealth/followers","following_url":"https://api.github.com/users/CrackerStealth/following{/other_user}","gists_url":"https://api.github.com/users/CrackerStealth/gists{/gist_id}","starred_url":"https://api.github.com/users/CrackerStealth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CrackerStealth/subscriptions","organizations_url":"https://api.github.com/users/CrackerStealth/orgs","repos_url":"https://api.github.com/users/CrackerStealth/repos","events_url":"https://api.github.com/users/CrackerStealth/events{/privacy}","received_events_url":"https://api.github.com/users/CrackerStealth/received_events","type":"User","site_admin":false},"body":"This binding was developed and coded from the ground up for OpenHAB 2.0.","created_at":"2015-08-11T04:54:42Z","updated_at":"2015-10-26T00:02:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bbe70b553eca822059dc107b8f950d3076a6d990","assignee":{"login":"kaikreuzer","id":3244965,"avatar_url":"https://avatars.githubusercontent.com/u/3244965?v=3","gravatar_id":"","url":"https://api.github.com/users/kaikreuzer","html_url":"https://github.com/kaikreuzer","followers_url":"https://api.github.com/users/kaikreuzer/followers","following_url":"https://api.github.com/users/kaikreuzer/following{/other_user}","gists_url":"https://api.github.com/users/kaikreuzer/gists{/gist_id}","starred_url":"https://api.github.com/users/kaikreuzer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaikreuzer/subscriptions","organizations_url":"https://api.github.com/users/kaikreuzer/orgs","repos_url":"https://api.github.com/users/kaikreuzer/repos","events_url":"https://api.github.com/users/kaikreuzer/events{/privacy}","received_events_url":"https://api.github.com/users/kaikreuzer/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/openhab/openhab2/milestones/2","html_url":"https://github.com/openhab/openhab2/milestones/2.0.0%20beta1","labels_url":"https://api.github.com/repos/openhab/openhab2/milestones/2/labels","id":1144316,"number":2,"title":"2.0.0 beta1","description":"First beta release of openHAB 2","creator":{"login":"kaikreuzer","id":3244965,"avatar_url":"https://avatars.githubusercontent.com/u/3244965?v=3","gravatar_id":"","url":"https://api.github.com/users/kaikreuzer","html_url":"https://github.com/kaikreuzer","followers_url":"https://api.github.com/users/kaikreuzer/followers","following_url":"https://api.github.com/users/kaikreuzer/following{/other_user}","gists_url":"https://api.github.com/users/kaikreuzer/gists{/gist_id}","starred_url":"https://api.github.com/users/kaikreuzer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaikreuzer/subscriptions","organizations_url":"https://api.github.com/users/kaikreuzer/orgs","repos_url":"https://api.github.com/users/kaikreuzer/repos","events_url":"https://api.github.com/users/kaikreuzer/events{/privacy}","received_events_url":"https://api.github.com/users/kaikreuzer/received_events","type":"User","site_admin":false},"open_issues":13,"closed_issues":23,"state":"open","created_at":"2015-06-02T07:25:29Z","updated_at":"2015-10-25T17:56:28Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/openhab/openhab2/pulls/337/commits","review_comments_url":"https://api.github.com/repos/openhab/openhab2/pulls/337/comments","review_comment_url":"https://api.github.com/repos/openhab/openhab2/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openhab/openhab2/issues/337/comments","statuses_url":"https://api.github.com/repos/openhab/openhab2/statuses/69be756aae80711071d3a23ba5933ceae4197a16","head":{"label":"CrackerStealth:OpenSprinklerAddon","ref":"OpenSprinklerAddon","sha":"69be756aae80711071d3a23ba5933ceae4197a16","user":{"login":"CrackerStealth","id":6298759,"avatar_url":"https://avatars.githubusercontent.com/u/6298759?v=3","gravatar_id":"","url":"https://api.github.com/users/CrackerStealth","html_url":"https://github.com/CrackerStealth","followers_url":"https://api.github.com/users/CrackerStealth/followers","following_url":"https://api.github.com/users/CrackerStealth/following{/other_user}","gists_url":"https://api.github.com/users/CrackerStealth/gists{/gist_id}","starred_url":"https://api.github.com/users/CrackerStealth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CrackerStealth/subscriptions","organizations_url":"https://api.github.com/users/CrackerStealth/orgs","repos_url":"https://api.github.com/users/CrackerStealth/repos","events_url":"https://api.github.com/users/CrackerStealth/events{/privacy}","received_events_url":"https://api.github.com/users/CrackerStealth/received_events","type":"User","site_admin":false},"repo":{"id":30973401,"name":"openhab2","full_name":"CrackerStealth/openhab2","owner":{"login":"CrackerStealth","id":6298759,"avatar_url":"https://avatars.githubusercontent.com/u/6298759?v=3","gravatar_id":"","url":"https://api.github.com/users/CrackerStealth","html_url":"https://github.com/CrackerStealth","followers_url":"https://api.github.com/users/CrackerStealth/followers","following_url":"https://api.github.com/users/CrackerStealth/following{/other_user}","gists_url":"https://api.github.com/users/CrackerStealth/gists{/gist_id}","starred_url":"https://api.github.com/users/CrackerStealth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CrackerStealth/subscriptions","organizations_url":"https://api.github.com/users/CrackerStealth/orgs","repos_url":"https://api.github.com/users/CrackerStealth/repos","events_url":"https://api.github.com/users/CrackerStealth/events{/privacy}","received_events_url":"https://api.github.com/users/CrackerStealth/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/CrackerStealth/openhab2","description":"The next-generation open Home Automation Bus (openHAB)","fork":true,"url":"https://api.github.com/repos/CrackerStealth/openhab2","forks_url":"https://api.github.com/repos/CrackerStealth/openhab2/forks","keys_url":"https://api.github.com/repos/CrackerStealth/openhab2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CrackerStealth/openhab2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CrackerStealth/openhab2/teams","hooks_url":"https://api.github.com/repos/CrackerStealth/openhab2/hooks","issue_events_url":"https://api.github.com/repos/CrackerStealth/openhab2/issues/events{/number}","events_url":"https://api.github.com/repos/CrackerStealth/openhab2/events","assignees_url":"https://api.github.com/repos/CrackerStealth/openhab2/assignees{/user}","branches_url":"https://api.github.com/repos/CrackerStealth/openhab2/branches{/branch}","tags_url":"https://api.github.com/repos/CrackerStealth/openhab2/tags","blobs_url":"https://api.github.com/repos/CrackerStealth/openhab2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CrackerStealth/openhab2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CrackerStealth/openhab2/git/refs{/sha}","trees_url":"https://api.github.com/repos/CrackerStealth/openhab2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CrackerStealth/openhab2/statuses/{sha}","languages_url":"https://api.github.com/repos/CrackerStealth/openhab2/languages","stargazers_url":"https://api.github.com/repos/CrackerStealth/openhab2/stargazers","contributors_url":"https://api.github.com/repos/CrackerStealth/openhab2/contributors","subscribers_url":"https://api.github.com/repos/CrackerStealth/openhab2/subscribers","subscription_url":"https://api.github.com/repos/CrackerStealth/openhab2/subscription","commits_url":"https://api.github.com/repos/CrackerStealth/openhab2/commits{/sha}","git_commits_url":"https://api.github.com/repos/CrackerStealth/openhab2/git/commits{/sha}","comments_url":"https://api.github.com/repos/CrackerStealth/openhab2/comments{/number}","issue_comment_url":"https://api.github.com/repos/CrackerStealth/openhab2/issues/comments{/number}","contents_url":"https://api.github.com/repos/CrackerStealth/openhab2/contents/{+path}","compare_url":"https://api.github.com/repos/CrackerStealth/openhab2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CrackerStealth/openhab2/merges","archive_url":"https://api.github.com/repos/CrackerStealth/openhab2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CrackerStealth/openhab2/downloads","issues_url":"https://api.github.com/repos/CrackerStealth/openhab2/issues{/number}","pulls_url":"https://api.github.com/repos/CrackerStealth/openhab2/pulls{/number}","milestones_url":"https://api.github.com/repos/CrackerStealth/openhab2/milestones{/number}","notifications_url":"https://api.github.com/repos/CrackerStealth/openhab2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CrackerStealth/openhab2/labels{/name}","releases_url":"https://api.github.com/repos/CrackerStealth/openhab2/releases{/id}","created_at":"2015-02-18T16:13:18Z","updated_at":"2015-04-30T16:07:46Z","pushed_at":"2015-08-27T21:53:21Z","git_url":"git://github.com/CrackerStealth/openhab2.git","ssh_url":"git@github.com:CrackerStealth/openhab2.git","clone_url":"https://github.com/CrackerStealth/openhab2.git","svn_url":"https://github.com/CrackerStealth/openhab2","homepage":null,"size":9274,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"openhab:master","ref":"master","sha":"2a4a572cb2bcfbcd5f40a10345c16b82504d4e63","user":{"login":"openhab","id":1007353,"avatar_url":"https://avatars.githubusercontent.com/u/1007353?v=3","gravatar_id":"","url":"https://api.github.com/users/openhab","html_url":"https://github.com/openhab","followers_url":"https://api.github.com/users/openhab/followers","following_url":"https://api.github.com/users/openhab/following{/other_user}","gists_url":"https://api.github.com/users/openhab/gists{/gist_id}","starred_url":"https://api.github.com/users/openhab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openhab/subscriptions","organizations_url":"https://api.github.com/users/openhab/orgs","repos_url":"https://api.github.com/users/openhab/repos","events_url":"https://api.github.com/users/openhab/events{/privacy}","received_events_url":"https://api.github.com/users/openhab/received_events","type":"Organization","site_admin":false},"repo":{"id":19753195,"name":"openhab2","full_name":"openhab/openhab2","owner":{"login":"openhab","id":1007353,"avatar_url":"https://avatars.githubusercontent.com/u/1007353?v=3","gravatar_id":"","url":"https://api.github.com/users/openhab","html_url":"https://github.com/openhab","followers_url":"https://api.github.com/users/openhab/followers","following_url":"https://api.github.com/users/openhab/following{/other_user}","gists_url":"https://api.github.com/users/openhab/gists{/gist_id}","starred_url":"https://api.github.com/users/openhab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openhab/subscriptions","organizations_url":"https://api.github.com/users/openhab/orgs","repos_url":"https://api.github.com/users/openhab/repos","events_url":"https://api.github.com/users/openhab/events{/privacy}","received_events_url":"https://api.github.com/users/openhab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openhab/openhab2","description":"The next-generation open Home Automation Bus (openHAB)","fork":false,"url":"https://api.github.com/repos/openhab/openhab2","forks_url":"https://api.github.com/repos/openhab/openhab2/forks","keys_url":"https://api.github.com/repos/openhab/openhab2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openhab/openhab2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openhab/openhab2/teams","hooks_url":"https://api.github.com/repos/openhab/openhab2/hooks","issue_events_url":"https://api.github.com/repos/openhab/openhab2/issues/events{/number}","events_url":"https://api.github.com/repos/openhab/openhab2/events","assignees_url":"https://api.github.com/repos/openhab/openhab2/assignees{/user}","branches_url":"https://api.github.com/repos/openhab/openhab2/branches{/branch}","tags_url":"https://api.github.com/repos/openhab/openhab2/tags","blobs_url":"https://api.github.com/repos/openhab/openhab2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openhab/openhab2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openhab/openhab2/git/refs{/sha}","trees_url":"https://api.github.com/repos/openhab/openhab2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openhab/openhab2/statuses/{sha}","languages_url":"https://api.github.com/repos/openhab/openhab2/languages","stargazers_url":"https://api.github.com/repos/openhab/openhab2/stargazers","contributors_url":"https://api.github.com/repos/openhab/openhab2/contributors","subscribers_url":"https://api.github.com/repos/openhab/openhab2/subscribers","subscription_url":"https://api.github.com/repos/openhab/openhab2/subscription","commits_url":"https://api.github.com/repos/openhab/openhab2/commits{/sha}","git_commits_url":"https://api.github.com/repos/openhab/openhab2/git/commits{/sha}","comments_url":"https://api.github.com/repos/openhab/openhab2/comments{/number}","issue_comment_url":"https://api.github.com/repos/openhab/openhab2/issues/comments{/number}","contents_url":"https://api.github.com/repos/openhab/openhab2/contents/{+path}","compare_url":"https://api.github.com/repos/openhab/openhab2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openhab/openhab2/merges","archive_url":"https://api.github.com/repos/openhab/openhab2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openhab/openhab2/downloads","issues_url":"https://api.github.com/repos/openhab/openhab2/issues{/number}","pulls_url":"https://api.github.com/repos/openhab/openhab2/pulls{/number}","milestones_url":"https://api.github.com/repos/openhab/openhab2/milestones{/number}","notifications_url":"https://api.github.com/repos/openhab/openhab2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openhab/openhab2/labels{/name}","releases_url":"https://api.github.com/repos/openhab/openhab2/releases{/id}","created_at":"2014-05-13T19:41:58Z","updated_at":"2015-10-25T11:43:17Z","pushed_at":"2015-10-25T16:18:40Z","git_url":"git://github.com/openhab/openhab2.git","ssh_url":"git@github.com:openhab/openhab2.git","clone_url":"https://github.com/openhab/openhab2.git","svn_url":"https://github.com/openhab/openhab2","homepage":null,"size":177501,"stargazers_count":279,"watchers_count":279,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":430,"mirror_url":null,"open_issues_count":51,"forks":430,"open_issues":51,"watchers":279,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openhab/openhab2/pulls/337"},"html":{"href":"https://github.com/openhab/openhab2/pull/337"},"issue":{"href":"https://api.github.com/repos/openhab/openhab2/issues/337"},"comments":{"href":"https://api.github.com/repos/openhab/openhab2/issues/337/comments"},"review_comments":{"href":"https://api.github.com/repos/openhab/openhab2/pulls/337/comments"},"review_comment":{"href":"https://api.github.com/repos/openhab/openhab2/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openhab/openhab2/pulls/337/commits"},"statuses":{"href":"https://api.github.com/repos/openhab/openhab2/statuses/69be756aae80711071d3a23ba5933ceae4197a16"}}}}