Add sensor platform to goalzero (#49835)
* Add sensor platform to goalzero * Tweak * Remove unused DATA_SCHEMA * Simplify * Remove last_reset * Update on reload
This commit is contained in:
parent
a3f1489785
commit
5cd4471c67
6 changed files with 174 additions and 5 deletions
|
@ -372,6 +372,7 @@ omit =
|
|||
homeassistant/components/goalfeed/*
|
||||
homeassistant/components/goalzero/__init__.py
|
||||
homeassistant/components/goalzero/binary_sensor.py
|
||||
homeassistant/components/goalzero/sensor.py
|
||||
homeassistant/components/goalzero/switch.py
|
||||
homeassistant/components/google/*
|
||||
homeassistant/components/google_cloud/tts.py
|
||||
|
|
|
@ -4,6 +4,7 @@ import logging
|
|||
from goalzero import Yeti, exceptions
|
||||
|
||||
from homeassistant.components.binary_sensor import DOMAIN as DOMAIN_BINARY_SENSOR
|
||||
from homeassistant.components.sensor import DOMAIN as DOMAIN_SENSOR
|
||||
from homeassistant.components.switch import DOMAIN as DOMAIN_SWITCH
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_HOST, CONF_NAME
|
||||
|
@ -21,7 +22,7 @@ from .const import DATA_KEY_API, DATA_KEY_COORDINATOR, DOMAIN, MIN_TIME_BETWEEN_
|
|||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
PLATFORMS = [DOMAIN_BINARY_SENSOR, DOMAIN_SWITCH]
|
||||
PLATFORMS = [DOMAIN_BINARY_SENSOR, DOMAIN_SENSOR, DOMAIN_SWITCH]
|
||||
|
||||
|
||||
async def async_setup_entry(hass, entry):
|
||||
|
@ -42,7 +43,7 @@ async def async_setup_entry(hass, entry):
|
|||
try:
|
||||
await api.get_state()
|
||||
except exceptions.ConnectError as err:
|
||||
raise UpdateFailed(f"Failed to communicating with device {err}") from err
|
||||
raise UpdateFailed("Failed to communicate with device") from err
|
||||
|
||||
coordinator = DataUpdateCoordinator(
|
||||
hass,
|
||||
|
|
|
@ -22,7 +22,7 @@ async def async_setup_entry(hass, entry, async_add_entities):
|
|||
)
|
||||
for sensor_name in BINARY_SENSOR_DICT
|
||||
]
|
||||
async_add_entities(sensors, True)
|
||||
async_add_entities(sensors)
|
||||
|
||||
|
||||
class YetiBinarySensor(YetiEntity, BinarySensorEntity):
|
||||
|
|
|
@ -18,8 +18,6 @@ from .const import DEFAULT_NAME, DOMAIN
|
|||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
DATA_SCHEMA = vol.Schema({vol.Required("host"): str, vol.Required("name"): str})
|
||||
|
||||
|
||||
class GoalZeroFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
"""Handle a config flow for Goal Zero Yeti."""
|
||||
|
|
|
@ -6,7 +6,37 @@ from homeassistant.components.binary_sensor import (
|
|||
DEVICE_CLASS_CONNECTIVITY,
|
||||
DEVICE_CLASS_POWER,
|
||||
)
|
||||
from homeassistant.components.sensor import (
|
||||
ATTR_STATE_CLASS,
|
||||
DEVICE_CLASS_BATTERY,
|
||||
DEVICE_CLASS_CURRENT,
|
||||
DEVICE_CLASS_ENERGY,
|
||||
DEVICE_CLASS_SIGNAL_STRENGTH,
|
||||
DEVICE_CLASS_TEMPERATURE,
|
||||
DEVICE_CLASS_VOLTAGE,
|
||||
STATE_CLASS_MEASUREMENT,
|
||||
)
|
||||
from homeassistant.const import (
|
||||
ATTR_DEVICE_CLASS,
|
||||
ATTR_NAME,
|
||||
ATTR_UNIT_OF_MEASUREMENT,
|
||||
ELECTRICAL_CURRENT_AMPERE,
|
||||
ENERGY_WATT_HOUR,
|
||||
PERCENTAGE,
|
||||
POWER_WATT,
|
||||
SIGNAL_STRENGTH_DECIBELS,
|
||||
TEMP_CELSIUS,
|
||||
TIME_MINUTES,
|
||||
TIME_SECONDS,
|
||||
VOLT,
|
||||
)
|
||||
|
||||
ATTR_DEFAULT_ENABLED = "default_enabled"
|
||||
|
||||
CONF_IDENTIFIERS = "identifiers"
|
||||
CONF_MANUFACTURER = "manufacturer"
|
||||
CONF_MODEL = "model"
|
||||
CONF_SW_VERSION = "sw_version"
|
||||
DATA_KEY_COORDINATOR = "coordinator"
|
||||
DOMAIN = "goalzero"
|
||||
DEFAULT_NAME = "Yeti"
|
||||
|
@ -25,6 +55,86 @@ BINARY_SENSOR_DICT = {
|
|||
"inputDetected": ["Input Detected", DEVICE_CLASS_POWER, None],
|
||||
}
|
||||
|
||||
SENSOR_DICT = {
|
||||
"wattsIn": {
|
||||
ATTR_NAME: "Watts In",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
ATTR_DEFAULT_ENABLED: True,
|
||||
},
|
||||
"ampsIn": {
|
||||
ATTR_NAME: "Amps In",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_CURRENT,
|
||||
ATTR_UNIT_OF_MEASUREMENT: ELECTRICAL_CURRENT_AMPERE,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
ATTR_DEFAULT_ENABLED: False,
|
||||
},
|
||||
"wattsOut": {
|
||||
ATTR_NAME: "Watts Out",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
ATTR_DEFAULT_ENABLED: True,
|
||||
},
|
||||
"ampsOut": {
|
||||
ATTR_NAME: "Amps Out",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_CURRENT,
|
||||
ATTR_UNIT_OF_MEASUREMENT: ELECTRICAL_CURRENT_AMPERE,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
ATTR_DEFAULT_ENABLED: False,
|
||||
},
|
||||
"whOut": {
|
||||
ATTR_NAME: "WH Out",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
ATTR_DEFAULT_ENABLED: False,
|
||||
},
|
||||
"whStored": {
|
||||
ATTR_NAME: "WH Stored",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
ATTR_DEFAULT_ENABLED: True,
|
||||
},
|
||||
"volts": {
|
||||
ATTR_NAME: "Volts",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_VOLTAGE,
|
||||
ATTR_UNIT_OF_MEASUREMENT: VOLT,
|
||||
ATTR_DEFAULT_ENABLED: False,
|
||||
},
|
||||
"socPercent": {
|
||||
ATTR_NAME: "State of Charge Percent",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_BATTERY,
|
||||
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||
ATTR_DEFAULT_ENABLED: True,
|
||||
},
|
||||
"timeToEmptyFull": {
|
||||
ATTR_NAME: "Time to Empty/Full",
|
||||
ATTR_DEVICE_CLASS: TIME_MINUTES,
|
||||
ATTR_UNIT_OF_MEASUREMENT: TIME_MINUTES,
|
||||
ATTR_DEFAULT_ENABLED: True,
|
||||
},
|
||||
"temperature": {
|
||||
ATTR_NAME: "Temperature",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
|
||||
ATTR_DEFAULT_ENABLED: True,
|
||||
},
|
||||
"wifiStrength": {
|
||||
ATTR_NAME: "Wifi Strength",
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_SIGNAL_STRENGTH,
|
||||
ATTR_UNIT_OF_MEASUREMENT: SIGNAL_STRENGTH_DECIBELS,
|
||||
ATTR_DEFAULT_ENABLED: True,
|
||||
},
|
||||
"timestamp": {
|
||||
ATTR_NAME: "Up Time",
|
||||
ATTR_UNIT_OF_MEASUREMENT: TIME_SECONDS,
|
||||
ATTR_DEFAULT_ENABLED: False,
|
||||
},
|
||||
}
|
||||
|
||||
SWITCH_DICT = {
|
||||
"v12PortStatus": "12V Port Status",
|
||||
"usbPortStatus": "USB Port Status",
|
||||
|
|
59
homeassistant/components/goalzero/sensor.py
Normal file
59
homeassistant/components/goalzero/sensor.py
Normal file
|
@ -0,0 +1,59 @@
|
|||
"""Support for Goal Zero Yeti Sensors."""
|
||||
from homeassistant.components.sensor import ATTR_LAST_RESET, ATTR_STATE_CLASS
|
||||
from homeassistant.const import (
|
||||
ATTR_DEVICE_CLASS,
|
||||
ATTR_NAME,
|
||||
ATTR_UNIT_OF_MEASUREMENT,
|
||||
CONF_NAME,
|
||||
)
|
||||
|
||||
from . import YetiEntity
|
||||
from .const import (
|
||||
ATTR_DEFAULT_ENABLED,
|
||||
DATA_KEY_API,
|
||||
DATA_KEY_COORDINATOR,
|
||||
DOMAIN,
|
||||
SENSOR_DICT,
|
||||
)
|
||||
|
||||
|
||||
async def async_setup_entry(hass, entry, async_add_entities):
|
||||
"""Set up the Goal Zero Yeti sensor."""
|
||||
name = entry.data[CONF_NAME]
|
||||
goalzero_data = hass.data[DOMAIN][entry.entry_id]
|
||||
sensors = [
|
||||
YetiSensor(
|
||||
goalzero_data[DATA_KEY_API],
|
||||
goalzero_data[DATA_KEY_COORDINATOR],
|
||||
name,
|
||||
sensor_name,
|
||||
entry.entry_id,
|
||||
)
|
||||
for sensor_name in SENSOR_DICT
|
||||
]
|
||||
async_add_entities(sensors, True)
|
||||
|
||||
|
||||
class YetiSensor(YetiEntity):
|
||||
"""Representation of a Goal Zero Yeti sensor."""
|
||||
|
||||
def __init__(self, api, coordinator, name, sensor_name, server_unique_id):
|
||||
"""Initialize a Goal Zero Yeti sensor."""
|
||||
super().__init__(api, coordinator, name, server_unique_id)
|
||||
|
||||
self._condition = sensor_name
|
||||
|
||||
sensor = SENSOR_DICT[sensor_name]
|
||||
self._attr_name = f"{name} {sensor.get(ATTR_NAME)}"
|
||||
self._attr_unique_id = f"{self._server_unique_id}/{sensor_name}"
|
||||
self._attr_unit_of_measurement = sensor.get(ATTR_UNIT_OF_MEASUREMENT)
|
||||
self._attr_entity_registry_enabled_default = sensor.get(ATTR_DEFAULT_ENABLED)
|
||||
self._device_class = sensor.get(ATTR_DEVICE_CLASS)
|
||||
self._attr_last_reset = sensor.get(ATTR_LAST_RESET)
|
||||
self._attr_state_class = sensor.get(ATTR_STATE_CLASS)
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
"""Return the state."""
|
||||
if self.api.data:
|
||||
return self.api.data[self._condition]
|
Loading…
Add table
Reference in a new issue