#!/usr/bin/python
# -*- coding: latin-1 -*-

# Autor: Thomas Wagner 2019

import os, sys
import platform
import sqlite3 as lite
#import pandas as pd
import datetime
#import numpy as np
import time
import SMLParser
import serial #conda install pyserial     alt: pip install serial in windows
import FreeSolRaspi_Helper

# Softwareversion
Version= "0.95"

Plattform=FreeSolRaspi_Helper.Plattform_Konfiguration()

## Für Raspi die Grafikausgabe umleiten
#if os.environ.get('DISPLAY','') == '':
    #print('No display found. Using non-interactive Agg backend')
    #plt.switch_backend('Agg')


## Konfiguration von Displayparametern in der Konsole
#pd.set_option('display.max_rows', None)
#pd.set_option('display.max_columns', None)
#pd.set_option('display.width', 2000)
## SettingWithCopyWarning aus:
#pd.options.mode.chained_assignment = None  # default='warn'


if __name__ == '__main__':
    print("Hauptprogramm")
    print()
    
    PortNr=-1
    Portliste=[]
    for i in range(20):
        try:
            ser = serial.Serial(Plattform.portprefix+str(i)) #/dev/ttyUSB0') # open serial port
            print()
            print("Schreibversuch auf Port "+str(i)+":")
            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
            print()
            
            ser.write(b'Test'*50) # write a string
            ser.close() # close port
            PortNr=i
            Portliste.append(i)
        except:
            print("Portanfrage für Port "+str(i)+" verursacht Fehler")
            
    for PortNr in Portliste:
        print("Es wird Port "+str(PortNr)+" zum Lesen gewählt")
        Daten=b""
        try: 
            with serial.Serial(Plattform.portprefix+str(PortNr)) as ser:
                ser.timeout=3
                print("Ist Port "+str(PortNr)+" zum Lesen geöffnet? "+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
                print()
                
                Daten=ser.read(1000)
                ser.close()
        except:
            print("Fehler bei Lesen")
        
        print("Leseergebnis an der Schnittstelle")
        print(len(Daten))
        print(Daten)
        print()
        
        if len(Daten)>0:
            break
    
    try:
        with open(Plattform.Outputfile, "wb") as binary_file:
            # Write text or bytes to the file
            num_bytes_written = binary_file.write(Daten)  #"Write text by encoding\n".encode('utf8'))
            print("Geschrieben %d Bytes." % num_bytes_written)    
        
        print("Daten geschrieben.")
        print()
        SML1=SMLParser.SML(Plattform.Outputfile)
        SML1.Drucken()
        SML1.Zaehlerinfos_Alle()
        SML1.OBIS_Alle()
    except:
        print()
        print("Kein Datenfile gefunden")
        print()
    
    print("Programmende")
    print("(Programmausführung mit Ctrl-C anhalten, damit dieser Bildschirm schließt.")
    while True:
        pass
    