#!/usr/bin/env python3
#coding=utf-8

import serial
import time
import re
import sys, os
from parsovani import Parse



COM = "/dev/ttyS1" #config.COM
VERZE = 5
#APIKEY = 'af7b65a27c4d2ffffce9e7dfa7781451' #kancelar
#APIKEY = '160803bce09c3822d7505f89ede55323' #puda
APIKEY = '591de95f4624eb625f31da8021eff934' #kolarik

killThread = False
zapisuj = True

lastUr = -999
lastUr0 = -999
lastUr1 = -999
ur = -999
ur1 = -999
ur0 = -999

#kontrola vybehu
killVybeh = False
isSave = False
lastNap = -1




if __name__ == "__main__":

  print("SolarEco logging start...")



  try:
    sensor = serial.Serial(
      port=COM,
      baudrate=115200,
      parity=serial.PARITY_NONE,
      stopbits=serial.STOPBITS_ONE,
      bytesize=serial.EIGHTBITS,
      timeout = 5.0
    )



    print("mam senzor")



    time.sleep(1)

    citacEmon = 1
    citacMeze = 0
    poleRadku = []
    poleHlasek = []
    poleDat = []
    klapka = False

    while True:

      chybaIO = False
      try:
        f1a=sensor.readline()

        #print f1a
      except OSError:#BlockingIOError:
        print ("linka blokovana, cekam 10s")
        chybaIO = True
        time.sleep(10)


      if chybaIO:
        continue

      radek = str(f1a)
      try:
         if radek != "":
            dnes = str(time.strftime("%Y-%m-%d-%H-%M", time.localtime()))
            with open("/tmp/" + dnes + ".txt", "a") as myfile:
               myfile.write(str(time.strftime("%H:%M:%S", time.localtime())) + "\t" + str(f1a))
            abc = "mosquitto_pub -h emon.solareco.cz -p 1883 -m \"" + radek +  "\" -t \"regulator/jan\""
	    abc = str(abc).strip()
	    abc = abc.replace('\x00', '')
            os.system(abc)
      except:
	 chybaIO = True
      
      if chybaIO:
	 continue
      
      #####start
      rdk = Parse(radek)
      #print radek, rdk.radek, rdk.getV(), rdk.getA()
      if rdk.isEmpty():
        continue


      if rdk.isValues():

        #uloz posledni napeti kvuli vybehu
        lastNap = rdk.V
        killVybeh = True
        rdk.getMode()
        #print str(rdk.mod)

        meze = rdk.getMeze()
        if meze != False:
          if lastUr0 < 0:
            lastUr0 = rdk.ur0
          if lastUr1 < 0:
            lastUr1 = rdk.ur1
          if lastUr < 0:
            lastUr = rdk.ur

        url="https://emon.solareco.cz/input/post.json?node=1"
        f3="{" + "napeti2:{},proud:{},vykon:{},pwm:{},rezim:{},vyroba:{},teplota:{}".format(rdk.V, rdk.A, rdk.W, rdk.PWM, rdk.mod, rdk.WH, rdk.T) + "}&apikey="+ APIKEY

        if (meze != False and (rdk.ur0 != lastUr0 or rdk.ur1 != lastUr1 or rdk.ur != lastUr)):
          f31="{" + "napeti1:{},Ur0:{},Ur1:{}".format(rdk.ur, rdk.ur0, rdk.ur1) + "}&apikey=" + APIKEY
          os.system("curl -k -s --data \"node=1&data=" + f31 +"\" \"http://kemon.solareco.cz/input/post\"")
          #r = requests.post(url, data=f31)
          #print "meze", f31
          lastUr0 = rdk.ur0
          lastUr1 = rdk.ur1
          lastUr = rdk.ur


        elif VERZE > 2 and citacMeze > 20:
          f3="{" + "napeti1:{},napeti2:{},proud:{},vykon:{},pwm:{},rezim:{},Ur0:{},Ur1:{},vyroba:{}".format(rdk.ur, rdk.V, rdk.A, rdk.W, rdk.PWM, rdk.mod, rdk.ur0, rdk.ur1, rdk.WH) + "}&apikey=" + APIKEY
          citacMeze = 0

        if VERZE > 2:
          citacMeze += 1


        os.system("curl -k -s --data \"node=1&data=" + f3 +"\" \"http://kemon.solareco.cz/input/post\"")

  except KeyboardInterrupt:
    killThread = True
