From 040ece76ab690bf10af5490a921bc61db3f43d6b Mon Sep 17 00:00:00 2001 From: Maikel Punie Date: Tue, 28 Jun 2022 18:41:29 +0200 Subject: [PATCH] Add velbus buttons platform (#73323) --- .coveragerc | 1 + homeassistant/components/velbus/__init__.py | 1 + homeassistant/components/velbus/button.py | 42 +++++++++++++++++++ homeassistant/components/velbus/manifest.json | 2 +- homeassistant/components/velbus/sensor.py | 4 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 7 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 homeassistant/components/velbus/button.py diff --git a/.coveragerc b/.coveragerc index 928f4d7789e..8253ed56ccd 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1361,6 +1361,7 @@ omit = homeassistant/components/vasttrafik/sensor.py homeassistant/components/velbus/__init__.py homeassistant/components/velbus/binary_sensor.py + homeassistant/components/velbus/button.py homeassistant/components/velbus/climate.py homeassistant/components/velbus/const.py homeassistant/components/velbus/cover.py diff --git a/homeassistant/components/velbus/__init__.py b/homeassistant/components/velbus/__init__.py index d2aa9531467..9b5a52306d8 100644 --- a/homeassistant/components/velbus/__init__.py +++ b/homeassistant/components/velbus/__init__.py @@ -28,6 +28,7 @@ _LOGGER = logging.getLogger(__name__) PLATFORMS = [ Platform.BINARY_SENSOR, + Platform.BUTTON, Platform.CLIMATE, Platform.COVER, Platform.LIGHT, diff --git a/homeassistant/components/velbus/button.py b/homeassistant/components/velbus/button.py new file mode 100644 index 00000000000..189cfb495e4 --- /dev/null +++ b/homeassistant/components/velbus/button.py @@ -0,0 +1,42 @@ +"""Support for Velbus Buttons.""" +from __future__ import annotations + +from velbusaio.channels import ( + Button as VelbusaioButton, + ButtonCounter as VelbusaioButtonCounter, +) + +from homeassistant.components.button import ButtonEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import EntityCategory +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from . import VelbusEntity +from .const import DOMAIN + + +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: + """Set up Velbus switch based on config_entry.""" + await hass.data[DOMAIN][entry.entry_id]["tsk"] + cntrl = hass.data[DOMAIN][entry.entry_id]["cntrl"] + entities = [] + for channel in cntrl.get_all("button"): + entities.append(VelbusButton(channel)) + async_add_entities(entities) + + +class VelbusButton(VelbusEntity, ButtonEntity): + """Representation of a Velbus Binary Sensor.""" + + _channel: VelbusaioButton | VelbusaioButtonCounter + _attr_entity_registry_enabled_default = False + _attr_entity_category = EntityCategory.CONFIG + + async def async_press(self) -> None: + """Handle the button press.""" + await self._channel.press() diff --git a/homeassistant/components/velbus/manifest.json b/homeassistant/components/velbus/manifest.json index e627412a00e..ec0c0f5f2d9 100644 --- a/homeassistant/components/velbus/manifest.json +++ b/homeassistant/components/velbus/manifest.json @@ -2,7 +2,7 @@ "domain": "velbus", "name": "Velbus", "documentation": "https://www.home-assistant.io/integrations/velbus", - "requirements": ["velbus-aio==2022.6.1"], + "requirements": ["velbus-aio==2022.6.2"], "config_flow": true, "codeowners": ["@Cereal2nd", "@brefra"], "dependencies": ["usb"], diff --git a/homeassistant/components/velbus/sensor.py b/homeassistant/components/velbus/sensor.py index 86e9a606d36..a0bd9b6c173 100644 --- a/homeassistant/components/velbus/sensor.py +++ b/homeassistant/components/velbus/sensor.py @@ -53,9 +53,9 @@ class VelbusSensor(VelbusEntity, SensorEntity): self._attr_name = f"{self._attr_name}-counter" # define the device class if self._is_counter: - self._attr_device_class = SensorDeviceClass.ENERGY - elif channel.is_counter_channel(): self._attr_device_class = SensorDeviceClass.POWER + elif channel.is_counter_channel(): + self._attr_device_class = SensorDeviceClass.ENERGY elif channel.is_temperature(): self._attr_device_class = SensorDeviceClass.TEMPERATURE # define the icon diff --git a/requirements_all.txt b/requirements_all.txt index d0e96e0e0e1..318511f800d 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2384,7 +2384,7 @@ vallox-websocket-api==2.11.0 vehicle==0.4.0 # homeassistant.components.velbus -velbus-aio==2022.6.1 +velbus-aio==2022.6.2 # homeassistant.components.venstar venstarcolortouch==0.16 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 903c9479b24..3b8e17fcb21 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1581,7 +1581,7 @@ vallox-websocket-api==2.11.0 vehicle==0.4.0 # homeassistant.components.velbus -velbus-aio==2022.6.1 +velbus-aio==2022.6.2 # homeassistant.components.venstar venstarcolortouch==0.16