Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import sys
- import serial
- import requests
- import time
- import os
- #Set COM/USB port config
- ser = serial.Serial()
- ser.baudrate = 115200
- ser.bytesize=serial.SEVENBITS
- ser.parity=serial.PARITY_EVEN
- ser.stopbits=serial.STOPBITS_ONE
- ser.xonxoff=0
- ser.rtscts=0
- ser.timeout=20
- ser.port="/dev/ttyUSB0"
- loopteller = 0
- while loopteller == 0:
- #Open COM/USB port
- try:
- ser.open()
- except:
- sys.exit ("Fout bij het openen van %s. Programma afgebroken." % ser.name)
- data=[] # Data is de array welke gevuld word met de data
- p1_raw = "" # p1_raw is de ruwe data welke uit de smartmeter gehaald word
- aantal_regels = 0 # Aantal_regels word gebruikt om te zien uit hoeveel regels de telegram bestaat
- while p1_raw[:1] <> "!": # Deze loop blijft doorlopen totdat de regel, welke uit de smartmeter komt, met een ! begint. De laatste regel van de telegram begint namelijk met een !
- p1_line=''
- try:
- p1_raw = ser.readline() # We vullen p1_raw met de regel van de smartmeter
- except:
- os.execv(sys.executable, ['python'] + sys.argv)
- # sys.exit ("Seriele poort %s kan niet gelezen worden. Programma afgebroken." % ser.name )
- p1_str=str(p1_raw) # Maak van de gelezen data een string. Opzich overbodig wat dat is het al ;)
- p1_line=p1_str.strip() # Haal de spaties ervoor en erna eraf
- data.append(p1_line) # Stop de string in de data array
- print p1_line # Zet de regel op het scherm
- aantal_regels = aantal_regels + 1 # We hebben een regel verwerkt dus we gaan aan een nieuwe regel beginnen en dus de teller verhogen
- # Nu gaan we de data verwerken
- teller = 0
- totaal_verbruik = 0
- uitleg=[None] * aantal_regels # Uitleg is de uitleg van de data. Het nummer van de array komt overeen met de data array
- while teller < aantal_regels:
- #if '1-3:0.2.8' in data[teller]:
- # data[teller] = data[teller].replace('1-3:0.2.8(','').rstrip(')')
- # uitleg[teller] = 'Versie'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '0-0:1.0.0' in data[teller]:
- # data[teller] = data[teller].replace('0-0:1.0.0(','').rstrip('S)')
- # uitleg[teller] = 'Datum_Tijd'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '0-0:96.1.1' in data[teller]:
- # data[teller] = data[teller].replace('0-0:96.1.1(','').rstrip(')')
- # uitleg[teller] = 'Equipment_ID_Electriciteit'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- if '1-0:1.8.1' in data[teller]:
- data[teller] = int(float(data[teller].replace('1-0:1.8.1(','').rstrip('*kWh)'))*1000)
- uitleg[teller] = 'Meterstand_Tarief1'
- print uitleg[teller], data[teller]
- totaal_verbruik = totaal_verbruik + data[teller]
- teller = teller + 1
- if '1-0:1.8.2' in data[teller]:
- data[teller] = int(float(data[teller].replace('1-0:1.8.2(','').rstrip('*kWh)'))*1000)
- uitleg[teller] = 'Meterstand_Tarief2'
- print uitleg[teller], data[teller]
- totaal_verbruik = totaal_verbruik + data[teller]
- teller = teller + 1
- #if '1-0:2.8.1' in data[teller]:
- # data[teller] = int(float(data[teller].replace('1-0:2.8.1(','').rstrip('*kWh)'))*1000)
- # uitleg[teller] = 'Geleverd_Aan_Leverancier_Tarief1'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:2.8.2' in data[teller]:
- # data[teller] = int(float(data[teller].replace('1-0:2.8.2(','').rstrip('*kWh)'))*1000)
- # uitleg[teller] = 'Geleverd_Aan_Leverancier_Tarief2'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- if '0-0:96.14.0' in data[teller]:
- data[teller] = int(data[teller].replace('0-0:96.14.0(','').rstrip(')'))
- uitleg[teller] = 'Huidig_Tarief'
- print uitleg[teller], data[teller]
- teller = teller + 1
- if '1-0:1.7.0' in data[teller]:
- data[teller] = int(float(data[teller].replace('1-0:1.7.0(','').rstrip('*kW)'))*1000)
- uitleg[teller] = 'Huidig_Verbruik'
- print uitleg[teller], data[teller]
- teller = teller + 1
- #if '1-0:2.7.0' in data[teller]:
- # data[teller] = int(float(data[teller].replace('1-0:2.7.0(','').rstrip('*kW)'))*1000)
- # uitleg[teller] = 'Huidig_Opbrengst'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- if '0-0:96.7.21' in data[teller]:
- data[teller] = int(data[teller].replace('0-0:96.7.21(','').rstrip(')'))
- uitleg[teller] = 'Totaal_Aantal_Stroomstoringen'
- print uitleg[teller], data[teller]
- teller = teller + 1
- if '0-0:96.7.9' in data[teller]:
- data[teller] = data[teller].replace('0-0:96.7.9(','').rstrip(')')
- uitleg[teller] = 'Totaal_Aantal_Lange_Stroomstoringen'
- print uitleg[teller], data[teller]
- teller = teller + 1
- #if '1-0:99.97.0' in data[teller]:
- # data[teller] = "0"
- # uitleg[teller] = 'Log_Laatste_Lange_Stroomstoring'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:32.32.0' in data[teller]:
- # data[teller] = int(data[teller].replace('1-0:32.32.0(','').rstrip(')'))
- # uitleg[teller] = 'Aantal_Spannings_Dippen_Fase1'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:52.32.0' in data[teller]:
- # data[teller] = int(data[teller].replace('1-0:52.32.0(','').rstrip(')'))
- # uitleg[teller] = 'Aantal_Spannings_Dippen_Fase2'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:72.32.0' in data[teller]:
- # data[teller] = int(data[teller].replace('1-0:72.32.0(','').rstrip(')'))
- # uitleg[teller] = 'Aantal_Spannings_Dippen_Fase3'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:32.36.0' in data[teller]:
- # data[teller] = int(data[teller].replace('1-0:32.36.0(','').rstrip(')'))
- # uitleg[teller] = 'Aantal_Spannings_Pieken_Fase1'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:52.36.0' in data[teller]:
- # data[teller] = int(data[teller].replace('1-0:52.36.0(','').rstrip(')'))
- # uitleg[teller] = 'Aantal_Spannings_Pieken_Fase2'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:72.36.0' in data[teller]:
- # data[teller] = int(data[teller].replace('1-0:72.36.0(','').rstrip(')'))
- # uitleg[teller] = 'Aantal_Spannings_Pieken_Fase3'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:31.7.0' in data[teller]:
- # data[teller] = int(data[teller].replace('1-0:31.7.0(','').rstrip('*A)'))
- # uitleg[teller] = 'Huidig_Stroom_Verbruik_Fase1'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:51.7.0' in data[teller]:
- # data[teller] = int(data[teller].replace('1-0:51.7.0(','').rstrip('*A)'))
- # uitleg[teller] = 'Huidig_Stroom_Verbruik_Fase2'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '1-0:71.7.0' in data[teller]:
- # data[teller] = int(data[teller].replace('1-0:71.7.0(','').rstrip('*A)'))
- # uitleg[teller] = 'Huidig_Stroom_Verbruik_Fase3'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- if '1-0:21.7.0' in data[teller]:
- data[teller] = int(float(data[teller].replace('1-0:21.7.0(','').rstrip('*kW)'))*1000)
- uitleg[teller] = 'Huidig_Verbruik_Fase1'
- print uitleg[teller], data[teller]
- teller = teller + 1
- #if '1-0:22.7.0' in data[teller]:
- # data[teller] = int(float(data[teller].replace('1-0:22.7.0(','').rstrip('*kW)'))*1000)
- # uitleg[teller] = 'Huidige_Opbrengst_Fase1'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- if '1-0:41.7.0' in data[teller]:
- data[teller] = int(float(data[teller].replace('1-0:41.7.0(','').rstrip('*kW)'))*1000)
- uitleg[teller] = 'Huidig_Verbruik_Fase2'
- print uitleg[teller], data[teller]
- teller = teller + 1
- #if '1-0:42.7.0' in data[teller]:
- # data[teller] = int(float(data[teller].replace('1-0:42.7.0(','').rstrip('*kW)'))*1000)
- # uitleg[teller] = 'Huidige_Opbrengst_Fase2'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- if '1-0:61.7.0' in data[teller]:
- data[teller] = int(float(data[teller].replace('1-0:61.7.0(','').rstrip('*kW)'))*1000)
- uitleg[teller] = 'Huidig_Verbruik_Fase3'
- print uitleg[teller], data[teller]
- teller = teller + 1
- #if '1-0:62.7.0' in data[teller]:
- # data[teller] = int(float(data[teller].replace('1-0:62.7.0(','').rstrip('*kW)'))*1000)
- # uitleg[teller] = 'Huidige_Opbrengst_Fase3'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '0-1:24.1.0' in data[teller]:
- # data[teller] = int(data[teller].replace('0-1:24.1.0(','').rstrip(')'))
- # uitleg[teller] = 'Device_Type'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- #if '0-1:96.1.0' in data[teller]:
- # data[teller] = data[teller].replace('0-1:96.1.0(','').rstrip(')')
- # uitleg[teller] = 'Equipment_ID_Gas'
- # print uitleg[teller], data[teller]
- # teller = teller + 1
- if '0-1:24.2.1' in data[teller]:
- if data[teller].find('3*m3') > -1:
- print "Skipping Energy"
- teller = teller + 1
- else:
- temp = data[teller].replace('0-1:24.2.1(','').rstrip('*m3)')
- print temp
- data[teller] = float(temp[-9:])
- uitleg[teller] = 'Meterstand_Gas'
- print uitleg[teller], data[teller]
- teller = teller + 1
- teller = teller + 1
- #Close port and show status
- try:
- ser.close()
- except:
- sys.exit ("Oops %s. Programma afgebroken." % ser.name )
- # Nu stoppen we het in de influxdb
- teller = 2
- epoch = int(time.time()*1000)
- url = 'curl -i -XPOST "http://192.168.2.139:8086/write?db=SmartMeter&precision=ms" --data-binary ' # We zetten met behulp van precision de timestamp op ms aangezien we deze ook op ms hebben.
- while teller < aantal_regels-1:
- if str(uitleg[teller]).find('None') > -1:
- print "Skipping this data"
- teller = teller + 1
- else:
- execute = '"meterdata,mytag=smartmeter ' + str(uitleg[teller]) + '=' + str(data[teller]) + '"'
- execute2 = url + "".join(execute)
- print execute2
- os.system(execute2)
- teller = teller + 1
- execute = '"meterdata,mytag=smartmeter Meterstand_Totaal=' + str(totaal_verbruik) + '"'
- execute2 = url + "".join(execute)
- os.system(execute2)
Advertisement
Add Comment
Please, Sign In to add comment