added validation for polling interval

This commit is contained in:
Patrick762 committed 2023-08-26 15:54:33 +02:00
1 parent 15216e1268
commit a5ced35d32
6 files changed
+22 -11

No files matched your search

@@ -35,7 +35,7 @@ _LOGGER = logging.getLogger(__name__)
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None: ) -> None:
"""Setup sensor entities.""" """Setup binary_sensor entities."""
device_name = entry.data.get(CONF_NAME) device_name = entry.data.get(CONF_NAME)
address = entry.data.get(CONF_ADDRESS) address = entry.data.get(CONF_ADDRESS)
@@ -43,7 +43,7 @@ async def async_setup_entry(
_LOGGER.error("Device has no address") _LOGGER.error("Device has no address")
# Generate device info # Generate device info
_LOGGER.info("Creating sensors for device with address %s", address) _LOGGER.info("Creating binary_sensors for device with address %s", address)
device_info = dev_info(entry) device_info = dev_info(entry)
# Add sensors according to device_info # Add sensors according to device_info
@@ -105,8 +105,8 @@ class BluettiBinarySensor(CoordinatorEntity, BinarySensorEntity):
"""Handle updated data from the coordinator.""" """Handle updated data from the coordinator."""
_LOGGER.debug("Updating state of %s", self._attr_unique_id) _LOGGER.debug("Updating state of %s", self._attr_unique_id)
if not isinstance(self.coordinator.data, dict): if not isinstance(self.coordinator.data, dict):
_LOGGER.error( _LOGGER.debug(
"Invalid data from coordinator (sensor.%s)", self._attr_unique_id "Invalid data from coordinator (binary_sensor.%s)", self._attr_unique_id
) )
self._attr_available = False self._attr_available = False
return return
@@ -118,7 +118,7 @@ class BluettiBinarySensor(CoordinatorEntity, BinarySensorEntity):
if not isinstance(response_data, bool): if not isinstance(response_data, bool):
_LOGGER.warning( _LOGGER.warning(
"Invalid response data type from coordinator (sensor.%s): %s", "Invalid response data type from coordinator (binary_sensor.%s): %s",
self._attr_unique_id, self._attr_unique_id,
response_data, response_data,
) )
@@ -108,6 +108,11 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
) -> FlowResult: ) -> FlowResult:
"""Manage the options.""" """Manage the options."""
if user_input is not None: if user_input is not None:
# Validate update interval
if user_input[CONF_POLLING_INTERVAL] < 5:
return self.async_abort(reason="invalid_interval")
changed = self.hass.config_entries.async_update_entry( changed = self.hass.config_entries.async_update_entry(
self.config_entry, self.config_entry,
data={ data={
+1 -1
View File
@@ -131,7 +131,7 @@ class BluettiSensor(CoordinatorEntity, SensorEntity):
"""Handle updated data from the coordinator.""" """Handle updated data from the coordinator."""
_LOGGER.debug("Updating state of %s", self._attr_unique_id) _LOGGER.debug("Updating state of %s", self._attr_unique_id)
if not isinstance(self.coordinator.data, dict): if not isinstance(self.coordinator.data, dict):
_LOGGER.error( _LOGGER.debug(
"Invalid data from coordinator (sensor.%s)", self._attr_unique_id "Invalid data from coordinator (sensor.%s)", self._attr_unique_id
) )
self._attr_available = False self._attr_available = False
+3 -3
View File
@@ -50,7 +50,7 @@ async def async_setup_entry(
_LOGGER.error("Device has no address") _LOGGER.error("Device has no address")
# Generate device info # Generate device info
_LOGGER.info("Creating sensors for device with address %s", address) _LOGGER.info("Creating switches for device with address %s", address)
device_info = dev_info(entry) device_info = dev_info(entry)
# Add sensors according to device_info # Add sensors according to device_info
@@ -116,7 +116,7 @@ class BluettiSwitch(CoordinatorEntity, SwitchEntity):
_LOGGER.debug("Updating state of %s", self._attr_unique_id) _LOGGER.debug("Updating state of %s", self._attr_unique_id)
if not isinstance(self.coordinator.data, dict): if not isinstance(self.coordinator.data, dict):
_LOGGER.error( _LOGGER.error(
"Invalid data from coordinator (sensor.%s)", self._attr_unique_id "Invalid data from coordinator (switch.%s)", self._attr_unique_id
) )
self._attr_available = False self._attr_available = False
return return
@@ -128,7 +128,7 @@ class BluettiSwitch(CoordinatorEntity, SwitchEntity):
if not isinstance(response_data, bool): if not isinstance(response_data, bool):
_LOGGER.warning( _LOGGER.warning(
"Invalid response data type from coordinator (sensor.%s): %s", "Invalid response data type from coordinator (switch.%s): %s",
self._attr_unique_id, self._attr_unique_id,
response_data, response_data,
) )
@@ -4,10 +4,13 @@
"init": { "init": {
"data": { "data": {
"use_controls": "Steuerung aktivieren (auf eigenes Risiko)", "use_controls": "Steuerung aktivieren (auf eigenes Risiko)",
"persistant_conn": "Dauerhafte Verbindung", "persistant_conn": "Dauerhafte Verbindung (Neustart erforderlich)",
"polling_interval": "Datenabruf-Intervall in Sekunden (Neustart erforderlich)" "polling_interval": "Datenabruf-Intervall in Sekunden (Neustart erforderlich)"
} }
} }
},
"abort": {
"invalid_interval": "Ungültiger Datenabruf-Intervall. Verwende 5 Sekunden oder mehr"
} }
} }
} }
@@ -4,10 +4,13 @@
"init": { "init": {
"data": { "data": {
"use_controls": "Use controls (use at own risk)", "use_controls": "Use controls (use at own risk)",
"persistant_conn": "Persistant connection", "persistant_conn": "Persistant connection (restart required)",
"polling_interval": "Polling interval in seconds (restart required)" "polling_interval": "Polling interval in seconds (restart required)"
} }
} }
},
"abort": {
"invalid_interval": "Invalid polling interval. Use 5 seconds or more"
} }
} }
} }