Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import re, serial, sys
- from influxdb import InfluxDBClient
- """ This config part could be with some configfiles as well... """
- hostname = "frop.xentower.nl"
- port = 8086
- username = "frop"
- password = "frop"
- database = "energy"
- huis = "karveel"
- commport = "/dev/ttyUSB0"
- metermap = {
- "1-0:1.8.1": "rx-low",
- "1-0:1.8.2": "rx-high",
- "1-0:2.8.1": "tx-low",
- "1-0:2.8.2": "tx-high",
- "1-0:1.7.0": "rx-current",
- "1-0:2.7.0": "tx-current",
- "0-1:24.2.1": "gas"
- }
- gas = 0 # Used to check if there are differences
- def replace(metermap, src):
- word = src.group(1)
- try:
- dest = metermap[word]
- return dest
- except KeyError:
- return src
- #Set COM port config
- import serial
- ser = serial.Serial()
- ser.baudrate = 115200
- ser.bytesize=serial.EIGHTBITS
- ser.parity=serial.PARITY_NONE
- ser.stopbits=serial.STOPBITS_ONE
- ser.xonxoff=0
- ser.rtscts=0
- ser.timeout=20
- ser.port=commport
- #Open COM port
- try:
- ser.open()
- except:
- sys.exit ("Error reading %s. Program exited." % ser.name)
- client = InfluxDBClient(hostname, port, username, password, database)
- while 1:
- print "------------------------------------------------------------"
- # try to read one line
- try:
- p1_raw = ser.readline()
- except:
- sys.exit ("Could not read %s. Program exited." % ser.name )
- # normalize it
- p1_str=str(p1_raw)
- p1_line=p1_str.strip()
- print "received: %s" % p1_line
- p = re.compile("^([01-]+\:[0-9\.]+)\((.*)\)$")
- m = p.match(p1_line)
- try:
- meter = m.group(1)
- print "received meter: %s" % meter
- except AttributeError:
- print "received line could not be parsed"
- continue
- if meter not in metermap:
- print "received meter not in map"
- continue
- #meterr = replace(metermap,meter)
- #print meterr
- rawvalue = m.group(2)
- value = 0
- if (meter == "1-0:1.8.1" or
- meter == "1-0:1.8.2" or
- meter == "1-0:2.8.1" or
- meter == "1-0:2.8.2"):
- value = int(float(rawvalue[0:10])*1000)
- if (meter == "1-0:1.7.0" or
- meter == "1-0:2.7.0"):
- value = int(float(rawvalue[0:6])*1000)
- if (meter == "0-1:24.2.1"):
- # 171126120000W)(00225.908*m3
- value = int(float(rawvalue[15:24])*1000)
- time = int(rawvalue[0:12])
- if time == gas:
- print "received gas timing (%i) is same as known value, skipping..." % time
- continue
- gas = time
- if value == 0:
- print "received value (%i) is 0, continue" % value
- continue
- json_body = [
- {
- "measurement": "waardes",
- "tags": {
- "huis": huis,
- "meter": meter
- },
- "fields": {
- "value": value
- }
- }
- ]
- print json_body
- client.write_points(json_body)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement