# -*- coding: utf-8 -*-

import time
import sys
import os
from sqlite3 import dbapi2 as sqlite
import FreeSolRaspi_Helper
import serial #conda install pyserial     alt: pip install serial in windows
import SMLParser

Version= "0.95"

Plattform=FreeSolRaspi_Helper.Plattform_Konfiguration()

# Welcher USB-Port?
Konfiguration=FreeSolRaspi_Helper.Konfiguration_verwalten()
USB= Konfiguration.Konfiguration['USB_PortNr_SML']
if USB=="":
    print("Fehler: Kein USB Port definiert")
    sys.exit('Fehler: Kein USB Port definiert')

# USB-Port zum Lesen öffnen und Zeichenfolge lesen
try: 
    print(Plattform.portprefix+USB)
    with serial.Serial(Plattform.portprefix+USB) as ser:
        ser.timeout=3
        if ser.is_open:
            print("Port offen? "+str(ser.is_open))
            print("Portname:   "+ ser.name) # check which port was really used
            print("Baudrate:   "+str(ser.baudrate))
            print("Parity:     "+str(ser.parity)) #serial.PARITY_EVEN
            print("Timeout:    "+str(ser.timeout)) #None
            print("RTSCTS:     "+str(ser.rtscts)) #False            
            Daten=ser.read(1000)
#            ser.write(b'Test'*50) # write a string
            ser.close()
except:
    print("Fehler bei Lesen")

# SML-Struktur aus Daten erzeugen    
SML1=SMLParser.SML(Daten)

# Analysierte SML-Struktur ausgeben
SML1.Drucken()
SML1.Zaehlerinfos_Alle()
OBIS=SML1.OBIS_Alle()  

# Datenbank initialisieren
FreeSolRaspi_Helper.InitialisiereDB(Plattform.db_filename)

# Datenbank normal öffnen
con = sqlite.connect(Plattform.db_filename) #Erzeugt auch das DB-File, falls sie nicht existiert
cur = con.cursor()

if Konfiguration.Konfiguration['OBIS_Bezug']=="" or Konfiguration.Konfiguration['OBIS_Einspeisung']==0:
    sys.exit("OBIS-Bezugs- oder Einspeisekennzahl nicht festgelegt")
else:
    try:
        with con: 
            date = time.strftime("%Y-%m-%d %H:%M:%S")
            Bezug = float(OBIS[Konfiguration.Konfiguration['OBIS_Bezug']])
            Einspeis = float(OBIS[Konfiguration.Konfiguration['OBIS_Einspeisung']])
            print(date , str(Bezug), str(Einspeis))    
            cur.execute("INSERT INTO BezEinsp (date, Bezug, Einspeis) VALUES (?,?,?)", (date, Bezug, Einspeis))    
            con.commit()        
    except:
        sys.exit("Fehler beim Auswerten der OBIS-Bezugs- oder Einspeisekennzahl.")


