Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # TAREA EMILIO: Completar y probar las siguientes funciones
- # writeTocontrollerPRiego
- # writeTocontrollerPFert
- # writeTocontrollerConfigIny
- # readFromcontrollerPFert
- # readFromcontrollerConfigIny
- # readFromcontrollerPRiego
- # readDirty
- # funciones listas:
- # fetchJson
- # fetchLastUpdate
- # checkLogin
- # sendServer
- # sendSetFertilization
- # sendSetIrrigation
- # sendSetInyection
- # getModifiedDataToController
- import time
- import serial
- import json
- import requests
- import serial
- from ControllerState import ControllerState, FertilizationProgram, InyectionProgram, IrrigationProgram,AlarmConfig
- Test = serial.Serial("COM3",9600,timeout=0.2)
- BASE_PROGFERT = 1600 + 8192
- BASE_PROGRIEGO = 0 + 8192
- BASE_CONFIGINYECTORES = 1960 + 8192
- BASE_CONFIGALARMAS = 2237 + 8192
- BASE_CONFIGECPHPARAMS = 2224 + 8192
- TOTAL_FERT = 20
- TOTAL_INY = 8
- TOTAL_IRR = 50
- DIRTY_ADD = 4234
- URL_SERVER = 'http://emiliozelione2018.pythonanywhere.com/'
- USERNAME = "Prueba1"
- PASSWORD = "goldfinger"
- TIME_UPDATE = 2
- FILEPATH_SAVE = "controller.bin"
- write_irrProg = [False]*50
- write_fertProg = [False]*20
- write_ConfIny= [False]*8
- write_ConfigAl=False
- def fetchJson():
- response = requests.get(URL_SERVER + 'requests?all&username=' +
- USERNAME +'&password=' +PASSWORD)
- dataJson = response.json()
- return(dataJson)
- def fetchLastUpdate():
- response = requests.get(
- URL_SERVER +
- 'requests?updated_when&username=' +
- USERNAME +
- '&password=' +
- PASSWORD)
- dataJson = response.json()
- return(dataJson['update'])
- def checkLogin():
- response = requests.get(
- URL_SERVER +
- 'login?username=' +
- USERNAME +
- '&password=' +
- PASSWORD)
- dataJson = response.json()
- return(dataJson['ok'])
- def readDirty():
- if readRegisters(DIRTY_ADD,1)[0] == 186:
- print("Valor del DirtyFlag " +str(readRegisters(DIRTY_ADD,1)))
- return True
- else:
- return False
- def writeDirty():
- val=[0,0]
- writeRegisters(DIRTY_ADD,1,val)
- print("Escribi dirty ya :" +str(readDirty()))
- def readRegisters(Add,nRegs):
- byteList=[]
- AddH = int(Add/256)
- AddL = Add % 256
- Encabezado = [1, 3, AddH, AddL, 0, nRegs] # Son 1Registros
- # Tengo la lista en bytes, Aplicar los CRC
- byteList = Encabezado + byteList
- listaCRC = Calcular_CRC(byteList)
- byteList = byteList+listaCRC # Le agrega los bytes de CRC
- incoming = []
- Total_in = nRegs*2+5
- while(len(incoming)<(Total_in)):
- Test.write(byteList)
- Test.flush()
- incoming = Test.read(Total_in)
- BytesIn = BytesToInteger(incoming)
- print("Bytes Leidos "+str(BytesIn))
- CRC_in = BytesIn[(Total_in-2):Total_in]
- print("CRC_in " +str(CRC_in))
- del BytesIn[-2:] # borra los 2 ultimos elementos
- listaCRC = Calcular_CRC(BytesIn)
- print("Lista CRC " +str(listaCRC))
- if(listaCRC==CRC_in):
- del BytesIn[0:3] # borra del 0 al 3 no inclusive
- return BytesIn
- else:
- return None
- def readFromcontrollerConfigIny(ci):
- ConfigInyL =cs.allInyection[ci]
- ConfigIny = InyectionProgram()
- write_ConfIny[ci-1]= False
- print("Conf.Inyector " +str(ci))
- Add =BASE_CONFIGINYECTORES + (ci-1)*8
- byteList=[]
- byteList=readRegisters(Add,4)
- print(byteList)
- flow = byteList[1]*256 + byteList[2]
- timeOn = byteList[3]
- mlPulso = byteList[4]*256+byteList[5]
- simulator = byteList[6]
- maxDeviation = byteList[7]
- if(flow!= ConfigInyL.flow) or (timeOn!= ConfigInyL.time_on) or\
- (mlPulso!= ConfigInyL.litres_pulse) or (maxDeviation!= ConfigInyL.max_deviation) or\
- (simulator!= ConfigInyL.simulator):
- write_ConfIny[ci-1]= True
- print("Cambio la Config Inyector: " + str(ci))
- ConfigIny.program = ci
- ConfigIny.flow = flow
- ConfigIny.time_on = timeOn
- ConfigIny.litres_pulse = mlPulso
- ConfigIny.simulator = simulator
- ConfigIny.max_deviation = maxDeviation
- cs.allInyection[ci] = ConfigIny
- #-----------------------------------------------------------------------------------------------------------
- def readFromcontrollerPFert(pf):
- FertProgL =cs.allFertilization[pf]
- FertProg = FertilizationProgram()
- write_fertProg[pf-1] = False
- print("Prog Fertilizacion " +str(pf))
- Add = BASE_PROGFERT + (pf-1)*18
- byteList=[]
- byteList=readRegisters(Add,9)
- print(byteList)
- i = 0
- Val = [0]*10
- while(i < 8):
- Val[i] = (byteList[2*i]*256+byteList[2*i+1])
- i = i+1
- Val[8] = byteList[16]/10
- Val[9] = byteList[17]/10
- print("La lista Val " + str(Val))
- if(Val[0]!= FertProgL.values_1) or (Val[1]!= FertProgL.values_2) or (Val[2]!= FertProgL.values_3)or\
- (Val[3]!= FertProgL.values_4) or (Val[4]!= FertProgL.values_5) or (Val[5]!= FertProgL.values_6)or\
- (Val[6]!= FertProgL.values_7) or (Val[7]!= FertProgL.values_8) or (Val[8]!= FertProgL.ec)or\
- (Val[9]!= FertProgL.ph):
- write_fertProg[pf-1]= True
- print("Cambio el Prog de Fert:" + str(pf))
- FertProg.program = pf
- FertProg.values_1=Val[0]
- FertProg.values_2=Val[1]
- FertProg.values_3=Val[2]
- FertProg.values_4=Val[3]
- FertProg.values_5=Val[4]
- FertProg.values_6=Val[5]
- FertProg.values_7=Val[6]
- FertProg.values_8=Val[7]
- FertProg.ec=Val[8]
- FertProg.ph=Val[9]
- cs.allFertilization[pf] = FertProg
- #--------------------------------------------------------------------------------------------------------------------
- def readFromcontrollerPRiego(pr):
- ProgRiegoL = cs.allIrrigation[pr]
- write_irrProg[pr-1] = False
- ProgRiego = IrrigationProgram()
- print("Prog Riego " +str(pr))
- Add = BASE_PROGRIEGO + (pr-1)*32
- listaA = readRegisters(Add,8)
- print(listaA)
- ProgRiego.program = pr
- if(listaA[0]!=ProgRiegoL.water_total_1) or (listaA[1]!=ProgRiegoL.water_total_2)or\
- (listaA[2]!=ProgRiegoL.water_before_1) or (listaA[3]!=ProgRiegoL.water_before_2)or\
- (listaA[4]!=ProgRiegoL.water_after_1) or (listaA[5]!=ProgRiegoL.water_after_2)or\
- (listaA[6]!=ProgRiegoL.time_between_1) or (listaA[7]!=ProgRiegoL.time_between_2)or\
- (listaA[8]!=ProgRiegoL.time_start_1) or (listaA[9]!=ProgRiegoL.time_start_2)or\
- (listaA[10]!=ProgRiegoL.units) or (listaA[11]!=ProgRiegoL.fertilization_program)or\
- (listaA[12]!=ProgRiegoL.kicks) or (listaA[13]!=ProgRiegoL.condition_program):
- write_irrProg[pr-1] = True
- ProgRiego.water_total_1=listaA[0]
- ProgRiego.water_total_2=listaA[1]
- ProgRiego.water_before_1=listaA[2]
- ProgRiego.water_before_2=listaA[3]
- ProgRiego.water_after_1=listaA[4]
- ProgRiego.water_after_2=listaA[5]
- ProgRiego.time_between_1=listaA[6]
- ProgRiego.time_between_2=listaA[7]
- ProgRiego.time_start_1=listaA[8]
- ProgRiego.time_start_2=listaA[9]
- ProgRiego.units=listaA[10]
- ProgRiego.fertilization_program=listaA[11]
- ProgRiego.kicks=listaA[12]
- ProgRiego.condition_program=listaA[13]
- Add = BASE_PROGRIEGO + (pr-1)*32 +16
- listaB = readRegisters(Add,8)
- print(listaB)
- listaDias = listaA[14:16]+listaB[0:5]
- print("Lista_Dias " + str(listaDias))
- i=0
- for elem in listaDias:
- if i==0:
- cadDias = str(elem)
- else:
- cadDias = cadDias + ',' + str(elem)
- i=i+1
- del listaB[0:5] # borra del 0 al 5 no inclusive
- print("Los dias son " + cadDias)
- if cadDias != ProgRiegoL.days:
- write_irrProg[pr-1] = True
- ProgRiego.days = cadDias
- Cadvalves =DecoValves(listaB)
- if Cadvalves!=ProgRiegoL.valves:
- write_irrProg[pr-1] = True
- ProgRiego.valves= Cadvalves
- print("Valvulas " + str(ProgRiego.valves))
- print("Cambio el Prog :" + str(write_irrProg[pr-1]))
- cs.allIrrigation[pr] = ProgRiego
- #-----------------------------------------------------------------------------
- def readFromControllerConfigAlarms():
- ConfigAl = cs.alarm_config
- ConfigAlW = AlarmConfig()
- write_ConfigAl = False
- listaA = readRegisters(BASE_CONFIGECPHPARAMS,6)
- listaB = readRegisters(BASE_CONFIGALARMAS-1,7)
- listaC = readRegisters(BASE_CONFIGALARMAS+13,6)
- ConfigAlW.delay_secs_if_diff_ec_more_1=listaA[0]
- ConfigAlW.delay_secs_if_diff_ec_more_05=listaA[1]
- ConfigAlW.delay_secs_if_diff_ec_more_03=listaA[2]
- ConfigAlW.coefficient_correction_ec_more_1=listaA[3]
- ConfigAlW.coefficient_correction_ec_more_05=listaA[4]
- ConfigAlW.coefficient_correction_ec_more_03=listaA[5]
- ConfigAlW.delay_secs_if_diff_ph_more_1=listaA[6]
- ConfigAlW.delay_secs_if_diff_ph_more_05=listaA[7]
- ConfigAlW.delay_secs_if_diff_ph_more_03=listaA[8]
- ConfigAlW.coefficient_correction_ph_more_1=listaA[9]
- ConfigAlW.coefficient_correction_ph_more_05=listaA[10]
- ConfigAlW.coefficient_correction_ph_more_03=listaA[11]
- if(listaA[0]!= ConfigAl.delay_secs_if_diff_ec_more_1)or\
- (listaA[1]!=ConfigAl.delay_secs_if_diff_ec_more_05)or\
- (listaA[2]!=ConfigAl.delay_secs_if_diff_ec_more_03)or\
- (listaA[3]!=ConfigAl.coefficient_correction_ec_more_1)or\
- (listaA[4]!=ConfigAl.coefficient_correction_ec_more_05)or\
- (listaA[5]!=ConfigAl.coefficient_correction_ec_more_03)or\
- (listaA[6]!=ConfigAl.delay_secs_if_diff_ph_more_1)or\
- (listaA[7]!=ConfigAl.delay_secs_if_diff_ph_more_05)or\
- (listaA[8]!=ConfigAl.delay_secs_if_diff_ph_more_03)or\
- (listaA[9]!=ConfigAl.coefficient_correction_ph_more_1)or\
- (listaA[10]!=ConfigAl.coefficient_correction_ph_more_05)or\
- (listaA[11]!=ConfigAl.coefficient_correction_ph_more_03):
- write_ConfigAl = True
- if(listaB[0]!=ConfigAl.secs_first_ec_correction)or\
- (listaB[1]!=ConfigAl.deviation_warning_max_error_flow)or\
- (listaB[2]!=ConfigAl.delay_alarms_ec_ph_secs)or\
- (listaB[3]!=ConfigAl.delay_alarm_ph_dangerous_secs)or\
- (listaB[4]!=ConfigAl.delay_alarm_ec_dangerous_secs)or\
- (listaB[5]!=ConfigAl.delay_alarm_high_pressure_kg)or\
- (listaB[6]!=ConfigAl.delay_alarm_low_pressure_secs)or\
- (listaB[7]!=ConfigAl.delay_alarm_flow_secs)or\
- (listaB[8]!=ConfigAl.max_diff_warning_error_ec*10)or\
- (listaB[9]!=ConfigAl.max_diff_warning_error_ph*10)or\
- (listaB[10]!=ConfigAl.max_deviation_under_ph*10)or\
- (listaB[11]!=ConfigAl.max_deviation_over_ec*10)or\
- (listaB[12]!=ConfigAl.level_alarm_high_pressure_kg*10)or\
- (listaB[13]!=ConfigAl.level_alarm_low_pressure_kg*10):
- write_ConfigAl = True
- if(listaC[1]!=ConfigAl.function_alarm_fertilizer_discontinued)or\
- (listaC[2]!=ConfigAl.function_alarm_ec_ph_dangerous)or\
- (listaC[3]!=ConfigAl.function_alarm_high_pressure)or\
- (listaC[4]!=ConfigAl.function_alarm_dangerous_flow)or\
- (listaC[5]!=ConfigAl.function_alarm_no_fertilization)or\
- (listaC[6]!=ConfigAl.function_alarm_no_water)or\
- (listaC[7]!=ConfigAl.pulses_fertilizer_no_control)or\
- (listaC[8]!=ConfigAl.pulses_needs_fertilizer)or\
- (listaC[9]!=ConfigAl.max_seconds_between_water_pulses)or\
- (listaC[10]!=ConfigAl.over_dangerous_flow_percentage):
- write_ConfigAl = True
- if (write_ConfigAl==True):
- print("Cambio la Configuracion de Alarmas " + str(write_ConfigAl))
- cs.alarm_config = ConfigAlW
- def DecoValves(ListaValves):
- CantValv = 0
- CadValv = ""
- i = 0
- while(i < 9): # Registros
- j = 0
- while(j < 8): # bits
- peso = ListaValves[i] & (2**j)
- valv = (i*8)+j+1
- if(peso != 0):
- if(CantValv == 0):
- CadValv = str(valv)
- else:
- CadValv = CadValv + ',' + str(valv)
- CantValv = CantValv+1
- j = j+1
- i = i+1
- return(CadValv)
- #-----------------------------------------------------------------------------
- def writeRegisters(Add,nRegs,byteList):
- AddH = int(Add/256)
- AddL = Add % 256
- Encabezado = [1, 16, AddH, AddL, 0,nRegs,nRegs*2]
- byteList = Encabezado + byteList
- listaCRC = Calcular_CRC(byteList)
- byteList = byteList+listaCRC
- # Le agrega los bytes de CRC
- incoming = []
- Total_in = 8
- # Cuando Escribis Recibis 8 Bytes Fijos
- while(len(incoming)<(Total_in)):
- Test.write(byteList)
- Test.flush()
- incoming = Test.read(Total_in)
- BytesIn = BytesToInteger(incoming)
- print(BytesIn)
- CRC_in = BytesIn[(Total_in-2):Total_in]
- print(CRC_in)
- del BytesIn[-2:] # borra los 2 ultimos elementos
- listaCRC = Calcular_CRC(BytesIn)
- print(listaCRC)
- print(" incoming : "+str(len(incoming)))
- if(listaCRC==CRC_in):
- return True
- else:
- return False
- #--------------------------------------------------------------------------------
- def writeTocontrollerPFert(pf):
- FertProg = cs.allFertilization[pf]
- print("Programa de Ferti "+str(pf))
- newList = []
- byteList = []
- newList.append(int(FertProg.values_1))
- newList.append(int(FertProg.values_2))
- newList.append(int(FertProg.values_3))
- newList.append(int(FertProg.values_4))
- newList.append(int(FertProg.values_5))
- newList.append(int(FertProg.values_6))
- newList.append(int(FertProg.values_7))
- newList.append(int(FertProg.values_8))
- EC = FertProg.ec *10
- pH = FertProg.ph *10
- newList.append(int(EC)*256+int(pH))
- print("newlist "+str(newList))
- i = 0
- for elem in newList:
- byteList.append(int(newList[i]/256))
- byteList.append(newList[i] % 256)
- i = i+1
- Add = BASE_PROGFERT+(pf-1)*18
- print("Direccion " +str(Add))
- print("byteList :"+str(byteList))
- print(writeRegisters(Add,9,byteList))
- #------------------------------------------------------------------------------
- def writeTocontrollerConfigIny(iny):
- byteList = []
- Inyector = cs.allInyection[iny]
- CaudMaxVenturi = Inyector.flow
- TON = Inyector.time_on
- mlPulse = Inyector.litres_pulse
- MaxDesvio = Inyector.max_deviation
- Simular = Inyector.simulator
- print(Inyector)
- # ESTA MANDANDO EL NUMERO DE INYECTOR COMO FINCION PORQUE FALTA LA FUNCION EN EL PYTHON ANYWHERE
- byteList.insert(0,int(iny))
- byteList.insert(1,int(CaudMaxVenturi/256))
- byteList.insert(2,int(CaudMaxVenturi % 256))
- byteList.insert(3,int(TON))
- byteList.insert(4,int(mlPulse/256))
- byteList.insert(5,int(mlPulse % 256))
- byteList.insert(6,int(Simular))
- byteList.insert(7,int(MaxDesvio))
- Add = BASE_CONFIGINYECTORES+(iny-1)*8
- print("Config Iny :"+str(iny))
- print(byteList)
- print(writeRegisters(Add,4,byteList))
- #-------------------------------------------------------------------------------
- def writeTocontrollerPRiego(pr):
- byteList = []
- lista_Valv=[]
- ProgRiego = cs.allIrrigation[pr]
- RegistrosValvulas = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- if(ProgRiego.valves !=''):
- lista_Valv = ProgRiego.valves.split(',')
- i = 0
- for elem in lista_Valv:
- bit = (int(elem)-1) % 8
- indice = int((int(elem)-1)/8)
- RegistrosValvulas[indice] = RegistrosValvulas[indice] | (2**bit)
- i = i+1
- lista_days = ProgRiego.days.split(',')
- while (len(lista_days)< 7):
- lista_days.append("0")
- print("Lista Valvulas " + str(lista_Valv))
- print("dias de lasemana " + str(lista_days))
- i = 0
- print("Escribo Programa de Riego " + str(ProgRiego.program))
- byteList.insert(0,ProgRiego.water_total_1)
- byteList.insert(1,ProgRiego.water_total_2)
- byteList.insert(2,ProgRiego.water_before_1)
- byteList.insert(3,ProgRiego.water_before_2,)
- byteList.insert(4,ProgRiego.water_after_1)
- byteList.insert(5,ProgRiego.water_after_2)
- byteList.insert(6,ProgRiego.time_between_1)
- byteList.insert(7,ProgRiego.time_between_2)
- byteList.insert(8,ProgRiego.time_start_1)
- byteList.insert(9,ProgRiego.time_start_2)
- byteList.insert(10,ProgRiego.units)
- byteList.insert(11,ProgRiego.fertilization_program)
- byteList.insert(12,ProgRiego.kicks)
- byteList.insert(13,ProgRiego.condition_program)
- byteList.insert(14,int(lista_days[0])) # Domingo
- byteList.insert(15,int(lista_days[1])) # Lunes
- Add = BASE_PROGRIEGO + (pr-1)*32
- print(writeRegisters(Add,8,byteList))
- byteList = []
- byteList.insert(0,int(lista_days[2])) # Martes
- byteList.insert(1,int(lista_days[3])) # Miercoles
- byteList.insert(2,int(lista_days[4])) # Jueves
- byteList.insert(3,int(lista_days[5])) # Viernes
- byteList.insert(4,int(lista_days[6])) # Sabado
- i = 0
- while(i < 10):
- byteList.append(RegistrosValvulas[i])
- i = i+1
- byteList.append(0) # Campo Reservado
- Add = BASE_PROGRIEGO+(pr-1)*32+16
- print(writeRegisters(Add,8,byteList))
- #------------------------------------------------------------------------------
- def writeToControllerConfigAlarms():
- ConfigAl = cs.alarm_config
- byteList=[]
- byteList.insert(0,ConfigAl.delay_secs_if_diff_ec_more_1)
- byteList.insert(1,ConfigAl.delay_secs_if_diff_ec_more_05)
- byteList.insert(2,ConfigAl.delay_secs_if_diff_ec_more_03)
- byteList.insert(3,ConfigAl.coefficient_correction_ec_more_1)
- byteList.insert(4,ConfigAl.coefficient_correction_ec_more_05)
- byteList.insert(5,ConfigAl.coefficient_correction_ec_more_03)
- byteList.insert(6,ConfigAl.delay_secs_if_diff_ph_more_1)
- byteList.insert(7,ConfigAl.delay_secs_if_diff_ph_more_05)
- byteList.insert(8,ConfigAl.delay_secs_if_diff_ph_more_03)
- byteList.insert(9,ConfigAl.coefficient_correction_ph_more_1)
- byteList.insert(10,ConfigAl.coefficient_correction_ph_more_05)
- byteList.insert(11,ConfigAl.coefficient_correction_ph_more_03)
- print("COnfig Param ECpH " + str(byteList))
- writeRegisters(BASE_CONFIGECPHPARAMS,6,byteList)
- byteList=[]
- byteList.insert(0,ConfigAl.secs_first_ec_correction)
- byteList.insert(1,ConfigAl.deviation_warning_max_error_flow)
- byteList.insert(2,ConfigAl.delay_alarms_ec_ph_secs)
- byteList.insert(3,ConfigAl.delay_alarm_ph_dangerous_secs)
- byteList.insert(4,ConfigAl.delay_alarm_ec_dangerous_secs)
- byteList.insert(5,ConfigAl.delay_alarm_high_pressure_kg)
- byteList.insert(6,ConfigAl.delay_alarm_low_pressure_secs)
- byteList.insert(7,ConfigAl.delay_alarm_flow_secs)
- byteList.insert(8,ConfigAl.max_diff_warning_error_ec*10)
- byteList.insert(9,ConfigAl.max_diff_warning_error_ph*10)
- byteList.insert(10,ConfigAl.max_deviation_under_ph*10)
- byteList.insert(11,ConfigAl.max_deviation_over_ec*10)
- byteList.insert(12,ConfigAl.level_alarm_high_pressure_kg*10)
- byteList.insert(13,ConfigAl.level_alarm_low_pressure_kg*10)
- writeRegisters(BASE_CONFIGALARMAS-1,7,byteList)
- byteList=[]
- byteList.insert(0,0)
- byteList.insert(1,ConfigAl.function_alarm_fertilizer_discontinued)
- byteList.insert(3,ConfigAl.function_alarm_ec_ph_dangerous)
- byteList.insert(3,ConfigAl.function_alarm_high_pressure)
- byteList.insert(4,ConfigAl.function_alarm_dangerous_flow)
- byteList.insert(5,ConfigAl.function_alarm_no_fertilization)
- byteList.insert(6,ConfigAl.function_alarm_no_water)
- byteList.insert(7,ConfigAl.pulses_fertilizer_no_control)
- byteList.insert(8,ConfigAl.pulses_needs_fertilizer)
- byteList.insert(9,ConfigAl.max_seconds_between_water_pulses)
- byteList.insert(10,ConfigAl.over_dangerous_flow_percentage)
- # Tiempo Anti Picos
- byteList.insert(11,10)
- writeRegisters(BASE_CONFIGALARMAS+13,6,byteList)
- #------------------------------------------------------------------------------
- def sendServer():
- print("write_ConfigAl=====" +str(write_ConfigAl))
- if(write_ConfigAl):
- sendSetConfigAlarms()
- for key in cs.allIrrigation:
- if(write_irrProg[key-1]==True):
- print("Keys :" +str(key))
- sendSetIrrigation(key)
- for key in cs.allInyection:
- if(write_ConfIny[key-1]==True):
- sendSetInyection(key)
- for key in cs.allFertilization:
- if(write_fertProg[key-1]==True):
- sendSetFertilization(key)
- def sendSetFertilization(pf):
- if pf in cs.allFertilization:
- fert = cs.allFertilization[pf]
- response = requests.get(URL_SERVER + '/requests?set_fertilization&username=' +USERNAME +'password=' +PASSWORD+
- "&username=Prueba1&password=goldfinger&program="+str(fert.program)+"&who=1"+"&value_1="+str(fert.values_1)+
- "&value_2="+str(fert.values_2)+"&value_3="+str(fert.values_3)+"&value_4="+str(fert.values_4)+
- "&value_5="+str(fert.values_5)+"&value_6="+str(fert.values_6)+"&value_7="+str(fert.values_7)+
- "&value_8="+str(fert.values_8)+"&ec="+str(fert.ec)+"&ph="+str(fert.ph))
- dataJson = response.json()
- return(dataJson)
- def sendSetIrrigation(irrId):
- if irrId in cs.allIrrigation:
- irr = cs.allIrrigation[irrId]
- print("Prog al json " +str(irr.program))
- print("valvulas " + str(irr.valves))
- print("dias " + str(irr.days))
- response = requests.get(URL_SERVER + '/requests?set_irrigation&username=' +USERNAME +'&password=' +PASSWORD+
- "&username=Prueba1&password=goldfinger&program="+str(irr.program)+"&who=1"
- "&units="+str(irr.units)+"&water_before_1="+str(irr.water_before_1)+
- "&water_before_2="+str(irr.water_before_2)+"&water_after_1="+str(irr.water_after_1)+
- "&water_after_2="+str(irr.water_after_2)+"&water_total_1="+str(irr.water_total_1)+
- "&water_total_2="+str(irr.water_total_2)+"&kicks="+str(irr.kicks)+
- "&fertilization_program="+str(irr.fertilization_program)+
- "&condition_program="+str(irr.condition_program)+"&time_start_1="+str(irr.time_start_1)+
- "&time_start_2="+str(irr.time_start_2)+"&time_between_1="+str(irr.time_between_1)+
- "&time_between_2="+str(irr.time_between_2)+"&valves="+str(irr.valves)+"&days="+str(irr.days))
- dataJson = response.json()
- return(dataJson)
- def sendSetInyection(inyId):
- if inyId in cs.allInyection:
- iny = cs.allInyection[inyId]
- print("Config Iny al Json " + str(iny.program))
- print("flow " + str(iny.flow) + "time On " + str(iny.time_on))
- response = requests.get(URL_SERVER + '/requests?set_inyector&username=' +USERNAME +'&password=' +PASSWORD+
- "&username=Prueba1&password=goldfinger&program="+str(iny.program)+"&who=1"
- "&flow="+str(iny.flow)+"&time_on="+str(iny.time_on)+"&litres_pulse="+str(iny.litres_pulse)+
- "&max_deviation="+str(iny.max_deviation)+"&simulator="+str(iny.simulator))
- dataJson = response.json()
- print("QUe tira el json " + str(dataJson))
- return(dataJson)
- def sendSetConfigAlarms():
- cA = cs.alarm_config
- print("ENVIO AL JSON CONFIG ALARMS")
- response = requests.get(URL_SERVER + '/requests?set_config_alarms&username=' +USERNAME +'&password=' +PASSWORD+
- "&who=1&deviation_warning_max_error_flow="+str(cA.deviation_warning_max_error_flow)+"&function_alarm_ec_ph_dangerous="+str(cA.function_alarm_ec_ph_dangerous)+
- "&delay_alarms_ec_ph_secs=" + str(cA.delay_alarms_ec_ph_secs)+"&delay_alarm_ph_dangerous_secs="+str(cA.delay_alarm_ph_dangerous_secs)+
- "&delay_alarm_ec_dangerous_secs="+str(cA.delay_alarm_ec_dangerous_secs)+"&delay_alarm_high_pressure_kg="+str(cA,delay_alarm_high_pressure_kg)+
- "&delay_alarm_low_pressure_secs="+str(cA.delay_alarm_low_pressure_secs)+"&delay_alarm_flow_secs="+str(cA.delay_alarm_flow_secs)+
- "&max_diff_warning_error_ec="+str(cA.max_diff_warning_error_ec)+"&max_diff_warning_error_ph="+str(cA.max_diff_warning_error_ph)+
- "&max_deviation_under_ph="+str(cA.max_deviation_under_ph)+"&max_deviation_over_ec="+str(cA.max_deviation_over_ec)+
- "&level_alarm_high_pressure_kg="+str(cA.level_alarm_high_pressure_kg)+"&level_alarm_low_pressure_kg="+str(cA.level_alarm_low_pressure_kg)+
- "&function_alarm_fertilizer_discontinued="+str(cA.function_alarm_fertilizer_discontinued)+"&function_alarm_high_pressure="+str(cA.function_alarm_high_pressure)+
- "&function_alarm_dangerous_flow="+str(cA.function_alarm_dangerous_flow)+"&function_alarm_no_fertilization="+str(cA.function_alarm_no_fertilization)+
- "&function_alarm_no_water="+str(cA.function_alarm_no_water)+"&pulses_fertilizer_no_control="+str(cA.pulses_fertilizer_no_control)+
- "&pulses_needs_fertilizer="+str(cA.pulses_needs_fertilizer)+"&max_seconds_between_water_pulses="+str(cA.max_seconds_between_water_pulses)+
- "&over_dangerous_flow_percentage="+str(cA.over_dangerous_flow_percentage)+"&delay_secs_if_diff_ec_more_1="+str(cA.delay_secs_if_diff_ec_more_1)+
- "&delay_secs_if_diff_ec_more_05="+str(cA.delay_secs_if_diff_ec_more_05)+"&delay_secs_if_diff_ec_more_03="+str(cA.delay_secs_if_diff_ec_more_03)+
- "&coefficient_correction_ec_more_1="+str(cA.coefficient_correction_ec_more_1)+"&coefficient_correction_ec_more_05="+str(cA.coefficient_correction_ec_more_05)+
- "&coefficient_correction_ec_more_03="+str(cA.coefficient_correction_ec_more_03)+"&delay_secs_if_diff_ph_more_1="+str(cA.delay_secs_if_diff_ph_more_1)+
- "&delay_secs_if_diff_ph_more_05="+str(cA.delay_secs_if_diff_ph_more_05)+"&delay_secs_if_diff_ph_more_03="+str(cA.delay_secs_if_diff_ph_more_03)+
- "&coefficient_correction_ph_more_1="+str(cA.coefficient_correction_ph_more_1)+"&coefficient_correction_ph_more_05="+str(cA.coefficient_correction_ph_more_05)+
- "&coefficient_correction_ph_more_03="+str(cA.coefficient_correction_ph_more_03)+"&secs_first_ec_correction="+str(cA.secs_first_ec_correction)+
- "&secs_first_ph_correction="+str(cA.secs_first_ph_correction))
- dataJson = response.json()
- print("QUE TIRA EL JSON DE CONFIG ALARMAS" + str(dataJson))
- return(dataJson)
- # response = requests.get('{}requests?set_inyection&username={}&who=1&password={}&program={}&flow={}&time_on={}&litres_pulse={}&max_deviation={}&simulator={}'\
- # .format(URL_SERVER, USERNAME,PASSWORD, iny.program,iny.flow, iny.time_on, iny.litres_pulse,iny.max_deviation, iny.simulator))
- # dataJson = response.json()
- # return(dataJson)
- def getModifiedDataToController():
- print("Algo se modifico")
- data = fetchJson()
- cs.load_from_json(data)
- readFromControllerConfigAlarms()
- print("escribir config Al = " +str(write_ConfigAl))
- for i in range(0, TOTAL_FERT):
- readFromcontrollerPFert(i+1)
- for i in range(0, TOTAL_IRR):
- readFromcontrollerPRiego(i+1)
- for i in range(0, TOTAL_INY):
- readFromcontrollerConfigIny(i+1)
- #------------------------------------------------------------------------------
- def Calcular_CRC(listCRC):
- i = 0
- rot = 0
- result = 0xFFFF
- while(i < len(listCRC)):
- result = result ^ listCRC[i]
- while(rot < 8):
- if(result & 0x0001) == 1:
- result = result >> 1
- result = result ^ 0xA001
- else:
- result = result >> 1
- rot = rot + 1
- rot = 0
- i = i+1
- CRCH = int(result/256)
- CRCL = result % 256
- listCRC = [CRCL, CRCH]
- return(listCRC)
- def BytesToInteger(stream):
- bytes_in = []
- a = 0
- for b in stream:
- bytes_in.append(int(hex(stream[a]), 16))
- a = a+1
- return(bytes_in)
- correctLogin = False
- cs = ControllerState()
- # c.save_to_file(FILEPATH_SAVE)
- # cs = ControllerState.load_from_file(FILEPATH_SAVE)
- # physicalController = serial.Serial("COM3", 9600)
- while(True):
- if correctLogin == False:
- correctLogin = checkLogin()
- if correctLogin:
- print("login ok")
- else:
- print("login error")
- else:
- print("Dirty_Flag " +str(readDirty()))
- if readDirty():
- getModifiedDataToController()
- sendServer()
- writeDirty()
- lastUpdate = fetchLastUpdate()
- if cs.last_update != int(lastUpdate):
- data = fetchJson()
- cs.load_from_json(data)
- writeToControllerConfigAlarms()
- for key in cs.allIrrigation:
- print("ESCRIBO TODOS LOS PROGRAMAS DE RIEGO")
- writeTocontrollerPRiego(key)
- for key in cs.allInyection:
- writeTocontrollerConfigIny(key)
- for key in cs.allFertilization:
- writeTocontrollerPFert(key)
- print("updated")
- time.sleep(TIME_UPDATE)
- if correctLogin:
- cs.save_to_file(FILEPATH_SAVE)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement