Guest User

Untitled

a guest
Dec 13th, 2016
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.38 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import sys
  3. import serial
  4. import requests
  5. import time
  6. import os
  7.  
  8. #Set COM/USB port config
  9. ser = serial.Serial()
  10. ser.baudrate = 115200
  11. ser.bytesize=serial.SEVENBITS
  12. ser.parity=serial.PARITY_EVEN
  13. ser.stopbits=serial.STOPBITS_ONE
  14. ser.xonxoff=0
  15. ser.rtscts=0
  16. ser.timeout=20
  17. ser.port="/dev/ttyUSB0"
  18.  
  19. loopteller = 0
  20. while loopteller == 0:
  21.     #Open COM/USB port
  22.     try:
  23.         ser.open()
  24.     except:
  25.         sys.exit ("Fout bij het openen van %s. Programma afgebroken."  % ser.name)      
  26.      
  27.     data=[] # Data is de array welke gevuld word met de data
  28.     p1_raw = "" # p1_raw is de ruwe data welke uit de smartmeter gehaald word
  29.     aantal_regels = 0 # Aantal_regels word gebruikt om te zien uit hoeveel regels de telegram bestaat
  30.  
  31.     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 !
  32.         p1_line=''
  33.         try:
  34.             p1_raw = ser.readline() # We vullen p1_raw met de regel van de smartmeter
  35.         except:
  36.             os.execv(sys.executable, ['python'] + sys.argv)
  37.             # sys.exit ("Seriele poort %s kan niet gelezen worden. Programma afgebroken." % ser.name )      
  38.         p1_str=str(p1_raw) # Maak van de gelezen data een string. Opzich overbodig wat dat is het al ;)
  39.         p1_line=p1_str.strip() # Haal de spaties ervoor en erna eraf
  40.         data.append(p1_line) # Stop de string in de data array
  41.         print p1_line # Zet de regel op het scherm
  42.         aantal_regels = aantal_regels + 1 # We hebben een regel verwerkt dus we gaan aan een nieuwe regel beginnen en dus de teller verhogen
  43.  
  44.     # Nu gaan we de data verwerken
  45.     teller = 0
  46.     totaal_verbruik = 0
  47.     uitleg=[None] * aantal_regels # Uitleg is de uitleg van de data. Het nummer van de array komt overeen met de data array
  48.  
  49.     while teller < aantal_regels:
  50.         #if '1-3:0.2.8' in data[teller]:
  51.         #   data[teller] = data[teller].replace('1-3:0.2.8(','').rstrip(')')
  52.         #   uitleg[teller] = 'Versie'
  53.         #   print uitleg[teller], data[teller]
  54.         #   teller = teller + 1
  55.         #if '0-0:1.0.0' in data[teller]:
  56.         #   data[teller] = data[teller].replace('0-0:1.0.0(','').rstrip('S)')
  57.         #   uitleg[teller] = 'Datum_Tijd'
  58.         #   print uitleg[teller], data[teller]
  59.         #   teller = teller + 1
  60.         #if '0-0:96.1.1' in data[teller]:
  61.         #   data[teller] = data[teller].replace('0-0:96.1.1(','').rstrip(')')
  62.         #   uitleg[teller] = 'Equipment_ID_Electriciteit'
  63.         #   print uitleg[teller], data[teller]
  64.         #   teller = teller + 1    
  65.         if '1-0:1.8.1' in data[teller]:
  66.             data[teller] = int(float(data[teller].replace('1-0:1.8.1(','').rstrip('*kWh)'))*1000)
  67.             uitleg[teller] = 'Meterstand_Tarief1'
  68.             print uitleg[teller], data[teller]
  69.             totaal_verbruik = totaal_verbruik + data[teller]
  70.             teller = teller + 1
  71.         if '1-0:1.8.2' in data[teller]:
  72.             data[teller] = int(float(data[teller].replace('1-0:1.8.2(','').rstrip('*kWh)'))*1000)
  73.             uitleg[teller] = 'Meterstand_Tarief2'
  74.             print uitleg[teller], data[teller]
  75.             totaal_verbruik = totaal_verbruik + data[teller]
  76.             teller = teller + 1    
  77.         #if '1-0:2.8.1' in data[teller]:
  78.         #   data[teller] = int(float(data[teller].replace('1-0:2.8.1(','').rstrip('*kWh)'))*1000)
  79.         #   uitleg[teller] = 'Geleverd_Aan_Leverancier_Tarief1'
  80.         #   print uitleg[teller], data[teller]
  81.         #   teller = teller + 1
  82.         #if '1-0:2.8.2' in data[teller]:
  83.         #   data[teller] = int(float(data[teller].replace('1-0:2.8.2(','').rstrip('*kWh)'))*1000)
  84.         #   uitleg[teller] = 'Geleverd_Aan_Leverancier_Tarief2'
  85.         #   print uitleg[teller], data[teller]
  86.         #   teller = teller + 1
  87.         if '0-0:96.14.0' in data[teller]:
  88.             data[teller] = int(data[teller].replace('0-0:96.14.0(','').rstrip(')'))
  89.             uitleg[teller] = 'Huidig_Tarief'
  90.             print uitleg[teller], data[teller]
  91.             teller = teller + 1
  92.         if '1-0:1.7.0' in data[teller]:
  93.             data[teller] = int(float(data[teller].replace('1-0:1.7.0(','').rstrip('*kW)'))*1000)
  94.             uitleg[teller] = 'Huidig_Verbruik'
  95.             print uitleg[teller], data[teller]
  96.             teller = teller + 1
  97.         #if '1-0:2.7.0' in data[teller]:
  98.         #   data[teller] = int(float(data[teller].replace('1-0:2.7.0(','').rstrip('*kW)'))*1000)
  99.         #   uitleg[teller] = 'Huidig_Opbrengst'
  100.         #   print uitleg[teller], data[teller]
  101.         #   teller = teller + 1
  102.         if '0-0:96.7.21' in data[teller]:
  103.             data[teller] = int(data[teller].replace('0-0:96.7.21(','').rstrip(')'))
  104.             uitleg[teller] = 'Totaal_Aantal_Stroomstoringen'
  105.             print uitleg[teller], data[teller]
  106.             teller = teller + 1    
  107.         if '0-0:96.7.9' in data[teller]:
  108.             data[teller] = data[teller].replace('0-0:96.7.9(','').rstrip(')')
  109.             uitleg[teller] = 'Totaal_Aantal_Lange_Stroomstoringen'
  110.             print uitleg[teller], data[teller]
  111.             teller = teller + 1
  112.         #if '1-0:99.97.0' in data[teller]:
  113.         #   data[teller] = "0"
  114.         #   uitleg[teller] = 'Log_Laatste_Lange_Stroomstoring'
  115.         #   print uitleg[teller], data[teller]
  116.         #   teller = teller + 1
  117.         #if '1-0:32.32.0' in data[teller]:
  118.         #   data[teller] = int(data[teller].replace('1-0:32.32.0(','').rstrip(')'))
  119.         #   uitleg[teller] = 'Aantal_Spannings_Dippen_Fase1'
  120.         #   print uitleg[teller], data[teller]
  121.         #   teller = teller + 1
  122.         #if '1-0:52.32.0' in data[teller]:
  123.         #   data[teller] = int(data[teller].replace('1-0:52.32.0(','').rstrip(')'))
  124.         #   uitleg[teller] = 'Aantal_Spannings_Dippen_Fase2'
  125.         #   print uitleg[teller], data[teller]
  126.         #   teller = teller + 1
  127.         #if '1-0:72.32.0' in data[teller]:
  128.         #   data[teller] = int(data[teller].replace('1-0:72.32.0(','').rstrip(')'))
  129.         #   uitleg[teller] = 'Aantal_Spannings_Dippen_Fase3'
  130.         #   print uitleg[teller], data[teller]
  131.         #   teller = teller + 1
  132.         #if '1-0:32.36.0' in data[teller]:
  133.         #   data[teller] = int(data[teller].replace('1-0:32.36.0(','').rstrip(')'))
  134.         #   uitleg[teller] = 'Aantal_Spannings_Pieken_Fase1'
  135.         #   print uitleg[teller], data[teller]
  136.         #   teller = teller + 1
  137.         #if '1-0:52.36.0' in data[teller]:
  138.         #   data[teller] = int(data[teller].replace('1-0:52.36.0(','').rstrip(')'))
  139.         #   uitleg[teller] = 'Aantal_Spannings_Pieken_Fase2'
  140.         #   print uitleg[teller], data[teller]
  141.         #   teller = teller + 1
  142.         #if '1-0:72.36.0' in data[teller]:
  143.         #   data[teller] = int(data[teller].replace('1-0:72.36.0(','').rstrip(')'))
  144.         #   uitleg[teller] = 'Aantal_Spannings_Pieken_Fase3'
  145.         #   print uitleg[teller], data[teller]
  146.         #   teller = teller + 1
  147.         #if '1-0:31.7.0' in data[teller]:
  148.         #   data[teller] = int(data[teller].replace('1-0:31.7.0(','').rstrip('*A)'))
  149.         #   uitleg[teller] = 'Huidig_Stroom_Verbruik_Fase1'
  150.         #   print uitleg[teller], data[teller]
  151.         #   teller = teller + 1
  152.         #if '1-0:51.7.0' in data[teller]:
  153.         #   data[teller] = int(data[teller].replace('1-0:51.7.0(','').rstrip('*A)'))
  154.         #   uitleg[teller] = 'Huidig_Stroom_Verbruik_Fase2'
  155.         #   print uitleg[teller], data[teller]
  156.         #   teller = teller + 1
  157.         #if '1-0:71.7.0' in data[teller]:
  158.         #   data[teller] = int(data[teller].replace('1-0:71.7.0(','').rstrip('*A)'))
  159.         #   uitleg[teller] = 'Huidig_Stroom_Verbruik_Fase3'
  160.         #   print uitleg[teller], data[teller]
  161.         #   teller = teller + 1
  162.         if '1-0:21.7.0' in data[teller]:
  163.             data[teller] = int(float(data[teller].replace('1-0:21.7.0(','').rstrip('*kW)'))*1000)
  164.             uitleg[teller] = 'Huidig_Verbruik_Fase1'
  165.             print uitleg[teller], data[teller]
  166.             teller = teller + 1
  167.         #if '1-0:22.7.0' in data[teller]:
  168.         #   data[teller] = int(float(data[teller].replace('1-0:22.7.0(','').rstrip('*kW)'))*1000)
  169.         #   uitleg[teller] = 'Huidige_Opbrengst_Fase1'
  170.         #   print uitleg[teller], data[teller]
  171.         #   teller = teller + 1
  172.         if '1-0:41.7.0' in data[teller]:
  173.             data[teller] = int(float(data[teller].replace('1-0:41.7.0(','').rstrip('*kW)'))*1000)
  174.             uitleg[teller] = 'Huidig_Verbruik_Fase2'
  175.             print uitleg[teller], data[teller]
  176.             teller = teller + 1
  177.         #if '1-0:42.7.0' in data[teller]:
  178.         #   data[teller] = int(float(data[teller].replace('1-0:42.7.0(','').rstrip('*kW)'))*1000)
  179.         #   uitleg[teller] = 'Huidige_Opbrengst_Fase2'
  180.         #   print uitleg[teller], data[teller]
  181.         #   teller = teller + 1
  182.         if '1-0:61.7.0' in data[teller]:
  183.             data[teller] = int(float(data[teller].replace('1-0:61.7.0(','').rstrip('*kW)'))*1000)
  184.             uitleg[teller] = 'Huidig_Verbruik_Fase3'
  185.             print uitleg[teller], data[teller]
  186.             teller = teller + 1
  187.         #if '1-0:62.7.0' in data[teller]:
  188.         #   data[teller] = int(float(data[teller].replace('1-0:62.7.0(','').rstrip('*kW)'))*1000)
  189.         #   uitleg[teller] = 'Huidige_Opbrengst_Fase3'
  190.         #   print uitleg[teller], data[teller]
  191.         #   teller = teller + 1
  192.         #if '0-1:24.1.0' in data[teller]:
  193.         #   data[teller] = int(data[teller].replace('0-1:24.1.0(','').rstrip(')'))
  194.         #   uitleg[teller] = 'Device_Type'
  195.         #   print uitleg[teller], data[teller]
  196.         #   teller = teller + 1
  197.         #if '0-1:96.1.0' in data[teller]:
  198.         #   data[teller] = data[teller].replace('0-1:96.1.0(','').rstrip(')')
  199.         #   uitleg[teller] = 'Equipment_ID_Gas'
  200.         #   print uitleg[teller], data[teller]
  201.         #   teller = teller + 1
  202.         if '0-1:24.2.1' in data[teller]:
  203.             if data[teller].find('3*m3') > -1:
  204.                 print "Skipping Energy"
  205.                 teller = teller + 1
  206.             else:
  207.                 temp = data[teller].replace('0-1:24.2.1(','').rstrip('*m3)')
  208.                 print temp
  209.                 data[teller] = float(temp[-9:])
  210.                 uitleg[teller] = 'Meterstand_Gas'
  211.                 print uitleg[teller], data[teller]
  212.                 teller = teller + 1
  213.         teller = teller + 1
  214.  
  215.     #Close port and show status
  216.     try:
  217.         ser.close()
  218.     except:
  219.         sys.exit ("Oops %s. Programma afgebroken." % ser.name )
  220.  
  221.     # Nu stoppen we het in de influxdb
  222.     teller = 2
  223.     epoch = int(time.time()*1000)
  224.     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.
  225.  
  226.     while teller < aantal_regels-1:
  227.         if str(uitleg[teller]).find('None') > -1:
  228.             print "Skipping this data"
  229.             teller = teller + 1
  230.         else:
  231.             execute = '"meterdata,mytag=smartmeter ' + str(uitleg[teller]) + '=' + str(data[teller]) + '"'
  232.             execute2 = url + "".join(execute)
  233.             print execute2
  234.             os.system(execute2)
  235.             teller = teller + 1
  236.  
  237.     execute = '"meterdata,mytag=smartmeter Meterstand_Totaal=' + str(totaal_verbruik) + '"'
  238.     execute2 = url + "".join(execute)
  239.     os.system(execute2)
Advertisement
Add Comment
Please, Sign In to add comment