Browse Source

fix for float std ecu parameters

Krystian Lewandowski 9 years ago
parent
commit
5f301d49e3

BIN
data/data.pkl


+ 4 - 2
pimonitor/cu/PMCUCalculatedParameter.py

@@ -68,8 +68,10 @@ class PMCUCalculatedParameter(PMCUStandardParameter):
 
                 try:
                     value = eval(expr)
-                except (SyntaxError, ZeroDivisionError, NameError):
+                except (SyntaxError, NameError):
                     return "ERROR EVAL"
+                except (ZeroDivisionError):
+                    return "0.0"
 
                 format_tokens = value_format.split(".")
                 output_format = "%.0f"
@@ -92,4 +94,4 @@ class PMCUCalculatedParameter(PMCUStandardParameter):
     def to_string(self):
         return "id=" + self._id + "\nname=" + self._name + "\ndesc=" + self._desc +  "\ntarget=" + str(
             self._target) + "\nconversion:\n\t" + '%s' % ',\n\t'.join(x.to_string() for x in self._conversions) + \
-            '\ndependency: ' + '%s' % ', '.join(x for x in self._dependencies)
+            '\ndependency: ' + '%s' % ', '.join(x for x in self._dependencies)

+ 9 - 1
pimonitor/cu/PMCUStandardParameter.py

@@ -48,6 +48,7 @@ class PMCUStandardParameter(PMCUParameter):
             value_format = conversion.get_format()
 
             if unit == curr_unit:
+                #print 'unit=' + unit + ', expr=' + expr + ', format=' + value_format
                 # ignore 0xe8
                 index = 1
                 x = 0
@@ -62,18 +63,25 @@ class PMCUStandardParameter(PMCUParameter):
                     x = (value_bytes[0] << 16) | (value_bytes[1] << 8) | value_bytes[2]
                 elif address_length == 4:
                     x = (value_bytes[0] << 24) | (value_bytes[1] << 16) | (value_bytes[2] << 8) | value_bytes[3]
+                #print 'x=' + str(x)
+                x = float(x)
 
                 try:
                     value = eval(expr)
-                except (SyntaxError, ZeroDivisionError, NameError):
+                except (SyntaxError, NameError):
                     return "ERROR EVAL"
+                except (ZeroDivisionError):
+                    return "0.0"
 
+		#print 'value=' + str(value)
+		value = float(value)
                 format_tokens = value_format.split(".")
                 output_format = "%.0f"
                 if len(format_tokens) > 1:
                     output_format = "%." + str(len(format_tokens[1])) + "f"
 
                 value = output_format % value
+                #print 'result=' + value
 
         return value
 

+ 12 - 0
pimonitor/ui/PMSingleWindow.py

@@ -21,6 +21,8 @@ class PMSingleWindow(object):
         self._packets = None
 
         self._x_offset = 0
+        self._sum_value = 0.0
+        self._readings = 0
 
     def set_surface(self, surface):
         if surface is None:
@@ -53,14 +55,24 @@ class PMSingleWindow(object):
             else:
                 value = self._param.get_value(self._packets[0])
 
+        self._readings += 1
+	try:
+            self._sum_value += float(value)
+ 	except:
+	    self._sum_value = 0
+
         value_lbl_width = self._value_font.render(value, self._font_aa, self._fg_color).get_width()
         self._x_offset = (self._width - value_lbl_width) / 2
         value_lbl = self._value_font.render(value, self._font_aa, self._fg_color)
 
+        avg_value_lbl = self._unit_font.render(str(self._sum_value/self._readings), self._font_aa, self._fg_color_dim)
+
         self._surface.blit(self._title_lbl, (2, 2))
         self._surface.blit(value_lbl, (self._x_offset, 10 + self._title_font_size))
         self._surface.blit(self._unit_lbl, (self._end_x_offset, 10 + self._title_font_size + self._value_font_size))
 
+        self._surface.blit(avg_value_lbl, (200, 200))
+
     def set_packets(self, packets):
         self._packets = packets