mirror of
https://github.com/lumapu/ahoy.git
synced 2025-04-28 09:46:26 +02:00
fixed None access
This commit is contained in:
parent
b475c34878
commit
921506d543
1 changed files with 40 additions and 29 deletions
|
@ -227,6 +227,11 @@ class MqttOutputPlugin(OutputPluginFactory):
|
|||
"""
|
||||
|
||||
data = response.__dict__()
|
||||
|
||||
if data is None:
|
||||
logging.warn("received data object is empty")
|
||||
return
|
||||
|
||||
topic = params.get('topic', None)
|
||||
if not topic:
|
||||
topic = f'{data.get("inverter_name", "hoymiles")}/{data.get("inverter_ser", None)}'
|
||||
|
@ -243,31 +248,33 @@ class MqttOutputPlugin(OutputPluginFactory):
|
|||
# AC Data
|
||||
phase_id = 0
|
||||
phase_sum_power = 0
|
||||
for phase in data['phases']:
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/voltage', phase['voltage'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/current', phase['current'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/power', phase['power'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/Q_AC', phase['reactive_power'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/frequency', phase['frequency'], self.qos, self.ret)
|
||||
phase_id = phase_id + 1
|
||||
phase_sum_power += phase['power']
|
||||
if data['phases'] is not None:
|
||||
for phase in data['phases']:
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/voltage', phase['voltage'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/current', phase['current'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/power', phase['power'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/Q_AC', phase['reactive_power'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter/{phase_id}/frequency', phase['frequency'], self.qos, self.ret)
|
||||
phase_id = phase_id + 1
|
||||
phase_sum_power += phase['power']
|
||||
|
||||
# DC Data
|
||||
string_id = 0
|
||||
string_sum_power = 0
|
||||
for string in data['strings']:
|
||||
if 'name' in string:
|
||||
string_name = string['name'].replace(" ","_")
|
||||
else:
|
||||
string_name = string_id
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/voltage', string['voltage'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/current', string['current'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/power', string['power'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/YieldDay', string['energy_daily'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/YieldTotal', string['energy_total']/1000, self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/Irradiation', string['irradiation'], self.qos, self.ret)
|
||||
string_id = string_id + 1
|
||||
string_sum_power += string['power']
|
||||
if data['strings'] is not None:
|
||||
for string in data['strings']:
|
||||
if 'name' in string:
|
||||
string_name = string['name'].replace(" ","_")
|
||||
else:
|
||||
string_name = string_id
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/voltage', string['voltage'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/current', string['current'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/power', string['power'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/YieldDay', string['energy_daily'], self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/YieldTotal', string['energy_total']/1000, self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/emeter-dc/{string_name}/Irradiation', string['irradiation'], self.qos, self.ret)
|
||||
string_id = string_id + 1
|
||||
string_sum_power += string['power']
|
||||
|
||||
# Global
|
||||
if data['event_count'] is not None:
|
||||
|
@ -279,19 +286,23 @@ class MqttOutputPlugin(OutputPluginFactory):
|
|||
self.client.publish(f'{topic}/YieldTotal', data['yield_total']/1000, self.qos, self.ret)
|
||||
if data['yield_today'] is not None:
|
||||
self.client.publish(f'{topic}/YieldToday', data['yield_today']/1000, self.qos, self.ret)
|
||||
self.client.publish(f'{topic}/Efficiency', data['efficiency'], self.qos, self.ret)
|
||||
if data['efficiency'] is not None:
|
||||
self.client.publish(f'{topic}/Efficiency', data['efficiency'], self.qos, self.ret)
|
||||
|
||||
|
||||
elif isinstance(response, HardwareInfoResponse):
|
||||
self.client.publish(f'{topic}/Firmware/Version',\
|
||||
f'{data["FW_ver_maj"]}.{data["FW_ver_min"]}.{data["FW_ver_pat"]}', self.qos, self.ret)
|
||||
if data["FW_ver_maj"] is not None and data["FW_ver_min"] is not None and data["FW_ver_pat"] is not None:
|
||||
self.client.publish(f'{topic}/Firmware/Version',\
|
||||
f'{data["FW_ver_maj"]}.{data["FW_ver_min"]}.{data["FW_ver_pat"]}', self.qos, self.ret)
|
||||
|
||||
self.client.publish(f'{topic}/Firmware/Build_at',\
|
||||
f'{data["FW_build_dd"]}/{data["FW_build_mm"]}/{data["FW_build_yy"]}T{data["FW_build_HH"]}:{data["FW_build_MM"]}',\
|
||||
self.qos, self.ret)
|
||||
if data["FW_build_dd"] is not None and data["FW_build_mm"] is not None and data["FW_build_yy"] is not None and data["FW_build_HH"] is not None and data["FW_build_MM"] is not None:
|
||||
self.client.publish(f'{topic}/Firmware/Build_at',\
|
||||
f'{data["FW_build_dd"]}/{data["FW_build_mm"]}/{data["FW_build_yy"]}T{data["FW_build_HH"]}:{data["FW_build_MM"]}',\
|
||||
self.qos, self.ret)
|
||||
|
||||
self.client.publish(f'{topic}/Firmware/HWPartId',\
|
||||
f'{data["FW_HW_ID"]}', self.qos, self.ret)
|
||||
if data["FW_HW_ID"] is not None:
|
||||
self.client.publish(f'{topic}/Firmware/HWPartId',\
|
||||
f'{data["FW_HW_ID"]}', self.qos, self.ret)
|
||||
|
||||
else:
|
||||
raise ValueError('Data needs to be instance of StatusResponse or a instance of HardwareInfoResponse')
|
||||
|
|
Loading…
Add table
Reference in a new issue