 # coding=utf-8
import time
import datetime
import os
import json
import syslog

routineUmiditaRunning = False

def isOrarioSpegnimento(orarioAccensione, orarioSpegnimento, oraCorrente):
    try:
        StartH = int(orarioAccensione.split(":")[0])
        StartM = int(orarioAccensione.split(":")[1])

        EndH = int(orarioSpegnimento.split(":")[0])
        EndM = int(orarioSpegnimento.split(":")[1])

        CurrH = int(oraCorrente.split(":")[0])
        CurrM = int(oraCorrente.split(":")[1])

        if EndH < StartH or (EndH == StartH and EndM < StartM):
            if (CurrH > EndH or (CurrH == EndH and CurrM > EndM)) and (CurrH < StartH or (CurrH == StartH and CurrM < StartM)):
                syslog.syslog("Backlight OFF time")
                return True
            else:
                syslog.syslog("Backlight ON time")
                return False
        else:
            if (CurrH > EndH or (CurrH == EndH and CurrM > EndM)) or (CurrH < StartH or (CurrH == StartH and CurrM < StartM)):
                syslog.syslog("Backlight OFF time")
                return True
            else:
                syslog.syslog("Backlight ON time")
                return False
    except Exception as e:
        syslog.syslog(str(e))
    
    

def routineBacklight():
    global routineUmiditaRunning
    ok = False
    try:
        cmd = r"snmpget -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost .1.3.6.1.4.1.33762.4.1.8.5.0|awk '{print $4}'|tr -d " + r'"\""'
        sn = os.popen(cmd).read()
        syslog.syslog("sn: " + sn)
        orarioAccensione = '00:00'
        orarioSpegnimento = '00:00'
        
        try:
            with open('/home/snowtv/bin/timegds.json', 'r') as file:
                data = json.load(file)

            orarioAccensione = data['timeON']
            orarioSpegnimento = data['timeOFF']
        except Exception as e:
            syslog.syslog("Errore lettura file orari " + str(e))
        
        syslog.syslog("timeON " + str(orarioAccensione))
        syslog.syslog("timeOFF " + str(orarioSpegnimento))
        if orarioAccensione == "-1" and orarioSpegnimento == "-1":
            syslog.syslog("backlight routine disabled")
            return
        
        now = datetime.datetime.now()
        oraCorrente = str(now.hour) + ":" + str(now.minute)
        if isOrarioSpegnimento(orarioAccensione, orarioSpegnimento, oraCorrente) == True:
            valoreExpected = 0
        else:
            valoreExpected = 1
        ok = False
        syslog.syslog("expected value: " + str(valoreExpected))
        cmd = r"snmpget -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost .1.3.6.1.4.1.33762.4.1.7.1.0|awk '{print $4}'"
        valoreLetto = os.popen(cmd).read()
        syslog.syslog("read value: " + str(valoreLetto))
        while ok == False:
            if valoreExpected == 0:
                # spegnibacklight
                try:
                    os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.7.1.0 i 0 & > /dev/null")
                    syslog.syslog("Backlight OFF command sent")
                except Exception as e:
                    syslog.syslog("Error on backlight OFF command sent")
            else:
                # accendibacklight
                try:
                    os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.7.1.0 i 1 & > /dev/null")
                    syslog.syslog("Backlight ON command sent")
                except Exception as e:
                    syslog.syslog("Error on backlight ON command sent")
            valoreLetto = os.popen(cmd).read()
            syslog.syslog("Value read after comands: " + str(valoreLetto))
            if int(valoreLetto) == int(valoreExpected):
                #syslog.syslog("ok = True")
                ok = True
                if valoreExpected == 1 and routineUmiditaRunning == True:
                    routineUmiditaRunning = False
                    os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.24.8.0 i 0 & > /dev/null")
                    os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.9.51.0 i 1 & > /dev/null")
                    os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.9.32.0 i 25 & > /dev/null")
                    os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.9.33.0 i 255 & > /dev/null")
                    syslog.syslog("setting default parameters because it's backlight ON time")
    except Exception as e:
        syslog.syslog("Errore 2 " + str(e))

if __name__ == "__main__":
    routineUmiditaRunning
    syslog.syslog("START HUMIDITY AND BACKLIGHT CONTROL")
    i = 0
    while True:
        cmd = r"snmpget -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost .1.3.6.1.4.1.33762.4.1.8.5.0|awk '{print $4}'|tr -d " + r'"\""'
        sn = os.popen(cmd).read()
        try:
            cmd = r"snmpget -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost .1.3.6.1.4.1.33762.4.1.3.2.0|awk '{print $4}'"
            umiditaCorrente = int(os.popen(cmd).read())
            
            syslog.syslog("current humidity: " + str(umiditaCorrente))
            try:
                if umiditaCorrente >= 40:
                    cmd = r"snmpget -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost .1.3.6.1.4.1.33762.4.1.24.2.0|awk '{print $4}'"
                    panelStatus = int(os.popen(cmd).read())
                    syslog.syslog("panel status: " + str(panelStatus))
                    if panelStatus == 0:
                        routineUmiditaRunning = True 
                        syslog.syslog("start humidity routine")
                        os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.24.8.0 i 1 & > /dev/null")
                        os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.9.51.0 i 0 & > /dev/null")
                        os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.9.32.0 i 149 & > /dev/null")
                        os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.9.33.0 i 150 & > /dev/null")
                elif umiditaCorrente < 30:
                    syslog.syslog("humidity routine: " + str(routineUmiditaRunning))
                    if routineUmiditaRunning == True:
                        routineUmiditaRunning = False
                        syslog.syslog("stop humidity routine")
                        os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.24.8.0 i 0 & > /dev/null")
                        os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.9.51.0 i 1 & > /dev/null")
                        os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.9.32.0 i 25 & > /dev/null")
                        os.system("snmpset -v3 -a SHA -A gds12345 -l authNoPriv -u admin_gds localhost 1.3.6.1.4.1.33762.4.1.9.33.0 i 255 & > /dev/null")
            except Exception as e:
                syslog.syslog(str(e))
            
            #routine backlight
            routineBacklight()
            time.sleep(60)

        except Exception as e:
            umiditaCorrente = -1
            syslog.syslog("error on reading humidity value: " + str(e))
    
