diff --git a/homeassistant/components/saj/manifest.json b/homeassistant/components/saj/manifest.json index e42b37195a4..2dd701e9c7c 100644 --- a/homeassistant/components/saj/manifest.json +++ b/homeassistant/components/saj/manifest.json @@ -3,7 +3,7 @@ "name": "SAJ", "documentation": "https://www.home-assistant.io/integrations/saj", "requirements": [ - "pysaj==0.0.9" + "pysaj==0.0.12" ], "dependencies": [], "codeowners": [ diff --git a/homeassistant/components/saj/sensor.py b/homeassistant/components/saj/sensor.py index fa06b2b9125..5605866908e 100644 --- a/homeassistant/components/saj/sensor.py +++ b/homeassistant/components/saj/sensor.py @@ -9,6 +9,9 @@ import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ( CONF_HOST, + CONF_PASSWORD, + CONF_TYPE, + CONF_USERNAME, DEVICE_CLASS_POWER, DEVICE_CLASS_TEMPERATURE, ENERGY_KILO_WATT_HOUR, @@ -31,6 +34,8 @@ MAX_INTERVAL = 300 UNIT_OF_MEASUREMENT_HOURS = "h" +INVERTER_TYPES = ["ethernet", "wifi"] + SAJ_UNIT_MAPPINGS = { "W": POWER_WATT, "kWh": ENERGY_KILO_WATT_HOUR, @@ -40,16 +45,24 @@ SAJ_UNIT_MAPPINGS = { "": 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): """Set up SAJ sensors.""" remove_interval_update = None + wifi = config[CONF_TYPE] == INVERTER_TYPES[1] # Init all sensors - sensor_def = pysaj.Sensors() + sensor_def = pysaj.Sensors(wifi) # Use all sensors by default hass_sensors = [] @@ -57,7 +70,25 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= for sensor in sensor_def: 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) diff --git a/requirements_all.txt b/requirements_all.txt index 297067f5220..cafdcae9c9b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1420,7 +1420,7 @@ pyrepetier==3.0.5 pysabnzbd==1.1.0 # homeassistant.components.saj -pysaj==0.0.9 +pysaj==0.0.12 # homeassistant.components.sony_projector pysdcp==1