@@ -90,7 +90,11 @@ def __init__(self, name, device="/dev/ttyUSB0", device_vid=False, device_pid=Fal
9090 else :
9191 print ("no reply" )
9292
93+ self ._log .info ("set" )
94+ self ._log .info (self .ser )
95+
9396 except ModuleNotFoundError as err :
97+ self ._log .error ("================================" );
9498 self ._log .error (err )
9599 self .ser = False
96100
@@ -133,6 +137,7 @@ def connect(self):
133137
134138 # if device is still False, log error and return False
135139 if not device :
140+ self ._log .error ("================================" );
136141 self ._log .error ("Could not find MBUS device" )
137142 self .ser = False
138143 return False
@@ -141,6 +146,7 @@ def connect(self):
141146 self ._log .debug ("Connecting to MBUS serial: " + device + " " + str (self .baud ))
142147 self .ser = serial .Serial (device , self .baud , 8 , 'E' , 1 , 0.5 )
143148 except Exception :
149+ self ._log .error ("================================" );
144150 self ._log .error ("Could not connect to MBUS serial" )
145151 self .ser = False
146152
@@ -163,6 +169,7 @@ def mbus_serial_write(self,data):
163169 try :
164170 self .ser .write (data )
165171 except Exception :
172+ self ._log .error ("================================" );
166173 self .ser = False
167174 self ._log .error ("Could not write to MBUS serial port" )
168175
@@ -230,6 +237,7 @@ def set_page(self, address, page):
230237 else :
231238 time .sleep (0.2 )
232239 except Exception :
240+ self ._log .error ("================================" );
233241 self .ser = False
234242 self ._log .error ("set_page could not read from serial port" )
235243
@@ -259,7 +267,7 @@ def decodeInt(self,bytes):
259267 return struct .unpack ("i" , bytearray (bytes ))[0 ]
260268 return False
261269
262- def parse_frame (self ,data ,records ):
270+ def parse_frame (self ,meter , data ,records ):
263271 data_types = ['null' ,'int' ,'int' ,'int' ,'int' ,'float' ,'int' ,'int' ,'null' ,'bcd' ,'bcd' ,'bcd' ,'bcd' ,'var' ,'bcd' ,'null' ]
264272 data_lengths = [0 ,1 ,2 ,3 ,4 ,4 ,6 ,8 ,0 ,1 ,2 ,3 ,4 ,6 ,6 ,0 ]
265273 vif = {
@@ -473,7 +481,8 @@ def parse_frame(self,data,records):
473481
474482 return result
475483
476- def parse_frame_meterbus_lib (self ,data ,records ):
484+ def parse_frame_meterbus_lib (self ,meter , data ,records ):
485+ self ._log .debug ("parse_frame_meterbus_lib" );
477486 telegram = self .meterbus .load (data )
478487 meterbus_obj = json .loads (telegram .to_JSON ())
479488
@@ -491,31 +500,31 @@ def parse_frame_meterbus_lib(self,data,records):
491500 idx = idx + 1
492501 return result
493502
494- def request_data (self , address , records ):
503+ def request_data (self , meter , address , records ):
495504 for i in range (0 ,2 ):
496505 if self .use_meterbus_lib :
497506 self .meterbus .send_request_frame (self .ser , address )
498507 else :
499508 self .mbus_short_frame (address , 0x5b )
500509 # time.sleep(1.0)
501- result = self .read_data_frame (records )
510+ result = self .read_data_frame (meter , records )
502511 if result != None :
503512 return result
504513 else :
505514 time .sleep (0.2 )
506515
507- def request_data_sdm120 (self , address , records ):
516+ def request_data_sdm120 (self , meter , address , records ):
508517 for i in range (0 ,2 ):
509518 self .mbus_request_sdm120 (address )
510519 # time.sleep(1.0)
511- result = self .read_data_frame (records )
520+ result = self .read_data_frame (meter , records )
512521 if result != None :
513522 return result
514523 else :
515524 time .sleep (0.2 )
516525
517526
518- def read_data_frame (self ,records ):
527+ def read_data_frame (self ,meter , records ):
519528 data = []
520529 bid = 0
521530 bid_end = 255
@@ -567,13 +576,14 @@ def read_data_frame(self,records):
567576
568577 if valid : # Parse frame if still valid
569578 if self .use_meterbus_lib :
570- return self .parse_frame_meterbus_lib (data ,records )
579+ return self .parse_frame_meterbus_lib (meter , data ,records )
571580 else :
572- return self .parse_frame (data ,records )
581+ return self .parse_frame (meter , data ,records )
573582
574583 bid += 1
575584 time .sleep (0.1 )
576585 except Exception :
586+ self ._log .error ("================================" );
577587 self .ser = False
578588 self ._log .error ("read_data_frame could not read from serial port" )
579589 # If we are here data response is corrupt
@@ -585,15 +595,33 @@ def read_data_frame(self,records):
585595 if self .invalid_count >= 10 :
586596 # Reset invalid count
587597 self .invalid_count = 0
598+ self ._log .error ("================================" );
588599 self ._log .debug ("Invalid count = 10. Restarting MBUS serial connection on next read" )
589600 self .ser = False
590601
591- def add_result_to_cargo (self ,meter ,c ,result ):
602+ def add_result_to_cargo (self ,meter ,nodesName , c ,result ):
592603 if result != None :
593- self ._log .debug ("Decoded MBUS data: " + json .dumps (result ))
594-
604+ self ._log .info ("Decoded MBUS data: " + json .dumps (result ))
605+
606+ self ._log .error ("nodesName:" + "," .join (nodesName ));
607+ nodesNameHash = {}
608+ for nameTranslator in nodesName :
609+ self ._log .error ("nameTranslator:" + nameTranslator );
610+ nameTranslatorPart = nameTranslator .split (':' )
611+ nodesNameHash [nameTranslatorPart [0 ]]= nameTranslatorPart [1 ]
612+ self ._log .error (nameTranslatorPart [0 ] + " <> " + nameTranslatorPart [1 ]);
613+
614+
615+
595616 for key in result :
596- c .names .append (meter + "_" + key )
617+ self ._log .error ("key1:" + key );
618+ key1 = key
619+ if key in nodesNameHash :
620+ key1 = nodesNameHash [key ]
621+
622+ self ._log .error ("key2:" + key );
623+
624+ c .names .append (key1 + "_" + meter )
597625 c .realdata .append (result [key ][0 ])
598626 c .units .append (result [key ][1 ])
599627 else :
@@ -621,6 +649,7 @@ def read(self):
621649 else :
622650 self .connect ()
623651 except Exception :
652+ self ._log .error ("================================" );
624653 self ._log .error ("Could not connect to MBUS serial" )
625654 self .ser = False
626655
@@ -641,41 +670,42 @@ def read(self):
641670 c .nodeid = self ._settings ['nodename' ]
642671
643672 meterPrefix = self ._settings ['meters' ][meter ]['name' ];
673+ nodesName = self ._settings ['meters' ][meter ]['nodesName' ];
644674 res .append (c )
645675
646676 # Most mbus meters use standard request, page 0 or default, all records
647677 if meter_type == "standard" :
648- result = self .request_data (address ,[])
649- self .add_result_to_cargo (meterPrefix ,c ,result )
678+ result = self .request_data (meter , address ,[])
679+ self .add_result_to_cargo (meterPrefix , nodesName , c ,result )
650680
651681 # Qalcosonic E3
652682 if meter_type == "qalcosonic_e3" :
653- result = self .request_data (address ,[4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ])
654- self .add_result_to_cargo (meterPrefix ,c ,result )
683+ result = self .request_data (meter , address ,[4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ])
684+ self .add_result_to_cargo (meterPrefix ,nodesName , c ,result )
655685
656686 # ------------------------------------------------------
657687 # Sontex Multical 531
658688 if meter_type == "sontex531" :
659689 # p1
660690 self .set_page (address , 1 )
661- result = self .request_data (address ,[4 ,5 ])
662- self .add_result_to_cargo (meterPrefix ,c ,result )
691+ result = self .request_data (meter , address ,[4 ,5 ])
692+ self .add_result_to_cargo (meterPrefix ,nodesName , c ,result )
663693 # p3
664694 self .set_page (address , 3 )
665- result = self .request_data (address ,[1 ,2 ,3 ,4 ])
666- self .add_result_to_cargo (meterPrefix ,c ,result )
695+ result = self .request_data (meter , address ,[1 ,2 ,3 ,4 ])
696+ self .add_result_to_cargo (meterPrefix ,nodesName , c ,result )
667697
668698 # SDM120 special request command
669699 elif meter_type == "sdm120" :
670700 # 1. Get energy data
671- result = self .request_data (address ,[1 ])
672- self .add_result_to_cargo (meterPrefix ,c ,result )
701+ result = self .request_data (meter , address ,[1 ])
702+ self .add_result_to_cargo (meterPrefix ,nodesName , c ,result )
673703 # 2. Get instantaneous data
674- result = self .request_data_sdm120 (address ,[1 ,7 ,11 ,23 ])
675- self .add_result_to_cargo (meterPrefix ,c ,result )
704+ result = self .request_data_sdm120 (meter , address ,[1 ,7 ,11 ,23 ])
705+ self .add_result_to_cargo (meterPrefix ,nodesName , c ,result )
676706 elif meter_type == "kamstrup403" :
677- result = self .request_data (address ,[1 ,4 ,7 ,8 ,9 ,10 ,11 ,12 ,14 ])
678- self .add_result_to_cargo (meterPrefix ,c ,result )
707+ result = self .request_data (meter , address ,[1 ,4 ,7 ,8 ,9 ,10 ,11 ,12 ,14 ])
708+ self .add_result_to_cargo (meterPrefix ,nodesName , c ,result )
679709 # ------------------------------------------------------
680710
681711 return res
@@ -725,14 +755,17 @@ def set(self, **kwargs):
725755 address = int (setting [meter ]['address' ])
726756 if 'name' in setting [meter ]:
727757 name = setting [meter ]['name' ]
758+ if 'nodesName' in setting [meter ]:
759+ nodesName = setting [meter ]['nodesName' ]
728760 # type e.g sdm
729761 if 'type' in setting [meter ]:
730762 meter_type = str (setting [meter ]['type' ])
731763 #assign
732764 self ._settings ['meters' ][meter ] = {
733765 'address' :address ,
734766 'type' :meter_type ,
735- 'name' :name
767+ 'name' :name ,
768+ 'nodesName' :nodesName
736769 }
737770 continue
738771 else :
0 commit comments