|  |  | @ -137,7 +137,7 @@ class MqttOutputPlugin(OutputPluginFactory): | 
			
		
	
		
			
				
					|  |  |  |     """ Mqtt output plugin """ | 
			
		
	
		
			
				
					|  |  |  |     client = None | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     def __init__(self, *args, **params): | 
			
		
	
		
			
				
					|  |  |  |     def __init__(self, config, **params): | 
			
		
	
		
			
				
					|  |  |  |         """ | 
			
		
	
		
			
				
					|  |  |  |         Initialize MqttOutputPlugin | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -158,11 +158,14 @@ class MqttOutputPlugin(OutputPluginFactory): | 
			
		
	
		
			
				
					|  |  |  |         :param topic: custom mqtt topic prefix (default: hoymiles/{inverter_ser}) | 
			
		
	
		
			
				
					|  |  |  |         :type topic: str | 
			
		
	
		
			
				
					|  |  |  |         """ | 
			
		
	
		
			
				
					|  |  |  |         super().__init__(*args, **params) | 
			
		
	
		
			
				
					|  |  |  |         super().__init__(**params) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         mqtt_client = paho.mqtt.client.Client() | 
			
		
	
		
			
				
					|  |  |  |         mqtt_client.username_pw_set(params.get('user', None), params.get('password', None)) | 
			
		
	
		
			
				
					|  |  |  |         mqtt_client.connect(params.get('host', '127.0.0.1'), params.get('port', 1883)) | 
			
		
	
		
			
				
					|  |  |  |         if config.get('useTLS',False): | 
			
		
	
		
			
				
					|  |  |  |            mqtt_client.tls_set() | 
			
		
	
		
			
				
					|  |  |  |            mqtt_client.tls_insecure_set(config.get('insecureTLS',False)) | 
			
		
	
		
			
				
					|  |  |  |         mqtt_client.username_pw_set(config.get('user', None), config.get('password', None)) | 
			
		
	
		
			
				
					|  |  |  |         mqtt_client.connect(config.get('host', '127.0.0.1'), config.get('port', 1883)) | 
			
		
	
		
			
				
					|  |  |  |         mqtt_client.loop_start() | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         self.client = mqtt_client | 
			
		
	
	
		
			
				
					|  |  | @ -182,8 +185,11 @@ class MqttOutputPlugin(OutputPluginFactory): | 
			
		
	
		
			
				
					|  |  |  |             raise ValueError('Data needs to be instance of StatusResponse') | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         data = response.__dict__() | 
			
		
	
		
			
				
					|  |  |  |         topic = f'{data.get("inverter_name", "hoymiles")}/{data.get("inverter_ser", None)}' | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         topic = params.get('topic', f'hoymiles/{data["inverter_ser"]}') | 
			
		
	
		
			
				
					|  |  |  |         # Global Head | 
			
		
	
		
			
				
					|  |  |  |         if data['time'] is not None: | 
			
		
	
		
			
				
					|  |  |  |            self.client.publish(f'{topic}/time', data['time'].strftime("%d.%m.%y - %H:%M:%S")) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         # AC Data | 
			
		
	
		
			
				
					|  |  |  |         phase_id = 0 | 
			
		
	
	
		
			
				
					|  |  | @ -191,16 +197,18 @@ class MqttOutputPlugin(OutputPluginFactory): | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter/{phase_id}/power', phase['power']) | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter/{phase_id}/voltage', phase['voltage']) | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter/{phase_id}/current', phase['current']) | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter/{phase_id}/Q_AC', phase['reactive_power']) | 
			
		
	
		
			
				
					|  |  |  |             phase_id = phase_id + 1 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         # DC Data | 
			
		
	
		
			
				
					|  |  |  |         string_id = 0 | 
			
		
	
		
			
				
					|  |  |  |         for string in data['strings']: | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter-dc/{string_id}/total', string['energy_total']/1000) | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter-dc/{string_id}/power', string['power']) | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter-dc/{string_id}/voltage', string['voltage']) | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter-dc/{string_id}/current', string['current']) | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter-dc/{string_id}/YieldDay', string['energy_daily']) | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/emeter-dc/{string_id}/YieldTotal', string['energy_total']/1000) | 
			
		
	
		
			
				
					|  |  |  |             string_id = string_id + 1 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         # Global | 
			
		
	
		
			
				
					|  |  |  |         if data['powerfactor'] is not None: | 
			
		
	
		
			
				
					|  |  |  |             self.client.publish(f'{topic}/pf', data['powerfactor']) | 
			
		
	
	
		
			
				
					|  |  | 
 |