Advertisement
Guest User

Untitled

a guest
Dec 8th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.96 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import re, serial, sys
  3. from influxdb import InfluxDBClient
  4.  
  5.  
  6. """ This config part could be with some configfiles as well... """
  7. hostname = "frop.xentower.nl"
  8. port = 8086
  9. username = "frop"
  10. password = "frop"
  11. database = "energy"
  12.  
  13. huis = "karveel"
  14.  
  15. commport = "/dev/ttyUSB0"
  16.  
  17. metermap = {
  18.     "1-0:1.8.1": "rx-low",
  19.     "1-0:1.8.2": "rx-high",
  20.     "1-0:2.8.1": "tx-low",
  21.     "1-0:2.8.2": "tx-high",
  22.     "1-0:1.7.0": "rx-current",
  23.     "1-0:2.7.0": "tx-current",
  24.     "0-1:24.2.1": "gas"
  25. }
  26.  
  27. gas = 0     # Used to check if there are differences
  28.  
  29. def replace(metermap, src):
  30.     word = src.group(1)
  31.     try:
  32.         dest = metermap[word]
  33.         return dest
  34.     except KeyError:
  35.         return src
  36.  
  37.  
  38.  
  39. #Set COM port config
  40. import serial
  41. ser = serial.Serial()
  42. ser.baudrate = 115200
  43. ser.bytesize=serial.EIGHTBITS
  44. ser.parity=serial.PARITY_NONE
  45. ser.stopbits=serial.STOPBITS_ONE
  46. ser.xonxoff=0
  47. ser.rtscts=0
  48. ser.timeout=20
  49. ser.port=commport
  50.  
  51. #Open COM port
  52. try:
  53.     ser.open()
  54. except:
  55.     sys.exit ("Error reading %s. Program exited."  % ser.name)
  56.  
  57.  
  58. client = InfluxDBClient(hostname, port, username, password, database)
  59.  
  60. while 1:
  61.     print "------------------------------------------------------------"
  62.     # try to read one line
  63.     try:
  64.         p1_raw = ser.readline()
  65.     except:
  66.         sys.exit ("Could not read %s. Program exited." % ser.name )
  67.  
  68.     # normalize it
  69.     p1_str=str(p1_raw)
  70.     p1_line=p1_str.strip()
  71.  
  72.     print "received: %s" % p1_line
  73.     p = re.compile("^([01-]+\:[0-9\.]+)\((.*)\)$")
  74.     m = p.match(p1_line)
  75.  
  76.     try:
  77.         meter = m.group(1)
  78.         print "received meter: %s" % meter
  79.     except AttributeError:
  80.         print "received line could not be parsed"
  81.         continue
  82.  
  83.     if meter not in metermap:
  84.         print "received meter not in map"
  85.         continue
  86.  
  87.     #meterr = replace(metermap,meter)
  88.     #print meterr
  89.  
  90.     rawvalue = m.group(2)
  91.     value = 0
  92.  
  93.     if (meter == "1-0:1.8.1" or
  94.         meter == "1-0:1.8.2" or
  95.         meter == "1-0:2.8.1" or
  96.         meter == "1-0:2.8.2"):
  97.         value = int(float(rawvalue[0:10])*1000)
  98.  
  99.     if (meter == "1-0:1.7.0" or
  100.         meter == "1-0:2.7.0"):
  101.         value = int(float(rawvalue[0:6])*1000)
  102.  
  103.     if (meter == "0-1:24.2.1"):
  104.         # 171126120000W)(00225.908*m3
  105.         value = int(float(rawvalue[15:24])*1000)
  106.         time = int(rawvalue[0:12])
  107.         if time == gas:
  108.             print "received gas timing (%i) is same as known value, skipping..." % time
  109.             continue
  110.         gas = time
  111.  
  112.     if value == 0:
  113.         print "received value (%i) is 0, continue" % value
  114.         continue
  115.  
  116.     json_body = [
  117.         {
  118.             "measurement": "waardes",
  119.             "tags": {
  120.                     "huis": huis,
  121.                     "meter": meter
  122.             },
  123.             "fields": {
  124.                 "value": value
  125.             }
  126.         }
  127.     ]
  128.     print json_body
  129.     client.write_points(json_body)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement