diff --git a/.devcontainer/configuration.yaml b/.devcontainer/configuration.yaml index a34c090..88b970d 100644 --- a/.devcontainer/configuration.yaml +++ b/.devcontainer/configuration.yaml @@ -3,4 +3,4 @@ default_config: logger: default: info logs: - custom_components.blueprint: debug + custom_components.integration_blueprint: debug diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9f994c8..332218c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,7 +48,7 @@ Use [black](https://github.com/ambv/black) to make sure the code follows the sty ## Test your code modification -This custom component is based on [blueprint template](https://github.com/custom-components/blueprint). +This custom component is based on [integration_blueprint template](https://github.com/custom-components/integration_blueprint). It comes with development environment in a container, easy to launch if you use Visual Studio Code. With this container you will have a stand alone diff --git a/README.md b/README.md index 718f784..d99fc8f 100644 --- a/README.md +++ b/README.md @@ -25,15 +25,15 @@ File | Purpose `.github/ISSUE_TEMPLATE/issue.md` | Template for issues `.github/settings.yml` | Probot settings to control the repository settings. `.vscode/tasks.json` | Tasks for the devcontainer. -`custom_components/blueprint/translations/*` | [Translation files.](https://developers.home-assistant.io/docs/internationalization/custom_integration) -`custom_components/blueprint/__init__.py` | The component file for the integration. -`custom_components/blueprint/api.py` | This is a sample API client. -`custom_components/blueprint/binary_sensor.py` | Binary sensor platform for the integration. -`custom_components/blueprint/config_flow.py` | Config flow file, this adds the UI configuration possibilities. -`custom_components/blueprint/const.py` | A file to hold shared variables/constants for the entire integration. -`custom_components/blueprint/manifest.json` | A [manifest file](https://developers.home-assistant.io/docs/en/creating_integration_manifest.html) for Home Assistant. -`custom_components/blueprint/sensor.py` | Sensor platform for the integration. -`custom_components/blueprint/switch.py` | Switch sensor platform for the integration. +`custom_components/integration_blueprint/translations/*` | [Translation files.](https://developers.home-assistant.io/docs/internationalization/custom_integration) +`custom_components/integration_blueprint/__init__.py` | The component file for the integration. +`custom_components/integration_blueprint/api.py` | This is a sample API client. +`custom_components/integration_blueprint/binary_sensor.py` | Binary sensor platform for the integration. +`custom_components/integration_blueprint/config_flow.py` | Config flow file, this adds the UI configuration possibilities. +`custom_components/integration_blueprint/const.py` | A file to hold shared variables/constants for the entire integration. +`custom_components/integration_blueprint/manifest.json` | A [manifest file](https://developers.home-assistant.io/docs/en/creating_integration_manifest.html) for Home Assistant. +`custom_components/integration_blueprint/sensor.py` | Sensor platform for the integration. +`custom_components/integration_blueprint/switch.py` | Switch sensor platform for the integration. `CONTRIBUTING.md` | Guidelines on how to contribute. `example.png` | Screenshot that demonstrate how it might look in the UI. `info.md` | An example on a info file (used by [hacs][hacs]). @@ -65,7 +65,7 @@ to ensure Home Assistant update the code of the python library. (example `"requi README content if this was a published component: *** -# blueprint +# integration_blueprint [![GitHub Release][releases-shield]][releases] [![GitHub Activity][commits-shield]][commits] @@ -78,7 +78,7 @@ README content if this was a published component: [![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum] -_Component to integrate with [blueprint][blueprint]._ +_Component to integrate with [integration_blueprint][integration_blueprint]._ **This component will set up the following platforms.** @@ -94,8 +94,8 @@ Platform | Description 1. Using the 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. +3. In the `custom_components` directory (folder) create a new folder called `integration_blueprint`. +4. Download _all_ the files from the `custom_components/integration_blueprint/` directory (folder) in this repository. 5. Place the files you downloaded in the new directory (folder) you created. 6. Restart Home Assistant 7. In the HA UI go to "Configuration" -> "Integrations" click "+" and search for "Blueprint" @@ -103,17 +103,17 @@ Platform | Description Using your HA configuration directory (folder) as a starting point you should now also have this: ```text -custom_components/blueprint/translations/en.json -custom_components/blueprint/translations/nb.json -custom_components/blueprint/translations/sensor.nb.json -custom_components/blueprint/__init__.py -custom_components/blueprint/api.py -custom_components/blueprint/binary_sensor.py -custom_components/blueprint/config_flow.py -custom_components/blueprint/const.py -custom_components/blueprint/manifest.json -custom_components/blueprint/sensor.py -custom_components/blueprint/switch.py +custom_components/integration_blueprint/translations/en.json +custom_components/integration_blueprint/translations/nb.json +custom_components/integration_blueprint/translations/sensor.nb.json +custom_components/integration_blueprint/__init__.py +custom_components/integration_blueprint/api.py +custom_components/integration_blueprint/binary_sensor.py +custom_components/integration_blueprint/config_flow.py +custom_components/integration_blueprint/const.py +custom_components/integration_blueprint/manifest.json +custom_components/integration_blueprint/sensor.py +custom_components/integration_blueprint/switch.py ``` ## Configuration is done in the UI @@ -126,11 +126,11 @@ If you want to contribute to this please read the [Contribution guidelines](CONT *** -[blueprint]: https://github.com/custom-components/blueprint +[integration_blueprint]: https://github.com/custom-components/integration_blueprint [buymecoffee]: https://www.buymeacoffee.com/ludeeus [buymecoffeebadge]: https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg?style=for-the-badge [commits-shield]: https://img.shields.io/github/commit-activity/y/custom-components/blueprint.svg?style=for-the-badge -[commits]: https://github.com/custom-components/blueprint/commits/master +[commits]: https://github.com/custom-components/integration_blueprint/commits/master [hacs]: https://github.com/custom-components/hacs [hacsbadge]: https://img.shields.io/badge/HACS-Custom-orange.svg?style=for-the-badge [discord]: https://discord.gg/Qa5fW2R @@ -141,4 +141,4 @@ If you want to contribute to this please read the [Contribution guidelines](CONT [license-shield]: https://img.shields.io/github/license/custom-components/blueprint.svg?style=for-the-badge [maintenance-shield]: https://img.shields.io/badge/maintainer-Joakim%20Sørensen%20%40ludeeus-blue.svg?style=for-the-badge [releases-shield]: https://img.shields.io/github/release/custom-components/blueprint.svg?style=for-the-badge -[releases]: https://github.com/custom-components/blueprint/releases +[releases]: https://github.com/custom-components/integration_blueprint/releases diff --git a/custom_components/blueprint/manifest.json b/custom_components/blueprint/manifest.json deleted file mode 100644 index 8437a1c..0000000 --- a/custom_components/blueprint/manifest.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "domain": "blueprint", - "name": "Blueprint", - "documentation": "https://github.com/custom-components/blueprint", - "issue_tracker": "https://github.com/custom-components/blueprint/issues", - "dependencies": [], - "config_flow": true, - "codeowners": [ - "@ludeeus" - ], - "requirements": [] -} diff --git a/custom_components/blueprint/__init__.py b/custom_components/integration_blueprint/__init__.py similarity index 86% rename from custom_components/blueprint/__init__.py rename to custom_components/integration_blueprint/__init__.py index 8741507..b8e31db 100644 --- a/custom_components/blueprint/__init__.py +++ b/custom_components/integration_blueprint/__init__.py @@ -1,107 +1,109 @@ -""" -Custom integration to integrate blueprint with Home Assistant. - -For more details about this integration, please refer to -https://github.com/custom-components/blueprint -""" -import asyncio -from datetime import timedelta -import logging - -from homeassistant.config_entries import ConfigEntry -from homeassistant.core import Config, HomeAssistant -from homeassistant.exceptions import ConfigEntryNotReady -from homeassistant.helpers.aiohttp_client import async_get_clientsession -from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed - -from .api import BlueprintApiClient - -from .const import ( - CONF_PASSWORD, - CONF_USERNAME, - DOMAIN, - PLATFORMS, - STARTUP_MESSAGE, -) - -SCAN_INTERVAL = timedelta(seconds=30) - -_LOGGER: logging.Logger = logging.getLogger(__package__) - - -async def async_setup(hass: HomeAssistant, config: Config): - """Set up this integration using YAML is not supported.""" - return True - - -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): - """Set up this integration using UI.""" - if hass.data.get(DOMAIN) is None: - hass.data.setdefault(DOMAIN, {}) - _LOGGER.info(STARTUP_MESSAGE) - - username = entry.data.get(CONF_USERNAME) - password = entry.data.get(CONF_PASSWORD) - - session = async_get_clientsession(hass) - client = BlueprintApiClient(username, password, session) - - coordinator = BlueprintDataUpdateCoordinator(hass, client=client) - await coordinator.async_refresh() - - if not coordinator.last_update_success: - raise ConfigEntryNotReady - - hass.data[DOMAIN][entry.entry_id] = coordinator - - for platform in PLATFORMS: - if entry.options.get(platform, True): - coordinator.platforms.append(platform) - hass.async_add_job( - hass.config_entries.async_forward_entry_setup(entry, platform) - ) - - entry.add_update_listener(async_reload_entry) - return True - - -class BlueprintDataUpdateCoordinator(DataUpdateCoordinator): - """Class to manage fetching data from the API.""" - - def __init__(self, hass: HomeAssistant, client: BlueprintApiClient) -> None: - """Initialize.""" - self.api: BlueprintApiClient = client - self.platforms = [] - - super().__init__(hass, _LOGGER, name=DOMAIN, update_interval=SCAN_INTERVAL) - - async def _async_update_data(self): - """Update data via library.""" - try: - return await self.api.async_get_data() - except Exception as exception: - raise UpdateFailed() from exception - - -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: - """Handle removal of an entry.""" - coordinator = hass.data[DOMAIN][entry.entry_id] - unloaded = all( - await asyncio.gather( - *[ - hass.config_entries.async_forward_entry_unload(entry, platform) - for platform in PLATFORMS - if platform in coordinator.platforms - ] - ) - ) - if unloaded: - hass.data[DOMAIN].pop(entry.entry_id) - - return unloaded - - -async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None: - """Reload config entry.""" - await async_unload_entry(hass, entry) - await async_setup_entry(hass, entry) +""" +Custom integration to integrate integration_blueprint with Home Assistant. + +For more details about this integration, please refer to +https://github.com/custom-components/integration_blueprint +""" +import asyncio +from datetime import timedelta +import logging + +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import Config, HomeAssistant +from homeassistant.exceptions import ConfigEntryNotReady +from homeassistant.helpers.aiohttp_client import async_get_clientsession +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed + +from .api import IntegrationBlueprintApiClient + +from .const import ( + CONF_PASSWORD, + CONF_USERNAME, + DOMAIN, + PLATFORMS, + STARTUP_MESSAGE, +) + +SCAN_INTERVAL = timedelta(seconds=30) + +_LOGGER: logging.Logger = logging.getLogger(__package__) + + +async def async_setup(hass: HomeAssistant, config: Config): + """Set up this integration using YAML is not supported.""" + return True + + +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): + """Set up this integration using UI.""" + if hass.data.get(DOMAIN) is None: + hass.data.setdefault(DOMAIN, {}) + _LOGGER.info(STARTUP_MESSAGE) + + username = entry.data.get(CONF_USERNAME) + password = entry.data.get(CONF_PASSWORD) + + session = async_get_clientsession(hass) + client = IntegrationBlueprintApiClient(username, password, session) + + coordinator = BlueprintDataUpdateCoordinator(hass, client=client) + await coordinator.async_refresh() + + if not coordinator.last_update_success: + raise ConfigEntryNotReady + + hass.data[DOMAIN][entry.entry_id] = coordinator + + for platform in PLATFORMS: + if entry.options.get(platform, True): + coordinator.platforms.append(platform) + hass.async_add_job( + hass.config_entries.async_forward_entry_setup(entry, platform) + ) + + entry.add_update_listener(async_reload_entry) + return True + + +class BlueprintDataUpdateCoordinator(DataUpdateCoordinator): + """Class to manage fetching data from the API.""" + + def __init__( + self, hass: HomeAssistant, client: IntegrationBlueprintApiClient + ) -> None: + """Initialize.""" + self.api = client + self.platforms = [] + + super().__init__(hass, _LOGGER, name=DOMAIN, update_interval=SCAN_INTERVAL) + + async def _async_update_data(self): + """Update data via library.""" + try: + return await self.api.async_get_data() + except Exception as exception: + raise UpdateFailed() from exception + + +async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + """Handle removal of an entry.""" + coordinator = hass.data[DOMAIN][entry.entry_id] + unloaded = all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(entry, platform) + for platform in PLATFORMS + if platform in coordinator.platforms + ] + ) + ) + if unloaded: + hass.data[DOMAIN].pop(entry.entry_id) + + return unloaded + + +async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None: + """Reload config entry.""" + await async_unload_entry(hass, entry) + await async_setup_entry(hass, entry) diff --git a/custom_components/blueprint/api.py b/custom_components/integration_blueprint/api.py similarity index 98% rename from custom_components/blueprint/api.py rename to custom_components/integration_blueprint/api.py index e45f2d4..b266c56 100644 --- a/custom_components/blueprint/api.py +++ b/custom_components/integration_blueprint/api.py @@ -14,7 +14,7 @@ _LOGGER: logging.Logger = logging.getLogger(__package__) HEADERS = {"Content-type": "application/json; charset=UTF-8"} -class BlueprintApiClient: +class IntegrationBlueprintApiClient: def __init__( self, username: str, password: str, session: aiohttp.ClientSession ) -> None: diff --git a/custom_components/blueprint/binary_sensor.py b/custom_components/integration_blueprint/binary_sensor.py similarity index 63% rename from custom_components/blueprint/binary_sensor.py rename to custom_components/integration_blueprint/binary_sensor.py index e108ce0..6b92f30 100644 --- a/custom_components/blueprint/binary_sensor.py +++ b/custom_components/integration_blueprint/binary_sensor.py @@ -1,35 +1,35 @@ -"""Binary sensor platform for blueprint.""" -from homeassistant.components.binary_sensor import BinarySensorDevice - -from .const import ( - BINARY_SENSOR, - BINARY_SENSOR_DEVICE_CLASS, - DEFAULT_NAME, - DOMAIN, -) -from .entity import BlueprintEntity - - -async def async_setup_entry(hass, entry, async_add_devices): - """Setup binary_sensor platform.""" - coordinator = hass.data[DOMAIN][entry.entry_id] - async_add_devices([BlueprintBinarySensor(coordinator, entry)]) - - -class BlueprintBinarySensor(BlueprintEntity, BinarySensorDevice): - """blueprint binary_sensor class.""" - - @property - def name(self): - """Return the name of the binary_sensor.""" - return f"{DEFAULT_NAME}_{BINARY_SENSOR}" - - @property - def device_class(self): - """Return the class of this binary_sensor.""" - return BINARY_SENSOR_DEVICE_CLASS - - @property - def is_on(self): - """Return true if the binary_sensor is on.""" - return self.coordinator.data.get("title", "") == "foo" +"""Binary sensor platform for integration_blueprint.""" +from homeassistant.components.binary_sensor import BinarySensorEntity + +from .const import ( + BINARY_SENSOR, + BINARY_SENSOR_DEVICE_CLASS, + DEFAULT_NAME, + DOMAIN, +) +from .entity import IntegrationBlueprintEntity + + +async def async_setup_entry(hass, entry, async_add_devices): + """Setup binary_sensor platform.""" + coordinator = hass.data[DOMAIN][entry.entry_id] + async_add_devices([IntegrationBlueprintBinarySensor(coordinator, entry)]) + + +class IntegrationBlueprintBinarySensor(IntegrationBlueprintEntity, BinarySensorEntity): + """integration_blueprint binary_sensor class.""" + + @property + def name(self): + """Return the name of the binary_sensor.""" + return f"{DEFAULT_NAME}_{BINARY_SENSOR}" + + @property + def device_class(self): + """Return the class of this binary_sensor.""" + return BINARY_SENSOR_DEVICE_CLASS + + @property + def is_on(self): + """Return true if the binary_sensor is on.""" + return self.coordinator.data.get("title", "") == "foo" diff --git a/custom_components/blueprint/config_flow.py b/custom_components/integration_blueprint/config_flow.py similarity index 96% rename from custom_components/blueprint/config_flow.py rename to custom_components/integration_blueprint/config_flow.py index f52dd78..e9acb2e 100644 --- a/custom_components/blueprint/config_flow.py +++ b/custom_components/integration_blueprint/config_flow.py @@ -4,7 +4,7 @@ from homeassistant.core import callback from homeassistant.helpers.aiohttp_client import async_create_clientsession import voluptuous as vol -from .api import BlueprintApiClient +from .api import IntegrationBlueprintApiClient from .const import ( CONF_PASSWORD, CONF_USERNAME, @@ -65,7 +65,7 @@ class BlueprintFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): """Return true if credentials is valid.""" try: session = async_create_clientsession(self.hass) - client = BlueprintApiClient(username, password, session) + client = IntegrationBlueprintApiClient(username, password, session) await client.async_get_data() return True except Exception: # pylint: disable=broad-except diff --git a/custom_components/blueprint/const.py b/custom_components/integration_blueprint/const.py similarity index 81% rename from custom_components/blueprint/const.py rename to custom_components/integration_blueprint/const.py index 40e6d03..c9fa745 100644 --- a/custom_components/blueprint/const.py +++ b/custom_components/integration_blueprint/const.py @@ -1,40 +1,40 @@ -"""Constants for blueprint.""" -# Base component constants -NAME = "Blueprint" -DOMAIN = "blueprint" -DOMAIN_DATA = f"{DOMAIN}_data" -VERSION = "0.0.1" -ATTRIBUTION = "Data provided by http://jsonplaceholder.typicode.com/" -ISSUE_URL = "https://github.com/custom-components/blueprint/issues" - -# Icons -ICON = "mdi:format-quote-close" - -# Device classes -BINARY_SENSOR_DEVICE_CLASS = "connectivity" - -# Platforms -BINARY_SENSOR = "binary_sensor" -SENSOR = "sensor" -SWITCH = "switch" -PLATFORMS = [BINARY_SENSOR, SENSOR, SWITCH] - - -# Configuration and options -CONF_ENABLED = "enabled" -CONF_USERNAME = "username" -CONF_PASSWORD = "password" - -# Defaults -DEFAULT_NAME = DOMAIN - - -STARTUP_MESSAGE = f""" -------------------------------------------------------------------- -{NAME} -Version: {VERSION} -This is a custom integration! -If you have any issues with this you need to open an issue here: -{ISSUE_URL} -------------------------------------------------------------------- -""" +"""Constants for integration_blueprint.""" +# Base component constants +NAME = "Integration blueprint" +DOMAIN = "integration_blueprint" +DOMAIN_DATA = f"{DOMAIN}_data" +VERSION = "0.0.1" +ATTRIBUTION = "Data provided by http://jsonplaceholder.typicode.com/" +ISSUE_URL = "https://github.com/custom-components/integration_blueprint/issues" + +# Icons +ICON = "mdi:format-quote-close" + +# Device classes +BINARY_SENSOR_DEVICE_CLASS = "connectivity" + +# Platforms +BINARY_SENSOR = "binary_sensor" +SENSOR = "sensor" +SWITCH = "switch" +PLATFORMS = [BINARY_SENSOR, SENSOR, SWITCH] + + +# Configuration and options +CONF_ENABLED = "enabled" +CONF_USERNAME = "username" +CONF_PASSWORD = "password" + +# Defaults +DEFAULT_NAME = DOMAIN + + +STARTUP_MESSAGE = f""" +------------------------------------------------------------------- +{NAME} +Version: {VERSION} +This is a custom integration! +If you have any issues with this you need to open an issue here: +{ISSUE_URL} +------------------------------------------------------------------- +""" diff --git a/custom_components/blueprint/entity.py b/custom_components/integration_blueprint/entity.py similarity index 94% rename from custom_components/blueprint/entity.py rename to custom_components/integration_blueprint/entity.py index 2e63801..91e50de 100644 --- a/custom_components/blueprint/entity.py +++ b/custom_components/integration_blueprint/entity.py @@ -4,7 +4,7 @@ from homeassistant.helpers.update_coordinator import CoordinatorEntity from .const import DOMAIN, NAME, VERSION, ATTRIBUTION -class BlueprintEntity(CoordinatorEntity): +class IntegrationBlueprintEntity(CoordinatorEntity): def __init__(self, coordinator, config_entry): super().__init__(coordinator) self.config_entry = config_entry diff --git a/custom_components/integration_blueprint/manifest.json b/custom_components/integration_blueprint/manifest.json new file mode 100644 index 0000000..85fe4de --- /dev/null +++ b/custom_components/integration_blueprint/manifest.json @@ -0,0 +1,12 @@ +{ + "domain": "integration_blueprint", + "name": "Integration blueprint", + "documentation": "https://github.com/custom-components/integration_blueprint", + "issue_tracker": "https://github.com/custom-components/integration_blueprint/issues", + "dependencies": [], + "config_flow": true, + "codeowners": [ + "@ludeeus" + ], + "requirements": [] +} diff --git a/custom_components/blueprint/sensor.py b/custom_components/integration_blueprint/sensor.py similarity index 66% rename from custom_components/blueprint/sensor.py rename to custom_components/integration_blueprint/sensor.py index 71a40a9..e5152da 100644 --- a/custom_components/blueprint/sensor.py +++ b/custom_components/integration_blueprint/sensor.py @@ -1,28 +1,28 @@ -"""Sensor platform for blueprint.""" -from .const import DEFAULT_NAME, DOMAIN, ICON, SENSOR -from .entity import BlueprintEntity - - -async def async_setup_entry(hass, entry, async_add_devices): - """Setup sensor platform.""" - coordinator = hass.data[DOMAIN][entry.entry_id] - async_add_devices([BlueprintSensor(coordinator, entry)]) - - -class BlueprintSensor(BlueprintEntity): - """blueprint Sensor class.""" - - @property - def name(self): - """Return the name of the sensor.""" - return f"{DEFAULT_NAME}_{SENSOR}" - - @property - def state(self): - """Return the state of the sensor.""" - return self.coordinator.data.get("body") - - @property - def icon(self): - """Return the icon of the sensor.""" - return ICON +"""Sensor platform for integration_blueprint.""" +from .const import DEFAULT_NAME, DOMAIN, ICON, SENSOR +from .entity import IntegrationBlueprintEntity + + +async def async_setup_entry(hass, entry, async_add_devices): + """Setup sensor platform.""" + coordinator = hass.data[DOMAIN][entry.entry_id] + async_add_devices([IntegrationBlueprintSensor(coordinator, entry)]) + + +class IntegrationBlueprintSensor(IntegrationBlueprintEntity): + """integration_blueprint Sensor class.""" + + @property + def name(self): + """Return the name of the sensor.""" + return f"{DEFAULT_NAME}_{SENSOR}" + + @property + def state(self): + """Return the state of the sensor.""" + return self.coordinator.data.get("body") + + @property + def icon(self): + """Return the icon of the sensor.""" + return ICON diff --git a/custom_components/blueprint/switch.py b/custom_components/integration_blueprint/switch.py similarity index 78% rename from custom_components/blueprint/switch.py rename to custom_components/integration_blueprint/switch.py index 6c78f47..8381e6f 100644 --- a/custom_components/blueprint/switch.py +++ b/custom_components/integration_blueprint/switch.py @@ -1,40 +1,40 @@ -"""Switch platform for blueprint.""" -from homeassistant.components.switch import SwitchEntity - -from .const import DEFAULT_NAME, DOMAIN, ICON, SWITCH -from .entity import BlueprintEntity - - -async def async_setup_entry(hass, entry, async_add_devices): - """Setup sensor platform.""" - coordinator = hass.data[DOMAIN][entry.entry_id] - async_add_devices([BlueprintBinarySwitch(coordinator, entry)]) - - -class BlueprintBinarySwitch(BlueprintEntity, SwitchEntity): - """blueprint switch class.""" - - async def async_turn_on(self, **kwargs): # pylint: disable=unused-argument - """Turn on the switch.""" - await self.coordinator.api.async_set_title("bar") - await self.coordinator.async_request_refresh() - - async def async_turn_off(self, **kwargs): # pylint: disable=unused-argument - """Turn off the switch.""" - await self.coordinator.api.async_set_title("foo") - await self.coordinator.async_request_refresh() - - @property - def name(self): - """Return the name of the switch.""" - return f"{DEFAULT_NAME}_{SWITCH}" - - @property - def icon(self): - """Return the icon of this switch.""" - return ICON - - @property - def is_on(self): - """Return true if the switch is on.""" - return self.coordinator.data.get("title", "") == "foo" +"""Switch platform for integration_blueprint.""" +from homeassistant.components.switch import SwitchEntity + +from .const import DEFAULT_NAME, DOMAIN, ICON, SWITCH +from .entity import IntegrationBlueprintEntity + + +async def async_setup_entry(hass, entry, async_add_devices): + """Setup sensor platform.""" + coordinator = hass.data[DOMAIN][entry.entry_id] + async_add_devices([IntegrationBlueprintBinarySwitch(coordinator, entry)]) + + +class IntegrationBlueprintBinarySwitch(IntegrationBlueprintEntity, SwitchEntity): + """integration_blueprint switch class.""" + + async def async_turn_on(self, **kwargs): # pylint: disable=unused-argument + """Turn on the switch.""" + await self.coordinator.api.async_set_title("bar") + await self.coordinator.async_request_refresh() + + async def async_turn_off(self, **kwargs): # pylint: disable=unused-argument + """Turn off the switch.""" + await self.coordinator.api.async_set_title("foo") + await self.coordinator.async_request_refresh() + + @property + def name(self): + """Return the name of the switch.""" + return f"{DEFAULT_NAME}_{SWITCH}" + + @property + def icon(self): + """Return the icon of this switch.""" + return ICON + + @property + def is_on(self): + """Return true if the switch is on.""" + return self.coordinator.data.get("title", "") == "foo" diff --git a/custom_components/blueprint/translations/en.json b/custom_components/integration_blueprint/translations/en.json similarity index 90% rename from custom_components/blueprint/translations/en.json rename to custom_components/integration_blueprint/translations/en.json index 300e60c..15f8104 100644 --- a/custom_components/blueprint/translations/en.json +++ b/custom_components/integration_blueprint/translations/en.json @@ -4,7 +4,7 @@ "step": { "user": { "title": "Blueprint", - "description": "If you need help with the configuration have a look here: https://github.com/custom-components/blueprint", + "description": "If you need help with the configuration have a look here: https://github.com/custom-components/integration_blueprint", "data": { "username": "Username", "password": "Password" diff --git a/custom_components/blueprint/translations/nb.json b/custom_components/integration_blueprint/translations/nb.json similarity index 90% rename from custom_components/blueprint/translations/nb.json rename to custom_components/integration_blueprint/translations/nb.json index c53e807..6a61942 100644 --- a/custom_components/blueprint/translations/nb.json +++ b/custom_components/integration_blueprint/translations/nb.json @@ -4,7 +4,7 @@ "step": { "user": { "title": "Blueprint", - "description": "Hvis du trenger hjep til konfigurasjon ta en titt her: https://github.com/custom-components/blueprint", + "description": "Hvis du trenger hjep til konfigurasjon ta en titt her: https://github.com/custom-components/integration_blueprint", "data": { "username": "Brukernavn", "password": "Passord" diff --git a/custom_components/blueprint/translations/sensor.nb.json b/custom_components/integration_blueprint/translations/sensor.nb.json similarity index 100% rename from custom_components/blueprint/translations/sensor.nb.json rename to custom_components/integration_blueprint/translations/sensor.nb.json diff --git a/hacs.json b/hacs.json index 8068370..aa94fd4 100644 --- a/hacs.json +++ b/hacs.json @@ -1,5 +1,5 @@ { - "name": "Blueprint", + "name": "Integration blueprint", "hacs": "1.6.0", "domains": [ "binary_sensor", diff --git a/info.md b/info.md index 0090923..714b9e5 100644 --- a/info.md +++ b/info.md @@ -9,7 +9,7 @@ [![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum] -_Component to integrate with [blueprint][blueprint]._ +_Component to integrate with [integration_blueprint][integration_blueprint]._ **This component will set up the following platforms.** @@ -36,11 +36,11 @@ Platform | Description *** -[blueprint]: https://github.com/custom-components/blueprint +[integration_blueprint]: https://github.com/custom-components/integration_blueprint [buymecoffee]: https://www.buymeacoffee.com/ludeeus [buymecoffeebadge]: https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg?style=for-the-badge -[commits-shield]: https://img.shields.io/github/commit-activity/y/custom-components/blueprint.svg?style=for-the-badge -[commits]: https://github.com/custom-components/blueprint/commits/master +[commits-shield]: https://img.shields.io/github/commit-activity/y/custom-components/integration_blueprint.svg?style=for-the-badge +[commits]: https://github.com/custom-components/integration_blueprint/commits/master [hacs]: https://hacs.xyz [hacsbadge]: https://img.shields.io/badge/HACS-Custom-orange.svg?style=for-the-badge [discord]: https://discord.gg/Qa5fW2R @@ -48,9 +48,9 @@ Platform | Description [exampleimg]: example.png [forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg?style=for-the-badge [forum]: https://community.home-assistant.io/ -[license]: https://github.com/custom-components/blueprint/blob/main/LICENSE -[license-shield]: https://img.shields.io/github/license/custom-components/blueprint.svg?style=for-the-badge +[license]: https://github.com/custom-components/integration_blueprint/blob/main/LICENSE +[license-shield]: https://img.shields.io/github/license/custom-components/integration_blueprint.svg?style=for-the-badge [maintenance-shield]: https://img.shields.io/badge/maintainer-Joakim%20Sørensen%20%40ludeeus-blue.svg?style=for-the-badge -[releases-shield]: https://img.shields.io/github/release/custom-components/blueprint.svg?style=for-the-badge -[releases]: https://github.com/custom-components/blueprint/releases +[releases-shield]: https://img.shields.io/github/release/custom-components/integration_blueprint.svg?style=for-the-badge +[releases]: https://github.com/custom-components/integration_blueprint/releases [user_profile]: https://github.com/ludeeus diff --git a/setup.cfg b/setup.cfg index 4b57c35..6e3c410 100644 --- a/setup.cfg +++ b/setup.cfg @@ -31,5 +31,5 @@ not_skip = __init__.py force_sort_within_sections = true sections = FUTURE,STDLIB,INBETWEENS,THIRDPARTY,FIRSTPARTY,LOCALFOLDER default_section = THIRDPARTY -known_first_party = custom_components.blueprint +known_first_party = custom_components.integration_blueprint combine_as_imports = true