{"action":"created","comment":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/179962080","pull_request_review_id":110300754,"id":179962080,"diff_hunk":"@@ -35,42 +35,89 @@\n     },\n }, extra=vol.ALLOW_EXTRA)\n \n+SERVICE_SCHEMA = vol.Schema({\n+    vol.Required(ATTR_VIN): cv.string,\n+})\n+\n \n BMW_COMPONENTS = ['binary_sensor', 'device_tracker', 'lock', 'sensor']\n UPDATE_INTERVAL = 5  # in minutes\n \n+SERVICE_UPDATE_STATE = 'update_state'\n \n-def setup(hass, config):\n+_SERVICE_MAP = {\n+    'light_flash': 'trigger_remote_light_flash',\n+    'sound_horn': 'trigger_remote_horn',\n+    'activate_air_conditioning': 'trigger_remote_air_conditioning',\n+}\n+\n+\n+def setup(hass, config: dict):\n     \"\"\"Set up the BMW connected drive components.\"\"\"\n     accounts = []\n     for name, account_config in config[DOMAIN].items():\n-        username = account_config[CONF_USERNAME]\n-        password = account_config[CONF_PASSWORD]\n-        region = account_config[CONF_REGION]\n-        _LOGGER.debug('Adding new account %s', name)\n-        bimmer = BMWConnectedDriveAccount(username, password, region, name)\n-        accounts.append(bimmer)\n-\n-        # update every UPDATE_INTERVAL minutes, starting now\n-        # this should even out the load on the servers\n-\n-        now = datetime.datetime.now()\n-        track_utc_time_change(\n-            hass, bimmer.update,\n-            minute=range(now.minute % UPDATE_INTERVAL, 60, UPDATE_INTERVAL),\n-            second=now.second)\n+        accounts.append(setup_account(account_config, hass, name))\n \n     hass.data[DOMAIN] = accounts\n \n-    for account in accounts:\n-        account.update()\n+    def _update_all(_) -> None:\n+        \"\"\"Update all BMW accounts.\"\"\"\n+        for account_update in hass.data[DOMAIN]:\n+            account_update.update()\n+\n+    # Service to manually trigger updates for all accounts.\n+    hass.services.register(DOMAIN, SERVICE_UPDATE_STATE, _update_all)\n+\n+    _update_all(None)\n \n     for component in BMW_COMPONENTS:\n         discovery.load_platform(hass, component, DOMAIN, {}, config)\n \n     return True\n \n \n+def setup_account(account_config: dict, hass, name: str) \\\n+        -> 'BMWConnectedDriveAccount':\n+    \"\"\"Set up a new BMWConnectedDriveAccount based on the config.\"\"\"\n+    username = account_config[CONF_USERNAME]\n+    password = account_config[CONF_PASSWORD]\n+    region = account_config[CONF_REGION]\n+    _LOGGER.debug('Adding new account %s', name)\n+    bimmer = BMWConnectedDriveAccount(username, password, region, name)\n+\n+    def execute_service(call):\n+        \"\"\"Execute a service for a vehicle.\n+\n+        This must be a member function as we need access to the bimmer\n+        object here.\n+        \"\"\"\n+        vin = call.data[ATTR_VIN]\n+        _LOGGER.debug('Triggering service %s of vehicle %s',\n+                      call.service, vin)\n+        vehicle = bimmer.account.get_vehicle(vin)\n+        function_name = _SERVICE_MAP[call.service]\n+        function_call = getattr(vehicle.remote_services, function_name)\n+        function_call()\n+\n+    # register the remote services\n+    for service in _SERVICE_MAP:\n+        _LOGGER.debug('Registering service %s', service)","path":"homeassistant/components/bmw_connected_drive/__init__.py","position":97,"original_position":97,"commit_id":"e4d3b3658320bac41d88205a9fb06bf4bd24d210","original_commit_id":"e4d3b3658320bac41d88205a9fb06bf4bd24d210","user":{"login":"MartinHjelmare","id":3181692,"avatar_url":"https://avatars0.githubusercontent.com/u/3181692?v=4","gravatar_id":"","url":"https://api.github.com/users/MartinHjelmare","html_url":"https://github.com/MartinHjelmare","followers_url":"https://api.github.com/users/MartinHjelmare/followers","following_url":"https://api.github.com/users/MartinHjelmare/following{/other_user}","gists_url":"https://api.github.com/users/MartinHjelmare/gists{/gist_id}","starred_url":"https://api.github.com/users/MartinHjelmare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MartinHjelmare/subscriptions","organizations_url":"https://api.github.com/users/MartinHjelmare/orgs","repos_url":"https://api.github.com/users/MartinHjelmare/repos","events_url":"https://api.github.com/users/MartinHjelmare/events{/privacy}","received_events_url":"https://api.github.com/users/MartinHjelmare/received_events","type":"User","site_admin":false},"body":"We usually don't log this.","created_at":"2018-04-08T21:32:36Z","updated_at":"2018-04-08T21:34:51Z","html_url":"https://github.com/home-assistant/home-assistant/pull/13497#discussion_r179962080","pull_request_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13497","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/179962080"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/13497#discussion_r179962080"},"pull_request":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13497"}}},"pull_request":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13497","id":177856432,"html_url":"https://github.com/home-assistant/home-assistant/pull/13497","diff_url":"https://github.com/home-assistant/home-assistant/pull/13497.diff","patch_url":"https://github.com/home-assistant/home-assistant/pull/13497.patch","issue_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/13497","number":13497,"state":"open","locked":false,"title":"bmw_connected_drive - added services","user":{"login":"ChristianKuehnel","id":19961352,"avatar_url":"https://avatars2.githubusercontent.com/u/19961352?v=4","gravatar_id":"","url":"https://api.github.com/users/ChristianKuehnel","html_url":"https://github.com/ChristianKuehnel","followers_url":"https://api.github.com/users/ChristianKuehnel/followers","following_url":"https://api.github.com/users/ChristianKuehnel/following{/other_user}","gists_url":"https://api.github.com/users/ChristianKuehnel/gists{/gist_id}","starred_url":"https://api.github.com/users/ChristianKuehnel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChristianKuehnel/subscriptions","organizations_url":"https://api.github.com/users/ChristianKuehnel/orgs","repos_url":"https://api.github.com/users/ChristianKuehnel/repos","events_url":"https://api.github.com/users/ChristianKuehnel/events{/privacy}","received_events_url":"https://api.github.com/users/ChristianKuehnel/received_events","type":"User","site_admin":false},"body":"## Description:\r\nAdded services to bmw_connected_drive so that the Remote Services of the vehicle can also be triggered from Home Assistant.\r\n\r\n* Added vin to attributes of tracker, so that the users can see the VIN of the vehicle\r\n* I had to move the component to new package, so that I can add the services.yaml\r\n* Added service description in services.yaml\r\n\r\n**Related issue (if applicable):** N/A\r\n\r\n**Pull request in [home-assistant.github.io](https://github.com/home-assistant/home-assistant.github.io) with documentation (if applicable):** home-assistant/home-assistant.github.io#5055\r\n\r\n## Example entry for `configuration.yaml` (if applicable):\r\nno changes\r\n\r\n## Checklist:\r\n  - [x] The code change is tested and works locally.\r\n  - [ ] Local tests pass with `tox`. **Your PR cannot be merged unless tests pass**\r\n\r\nIf user exposed functionality or configuration variables are added/changed:\r\n  - [ ] Documentation added/updated in [home-assistant.github.io](https://github.com/home-assistant/home-assistant.github.io)\r\n\r\n\r\n[ex-requir]: https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/keyboard.py#L14\r\n[ex-import]: https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/keyboard.py#L54\r\n","created_at":"2018-03-27T20:30:43Z","updated_at":"2018-04-08T21:34:51Z","closed_at":null,"merged_at":null,"merge_commit_sha":"dd3fb798ac48162589a6484432b504d0b165c64d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":527871105,"url":"https://api.github.com/repos/home-assistant/home-assistant/labels/cla-signed","name":"cla-signed","color":"008000","default":false},{"id":833389538,"url":"https://api.github.com/repos/home-assistant/home-assistant/labels/component:%20bmw_connected_drive","name":"component: bmw_connected_drive","color":"ededed","default":false},{"id":540056046,"url":"https://api.github.com/repos/home-assistant/home-assistant/labels/component:%20device_tracker","name":"component: device_tracker","color":"ededed","default":false},{"id":451931292,"url":"https://api.github.com/repos/home-assistant/home-assistant/labels/core","name":"core","color":"c5def5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13497/commits","review_comments_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13497/comments","review_comment_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments{/number}","comments_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/13497/comments","statuses_url":"https://api.github.com/repos/home-assistant/home-assistant/statuses/e4d3b3658320bac41d88205a9fb06bf4bd24d210","head":{"label":"ChristianKuehnel:bimmer_services","ref":"bimmer_services","sha":"e4d3b3658320bac41d88205a9fb06bf4bd24d210","user":{"login":"ChristianKuehnel","id":19961352,"avatar_url":"https://avatars2.githubusercontent.com/u/19961352?v=4","gravatar_id":"","url":"https://api.github.com/users/ChristianKuehnel","html_url":"https://github.com/ChristianKuehnel","followers_url":"https://api.github.com/users/ChristianKuehnel/followers","following_url":"https://api.github.com/users/ChristianKuehnel/following{/other_user}","gists_url":"https://api.github.com/users/ChristianKuehnel/gists{/gist_id}","starred_url":"https://api.github.com/users/ChristianKuehnel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChristianKuehnel/subscriptions","organizations_url":"https://api.github.com/users/ChristianKuehnel/orgs","repos_url":"https://api.github.com/users/ChristianKuehnel/repos","events_url":"https://api.github.com/users/ChristianKuehnel/events{/privacy}","received_events_url":"https://api.github.com/users/ChristianKuehnel/received_events","type":"User","site_admin":false},"repo":{"id":82385957,"name":"home-assistant","full_name":"ChristianKuehnel/home-assistant","owner":{"login":"ChristianKuehnel","id":19961352,"avatar_url":"https://avatars2.githubusercontent.com/u/19961352?v=4","gravatar_id":"","url":"https://api.github.com/users/ChristianKuehnel","html_url":"https://github.com/ChristianKuehnel","followers_url":"https://api.github.com/users/ChristianKuehnel/followers","following_url":"https://api.github.com/users/ChristianKuehnel/following{/other_user}","gists_url":"https://api.github.com/users/ChristianKuehnel/gists{/gist_id}","starred_url":"https://api.github.com/users/ChristianKuehnel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChristianKuehnel/subscriptions","organizations_url":"https://api.github.com/users/ChristianKuehnel/orgs","repos_url":"https://api.github.com/users/ChristianKuehnel/repos","events_url":"https://api.github.com/users/ChristianKuehnel/events{/privacy}","received_events_url":"https://api.github.com/users/ChristianKuehnel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ChristianKuehnel/home-assistant","description":":house_with_garden: Open-source home automation platform running on Python 3","fork":true,"url":"https://api.github.com/repos/ChristianKuehnel/home-assistant","forks_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/forks","keys_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/teams","hooks_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/hooks","issue_events_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/issues/events{/number}","events_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/events","assignees_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/assignees{/user}","branches_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/branches{/branch}","tags_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/tags","blobs_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/git/refs{/sha}","trees_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/statuses/{sha}","languages_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/languages","stargazers_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/stargazers","contributors_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/contributors","subscribers_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/subscribers","subscription_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/subscription","commits_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/commits{/sha}","git_commits_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/git/commits{/sha}","comments_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/comments{/number}","issue_comment_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/issues/comments{/number}","contents_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/contents/{+path}","compare_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/merges","archive_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/downloads","issues_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/issues{/number}","pulls_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/pulls{/number}","milestones_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/milestones{/number}","notifications_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/labels{/name}","releases_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/releases{/id}","deployments_url":"https://api.github.com/repos/ChristianKuehnel/home-assistant/deployments","created_at":"2017-02-18T12:41:31Z","updated_at":"2017-02-18T12:41:37Z","pushed_at":"2018-04-08T20:49:40Z","git_url":"git://github.com/ChristianKuehnel/home-assistant.git","ssh_url":"git@github.com:ChristianKuehnel/home-assistant.git","clone_url":"https://github.com/ChristianKuehnel/home-assistant.git","svn_url":"https://github.com/ChristianKuehnel/home-assistant","homepage":"https://home-assistant.io","size":80712,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":0,"watchers":0,"default_branch":"dev"}},"base":{"label":"home-assistant:dev","ref":"dev","sha":"a8fdd76f44aa29482ab522e4d5f02c474a0f69a8","user":{"login":"home-assistant","id":13844975,"avatar_url":"https://avatars3.githubusercontent.com/u/13844975?v=4","gravatar_id":"","url":"https://api.github.com/users/home-assistant","html_url":"https://github.com/home-assistant","followers_url":"https://api.github.com/users/home-assistant/followers","following_url":"https://api.github.com/users/home-assistant/following{/other_user}","gists_url":"https://api.github.com/users/home-assistant/gists{/gist_id}","starred_url":"https://api.github.com/users/home-assistant/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/home-assistant/subscriptions","organizations_url":"https://api.github.com/users/home-assistant/orgs","repos_url":"https://api.github.com/users/home-assistant/repos","events_url":"https://api.github.com/users/home-assistant/events{/privacy}","received_events_url":"https://api.github.com/users/home-assistant/received_events","type":"Organization","site_admin":false},"repo":{"id":12888993,"name":"home-assistant","full_name":"home-assistant/home-assistant","owner":{"login":"home-assistant","id":13844975,"avatar_url":"https://avatars3.githubusercontent.com/u/13844975?v=4","gravatar_id":"","url":"https://api.github.com/users/home-assistant","html_url":"https://github.com/home-assistant","followers_url":"https://api.github.com/users/home-assistant/followers","following_url":"https://api.github.com/users/home-assistant/following{/other_user}","gists_url":"https://api.github.com/users/home-assistant/gists{/gist_id}","starred_url":"https://api.github.com/users/home-assistant/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/home-assistant/subscriptions","organizations_url":"https://api.github.com/users/home-assistant/orgs","repos_url":"https://api.github.com/users/home-assistant/repos","events_url":"https://api.github.com/users/home-assistant/events{/privacy}","received_events_url":"https://api.github.com/users/home-assistant/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/home-assistant/home-assistant","description":":house_with_garden: Open-source home automation platform running on Python 3","fork":false,"url":"https://api.github.com/repos/home-assistant/home-assistant","forks_url":"https://api.github.com/repos/home-assistant/home-assistant/forks","keys_url":"https://api.github.com/repos/home-assistant/home-assistant/keys{/key_id}","collaborators_url":"https://api.github.com/repos/home-assistant/home-assistant/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/home-assistant/home-assistant/teams","hooks_url":"https://api.github.com/repos/home-assistant/home-assistant/hooks","issue_events_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/events{/number}","events_url":"https://api.github.com/repos/home-assistant/home-assistant/events","assignees_url":"https://api.github.com/repos/home-assistant/home-assistant/assignees{/user}","branches_url":"https://api.github.com/repos/home-assistant/home-assistant/branches{/branch}","tags_url":"https://api.github.com/repos/home-assistant/home-assistant/tags","blobs_url":"https://api.github.com/repos/home-assistant/home-assistant/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/home-assistant/home-assistant/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/home-assistant/home-assistant/git/refs{/sha}","trees_url":"https://api.github.com/repos/home-assistant/home-assistant/git/trees{/sha}","statuses_url":"https://api.github.com/repos/home-assistant/home-assistant/statuses/{sha}","languages_url":"https://api.github.com/repos/home-assistant/home-assistant/languages","stargazers_url":"https://api.github.com/repos/home-assistant/home-assistant/stargazers","contributors_url":"https://api.github.com/repos/home-assistant/home-assistant/contributors","subscribers_url":"https://api.github.com/repos/home-assistant/home-assistant/subscribers","subscription_url":"https://api.github.com/repos/home-assistant/home-assistant/subscription","commits_url":"https://api.github.com/repos/home-assistant/home-assistant/commits{/sha}","git_commits_url":"https://api.github.com/repos/home-assistant/home-assistant/git/commits{/sha}","comments_url":"https://api.github.com/repos/home-assistant/home-assistant/comments{/number}","issue_comment_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/comments{/number}","contents_url":"https://api.github.com/repos/home-assistant/home-assistant/contents/{+path}","compare_url":"https://api.github.com/repos/home-assistant/home-assistant/compare/{base}...{head}","merges_url":"https://api.github.com/repos/home-assistant/home-assistant/merges","archive_url":"https://api.github.com/repos/home-assistant/home-assistant/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/home-assistant/home-assistant/downloads","issues_url":"https://api.github.com/repos/home-assistant/home-assistant/issues{/number}","pulls_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls{/number}","milestones_url":"https://api.github.com/repos/home-assistant/home-assistant/milestones{/number}","notifications_url":"https://api.github.com/repos/home-assistant/home-assistant/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/home-assistant/home-assistant/labels{/name}","releases_url":"https://api.github.com/repos/home-assistant/home-assistant/releases{/id}","deployments_url":"https://api.github.com/repos/home-assistant/home-assistant/deployments","created_at":"2013-09-17T07:29:48Z","updated_at":"2018-04-08T20:59:06Z","pushed_at":"2018-04-08T21:04:17Z","git_url":"git://github.com/home-assistant/home-assistant.git","ssh_url":"git@github.com:home-assistant/home-assistant.git","clone_url":"https://github.com/home-assistant/home-assistant.git","svn_url":"https://github.com/home-assistant/home-assistant","homepage":"https://home-assistant.io","size":80727,"stargazers_count":13624,"watchers_count":13624,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":4012,"mirror_url":null,"archived":false,"open_issues_count":718,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":4012,"open_issues":718,"watchers":13624,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13497"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/13497"},"issue":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/13497"},"comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/13497/comments"},"review_comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13497/comments"},"review_comment":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13497/commits"},"statuses":{"href":"https://api.github.com/repos/home-assistant/home-assistant/statuses/e4d3b3658320bac41d88205a9fb06bf4bd24d210"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"MartinHjelmare"}}