From f686660196b52221283c1edf7223b9a245716828 Mon Sep 17 00:00:00 2001 From: ludeeus Date: Fri, 8 Mar 2019 19:17:48 +0100 Subject: [PATCH] init --- .github/ISSUE_TEMPLATE/feature_request.md | 17 ++++++ .github/ISSUE_TEMPLATE/issue.md | 37 ++++++++++++ .github/main.workflow | 38 +++++++++++++ .github/settings.yml | 23 ++++++++ .github/stale.yml | 16 ++++++ LICENSE | 21 +++++++ README.md | 47 +++++++++++++++ custom_components/blueprint/__init__.py | 66 ++++++++++++++++++++++ custom_components/blueprint/const.py | 18 ++++++ custom_components/blueprint/sensor.py | 42 ++++++++++++++ image.png | Bin 0 -> 7848 bytes resorces.json | 4 ++ 12 files changed, 329 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/issue.md create mode 100644 .github/main.workflow create mode 100644 .github/settings.yml create mode 100644 .github/stale.yml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 custom_components/blueprint/__init__.py create mode 100644 custom_components/blueprint/const.py create mode 100644 custom_components/blueprint/sensor.py create mode 100644 image.png create mode 100644 resorces.json diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..6bcce42 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Suggest an idea for this project + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/issue.md b/.github/ISSUE_TEMPLATE/issue.md new file mode 100644 index 0000000..277703d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue.md @@ -0,0 +1,37 @@ +--- +name: Issue +about: Create a report to help us improve + +--- + + + +## Version of the custom_component + + +## Describe the bug +A clear and concise description of what the bug is. + +## `custom_updater` configuration + +```yaml + +# Add configuration here + +``` + +## Debug log + +```text + +Add your logs here. + +``` \ No newline at end of file diff --git a/.github/main.workflow b/.github/main.workflow new file mode 100644 index 0000000..54aef73 --- /dev/null +++ b/.github/main.workflow @@ -0,0 +1,38 @@ +workflow "Trigger: Push to master from admin account" { + on = "push" + resolves = [ + "HA Index" + ] +} + +workflow "Trigger: Push" { + on = "push" + resolves = [ + "Black Code Formatter" + ] +} + + +action "branch-filter" { + uses = "actions/bin/filter@master" + args = "branch master" +} + +action "Access control" { + uses = "ludeeus/actions/accesscontrol@master" + env = { + ACTION_LEVEL = "admin" + } + secrets = ["GITHUB_TOKEN"] +} + +action "HA Index" { + uses = "ludeeus/actions/haindex@master" + secrets = ["GITHUB_TOKEN"] + needs = ["branch-filter", "Access control"] +} + +action "Black Code Formatter" { + uses = "lgeiger/black-action@v1.0.1" + args = "$GITHUB_WORKSPACE --check" +} \ No newline at end of file diff --git a/.github/settings.yml b/.github/settings.yml new file mode 100644 index 0000000..6b75ccc --- /dev/null +++ b/.github/settings.yml @@ -0,0 +1,23 @@ +repository: + private: false + has_issues: true + has_projects: false + has_wiki: false + has_downloads: false + default_branch: master + allow_squash_merge: true + allow_merge_commit: false + allow_rebase_merge: false +labels: + - name: "Feature Request" + color: "fbca04" + - name: "Bug" + color: "b60205" + - name: "Wont Fix" + color: "ffffff" + - name: "Enhancement" + color: a2eeef + - name: "Documentation" + color: "008672" + - name: "Stale" + color: "930191" \ No newline at end of file diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..78973bc --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,16 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 14 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +#exemptLabels: +# - pinned +# - security +# Label to use when marking an issue as stale +staleLabel: Stale +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..eadefd3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Joakim Sørensen @ludeeus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..618f6dd --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# blueprint + +[![BuyMeCoffee][buymecoffeebedge]][buymecoffee] +[![custom_updater][customupdaterbadge]][customupdater] + +_Component to integrate with [blueprint][blueprint]._ + +**This component will set up the following platforms.** + +Platform | Description +-- | -- +`sensor` | Show info from blueprint API. + +![example][exampleimg] + +## Installation + +1. Using you tool of choice open the directory (folder) for your HA configuration (where you find `configuration.yaml`). +2. If you do not have a `custom_components` directory (folder) there, you need to create it. +3. In the `custom_components` directory (folder) create a new folder called `blueprint`. +4. Download _all_ the files from the `custom_components/blueprint/` directory (folder) in this repository. +5. Place the files you downloaded in the new directory (folder) you created. +6. Add `blueprint:` to your HA configuration. + +Using your HA configuration directory (folder) as a starting point you should now also have this: + +```text +custom_components/blueprint/__init__.py +custom_components/blueprint/const.py +custom_components/blueprint/sensor.py +``` + +## Example configuration.yaml + +```yaml +blueprint: +``` + + +*** + +[exampleimg]: example.png +[buymecoffee]: https://www.buymeacoffee.com/ludeeus +[buymecoffeebedge]: https://camo.githubusercontent.com/cd005dca0ef55d7725912ec03a936d3a7c8de5b5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6275792532306d6525323061253230636f666665652d646f6e6174652d79656c6c6f772e737667 +[blueprint]: https://github.com/custom-components/blueprint +[customupdater]: https://github.com/custom-components/custom_updater +[customupdaterbadge]: https://img.shields.io/badge/custom__updater-true-success.svg \ No newline at end of file diff --git a/custom_components/blueprint/__init__.py b/custom_components/blueprint/__init__.py new file mode 100644 index 0000000..d2fbd04 --- /dev/null +++ b/custom_components/blueprint/__init__.py @@ -0,0 +1,66 @@ +""" +Component to integrate with https://blueprint.com/api + +For more details about this component, please refer to +https://github.com/custom-components/blueprint +""" +import os +import logging +import requests +from homeassistant.helpers import discovery + +from .const import * # pylint: disable=wildcard-import + +VERSION = '0.0.1' +_LOGGER = logging.getLogger(__name__) + + # pylint: disable=unused-argument + +async def async_setup(hass, config): + """Set up this component.""" + + # Print startup message + startup = STARTUP.format(name=DOMAIN, version=VERSION, issueurl=ISSUE_URL) + _LOGGER.info(startup) + + # Check that all required files are present + file_check = await check_files(hass) + if not file_check: + return False + + # Create DATA dict + hass.data[DOMAIN_DATA] = {} + + # Load platforms + for platform in PLATFORMS: + hass.async_create_task( + discovery.async_load_platform(hass, platform, DOMAIN, {}, config)) + return True + + +async def update_data(hass): + """Update data.""" + try: + request = requests.get(URL) + jsondata = request.json() + hass.data[DOMAIN_DATA] = jsondata + except Exception as error: # pylint: disable=broad-except + _LOGGER.error("Could not update data - %s", error) + + +async def check_files(hass): + """Retrun bool that idicate that all files are present.""" + base = "{}/custom_components/{}/".format(hass.config.path(), DOMAIN) + missing = [] + for file in REQUIRED_FILES: + fullpath = "{}{}".format(base, file) + if not os.path.exists(fullpath): + missing.append(file) + + if missing: + _LOGGER.critical("The following files are missing: %s", str(missing)) + returnvalue = False + else: + returnvalue = True + + return returnvalue diff --git a/custom_components/blueprint/const.py b/custom_components/blueprint/const.py new file mode 100644 index 0000000..fb7d3c3 --- /dev/null +++ b/custom_components/blueprint/const.py @@ -0,0 +1,18 @@ +"""Consts""" +DOMAIN = 'blueprint' +DOMAIN_DATA = '{}_data'.format(DOMAIN) +VERSION = '0.0.1' +URL = 'https://blueprint.com/api' +REQUIRED_FILES = ['sensor.py', 'const.py'] +ISSUE_URL = 'https://github.com/custom-components/blueprint/issues' +PLATFORMS = ['sensor'] + +STARTUP = """ +---------------------------------------------- +{name} +Version: {version} +This is a custom component +If you have any issues with this you need to open an issue here: +{issueurl} +---------------------------------------------- +""" diff --git a/custom_components/blueprint/sensor.py b/custom_components/blueprint/sensor.py new file mode 100644 index 0000000..197eec8 --- /dev/null +++ b/custom_components/blueprint/sensor.py @@ -0,0 +1,42 @@ +"""Sensor platform for blueprint""" +from homeassistant.helpers.entity import Entity +from . import update_data +from .const import * # pylint: disable=wildcard-import, unused-wildcard-import + +ICON = 'mdi:format-quote-close' + + +async def async_setup_platform( + hass, config, async_add_entities, discovery_info=None): # pylint: disable=unused-argument + """Setup sensor platform.""" + async_add_entities([blueprintSensor(hass)], True) + + +class blueprintSensor(Entity): + """blueprint Sensor class.""" + def __init__(self, hass): + self.hass = hass + self._state = None + + async def async_update(self): + """Update the sensor.""" + await update_data(self.hass) + updated = self.hass.data[DOMAIN_DATA].get('compliment') + if updated is None: + updated = self._state + self._state = updated.capitalize() + + @property + def name(self): + """Return the name of the sensor.""" + return DOMAIN + + @property + def state(self): + """Return the state of the sensor.""" + return self._state + + @property + def icon(self): + """Return the icon of the sensor.""" + return ICON diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..67a3e6c39997750f45100858d07dd9e1e6b1bdcd GIT binary patch literal 7848 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 literal 0 HcmV?d00001 diff --git a/resorces.json b/resorces.json new file mode 100644 index 0000000..5754215 --- /dev/null +++ b/resorces.json @@ -0,0 +1,4 @@ +[ + "https://raw.githubusercontent.com/custom-components/blueprint/master/custom_components/blueprint/const.py", + "https://raw.githubusercontent.com/custom-components/blueprint/master/custom_components/blueprint/sensor.py" +] \ No newline at end of file