mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-06 04:31:37 +02:00
Merge pull request #256 from chehrlic/chris_vz
RPI: be able to handle more than one inverter with the volkszaehler plugin
This commit is contained in:
commit
a64a03f4cb
2 changed files with 65 additions and 39 deletions
|
@ -30,6 +30,8 @@ ahoy:
|
|||
|
||||
volkszaehler:
|
||||
disabled: true
|
||||
inverters:
|
||||
- serial: 114172220003
|
||||
url: 'http://localhost/middleware/'
|
||||
channels:
|
||||
- type: 'temperature'
|
||||
|
|
|
@ -208,14 +208,10 @@ try:
|
|||
except ModuleNotFoundError:
|
||||
pass
|
||||
|
||||
class VolkszaehlerOutputPlugin(OutputPluginFactory):
|
||||
def __init__(self, config, **params):
|
||||
"""
|
||||
Initialize VolkszaehlerOutputPlugin
|
||||
"""
|
||||
super().__init__(**params)
|
||||
|
||||
self.session = requests.Session()
|
||||
class VzInverterOutput:
|
||||
def __init__(self, config, session):
|
||||
self.session = session
|
||||
self.serial = config.get('serial')
|
||||
self.baseurl = config.get('url', 'http://localhost/middleware/')
|
||||
self.channels = dict()
|
||||
for channel in config.get('channels', []):
|
||||
|
@ -224,7 +220,7 @@ class VolkszaehlerOutputPlugin(OutputPluginFactory):
|
|||
if uid and ctype:
|
||||
self.channels[ctype] = uid
|
||||
|
||||
def store_status(self, response, **params):
|
||||
def store_status(self, data, session):
|
||||
"""
|
||||
Publish StatusResponse object
|
||||
|
||||
|
@ -232,15 +228,9 @@ class VolkszaehlerOutputPlugin(OutputPluginFactory):
|
|||
|
||||
:raises ValueError: when response is not instance of StatusResponse
|
||||
"""
|
||||
|
||||
if not isinstance(response, StatusResponse):
|
||||
raise ValueError('Data needs to be instance of StatusResponse')
|
||||
|
||||
if len(self.channels) == 0:
|
||||
return
|
||||
|
||||
data = response.__dict__()
|
||||
|
||||
ts = int(round(data['time'].timestamp() * 1000))
|
||||
|
||||
# AC Data
|
||||
|
@ -277,3 +267,37 @@ class VolkszaehlerOutputPlugin(OutputPluginFactory):
|
|||
raise ValueError('Could not send request (%s)' % url)
|
||||
except ConnectionError as e:
|
||||
raise ValueError('Could not send request (%s)' % e)
|
||||
|
||||
class VolkszaehlerOutputPlugin(OutputPluginFactory):
|
||||
def __init__(self, config, **params):
|
||||
"""
|
||||
Initialize VolkszaehlerOutputPlugin
|
||||
"""
|
||||
super().__init__(**params)
|
||||
|
||||
self.session = requests.Session()
|
||||
self.inverters = dict()
|
||||
for inverterconfig in config.get('inverters', []):
|
||||
serial = inverterconfig.get('serial')
|
||||
output = VzInverterOutput(inverterconfig, self.session)
|
||||
self.inverters[serial] = output
|
||||
|
||||
def store_status(self, response, **params):
|
||||
"""
|
||||
Publish StatusResponse object
|
||||
|
||||
:param hoymiles.decoders.StatusResponse response: StatusResponse object
|
||||
|
||||
:raises ValueError: when response is not instance of StatusResponse
|
||||
"""
|
||||
if not isinstance(response, StatusResponse):
|
||||
raise ValueError('Data needs to be instance of StatusResponse')
|
||||
|
||||
if len(self.inverters) == 0:
|
||||
return
|
||||
|
||||
data = response.__dict__()
|
||||
serial = data["inverter_ser"]
|
||||
if serial in self.inverters:
|
||||
output = self.inverters[serial]
|
||||
output.store_status(data, self.session)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue