From 05f0fce60ca53dc6baa8b34ad9dd6dfd4231191d Mon Sep 17 00:00:00 2001 From: Matthieu Bourgain Date: Wed, 14 Aug 2024 15:57:06 +0200 Subject: [PATCH 1/5] lint --- custom_components/rfplayer/__init__.py | 2 +- custom_components/rfplayer/config_flow.py | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/custom_components/rfplayer/__init__.py b/custom_components/rfplayer/__init__.py index 1c65cb5..d0c7bde 100644 --- a/custom_components/rfplayer/__init__.py +++ b/custom_components/rfplayer/__init__.py @@ -63,7 +63,7 @@ vol.Required(CONF_COMMAND): cv.string, vol.Optional(CONF_DEVICE_ADDRESS): cv.string, vol.Optional(CONF_DEVICE_ID): cv.string, - vol.Required(CONF_AUTOMATIC_ADD, default=False): cv.boolean, # type: ignore + vol.Required(CONF_AUTOMATIC_ADD, default=False): cv.boolean, } ) diff --git a/custom_components/rfplayer/config_flow.py b/custom_components/rfplayer/config_flow.py index da64e8d..0800696 100644 --- a/custom_components/rfplayer/config_flow.py +++ b/custom_components/rfplayer/config_flow.py @@ -7,10 +7,16 @@ import voluptuous as vol from homeassistant import exceptions -from homeassistant.config_entries import HANDLERS, ConfigEntry, ConfigFlow, OptionsFlow +from homeassistant.config_entries import ( + HANDLERS, + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_DEVICE, CONF_DEVICES from homeassistant.core import callback -from homeassistant.data_entry_flow import AbortFlow, FlowResult +from homeassistant.data_entry_flow import AbortFlow from .const import ( CONF_AUTOMATIC_ADD, @@ -29,7 +35,7 @@ class RfplayerConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Config flow started from UI.""" if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") @@ -95,7 +101,7 @@ def __init__(self, config_entry: ConfigEntry) -> None: async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage the options.""" if user_input is None: config = self.config_entry.data From 8ec92072aad0aea3309d76dbff5dc9ee5c1ad00f Mon Sep 17 00:00:00 2001 From: Matthieu Bourgain Date: Wed, 14 Aug 2024 15:57:35 +0200 Subject: [PATCH 2/5] allow str value on sensors --- custom_components/rfplayer/sensor.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/custom_components/rfplayer/sensor.py b/custom_components/rfplayer/sensor.py index 9cfcd74..0f36d4e 100644 --- a/custom_components/rfplayer/sensor.py +++ b/custom_components/rfplayer/sensor.py @@ -3,11 +3,12 @@ import logging from typing import Any +from homeassistant.components.sensor import RestoreSensor from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_DEVICES from homeassistant.core import HomeAssistant -from homeassistant.components.sensor import RestoreSensor from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import StateType from . import RfplayerDevice from .const import ( @@ -56,7 +57,7 @@ async def add_new_device(device_info): class RfplayerSensor(RfplayerDevice, RestoreSensor): """Representation of a Rfplayer sensor.""" - _attr_native_value: float | None = None + _attr_native_value: StateType | None = None # pylint: disable-next=too-many-arguments def __init__( @@ -90,4 +91,4 @@ async def async_added_to_hass(self) -> None: def _handle_event(self, event: dict[str, Any]) -> None: """Domain specific event handler.""" - self._attr_native_value = float(event["value"]) + self._attr_native_value = event["value"] From 99ae1ecfafd22f82125660d448e7f630bd59c295 Mon Sep 17 00:00:00 2001 From: Matthieu Bourgain Date: Wed, 14 Aug 2024 15:58:24 +0200 Subject: [PATCH 3/5] 0.8.0 changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba9595d..ee39e19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## 0.8.0 + +- Allow sensor with strings values + ## 0.7.1 - Fix mixup between device ID and device address in english for send_command service From b8913010449e15de1b40296d9d56be56c1679788 Mon Sep 17 00:00:00 2001 From: Matthieu Bourgain Date: Fri, 16 Aug 2024 15:26:12 +0200 Subject: [PATCH 4/5] try by define native_value directly --- custom_components/rfplayer/sensor.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/custom_components/rfplayer/sensor.py b/custom_components/rfplayer/sensor.py index 0f36d4e..0dd65f0 100644 --- a/custom_components/rfplayer/sensor.py +++ b/custom_components/rfplayer/sensor.py @@ -57,8 +57,6 @@ async def add_new_device(device_info): class RfplayerSensor(RfplayerDevice, RestoreSensor): """Representation of a Rfplayer sensor.""" - _attr_native_value: StateType | None = None - # pylint: disable-next=too-many-arguments def __init__( self, @@ -71,6 +69,7 @@ def __init__( ) -> None: """Handle sensor specific args and super init.""" self._attr_native_unit_of_measurement = unit_of_measurement + self._event_value: StateType = None super().__init__( protocol=protocol, device_id=device_id, @@ -91,4 +90,9 @@ async def async_added_to_hass(self) -> None: def _handle_event(self, event: dict[str, Any]) -> None: """Domain specific event handler.""" - self._attr_native_value = event["value"] + self._event_value = event["value"] + + @property + def native_value(self) -> StateType: + """Return the value of the event.""" + return self._event_value From c091c4a55fa29612fbb5052aa188c9189ac73875 Mon Sep 17 00:00:00 2001 From: Matthieu Bourgain Date: Wed, 18 Sep 2024 09:00:56 +0200 Subject: [PATCH 5/5] add debug logs --- custom_components/rfplayer/rflib/rfpparser.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/custom_components/rfplayer/rflib/rfpparser.py b/custom_components/rfplayer/rflib/rfpparser.py index dc0b3e2..23386ce 100644 --- a/custom_components/rfplayer/rflib/rfpparser.py +++ b/custom_components/rfplayer/rflib/rfpparser.py @@ -89,6 +89,7 @@ def valid_packet(packet: str) -> bool: # pylint: disable-next=too-many-branches too-many-statements def decode_packet(packet: str) -> list: """Decode packet.""" + log.debug("decode_packet: %s", packet) packets_found = [] data = cast(PacketType, {"node": PacketHeader.GATEWAY.name}) @@ -155,6 +156,7 @@ def decode_packet(packet: str) -> list: def encode_packet(packet: PacketType) -> str: """Construct packet string from packet dictionary.""" + log.debug("encode_packet: %s", packet) command = str(packet["command"]).upper() protocol = str(packet["protocol"]).upper() if "id" in packet: