|  | @@ -154,26 +154,59 @@ def processMeterData(data):
 | 
											
												
													
														|  |          write_energy_to_influxdb = False
 |  |          write_energy_to_influxdb = False
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  |          cName = meters_yaml[cNum].get('name', False)
 |  |          cName = meters_yaml[cNum].get('name', False)
 | 
											
												
													
														|  | -        statTopic = meters_yaml[cNum].get('statTopic', False)
 |  | 
 | 
											
												
													
														|  | -        unit = meters_yaml[cNum].get('unit', False)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        statTopic = meters_yaml[cNum].get('statTopic', None)
 | 
											
												
													
														|  | 
 |  | +        unit = meters_yaml[cNum].get('unit', None)
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  | -        momUnit = meters_yaml[cNum].get('momUnit', False)
 |  | 
 | 
											
												
													
														|  | -        momType = meters_yaml[cNum].get('momType', False)
 |  | 
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  | -        impPerUnit = meters_yaml[cNum].get('impPerUnit', False)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        conv_unit = meters_yaml[cNum].get('conv_unit', None)
 | 
											
												
													
														|  | 
 |  | +        conv_factor = meters_yaml[cNum].get('conv_factor', None)
 | 
											
												
													
														|  | 
 |  | +        conv_digits = meters_yaml[cNum].get('conv_digits', None)
 | 
											
												
													
														|  | 
 |  | +        if conv_digits is None: conv_digits = 2
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        cost_unit = meters_yaml[cNum].get('cost_unit', None)
 | 
											
												
													
														|  | 
 |  | +        cost_per_unit = meters_yaml[cNum].get('cost_per_unit', None)
 | 
											
												
													
														|  | 
 |  | +        cost_from_conv = meters_yaml[cNum].get('cost_from_conv', False)
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        momUnit = meters_yaml[cNum].get('momUnit', None)
 | 
											
												
													
														|  | 
 |  | +        momType = meters_yaml[cNum].get('momType', None)
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        momUnit_conv1 = meters_yaml[cNum].get('momUnit_conv1', None)
 | 
											
												
													
														|  | 
 |  | +        momType_conv1 = meters_yaml[cNum].get('momType_conv1', None)
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        momUnit_conv2 = meters_yaml[cNum].get('momUnit_conv2', None)
 | 
											
												
													
														|  | 
 |  | +        momType_conv2 = meters_yaml[cNum].get('momType_conv2', None)
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        impPerUnit = meters_yaml[cNum].get('impPerUnit', None)
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  |          if cName:
 |  |          if cName:
 | 
											
												
													
														|  |              cJson['name'] = cName
 |  |              cJson['name'] = cName
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  | -        momFactor = meters_yaml[cNum].get('momFactor', False)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        momFactor = meters_yaml[cNum].get('momFactor', None)
 | 
											
												
													
														|  |          if not momFactor:
 |  |          if not momFactor:
 | 
											
												
													
														|  |              momFactor = 1
 |  |              momFactor = 1
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  |          momDigits = meters_yaml[cNum].get('momDigits', None)
 |  |          momDigits = meters_yaml[cNum].get('momDigits', None)
 | 
											
												
													
														|  |          if momDigits == None:
 |  |          if momDigits == None:
 | 
											
												
													
														|  |              momDigits = 3
 |  |              momDigits = 3
 | 
											
												
													
														|  | 
 |  | +            
 | 
											
												
													
														|  | 
 |  | +        momFactor_conv1 = meters_yaml[cNum].get('momFactor_conv1', None)
 | 
											
												
													
														|  | 
 |  | +        if not momFactor_conv1:
 | 
											
												
													
														|  | 
 |  | +            momFactor_conv1 = 1
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  | -        digits = meters_yaml[cNum].get('digits', False)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        momDigits_conv1 = meters_yaml[cNum].get('momDigits_conv1', None)
 | 
											
												
													
														|  | 
 |  | +        if momDigits_conv1 == None:
 | 
											
												
													
														|  | 
 |  | +            momDigits_conv1 = 3
 | 
											
												
													
														|  | 
 |  | +            
 | 
											
												
													
														|  | 
 |  | +        momFactor_conv2 = meters_yaml[cNum].get('momFactor_conv2', None)
 | 
											
												
													
														|  | 
 |  | +        if not momFactor_conv2:
 | 
											
												
													
														|  | 
 |  | +            momFactor_conv2 = 1    
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        momDigits_conv2 = meters_yaml[cNum].get('momDigits_conv2', None)
 | 
											
												
													
														|  | 
 |  | +        if momDigits_conv2 == None:
 | 
											
												
													
														|  | 
 |  | +            momDigits_conv2 = 3
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        digits = meters_yaml[cNum].get('digits', None)
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  |          influxMinWriteInterval = meters_yaml[cNum].get('influxMinWriteInterval_energy', None)
 |  |          influxMinWriteInterval = meters_yaml[cNum].get('influxMinWriteInterval_energy', None)
 | 
											
												
													
														|  |          if influxMinWriteInterval == None: influxMinWriteInterval = 0
 |  |          if influxMinWriteInterval == None: influxMinWriteInterval = 0
 | 
											
										
											
												
													
														|  | @@ -211,23 +244,60 @@ def processMeterData(data):
 | 
											
												
													
														|  |                  momValue = 0.0
 |  |                  momValue = 0.0
 | 
											
												
													
														|  |              else:
 |  |              else:
 | 
											
												
													
														|  |                  momValue = (3600000 / dTime / impPerUnit) * momFactor
 |  |                  momValue = (3600000 / dTime / impPerUnit) * momFactor
 | 
											
												
													
														|  | 
 |  | +                
 | 
											
												
													
														|  | 
 |  | +            # conversions of momValue
 | 
											
												
													
														|  | 
 |  | +            momValue_conv1 = 0.0
 | 
											
												
													
														|  | 
 |  | +            momValue_conv2 = 0.0
 | 
											
												
													
														|  |              
 |  |              
 | 
											
												
													
														|  | 
 |  | +            if momType_conv1 is not None:
 | 
											
												
													
														|  | 
 |  | +                momValue_conv1 = momValue * momFactor_conv1
 | 
											
												
													
														|  | 
 |  | +                
 | 
											
												
													
														|  | 
 |  | +            if momType_conv2 is not None:
 | 
											
												
													
														|  | 
 |  | +                momValue_conv2 = momValue * momFactor_conv2
 | 
											
												
													
														|  | 
 |  | +            
 | 
											
												
													
														|  | 
 |  | +            # round value of momValue
 | 
											
												
													
														|  |              if momDigits > 0:
 |  |              if momDigits > 0:
 | 
											
												
													
														|  |                  momValue = round(momValue, momDigits)
 |  |                  momValue = round(momValue, momDigits)
 | 
											
												
													
														|  |              else:
 |  |              else:
 | 
											
												
													
														|  |                  momValue = round(momValue)
 |  |                  momValue = round(momValue)
 | 
											
												
													
														|  |                  
 |  |                  
 | 
											
												
													
														|  | -            cJson['momValue'] = momValue
 |  | 
 | 
											
												
													
														|  | 
 |  | +            if momDigits_conv1 > 0:
 | 
											
												
													
														|  | 
 |  | +                momValue_conv1 = round(momValue_conv1, momDigits_conv1)
 | 
											
												
													
														|  | 
 |  | +            else:
 | 
											
												
													
														|  | 
 |  | +                momValue_conv1 = round(momValue_conv1)
 | 
											
												
													
														|  | 
 |  | +                
 | 
											
												
													
														|  | 
 |  | +            if momDigits_conv2 > 0:
 | 
											
												
													
														|  | 
 |  | +                momValue_conv2 = round(momValue_conv2, momDigits_conv2)
 | 
											
												
													
														|  | 
 |  | +            else:
 | 
											
												
													
														|  | 
 |  | +                momValue_conv2 = round(momValue_conv2)
 | 
											
												
													
														|  | 
 |  | +                
 | 
											
												
													
														|  | 
 |  | +                
 | 
											
												
													
														|  | 
 |  | +            #cJson['momValue'] = momValue
 | 
											
												
													
														|  | 
 |  | +            #if momType:
 | 
											
												
													
														|  | 
 |  | +            #    cJson['momType'] = momType
 | 
											
												
													
														|  | 
 |  | +            #if momUnit:
 | 
											
												
													
														|  | 
 |  | +            #    cJson['momUnit'] = momUnit
 | 
											
												
													
														|  | 
 |  | +            
 | 
											
												
													
														|  |              if momType:
 |  |              if momType:
 | 
											
												
													
														|  | -                cJson['momType'] = momType
 |  | 
 | 
											
												
													
														|  | -            if momUnit:
 |  | 
 | 
											
												
													
														|  | -                cJson['momUnit'] = momUnit
 |  | 
 | 
											
												
													
														|  | 
 |  | +                cJson[momType] = momValue
 | 
											
												
													
														|  | 
 |  | +            
 | 
											
												
													
														|  | 
 |  | +            if momType_conv1:
 | 
											
												
													
														|  | 
 |  | +                cJson[momType_conv1] = momValue_conv1
 | 
											
												
													
														|  | 
 |  | +            
 | 
											
												
													
														|  | 
 |  | +            if momType_conv2:
 | 
											
												
													
														|  | 
 |  | +                cJson[momType_conv2] = momValue_conv2
 | 
											
												
													
														|  |              
 |  |              
 | 
											
												
													
														|  |              if statTopic:
 |  |              if statTopic:
 | 
											
												
													
														|  | -                if momType and momValue is not None:
 |  | 
 | 
											
												
													
														|  | 
 |  | +                if momType is not None:
 | 
											
												
													
														|  |                      if MQTTenabled: 
 |  |                      if MQTTenabled: 
 | 
											
												
													
														|  | -                        subtop = momType
 |  | 
 | 
											
												
													
														|  | -                        mqttc.publish(statTopic + "/" + subtop, str(momValue), qos=0, retain=False)
 |  | 
 | 
											
												
													
														|  | 
 |  | +                        mqttc.publish(statTopic + "/" + momType, str(momValue), qos=0, retain=False)
 | 
											
												
													
														|  | 
 |  | +                        
 | 
											
												
													
														|  | 
 |  | +                        if momType_conv1 is not None:
 | 
											
												
													
														|  | 
 |  | +                            mqttc.publish(statTopic + "/" + momType_conv1, str(momValue_conv1), qos=0, retain=False)
 | 
											
												
													
														|  | 
 |  | +                        
 | 
											
												
													
														|  | 
 |  | +                        if momType_conv2 is not None:
 | 
											
												
													
														|  | 
 |  | +                            mqttc.publish(statTopic + "/" + momType_conv2, str(momValue_conv2), qos=0, retain=False)
 | 
											
												
													
														|  | 
 |  | +                        
 | 
											
												
													
														|  |              
 |  |              
 | 
											
												
													
														|  |          if statTopic:
 |  |          if statTopic:
 | 
											
												
													
														|  |              if cReading_formatted != None:
 |  |              if cReading_formatted != None:
 | 
											
										
											
												
													
														|  | @@ -236,7 +306,22 @@ def processMeterData(data):
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  |          data_energy[cNum][meters_yaml[cNum].get('influxFieldName_energy', 'energyTotal')] = round(float(cReading), digits)
 |  |          data_energy[cNum][meters_yaml[cNum].get('influxFieldName_energy', 'energyTotal')] = round(float(cReading), digits)
 | 
											
												
													
														|  | 
 |  | +        #if conv_unit is not None and conv_factor is not None and meters_yaml[cNum].get('influxFieldName_energy_conv', None) is not None::
 | 
											
												
													
														|  | 
 |  | +        #    data_energy[cNum][meters_yaml[cNum].get('influxFieldName_energy_conv', 'energyTotal_conv')] = round(momValue_conv1, digits)
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  |          data_momentary[cNum][meters_yaml[cNum].get('influxFieldName_mom', 'momentaryUsage')] = round(float(momValue), momDigits)
 |  |          data_momentary[cNum][meters_yaml[cNum].get('influxFieldName_mom', 'momentaryUsage')] = round(float(momValue), momDigits)
 | 
											
												
													
														|  | 
 |  | +        if momType_conv2 is not None and meters_yaml[cNum].get('influxFieldName_mom_conv1', None) is not None:
 | 
											
												
													
														|  | 
 |  | +            data_momentary[cNum][meters_yaml[cNum].get('influxFieldName_mom_conv1', 'momentaryUsage_conv1')] = round(momValue_conv1, momDigits_conv1)
 | 
											
												
													
														|  | 
 |  | +            
 | 
											
												
													
														|  | 
 |  | +        if momType_conv2 is not None and meters_yaml[cNum].get('influxFieldName_mom_conv2', None) is not None:
 | 
											
												
													
														|  | 
 |  | +            data_momentary[cNum][meters_yaml[cNum].get('influxFieldName_mom_conv2', 'momentaryUsage_conv2')] = round(momValue_conv2, momDigits_conv2)
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        print()
 | 
											
												
													
														|  | 
 |  | +        print("data_energy[cNum]")
 | 
											
												
													
														|  | 
 |  | +        print(data_energy[cNum])
 | 
											
												
													
														|  | 
 |  | +        print("data_momentary[cNum]")
 | 
											
												
													
														|  | 
 |  | +        print(data_momentary[cNum])
 | 
											
												
													
														|  | 
 |  | +        print()
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  |          # InfluxDB
 |  |          # InfluxDB
 | 
											
												
													
														|  |          t_utc = datetime.datetime.utcnow()
 |  |          t_utc = datetime.datetime.utcnow()
 | 
											
										
											
												
													
														|  | @@ -426,14 +511,37 @@ def processMeterData(data):
 | 
											
												
													
														|  |                  print( "<p>Error in file log: %s</p>" % e )
 |  |                  print( "<p>Error in file log: %s</p>" % e )
 | 
											
												
													
														|  |              
 |  |              
 | 
											
												
													
														|  |              if energy_today_total is not None:
 |  |              if energy_today_total is not None:
 | 
											
												
													
														|  | -                cJson['Today'] = round(energy_today_total, digits)
 |  | 
 | 
											
												
													
														|  | 
 |  | +                cJson['Today__' + unit] = round(energy_today_total, digits)
 | 
											
												
													
														|  | 
 |  | +                
 | 
											
												
													
														|  |                  if MQTTenabled: 
 |  |                  if MQTTenabled: 
 | 
											
												
													
														|  | -                    mqttc.publish(statTopic + "/today", str(round(energy_today_total, digits)), qos=0, retain=False)
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    mqttc.publish(statTopic + "/today__" + unit, str(round(energy_today_total, digits)), qos=0, retain=False)
 | 
											
												
													
														|  | 
 |  | +                    if conv_unit and conv_factor is not None:
 | 
											
												
													
														|  | 
 |  | +                        conv_value = energy_today_total * conv_factor
 | 
											
												
													
														|  | 
 |  | +                        mqttc.publish(statTopic + "/today__" + conv_unit, str(round(conv_value, conv_digits)), qos=0, retain=False)
 | 
											
												
													
														|  | 
 |  | +                        cJson['Today__' + conv_unit] = round(conv_value, conv_digits)
 | 
											
												
													
														|  | 
 |  | +                        if cost_unit and cost_per_unit is not None:
 | 
											
												
													
														|  | 
 |  | +                            if cost_from_conv:
 | 
											
												
													
														|  | 
 |  | +                                cost_value = round(conv_value * cost_per_unit, 2)
 | 
											
												
													
														|  | 
 |  | +                            else:
 | 
											
												
													
														|  | 
 |  | +                                cost_value = round(energy_today_total * cost_per_unit, 2)                                
 | 
											
												
													
														|  | 
 |  | +                            mqttc.publish(statTopic + "/cost_today__" + cost_unit, str(cost_value), qos=0, retain=False)
 | 
											
												
													
														|  | 
 |  | +                            cJson['cost_today__' + cost_unit] = round(cost_value, 2)
 | 
											
												
													
														|  |                  
 |  |                  
 | 
											
												
													
														|  |              if energy_yesterday_total is not None:
 |  |              if energy_yesterday_total is not None:
 | 
											
												
													
														|  | -                cJson['Yesterday'] = round(energy_yesterday_total, digits)
 |  | 
 | 
											
												
													
														|  | 
 |  | +                cJson['Yesterday__' + unit] = round(energy_yesterday_total, digits)
 | 
											
												
													
														|  |                  if MQTTenabled: 
 |  |                  if MQTTenabled: 
 | 
											
												
													
														|  | -                    mqttc.publish(statTopic + "/yesterday", str(round(energy_yesterday_total, digits)), qos=0, retain=False)
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    mqttc.publish(statTopic + "/yesterday__" + unit, str(round(energy_yesterday_total, digits)), qos=0, retain=False)
 | 
											
												
													
														|  | 
 |  | +                    if conv_unit and conv_factor is not None:
 | 
											
												
													
														|  | 
 |  | +                        conv_value = energy_yesterday_total * conv_factor
 | 
											
												
													
														|  | 
 |  | +                        mqttc.publish(statTopic + "/yesterday__" + conv_unit, str(round(conv_value, conv_digits)), qos=0, retain=False)
 | 
											
												
													
														|  | 
 |  | +                        cJson['Yesterday__' + conv_unit] = round(conv_value, conv_digits)
 | 
											
												
													
														|  | 
 |  | +                        if cost_unit and cost_per_unit is not None:
 | 
											
												
													
														|  | 
 |  | +                            if cost_from_conv:
 | 
											
												
													
														|  | 
 |  | +                                cost_value = round(conv_value * cost_per_unit, 2)
 | 
											
												
													
														|  | 
 |  | +                            else:
 | 
											
												
													
														|  | 
 |  | +                                cost_value = round(energy_yesterday_total * cost_per_unit, 2)                                
 | 
											
												
													
														|  | 
 |  | +                            mqttc.publish(statTopic + "/cost_yesterday__" + cost_unit, str(cost_value), qos=0, retain=False)
 | 
											
												
													
														|  | 
 |  | +                            cJson['cost_yesterday__' + cost_unit] = round(cost_value, 2)
 | 
											
												
													
														|  |          # END file log 
 |  |          # END file log 
 | 
											
												
													
														|  |          
 |  |          
 | 
											
												
													
														|  |          if verbose:
 |  |          if verbose:
 |