core/homeassistant/components/juicenet/sensor.py

111 lines
3.5 KiB
Python

"""Support for monitoring juicenet/juicepoint/juicebox based EVSE sensors."""
import logging
from homeassistant.const import TEMP_CELSIUS, POWER_WATT, ENERGY_WATT_HOUR
from homeassistant.helpers.entity import Entity
from homeassistant.components.juicenet import JuicenetDevice, DOMAIN
_LOGGER = logging.getLogger(__name__)
DEPENDENCIES = ['juicenet']
SENSOR_TYPES = {
'status': ['Charging Status', None],
'temperature': ['Temperature', TEMP_CELSIUS],
'voltage': ['Voltage', 'V'],
'amps': ['Amps', 'A'],
'watts': ['Watts', POWER_WATT],
'charge_time': ['Charge time', 's'],
'energy_added': ['Energy added', ENERGY_WATT_HOUR]
}
def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the Juicenet sensor."""
api = hass.data[DOMAIN]['api']
dev = []
for device in api.get_devices():
for variable in SENSOR_TYPES:
dev.append(JuicenetSensorDevice(device, variable, hass))
add_entities(dev)
class JuicenetSensorDevice(JuicenetDevice, Entity):
"""Implementation of a Juicenet sensor."""
def __init__(self, device, sensor_type, hass):
"""Initialise the sensor."""
super().__init__(device, sensor_type, hass)
self._name = SENSOR_TYPES[sensor_type][0]
self._unit_of_measurement = SENSOR_TYPES[sensor_type][1]
@property
def name(self):
"""Return the name of the device."""
return '{} {}'.format(self.device.name(), self._name)
@property
def icon(self):
"""Return the icon of the sensor."""
icon = None
if self.type == 'status':
status = self.device.getStatus()
if status == 'standby':
icon = 'mdi:power-plug-off'
elif status == 'plugged':
icon = 'mdi:power-plug'
elif status == 'charging':
icon = 'mdi:battery-positive'
elif self.type == 'temperature':
icon = 'mdi:thermometer'
elif self.type == 'voltage':
icon = 'mdi:flash'
elif self.type == 'amps':
icon = 'mdi:flash'
elif self.type == 'watts':
icon = 'mdi:flash'
elif self.type == 'charge_time':
icon = 'mdi:timer'
elif self.type == 'energy_added':
icon = 'mdi:flash'
return icon
@property
def unit_of_measurement(self):
"""Return the unit the value is expressed in."""
return self._unit_of_measurement
@property
def state(self):
"""Return the state."""
state = None
if self.type == 'status':
state = self.device.getStatus()
elif self.type == 'temperature':
state = self.device.getTemperature()
elif self.type == 'voltage':
state = self.device.getVoltage()
elif self.type == 'amps':
state = self.device.getAmps()
elif self.type == 'watts':
state = self.device.getWatts()
elif self.type == 'charge_time':
state = self.device.getChargeTime()
elif self.type == 'energy_added':
state = self.device.getEnergyAdded()
else:
state = 'Unknown'
return state
@property
def device_state_attributes(self):
"""Return the state attributes."""
attributes = {}
if self.type == 'status':
man_dev_id = self.device.id()
if man_dev_id:
attributes["manufacturer_device_id"] = man_dev_id
return attributes