111 lines
3.5 KiB
Python
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
|