Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 23 additions & 19 deletions packages/modules/devices/kostal/kostal_steca/inverter.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import xml.etree.ElementTree as ET
from math import isnan

from requests.adapters import HTTPAdapter

from modules.common import req
Comment on lines +8 to 10

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMHO it's a matter of taste if you want to be more explicit at the expense of verbosity. Can the openWB SW team please decide?

from modules.common.abstract_device import AbstractInverter
from modules.common.component_state import InverterState
Expand Down Expand Up @@ -47,26 +49,28 @@ def get_values(self) -> Tuple[float, Optional[float]]:
# DetMoerk 20210323: Anpassung für ein- und dreiphasige WR der Serie. Anstatt eine feste Zeile aus
# dem Ergebnis zu schneiden wird nach der Zeile mit AC_Power gesucht.

# call for XML file and parse it for current PV power
measurements = req.get_http_session().get("http://" + self.ip_address + "/measurements.xml", timeout=2).text
power_raw = ET.fromstring(measurements).find(".//Measurement[@Type='AC_Power']").get("Value")
power = 0 if power_raw is None else float(power_raw) * -1
power = 0 if isnan(power) else power
with req.get_http_session() as session:
session.default_timeout = 2
session.mount("http://", HTTPAdapter(max_retries=2))
# call for XML file and parse it for current PV power
Comment on lines +53 to +55

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMHO it's a matter of taste if you want to be more explicit at the expense of verbosity. Can the openWB SW team please decide?

measurements = session.get("http://" + self.ip_address + "/measurements.xml").text
power_raw = ET.fromstring(measurements).find(".//Measurement[@Type='AC_Power']").get("Value")
power = 0 if power_raw is None else float(power_raw) * -1
power = 0 if isnan(power) else power

if self.component_config.configuration.variant_steca:
# call for XML file and parse it for total produced kwh
yields = req.get_http_session().get("http://" + self.ip_address + "/yields.xml", timeout=2).text
exported = float(ET.fromstring(yields).find(".//Yield[@Type='Produced']/YieldValue").get("Value"))
else:
# call for .js file and parse it for total produced Wh
yields = req.get_http_session().get("http://" + self.ip_address + "/gen.yield.total.chart.js",
timeout=2).text
match = re.search(r'"data":\s*\[\s*([^\]]*)\s*]', yields)
try:
exported = sum(float(s) * 1e6 for s in match.group(1).split(','))
except AttributeError:
log.debug("PVkWh: Could not find 'data' in gen.yield.total.chart.js.")
exported = None
if self.component_config.configuration.variant_steca:
# call for XML file and parse it for total produced kwh
yields = session.get("http://" + self.ip_address + "/yields.xml").text
exported = float(ET.fromstring(yields).find(".//Yield[@Type='Produced']/YieldValue").get("Value"))
else:
# call for .js file and parse it for total produced Wh
yields = session.get("http://" + self.ip_address + "/gen.yield.total.chart.js").text
match = re.search(r'"data":\s*\[\s*([^\]]*)\s*]', yields)
try:
exported = sum(float(s) * 1e6 for s in match.group(1).split(','))
except AttributeError:
log.debug("PVkWh: Could not find 'data' in gen.yield.total.chart.js.")
exported = None
_, exported = self.peak_filter.check_values(power, None, exported)
return power, exported

Expand Down
Loading