Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/skykettle-ha.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2022-08-16 22:54:13 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2022-08-16 22:54:13 +0300
commit4c7c622ad5ccb1fff4a115a37d9a9e42d28d9749 (patch)
tree4c5f2d466cb932b2756ce6c2f4ebd737edc5f984
parent2bee7844e36229742fba8e0b00b8b978ba29ed54 (diff)
More sensors
-rw-r--r--custom_components/skykettle/sensor.py119
1 files changed, 86 insertions, 33 deletions
diff --git a/custom_components/skykettle/sensor.py b/custom_components/skykettle/sensor.py
index bfe9ad5..0645bdf 100644
--- a/custom_components/skykettle/sensor.py
+++ b/custom_components/skykettle/sensor.py
@@ -1,7 +1,7 @@
"""SkyKettle."""
import logging
-from homeassistant.components.sensor import SensorEntity, SensorStateClass
+from homeassistant.components.sensor import SensorEntity, SensorStateClass, SensorDeviceClass
from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.const import *
@@ -14,6 +14,10 @@ _LOGGER = logging.getLogger(__name__)
SENSOR_TYPE_WATER_FRESHNESS = "water_freshness"
SENSOR_TYPE_SUCCESS_RATE = "success_rate"
+SENSOR_TYPE_ENERGY = "energy"
+SENSOR_TYPE_ONTIME = "ontime"
+SENSOR_TYPE_HEATER_ON_COUNT = "heater_on_count"
+SENSOR_TYPE_USER_ON_COUNT = "user_on_count"
async def async_setup_entry(hass, entry, async_add_entities):
@@ -24,10 +28,13 @@ async def async_setup_entry(hass, entry, async_add_entities):
])
if model_code in [SkyKettle.MODELS_4]: # RK-G2xxS, RK-M13xS, RK-M21xS, RK-M223S but not sure
async_add_entities([
+ SkySensor(hass, entry, SENSOR_TYPE_ENERGY),
+ SkySensor(hass, entry, SENSOR_TYPE_ONTIME),
+ SkySensor(hass, entry, SENSOR_TYPE_HEATER_ON_COUNT),
+ SkySensor(hass, entry, SENSOR_TYPE_USER_ON_COUNT),
SkySensor(hass, entry, SENSOR_TYPE_WATER_FRESHNESS),
])
-
class SkySensor(SensorEntity):
"""Representation of a SkyKettle sensor device."""
@@ -53,8 +60,32 @@ class SkySensor(SensorEntity):
return f"{self.entry.entry_id}_{self.sensor_type}"
@property
+ def device_info(self):
+ return self.hass.data[DOMAIN][DATA_DEVICE_INFO]()
+
+ @property
+ def should_poll(self):
+ return False
+
+ @property
+ def assumed_state(self):
+ return False
+
+ @property
+ def last_reset(self):
+ return None
+
+ @property
def name(self):
"""Name of the entity."""
+ if self.sensor_type == SENSOR_TYPE_ENERGY:
+ return (FRIENDLY_NAME + " " + self.entry.data.get(CONF_FRIENDLY_NAME, "")).strip() + " total energy consumed"
+ if self.sensor_type == SENSOR_TYPE_ONTIME:
+ return (FRIENDLY_NAME + " " + self.entry.data.get(CONF_FRIENDLY_NAME, "")).strip() + " total work time"
+ if self.sensor_type == SENSOR_TYPE_HEATER_ON_COUNT:
+ return (FRIENDLY_NAME + " " + self.entry.data.get(CONF_FRIENDLY_NAME, "")).strip() + " heater on count"
+ if self.sensor_type == SENSOR_TYPE_USER_ON_COUNT:
+ return (FRIENDLY_NAME + " " + self.entry.data.get(CONF_FRIENDLY_NAME, "")).strip() + " user on count"
if self.sensor_type == SENSOR_TYPE_WATER_FRESHNESS:
return (FRIENDLY_NAME + " " + self.entry.data.get(CONF_FRIENDLY_NAME, "")).strip() + " water freshness"
if self.sensor_type == SENSOR_TYPE_SUCCESS_RATE:
@@ -62,32 +93,28 @@ class SkySensor(SensorEntity):
@property
def icon(self):
+ if self.sensor_type == SENSOR_TYPE_ONTIME:
+ return "mdi:timelapse"
+ if self.sensor_type == SENSOR_TYPE_HEATER_ON_COUNT:
+ return "mdi:dip-switch"
+ if self.sensor_type == SENSOR_TYPE_USER_ON_COUNT:
+ return "mdi:dip-switch"
if self.sensor_type == SENSOR_TYPE_WATER_FRESHNESS:
return "mdi:water-sync"
if self.sensor_type == SENSOR_TYPE_SUCCESS_RATE:
return "mdi:bluetooth-connect"
-
- @property
- def device_class(self):
- if self.sensor_type == SENSOR_TYPE_WATER_FRESHNESS:
- return None # Unusual class
- if self.sensor_type == SENSOR_TYPE_SUCCESS_RATE:
- return None # Unusual class
-
- @property
- def device_info(self):
- return self.hass.data[DOMAIN][DATA_DEVICE_INFO]()
-
- @property
- def should_poll(self):
- return False
-
- @property
- def assumed_state(self):
- return False
+ return None
@property
def available(self):
+ if self.sensor_type == SENSOR_TYPE_ENERGY:
+ return self.kettle.available and self.kettle.energy_wh != None
+ if self.sensor_type == SENSOR_TYPE_ONTIME:
+ return self.kettle.available and self.kettle.ontime != None
+ if self.sensor_type == SENSOR_TYPE_HEATER_ON_COUNT:
+ return self.kettle.available and self.kettle.heater_on_count != None
+ if self.sensor_type == SENSOR_TYPE_USER_ON_COUNT:
+ return self.kettle.available and self.kettle.user_on_count != None
if self.sensor_type == SENSOR_TYPE_WATER_FRESHNESS:
return self.kettle.available and self.kettle.water_freshness_hours != None
if self.sensor_type == SENSOR_TYPE_SUCCESS_RATE:
@@ -95,32 +122,58 @@ class SkySensor(SensorEntity):
@property
def entity_category(self):
- if self.sensor_type == SENSOR_TYPE_WATER_FRESHNESS:
- return None
if self.sensor_type == SENSOR_TYPE_SUCCESS_RATE:
return EntityCategory.DIAGNOSTIC
+ return None
@property
- def last_reset(self):
- return None
+ def device_class(self):
+ if self.sensor_type == SENSOR_TYPE_ENERGY:
+ return SensorDeviceClass.ENERGY
+ if self.sensor_type == SENSOR_TYPE_ONTIME:
+ return SensorDeviceClass.DURATION
+ if self.sensor_type == SENSOR_TYPE_WATER_FRESHNESS:
+ return SensorDeviceClass.DURATION
+ return None # Unusual class
@property
- def native_value(self):
+ def state_class(self):
+ if self.sensor_type == SENSOR_TYPE_ENERGY:
+ return SensorStateClass.TOTAL_INCREASING
+ if self.sensor_type == SENSOR_TYPE_ONTIME:
+ return SensorStateClass.TOTAL_INCREASING
+ if self.sensor_type == SENSOR_TYPE_HEATER_ON_COUNT:
+ return SensorStateClass.TOTAL_INCREASING
+ if self.sensor_type == SENSOR_TYPE_USER_ON_COUNT:
+ return SensorStateClass.TOTAL_INCREASING
if self.sensor_type == SENSOR_TYPE_WATER_FRESHNESS:
- return self.kettle.water_freshness_hours
+ return SensorStateClass.MEASUREMENT
if self.sensor_type == SENSOR_TYPE_SUCCESS_RATE:
- return self.kettle.success_rate
+ return SensorStateClass.MEASUREMENT
@property
def native_unit_of_measurement(self):
+ if self.sensor_type == SENSOR_TYPE_ENERGY:
+ return ENERGY_WATT_HOUR
+ if self.sensor_type == SENSOR_TYPE_ONTIME:
+ return TIME_SECONDS
if self.sensor_type == SENSOR_TYPE_WATER_FRESHNESS:
- return "h"
+ return TIME_HOURS
if self.sensor_type == SENSOR_TYPE_SUCCESS_RATE:
- return "%"
+ return PERCENTAGE
+ return None
@property
- def state_class(self):
+ def native_value(self):
+ if self.sensor_type == SENSOR_TYPE_ENERGY:
+ return self.kettle.energy_wh
+ if self.sensor_type == SENSOR_TYPE_ONTIME:
+ return self.kettle.ontime.total_seconds()
+ if self.sensor_type == SENSOR_TYPE_HEATER_ON_COUNT:
+ return self.kettle.heater_on_count
+ if self.sensor_type == SENSOR_TYPE_USER_ON_COUNT:
+ return self.kettle.user_on_count
if self.sensor_type == SENSOR_TYPE_WATER_FRESHNESS:
- return SensorStateClass.MEASUREMENT
+ return self.kettle.water_freshness_hours
if self.sensor_type == SENSOR_TYPE_SUCCESS_RATE:
- return SensorStateClass.MEASUREMENT
+ return self.kettle.success_rate