
import os
import time
import base64

# prende ip e mac

os.system("ifconfig > /tmp/ip.txt")

try:

    fileip = open('/tmp/ip.txt')
    lineip = fileip.readline()
    riga=0

    while lineip:

         lung = len(lineip)-1

         #print(lineip)
         #eth0      Link encap:Ethernet  HWaddr 00:14:2D:81:1D:C6

         if lineip.find("HWaddr") > 0: 

             linea=lineip.split("HWaddr")

             mac=linea[1]

             mac=mac.strip()

             print(mac)

         #          inet addr:192.168.0.203  Bcast:192.168.0.255  Mask:255.255.255.0

         if lineip.find("inet addr:") > 0:

             pos=lineip.find("inet addr:")
             iptxt=lineip[pos+10:]

             ipmat=iptxt.split(" ")

             if ipmat[0] != "127.0.0.1":
               ip = ipmat[0]
               print(ip)

         riga=riga+1
         lineip = fileip.readline()

    fileip.close()

except:

     print("errore")
     ip = ""
     mac = ""


versione="1.16"

conteggio = 0

serverremoto = "95.110.236.161"
portaremoto = ""

if ip != "":

   ipnc = ip.split(".")
   portanc = "6"+str(ipnc[2])+str(ipnc[3])
   
   print("porta NC " + str(portanc))

   print("Classe IP "+str(ipnc[0])+"."+str(ipnc[1]) )

   if str(ipnc[0])+"."+str(ipnc[1]) == "10.141":


     serverremoto = "10.141."+str(ipnc[2])+".99"
     portaremoto = ":8800"


   try:
     os.system("rm -rf /tmp/server.txt")
   except:
     pass
 
   os.system("ping "+str(serverremoto)+" -c 1 | grep '64 bytes from' > /tmp/server.txt")

   
   time.sleep(5)

   resultping = ""

   try:
        fileser = open('/tmp/server.txt')

        lineser = fileser.readline()


        while lineser:

           lung = len(lineser)-1

           print("Risposta ping :"+str(lineser) )

           resultping = "1" 

           lineser = fileser.readline()


        fileser.close()


   except:
      resultping = ""
      pass


   if resultping == "1":

     os.system("wget --timeout=3 'http://"+str(serverremoto)+str(portaremoto)+"/minimetro/mini_riavvio.wav' -O /app/media/sdcard/mini_riavvio.wav")

     os.system("wget --timeout=3 'http://"+str(serverremoto)+str(portaremoto)+"/minimetro/mini_start.sh' -O /app/start.sh")

     os.system("wget --timeout=3 'http://"+str(serverremoto)+str(portaremoto)+"/minimetro/mini_thales.sh' -O /app/media/sdcard/mini_thales.sh")


while True:

  try:

    my_string=""

    time.sleep(60)

    os.system("cat /dev/fb0 > /tmp/screen.raw")

    os.system("tar -czvf /tmp/screen.tar.gz /tmp/screen.raw")


    #with open("/tmp/screen.raw", "rb") as img_file:
    #   my_string = base64.b64encode(img_file.read())
    #my_string = my_string.decode('utf-8')

    #print("RAW : "+str(my_string) )



    # prende ip e mac

    os.system("ifconfig > /tmp/ip.txt")

    try:

      fileip = open('/tmp/ip.txt')
      lineip = fileip.readline()
      riga=0

      while lineip:

         lung = len(lineip)-1

         #print(lineip)
         #eth0      Link encap:Ethernet  HWaddr 00:14:2D:81:1D:C6

         if lineip.find("HWaddr") > 0:

             linea=lineip.split("HWaddr")

             mac=linea[1]

             mac=mac.strip()

             print(mac)

         #          inet addr:192.168.0.203  Bcast:192.168.0.255  Mask:255.255.255.0

         if lineip.find("inet addr:") > 0:

             pos=lineip.find("inet addr:")
             iptxt=lineip[pos+10:]

             ipmat=iptxt.split(" ")

             if ipmat[0] != "127.0.0.1":
               ip = ipmat[0]
               print(ip)

         riga=riga+1
         lineip = fileip.readline()

      fileip.close()

    except:
 
       print("errore ip/mac")
       ip = ""
       mac = ""

    portanc = ""

    if ip != "":

      ipnc = ip.split(".")
      portanc = "6"+str(ipnc[2])+str(ipnc[3])

      print("porta NC " + str(portanc))


    #legge log barcode
 
    #2023-09-08 15:47:38.369 [BarcodeReader] I - Module::publishBarcodeDetected - {symbology (isRequired) = QR_CODE, decoding_duration () = 0, content (isRequired) = "aHR0cHM6Ly9sLmVhZC5tZS9hcGktMQ=="}
 
    #cat  /tmp/BarcodeReader.log | grep Module::publishBarcodeDetected
    os.system("cat  /tmp/BarcodeReader.log | grep Module::publishBarcodeDetected > /tmp/letture.txt")

    os.system("uptime > /tmp/uptime.txt")


    time.sleep(5)

    dataorabarcode=""
    barcode=""

    listabarcode=""
    ultimoup = ""

    try:

      fileup = open('/tmp/uptime.txt')
      lineup = fileup.readline()


      while lineup:

         print("Uptime "+str(lineup) )

         ultimoup=lineup

         upmat = ultimoup.split(",")

         ultimoup = upmat[0]

         #ultimoupmat = upmat = ultimoup.split(" ")

         #ultimoup = ultimoupmat[2]


         ultimoup = ultimoup.replace(" ","_")

         lineup = fileup.readline()

      fileup.close()

    except:

       print("errore dato uptime")
       ultimoup=""



    # ultimo dato letto

    try:

      filela = open('/tmp/lastdate.txt')
      linela = filela.readline()


      while linela:

         print("Ultima lettura "+str(linela) )

         ultimodato=linela 

         linela = filela.readline()

      filela.close()

    except:

       print("errore dato ultimodato")
       ultimodato="" 


    try:

        filebarcode = open('/tmp/letture.txt')

        linebarcode = filebarcode.readline()


        while linebarcode:

           lung = len(linebarcode)-1

           print("Riga :"+str(linebarcode) )

           barcodemat = linebarcode.split(" ")

           databarcode = barcodemat[0]
           orabarcode = barcodemat[1]  

           orabarcode = orabarcode[0:8]

           barcode = barcodemat[18]

           barcode = barcode[:-1]

           barcode = barcode.replace("}","") 
           barcode = barcode.replace('"','')

           barcode = barcode.replace(" ","")


           #print(databarcode+" "+orabarcode+ " "+barcode)


           dataorabarcode = str(databarcode)+"_"+str(orabarcode)

           metti=0

           if ultimodato != "":

               if dataorabarcode > ultimodato:
                  metti = 1

           else:
               metti = 1

           if metti == 1:     


             if listabarcode == "":
                listabarcode=str(dataorabarcode)+str(barcode)
             else:
                listabarcode=str(listabarcode)+"|"+str(dataorabarcode)+str(barcode) 

             out_file = open("/tmp/lastdate.txt","w")
             out_file.write(dataorabarcode)
             out_file.close()

 
           linebarcode = filebarcode.readline()

        filebarcode.close()


    except:
         pass

    


    if mac != "":

      print("LISTA: "+str(listabarcode))

      #sql="http://"+str(serverremoto)+str(portaremoto)+"/minimetro/remote/stato_thales.php?mac="+str(mac)+"&ip="+str(ip)+"&versione="+str(versione)+"&lastdataread="+str(dataorabarcode)+"&lastread="+str(barcode)

      #os.system("echo "+str(sql)+" > /tmp/sql.txt")

      print("Controlla Screenshot")

      if portanc != "":
        #invia file raw screen
        print("Invia Screenshot base64")
        #os.system("cat /tmp/screen.raw | nc "+str(serverremoto)+" "+str(portanc))
        os.system("nc "+str(serverremoto)+" "+str(portanc)+" < /tmp/screen.tar.gz")
        print("Fine invio Screenshot")


      print("Barcode "+str(barcode)+" dataora " + str(dataorabarcode))


      print("Aggiorna Stato") 
      os.system("wget 'http://"+str(serverremoto)+str(portaremoto)+"/minimetro/remote/stato_thales.php?mac="+str(mac)+"&ip="+str(ip)+"&versione="+str(versione)+"&lastdataread="+str(dataorabarcode)+"&lastread="+str(barcode)+"&lista="+str(listabarcode)+"&uptime="+str(ultimoup)+"' -O /tmp/result.txt")
      print("Fine Aggiorna")

      time.sleep(3)

      try:

        fileres = open('/tmp/result.txt')
 
        lineres = fileres.readline()


        while lineres:

           lung = len(lineres)-1

           print("Risposta :"+str(lineres) )

           if lineres[0:6] == "REBOOT":

             os.system("aplay /app/media/sdcard/mini_riavvio.wav")

             time.sleep(5)


             print("Riavvia.....")
             os.system("reboot")

           if lineres[0:6] == "AGGORA":
             print("Sinc Orario")

             os.system("ntpdate -q time.inrim.it")

           if lineres[0:6] == "BARCOD":
             print("Riavvia Barcode")


             os.system("echo 1 >/sys/class/gpio/gpio119/value")

             time.sleep(2)



             os.system("echo 0 >/sys/class/gpio/gpio119/value")

             time.sleep(10)


             os.system("killall -9 mosquitto")

             time.sleep(10)

             os.system("killall -9 BarcodeReader")

             os.system("/app/mosquitto/mosquitto -c /app/mosquitto/mosquitto.conf -d")



           lineres = fileres.readline()

        fileres.close()


      except:
         pass


      if conteggio == 30:

         print("Sinc Orario")

         os.system("ntpdate -q time.inrim.it")

         conteggio=0


      conteggio=conteggio+1


  except:
    pass


