Advertisement
nicx321

EDISON DAM060 Logging

Dec 13th, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.14 KB | None | 0 0
  1. #!/usr/bin/python2.7
  2.  
  3. #
  4. #   Just a quick n' dirty script to read the Data from a VA18B multimeter.
  5. #   This DMM uses the low nibble of 14 bytes to send the lcd segments.
  6. #
  7. #       License: GPL v3. http://www.gnu.org/licenses/gpl-3.0-standalone.html
  8. #
  9.  
  10. import signal
  11. import sys
  12. import time
  13. import serial
  14. import serial.tools.list_ports
  15. import io
  16. import getopt
  17.  
  18. interval = '1.0'
  19.  
  20. ports = list(serial.tools.list_ports.comports())
  21. for p in ports:
  22.     print(p)
  23.  
  24. def showhelp():
  25.     print( '        va18b.py -i <time in secs> -d <device>')
  26.     print( '   Eg:  va18b.py -i 1.5 -d /dev/ttyUSB1')
  27.      
  28.      
  29. try:
  30.     opts, args = getopt.getopt(sys.argv[1:],"hd:i:",['help'])
  31. except getopt.GetoptError:
  32.     print( 'Error: -i, -d option require a value.')
  33.     showhelp()
  34.     sys.exit(1)
  35.          
  36. for opt, arg in opts:
  37.     if opt in ('-h','--help'):
  38.       showhelp()
  39.       sys.exit(1)
  40.     if opt == '-i':
  41.       interval = arg
  42.     if opt == '-d':
  43.       device = arg
  44.        
  45. try:
  46.     InpP = 'COM'+input("\nZadej cislo portu na otevreni: ")
  47.     port=serial.Serial(port=InpP,
  48.                baudrate=2400,
  49.                bytesize=serial.EIGHTBITS,
  50.                stopbits=serial.STOPBITS_ONE,
  51.                parity=serial.PARITY_NONE,
  52.                timeout=None)
  53.      
  54.     if not port.isOpen():
  55.         port.open()
  56.  
  57. except IOError as err:
  58.     print( '\nError:' + str(err) + '\n')
  59.     sys.exit(1)
  60.  
  61.  
  62. def signal_handler(signal, frame):
  63.     port.flushInput()
  64.     port.close()
  65.     sys.exit(0)
  66.          
  67. signal.signal(signal.SIGINT, signal_handler)
  68.  
  69. # Every packet is 14 bytes long.
  70. def get_bytes():
  71.     i=0
  72.     substr=''
  73.     while i<=13:
  74.         byte=port.read(1)
  75.         # converting every byte to binary format keeping the low nibble.
  76.         substr += '{0:08b}'.format(ord(byte))[4:]
  77.         i += 1
  78.     return substr
  79.  
  80. def TF(strn):
  81.     if(strn == '  0.L '):
  82.         return float(9999999999)
  83.     else:
  84.         return float(strn)
  85.  
  86. def stream_decode(substr):
  87.     ac       = int(substr[0:1])
  88.     dc       = int(substr[1:2])
  89.     auto     = int(substr[2:3])
  90.     pclink   = substr[3:4]
  91.     minus    = int(substr[4:5])
  92.      
  93.     digit1   = substr[5:12]
  94.     dot1     = int(substr[12:13])
  95.     digit2   = substr[13:20]
  96.     dot2     = int(substr[20:21])
  97.     digit3   = substr[21:28]
  98.     dot3     = int(substr[28:29])
  99.     digit4   = substr[29:36]
  100.      
  101.     micro    = int(substr[36:37])
  102.     nano     = int(substr[37:38])
  103.     kilo     = int(substr[38:39])
  104.     diotst   = int(substr[39:40])
  105.     mili     = int(substr[40:41])
  106.     percent  = int(substr[41:42])
  107.     mega     = int(substr[42:43])
  108.     contst   = int(substr[43:44])
  109.     cap      = int(substr[44:45])
  110.     ohm      = int(substr[45:46])
  111.     rel      = int(substr[46:47])
  112.     hold     = int(substr[47:48])
  113.     amp      = int(substr[48:49])
  114.     volts    = int(substr[49:50])
  115.     hertz    = int(substr[50:51])
  116.     lowbat   = int(substr[51:52])
  117.     minm     = int(substr[52:53])
  118.     fahrenh  = substr[53:54]
  119.     celcius  = int(substr[54:55])
  120.     maxm     = int(substr[55:56])
  121.      
  122.     digit = {"1111101":"0",
  123.              "0000101":"1",
  124.              "1011011":"2",
  125.              "0011111":"3",
  126.              "0100111":"4",
  127.              "0111110":"5",
  128.              "1111110":"6",
  129.              "0010101":"7",
  130.              "1111111":"8",
  131.              "0111111":"9",
  132.              "0000000":" ",
  133.              "1101000":"L"}
  134.      
  135.     value = ("-" if minus else " ") +\
  136.             digit.get(digit1,"") + ("." if dot1 else "") +\
  137.             digit.get(digit2,"") + ("." if dot2 else "") +\
  138.             digit.get(digit3,"") + ("." if dot3 else "") +\
  139.             digit.get(digit4,"")
  140.     value=str(TF(value))
  141.  
  142.     flags = "".join([ "   AC   |"   if ac     else "",
  143.                       "   DC   |"   if dc     else "",
  144.                       "  Auto  |"   if auto   else "",
  145.                       " Diodet |"   if diotst else "",
  146.                       " Contin |"   if contst else "",
  147.                       "  Capm  |"   if cap    else "",
  148.                       "  Rel   |"   if rel    else "",
  149.                       "  Hold  |"   if hold   else "",
  150.                       "  Minv  |"   if minm   else "",
  151.                       "  Maxv  |"   if maxm   else "",
  152.                       "  LowB  |"   if lowbat else ""])
  153.                      
  154.     units = ("n   "    if nano    else "") +\
  155.             ("u   "    if micro   else "") +\
  156.             ("k   "    if kilo    else "") +\
  157.             ("m   "    if mili    else "") +\
  158.             ("M   "    if mega    else "") +\
  159.             ("%   "    if percent else "") +\
  160.             ("Ohm "    if ohm     else "") +\
  161.             ("Amp "    if amp     else "") +\
  162.             ("Volt"    if volts   else "") +\
  163.             ("Hz  "    if hertz   else "") +\
  164.             ("C   "    if celcius else "")
  165.            
  166.     return [value + " |" + flags + " " + units, value]
  167.      
  168. sys.stderr.write('Press any key to make log\n')  
  169. sys.stderr.write('Press Ctrl+C to exit.\n\n')
  170.  
  171. while 1:
  172.     input()
  173.     port.flushInput()
  174.     sleep(0.2)
  175.     substr = get_bytes()
  176.     data = stream_decode(substr)
  177.     print(TF(data[1]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement