Loading custom_components/smartir/__init__.py +1 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ from homeassistant.helpers.typing import ConfigType _LOGGER = logging.getLogger(__name__) DOMAIN = 'smartir' VERSION = '1.14.1' VERSION = '1.15.0' MANIFEST_URL = ( "https://raw.githubusercontent.com/" "smartHomeHub/SmartIR/{}/" Loading custom_components/smartir/climate.py +8 −3 Original line number Diff line number Diff line Loading @@ -24,10 +24,12 @@ from .controller import get_controller _LOGGER = logging.getLogger(__name__) DEFAULT_NAME = "SmartIR Climate" DEFAULT_DELAY = 0.5 CONF_UNIQUE_ID = 'unique_id' CONF_DEVICE_CODE = 'device_code' CONF_CONTROLLER_DATA = "controller_data" CONF_DELAY = "delay" CONF_TEMPERATURE_SENSOR = 'temperature_sensor' CONF_HUMIDITY_SENSOR = 'humidity_sensor' CONF_POWER_SENSOR = 'power_sensor' Loading @@ -43,6 +45,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required(CONF_DEVICE_CODE): cv.positive_int, vol.Required(CONF_CONTROLLER_DATA): cv.string, vol.Optional(CONF_DELAY, default=DEFAULT_DELAY): cv.string, vol.Optional(CONF_TEMPERATURE_SENSOR): cv.entity_id, vol.Optional(CONF_HUMIDITY_SENSOR): cv.entity_id, vol.Optional(CONF_POWER_SENSOR): cv.entity_id, Loading Loading @@ -96,6 +99,7 @@ class SmartIRClimate(ClimateEntity, RestoreEntity): self._name = config.get(CONF_NAME) self._device_code = config.get(CONF_DEVICE_CODE) self._controller_data = config.get(CONF_CONTROLLER_DATA) self._delay = config.get(CONF_DELAY) self._temperature_sensor = config.get(CONF_TEMPERATURE_SENSOR) self._humidity_sensor = config.get(CONF_HUMIDITY_SENSOR) self._power_sensor = config.get(CONF_POWER_SENSOR) Loading Loading @@ -134,7 +138,8 @@ class SmartIRClimate(ClimateEntity, RestoreEntity): self.hass, self._supported_controller, self._commands_encoding, self._controller_data) self._controller_data, self._delay) async def async_added_to_hass(self): """Run when entity about to be added.""" Loading Loading @@ -333,7 +338,7 @@ class SmartIRClimate(ClimateEntity, RestoreEntity): if 'on' in self._commands: await self._controller.send(self._commands['on']) await asyncio.sleep(0.5) await asyncio.sleep(self._delay) await self._controller.send( self._commands[operation_mode][fan_mode][target_temperature]) Loading custom_components/smartir/controller.py +6 −4 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ LOOKIN_COMMANDS_ENCODING = [ENC_PRONTO, ENC_RAW] ESPHOME_COMMANDS_ENCODING = [ENC_RAW] def get_controller(hass, controller, encoding, controller_data): def get_controller(hass, controller, encoding, controller_data, delay): """Return a controller compatible with the specification provided.""" controllers = { BROADLINK_CONTROLLER: BroadlinkController, Loading @@ -38,19 +38,20 @@ def get_controller(hass, controller, encoding, controller_data): ESPHOME_CONTROLLER: ESPHomeController } try: return controllers[controller](hass, controller, encoding, controller_data) return controllers[controller](hass, controller, encoding, controller_data, delay) except KeyError: raise Exception("The controller is not supported.") class AbstractController(ABC): """Representation of a controller.""" def __init__(self, hass, controller, encoding, controller_data): def __init__(self, hass, controller, encoding, controller_data, delay): self.check_encoding(encoding) self.hass = hass self._controller = controller self._encoding = encoding self._controller_data = controller_data self._delay = delay @abstractmethod def check_encoding(self, encoding): Loading Loading @@ -103,7 +104,8 @@ class BroadlinkController(AbstractController): service_data = { ATTR_ENTITY_ID: self._controller_data, 'command': commands 'command': commands, 'delay_secs': self._delay } await self.hass.services.async_call( Loading custom_components/smartir/fan.py +9 −1 Original line number Diff line number Diff line Loading @@ -22,10 +22,12 @@ from .controller import get_controller _LOGGER = logging.getLogger(__name__) DEFAULT_NAME = "SmartIR Fan" DEFAULT_DELAY = 0.5 CONF_UNIQUE_ID = 'unique_id' CONF_DEVICE_CODE = 'device_code' CONF_CONTROLLER_DATA = "controller_data" CONF_DELAY = "delay" CONF_POWER_SENSOR = 'power_sensor' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ Loading @@ -33,6 +35,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required(CONF_DEVICE_CODE): cv.positive_int, vol.Required(CONF_CONTROLLER_DATA): cv.string, vol.Optional(CONF_DELAY, default=DEFAULT_DELAY): cv.string, vol.Optional(CONF_POWER_SENSOR): cv.entity_id }) Loading Loading @@ -83,6 +86,7 @@ class SmartIRFan(FanEntity, RestoreEntity): self._name = config.get(CONF_NAME) self._device_code = config.get(CONF_DEVICE_CODE) self._controller_data = config.get(CONF_CONTROLLER_DATA) self._delay = config.get(CONF_DELAY) self._power_sensor = config.get(CONF_POWER_SENSOR) self._manufacturer = device_data['manufacturer'] Loading Loading @@ -117,7 +121,8 @@ class SmartIRFan(FanEntity, RestoreEntity): self.hass, self._supported_controller, self._commands_encoding, self._controller_data) self._controller_data, self._delay) async def async_added_to_hass(self): """Run when entity about to be added.""" Loading Loading @@ -263,6 +268,9 @@ class SmartIRFan(FanEntity, RestoreEntity): if new_state is None: return if new_state.state == old_state.state: return if new_state.state == STATE_ON and self._speed == SPEED_OFF: self._on_by_remote = True self._speed = None Loading custom_components/smartir/manifest.json +3 −3 Original line number Diff line number Diff line Loading @@ -7,8 +7,8 @@ "requirements": ["aiofiles==0.5.0"], "homeassistant": "0.115.0", "updater": { "version": "1.14.1", "releaseNotes": "-- Fixes power_sensor", "version": "1.15.0", "releaseNotes": "-- Adds adjustable delay between commands for Broadlink controller", "files": [ "__init__.py", "climate.py", Loading Loading
custom_components/smartir/__init__.py +1 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ from homeassistant.helpers.typing import ConfigType _LOGGER = logging.getLogger(__name__) DOMAIN = 'smartir' VERSION = '1.14.1' VERSION = '1.15.0' MANIFEST_URL = ( "https://raw.githubusercontent.com/" "smartHomeHub/SmartIR/{}/" Loading
custom_components/smartir/climate.py +8 −3 Original line number Diff line number Diff line Loading @@ -24,10 +24,12 @@ from .controller import get_controller _LOGGER = logging.getLogger(__name__) DEFAULT_NAME = "SmartIR Climate" DEFAULT_DELAY = 0.5 CONF_UNIQUE_ID = 'unique_id' CONF_DEVICE_CODE = 'device_code' CONF_CONTROLLER_DATA = "controller_data" CONF_DELAY = "delay" CONF_TEMPERATURE_SENSOR = 'temperature_sensor' CONF_HUMIDITY_SENSOR = 'humidity_sensor' CONF_POWER_SENSOR = 'power_sensor' Loading @@ -43,6 +45,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required(CONF_DEVICE_CODE): cv.positive_int, vol.Required(CONF_CONTROLLER_DATA): cv.string, vol.Optional(CONF_DELAY, default=DEFAULT_DELAY): cv.string, vol.Optional(CONF_TEMPERATURE_SENSOR): cv.entity_id, vol.Optional(CONF_HUMIDITY_SENSOR): cv.entity_id, vol.Optional(CONF_POWER_SENSOR): cv.entity_id, Loading Loading @@ -96,6 +99,7 @@ class SmartIRClimate(ClimateEntity, RestoreEntity): self._name = config.get(CONF_NAME) self._device_code = config.get(CONF_DEVICE_CODE) self._controller_data = config.get(CONF_CONTROLLER_DATA) self._delay = config.get(CONF_DELAY) self._temperature_sensor = config.get(CONF_TEMPERATURE_SENSOR) self._humidity_sensor = config.get(CONF_HUMIDITY_SENSOR) self._power_sensor = config.get(CONF_POWER_SENSOR) Loading Loading @@ -134,7 +138,8 @@ class SmartIRClimate(ClimateEntity, RestoreEntity): self.hass, self._supported_controller, self._commands_encoding, self._controller_data) self._controller_data, self._delay) async def async_added_to_hass(self): """Run when entity about to be added.""" Loading Loading @@ -333,7 +338,7 @@ class SmartIRClimate(ClimateEntity, RestoreEntity): if 'on' in self._commands: await self._controller.send(self._commands['on']) await asyncio.sleep(0.5) await asyncio.sleep(self._delay) await self._controller.send( self._commands[operation_mode][fan_mode][target_temperature]) Loading
custom_components/smartir/controller.py +6 −4 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ LOOKIN_COMMANDS_ENCODING = [ENC_PRONTO, ENC_RAW] ESPHOME_COMMANDS_ENCODING = [ENC_RAW] def get_controller(hass, controller, encoding, controller_data): def get_controller(hass, controller, encoding, controller_data, delay): """Return a controller compatible with the specification provided.""" controllers = { BROADLINK_CONTROLLER: BroadlinkController, Loading @@ -38,19 +38,20 @@ def get_controller(hass, controller, encoding, controller_data): ESPHOME_CONTROLLER: ESPHomeController } try: return controllers[controller](hass, controller, encoding, controller_data) return controllers[controller](hass, controller, encoding, controller_data, delay) except KeyError: raise Exception("The controller is not supported.") class AbstractController(ABC): """Representation of a controller.""" def __init__(self, hass, controller, encoding, controller_data): def __init__(self, hass, controller, encoding, controller_data, delay): self.check_encoding(encoding) self.hass = hass self._controller = controller self._encoding = encoding self._controller_data = controller_data self._delay = delay @abstractmethod def check_encoding(self, encoding): Loading Loading @@ -103,7 +104,8 @@ class BroadlinkController(AbstractController): service_data = { ATTR_ENTITY_ID: self._controller_data, 'command': commands 'command': commands, 'delay_secs': self._delay } await self.hass.services.async_call( Loading
custom_components/smartir/fan.py +9 −1 Original line number Diff line number Diff line Loading @@ -22,10 +22,12 @@ from .controller import get_controller _LOGGER = logging.getLogger(__name__) DEFAULT_NAME = "SmartIR Fan" DEFAULT_DELAY = 0.5 CONF_UNIQUE_ID = 'unique_id' CONF_DEVICE_CODE = 'device_code' CONF_CONTROLLER_DATA = "controller_data" CONF_DELAY = "delay" CONF_POWER_SENSOR = 'power_sensor' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ Loading @@ -33,6 +35,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required(CONF_DEVICE_CODE): cv.positive_int, vol.Required(CONF_CONTROLLER_DATA): cv.string, vol.Optional(CONF_DELAY, default=DEFAULT_DELAY): cv.string, vol.Optional(CONF_POWER_SENSOR): cv.entity_id }) Loading Loading @@ -83,6 +86,7 @@ class SmartIRFan(FanEntity, RestoreEntity): self._name = config.get(CONF_NAME) self._device_code = config.get(CONF_DEVICE_CODE) self._controller_data = config.get(CONF_CONTROLLER_DATA) self._delay = config.get(CONF_DELAY) self._power_sensor = config.get(CONF_POWER_SENSOR) self._manufacturer = device_data['manufacturer'] Loading Loading @@ -117,7 +121,8 @@ class SmartIRFan(FanEntity, RestoreEntity): self.hass, self._supported_controller, self._commands_encoding, self._controller_data) self._controller_data, self._delay) async def async_added_to_hass(self): """Run when entity about to be added.""" Loading Loading @@ -263,6 +268,9 @@ class SmartIRFan(FanEntity, RestoreEntity): if new_state is None: return if new_state.state == old_state.state: return if new_state.state == STATE_ON and self._speed == SPEED_OFF: self._on_by_remote = True self._speed = None Loading
custom_components/smartir/manifest.json +3 −3 Original line number Diff line number Diff line Loading @@ -7,8 +7,8 @@ "requirements": ["aiofiles==0.5.0"], "homeassistant": "0.115.0", "updater": { "version": "1.14.1", "releaseNotes": "-- Fixes power_sensor", "version": "1.15.0", "releaseNotes": "-- Adds adjustable delay between commands for Broadlink controller", "files": [ "__init__.py", "climate.py", Loading