Repair SolarEdge_local inverter fahrenheit temperature (#27096)

* Add Fahrenheit check

* Rounding values

* add missing bracket

* Fix spelling

* round fahrenheit to 1 decimal

* Change unit on the fly

* Use new sensor names

* Use TEMP_FAHRENHEIT constant

* Pass new sensors fully to SolarEdgeSensor

* applying snake_case

* applying snake_case lower case

* Update sensor.py

* applying feedback
This commit is contained in:
scheric 2019-10-05 22:07:01 +02:00 committed by Jason Hu
parent 601d15701b
commit 99859485e2

View File

@ -2,6 +2,7 @@
import logging import logging
from datetime import timedelta from datetime import timedelta
import statistics import statistics
from copy import deepcopy
from requests.exceptions import HTTPError, ConnectTimeout from requests.exceptions import HTTPError, ConnectTimeout
from solaredge_local import SolarEdge from solaredge_local import SolarEdge
@ -14,6 +15,7 @@ from homeassistant.const import (
POWER_WATT, POWER_WATT,
ENERGY_WATT_HOUR, ENERGY_WATT_HOUR,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -58,25 +60,25 @@ SENSOR_TYPES = {
], ],
"optimizer_current": [ "optimizer_current": [
"optimizercurrent", "optimizercurrent",
"Avrage Optimizer Current", "Average Optimizer Current",
"A", "A",
"mdi:solar-panel", "mdi:solar-panel",
], ],
"optimizer_power": [ "optimizer_power": [
"optimizerpower", "optimizerpower",
"Avrage Optimizer Power", "Average Optimizer Power",
POWER_WATT, POWER_WATT,
"mdi:solar-panel", "mdi:solar-panel",
], ],
"optimizer_temperature": [ "optimizer_temperature": [
"optimizertemperature", "optimizertemperature",
"Avrage Optimizer Temperature", "Average Optimizer Temperature",
TEMP_CELSIUS, TEMP_CELSIUS,
"mdi:solar-panel", "mdi:solar-panel",
], ],
"optimizer_voltage": [ "optimizer_voltage": [
"optimizervoltage", "optimizervoltage",
"Avrage Optimizer Voltage", "Average Optimizer Voltage",
"V", "V",
"mdi:solar-panel", "mdi:solar-panel",
], ],
@ -112,13 +114,30 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
_LOGGER.error("Could not retrieve details from SolarEdge API") _LOGGER.error("Could not retrieve details from SolarEdge API")
return return
# Changing inverter temperature unit.
sensors = deepcopy(SENSOR_TYPES)
if status.inverters.primary.temperature.units.farenheit:
sensors["inverter_temperature"] = [
"invertertemperature",
"Inverter Temperature",
TEMP_FAHRENHEIT,
"mdi:thermometer",
]
# Create solaredge data service which will retrieve and update the data. # Create solaredge data service which will retrieve and update the data.
data = SolarEdgeData(hass, api) data = SolarEdgeData(hass, api)
# Create a new sensor for each sensor type. # Create a new sensor for each sensor type.
entities = [] entities = []
for sensor_key in SENSOR_TYPES: for sensor_info in sensors.values():
sensor = SolarEdgeSensor(platform_name, sensor_key, data) sensor = SolarEdgeSensor(
platform_name,
data,
sensor_info[0],
sensor_info[1],
sensor_info[2],
sensor_info[3],
)
entities.append(sensor) entities.append(sensor)
add_entities(entities, True) add_entities(entities, True)
@ -127,20 +146,21 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
class SolarEdgeSensor(Entity): class SolarEdgeSensor(Entity):
"""Representation of an SolarEdge Monitoring API sensor.""" """Representation of an SolarEdge Monitoring API sensor."""
def __init__(self, platform_name, sensor_key, data): def __init__(self, platform_name, data, json_key, name, unit, icon):
"""Initialize the sensor.""" """Initialize the sensor."""
self.platform_name = platform_name self._platform_name = platform_name
self.sensor_key = sensor_key self._data = data
self.data = data
self._state = None self._state = None
self._json_key = SENSOR_TYPES[self.sensor_key][0] self._json_key = json_key
self._unit_of_measurement = SENSOR_TYPES[self.sensor_key][2] self._name = name
self._unit_of_measurement = unit
self._icon = icon
@property @property
def name(self): def name(self):
"""Return the name.""" """Return the name."""
return f"{self.platform_name} ({SENSOR_TYPES[self.sensor_key][1]})" return f"{self._platform_name} ({self._name})"
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
@ -150,7 +170,7 @@ class SolarEdgeSensor(Entity):
@property @property
def icon(self): def icon(self):
"""Return the sensor icon.""" """Return the sensor icon."""
return SENSOR_TYPES[self.sensor_key][3] return self._icon
@property @property
def state(self): def state(self):
@ -159,8 +179,8 @@ class SolarEdgeSensor(Entity):
def update(self): def update(self):
"""Get the latest data from the sensor and update the state.""" """Get the latest data from the sensor and update the state."""
self.data.update() self._data.update()
self._state = self.data.data[self._json_key] self._state = self._data.data[self._json_key]
class SolarEdgeData: class SolarEdgeData:
@ -220,11 +240,11 @@ class SolarEdgeData:
self.data["energyThisMonth"] = round(status.energy.thisMonth, 2) self.data["energyThisMonth"] = round(status.energy.thisMonth, 2)
self.data["energyToday"] = round(status.energy.today, 2) self.data["energyToday"] = round(status.energy.today, 2)
self.data["currentPower"] = round(status.powerWatt, 2) self.data["currentPower"] = round(status.powerWatt, 2)
self.data[ self.data["invertertemperature"] = round(
"invertertemperature" status.inverters.primary.temperature.value, 2
] = status.inverters.primary.temperature.value )
if maintenance.system.name: if maintenance.system.name:
self.data["optimizertemperature"] = statistics.mean(temperature) self.data["optimizertemperature"] = round(statistics.mean(temperature), 2)
self.data["optimizervoltage"] = statistics.mean(voltage) self.data["optimizervoltage"] = round(statistics.mean(voltage), 2)
self.data["optimizercurrent"] = statistics.mean(current) self.data["optimizercurrent"] = round(statistics.mean(current), 2)
self.data["optimizerpower"] = power self.data["optimizerpower"] = round(power, 2)