Add support for SAJ inverters connected via WiFi (#27742)

* Add support for SAJ inverters connected via WiFi

* Changes after review for saj
This commit is contained in:
fredericvl 2019-10-23 21:11:04 +02:00 committed by Paulus Schoutsen
parent 65d8c70377
commit b6fd191dc4
3 changed files with 36 additions and 5 deletions

View File

@ -3,7 +3,7 @@
"name": "SAJ", "name": "SAJ",
"documentation": "https://www.home-assistant.io/integrations/saj", "documentation": "https://www.home-assistant.io/integrations/saj",
"requirements": [ "requirements": [
"pysaj==0.0.9" "pysaj==0.0.12"
], ],
"dependencies": [], "dependencies": [],
"codeowners": [ "codeowners": [

View File

@ -9,6 +9,9 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, CONF_HOST,
CONF_PASSWORD,
CONF_TYPE,
CONF_USERNAME,
DEVICE_CLASS_POWER, DEVICE_CLASS_POWER,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
ENERGY_KILO_WATT_HOUR, ENERGY_KILO_WATT_HOUR,
@ -31,6 +34,8 @@ MAX_INTERVAL = 300
UNIT_OF_MEASUREMENT_HOURS = "h" UNIT_OF_MEASUREMENT_HOURS = "h"
INVERTER_TYPES = ["ethernet", "wifi"]
SAJ_UNIT_MAPPINGS = { SAJ_UNIT_MAPPINGS = {
"W": POWER_WATT, "W": POWER_WATT,
"kWh": ENERGY_KILO_WATT_HOUR, "kWh": ENERGY_KILO_WATT_HOUR,
@ -40,16 +45,24 @@ SAJ_UNIT_MAPPINGS = {
"": None, "": None,
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({vol.Required(CONF_HOST): cv.string}) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_HOST): cv.string,
vol.Optional(CONF_TYPE, default=INVERTER_TYPES[0]): vol.In(INVERTER_TYPES),
vol.Inclusive(CONF_USERNAME, "credentials"): cv.string,
vol.Inclusive(CONF_PASSWORD, "credentials"): cv.string,
}
)
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
"""Set up SAJ sensors.""" """Set up SAJ sensors."""
remove_interval_update = None remove_interval_update = None
wifi = config[CONF_TYPE] == INVERTER_TYPES[1]
# Init all sensors # Init all sensors
sensor_def = pysaj.Sensors() sensor_def = pysaj.Sensors(wifi)
# Use all sensors by default # Use all sensors by default
hass_sensors = [] hass_sensors = []
@ -57,7 +70,25 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
for sensor in sensor_def: for sensor in sensor_def:
hass_sensors.append(SAJsensor(sensor)) hass_sensors.append(SAJsensor(sensor))
saj = pysaj.SAJ(config[CONF_HOST]) kwargs = {}
if wifi:
kwargs["wifi"] = True
if config.get(CONF_USERNAME) and config.get(CONF_PASSWORD):
kwargs["username"] = config[CONF_USERNAME]
kwargs["password"] = config[CONF_PASSWORD]
try:
saj = pysaj.SAJ(config[CONF_HOST], **kwargs)
await saj.read(sensor_def)
except pysaj.UnauthorizedException:
_LOGGER.error("Username and/or password is wrong.")
return
except pysaj.UnexpectedResponseException as err:
_LOGGER.error(
"Error in SAJ, please check host/ip address. Original error: %s", err
)
return
async_add_entities(hass_sensors) async_add_entities(hass_sensors)

View File

@ -1420,7 +1420,7 @@ pyrepetier==3.0.5
pysabnzbd==1.1.0 pysabnzbd==1.1.0
# homeassistant.components.saj # homeassistant.components.saj
pysaj==0.0.9 pysaj==0.0.12
# homeassistant.components.sony_projector # homeassistant.components.sony_projector
pysdcp==1 pysdcp==1