summaryrefslogtreecommitdiff
path: root/src/inverter_mqtt_receiver.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/inverter_mqtt_receiver.py')
-rwxr-xr-xsrc/inverter_mqtt_receiver.py73
1 files changed, 35 insertions, 38 deletions
diff --git a/src/inverter_mqtt_receiver.py b/src/inverter_mqtt_receiver.py
index d3a487b..ec250ae 100755
--- a/src/inverter_mqtt_receiver.py
+++ b/src/inverter_mqtt_receiver.py
@@ -4,12 +4,10 @@ import re
import logging
from home.mqtt import MQTTBase
-from home.mqtt.message import Status, Generation
+from home.mqtt.payload.inverter import Status, Generation
from home.database import InverterDatabase
from home.config import config
-logger = logging.getLogger(__name__)
-
class MQTTReceiver(MQTTBase):
def __init__(self):
@@ -18,55 +16,54 @@ class MQTTReceiver(MQTTBase):
def on_connect(self, client: mqtt.Client, userdata, flags, rc):
super().on_connect(client, userdata, flags, rc)
- logger.info("subscribing to home/#")
+ self._logger.info("subscribing to home/#")
client.subscribe('home/#', qos=1)
def on_message(self, client: mqtt.Client, userdata, msg):
try:
- match = re.match(r'home/(\d+)/(status|gen)', msg.topic)
+ match = re.match(r'(?:home|hk)/(\d+)/(status|gen)', msg.topic)
if not match:
return
+ # FIXME string home_id must be supported
home_id, what = int(match.group(1)), match.group(2)
if what == 'gen':
- packer = Generation()
- client_time, watts = packer.unpack(msg.payload)
- self.database.add_generation(home_id, client_time, watts)
+ gen = Generation.unpack(msg.payload)
+ self.database.add_generation(home_id, gen.time, gen.wh)
elif what == 'status':
- packer = Status()
- client_time, data = packer.unpack(msg.payload)
+ s = Status.unpack(msg.payload)
self.database.add_status(home_id,
- client_time,
- grid_voltage=int(data['grid_voltage']*10),
- grid_freq=int(data['grid_freq'] * 10),
- ac_output_voltage=int(data['ac_output_voltage'] * 10),
- ac_output_freq=int(data['ac_output_freq'] * 10),
- ac_output_apparent_power=data['ac_output_apparent_power'],
- ac_output_active_power=data['ac_output_active_power'],
- output_load_percent=data['output_load_percent'],
- battery_voltage=int(data['battery_voltage'] * 10),
- battery_voltage_scc=int(data['battery_voltage_scc'] * 10),
- battery_voltage_scc2=int(data['battery_voltage_scc2'] * 10),
- battery_discharge_current=data['battery_discharge_current'],
- battery_charge_current=data['battery_charge_current'],
- battery_capacity=data['battery_capacity'],
- inverter_heat_sink_temp=data['inverter_heat_sink_temp'],
- mppt1_charger_temp=data['mppt1_charger_temp'],
- mppt2_charger_temp=data['mppt2_charger_temp'],
- pv1_input_power=data['pv1_input_power'],
- pv2_input_power=data['pv2_input_power'],
- pv1_input_voltage=int(data['pv1_input_voltage'] * 10),
- pv2_input_voltage=int(data['pv2_input_voltage'] * 10),
- mppt1_charger_status=data['mppt1_charger_status'],
- mppt2_charger_status=data['mppt2_charger_status'],
- battery_power_direction=data['battery_power_direction'],
- dc_ac_power_direction=data['dc_ac_power_direction'],
- line_power_direction=data['line_power_direction'],
- load_connected=data['load_connected'])
+ client_time=s.time,
+ grid_voltage=int(s.grid_voltage*10),
+ grid_freq=int(s.grid_freq * 10),
+ ac_output_voltage=int(s.ac_output_voltage * 10),
+ ac_output_freq=int(s.ac_output_freq * 10),
+ ac_output_apparent_power=s.ac_output_apparent_power,
+ ac_output_active_power=s.ac_output_active_power,
+ output_load_percent=s.output_load_percent,
+ battery_voltage=int(s.battery_voltage * 10),
+ battery_voltage_scc=int(s.battery_voltage_scc * 10),
+ battery_voltage_scc2=int(s.battery_voltage_scc2 * 10),
+ battery_discharge_current=s.battery_discharge_current,
+ battery_charge_current=s.battery_charge_current,
+ battery_capacity=s.battery_capacity,
+ inverter_heat_sink_temp=s.inverter_heat_sink_temp,
+ mppt1_charger_temp=s.mppt1_charger_temp,
+ mppt2_charger_temp=s.mppt2_charger_temp,
+ pv1_input_power=s.pv1_input_power,
+ pv2_input_power=s.pv2_input_power,
+ pv1_input_voltage=int(s.pv1_input_voltage * 10),
+ pv2_input_voltage=int(s.pv2_input_voltage * 10),
+ mppt1_charger_status=s.mppt1_charger_status,
+ mppt2_charger_status=s.mppt2_charger_status,
+ battery_power_direction=s.battery_power_direction,
+ dc_ac_power_direction=s.dc_ac_power_direction,
+ line_power_direction=s.line_power_direction,
+ load_connected=s.load_connected)
except Exception as e:
- logger.exception(str(e))
+ self._logger.exception(str(e))
if __name__ == '__main__':