Advertisement
Guest User

Untitled

a guest
Oct 30th, 2018
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.81 KB | None | 0 0
  1. # TAREA EMILIO: Completar y probar las siguientes funciones
  2. # writeTocontrollerPRiego
  3. # writeTocontrollerPFert
  4. # writeTocontrollerConfigIny
  5. # readFromcontrollerPFert
  6. # readFromcontrollerConfigIny
  7. # readFromcontrollerPRiego
  8. # readDirty
  9.  
  10. # funciones listas:
  11. # fetchJson
  12. # fetchLastUpdate
  13. # checkLogin
  14. # sendServer
  15. # sendSetFertilization
  16. # sendSetIrrigation
  17. # sendSetInyection
  18. # getModifiedDataToController
  19.  
  20. import time
  21. import serial
  22. import json
  23. import requests
  24. import serial
  25. from ControllerState import ControllerState, FertilizationProgram, InyectionProgram, IrrigationProgram,AlarmConfig
  26.  
  27. Test = serial.Serial("COM3",9600,timeout=0.2)
  28. BASE_PROGFERT = 1600 + 8192
  29. BASE_PROGRIEGO = 0 + 8192
  30. BASE_CONFIGINYECTORES = 1960 + 8192
  31. BASE_CONFIGALARMAS = 2237 + 8192
  32. BASE_CONFIGECPHPARAMS = 2224 + 8192
  33. TOTAL_FERT = 20
  34. TOTAL_INY = 8
  35. TOTAL_IRR = 50
  36. DIRTY_ADD = 4234
  37. URL_SERVER = 'http://emiliozelione2018.pythonanywhere.com/'
  38. USERNAME = "Prueba1"
  39. PASSWORD = "goldfinger"
  40. TIME_UPDATE = 2
  41. FILEPATH_SAVE = "controller.bin"
  42. write_irrProg = [False]*50
  43. write_fertProg = [False]*20
  44. write_ConfIny= [False]*8
  45. write_ConfigAl=False
  46. def fetchJson():
  47. response = requests.get(URL_SERVER + 'requests?all&username=' +
  48. USERNAME +'&password=' +PASSWORD)
  49. dataJson = response.json()
  50. return(dataJson)
  51.  
  52. def fetchLastUpdate():
  53. response = requests.get(
  54. URL_SERVER +
  55. 'requests?updated_when&username=' +
  56. USERNAME +
  57. '&password=' +
  58. PASSWORD)
  59. dataJson = response.json()
  60. return(dataJson['update'])
  61.  
  62. def checkLogin():
  63. response = requests.get(
  64. URL_SERVER +
  65. 'login?username=' +
  66. USERNAME +
  67. '&password=' +
  68. PASSWORD)
  69. dataJson = response.json()
  70. return(dataJson['ok'])
  71.  
  72. def readDirty():
  73. if readRegisters(DIRTY_ADD,1)[0] == 186:
  74. print("Valor del DirtyFlag " +str(readRegisters(DIRTY_ADD,1)))
  75. return True
  76. else:
  77. return False
  78.  
  79. def writeDirty():
  80. val=[0,0]
  81. writeRegisters(DIRTY_ADD,1,val)
  82. print("Escribi dirty ya :" +str(readDirty()))
  83.  
  84. def readRegisters(Add,nRegs):
  85. byteList=[]
  86. AddH = int(Add/256)
  87. AddL = Add % 256
  88. Encabezado = [1, 3, AddH, AddL, 0, nRegs] # Son 1Registros
  89. # Tengo la lista en bytes, Aplicar los CRC
  90. byteList = Encabezado + byteList
  91. listaCRC = Calcular_CRC(byteList)
  92. byteList = byteList+listaCRC # Le agrega los bytes de CRC
  93. incoming = []
  94. Total_in = nRegs*2+5
  95. while(len(incoming)<(Total_in)):
  96. Test.write(byteList)
  97. Test.flush()
  98. incoming = Test.read(Total_in)
  99. BytesIn = BytesToInteger(incoming)
  100. print("Bytes Leidos "+str(BytesIn))
  101. CRC_in = BytesIn[(Total_in-2):Total_in]
  102. print("CRC_in " +str(CRC_in))
  103. del BytesIn[-2:] # borra los 2 ultimos elementos
  104. listaCRC = Calcular_CRC(BytesIn)
  105. print("Lista CRC " +str(listaCRC))
  106. if(listaCRC==CRC_in):
  107. del BytesIn[0:3] # borra del 0 al 3 no inclusive
  108. return BytesIn
  109. else:
  110. return None
  111.  
  112. def readFromcontrollerConfigIny(ci):
  113. ConfigInyL =cs.allInyection[ci]
  114. ConfigIny = InyectionProgram()
  115. write_ConfIny[ci-1]= False
  116. print("Conf.Inyector " +str(ci))
  117. Add =BASE_CONFIGINYECTORES + (ci-1)*8
  118. byteList=[]
  119. byteList=readRegisters(Add,4)
  120. print(byteList)
  121. flow = byteList[1]*256 + byteList[2]
  122. timeOn = byteList[3]
  123. mlPulso = byteList[4]*256+byteList[5]
  124. simulator = byteList[6]
  125. maxDeviation = byteList[7]
  126. if(flow!= ConfigInyL.flow) or (timeOn!= ConfigInyL.time_on) or\
  127. (mlPulso!= ConfigInyL.litres_pulse) or (maxDeviation!= ConfigInyL.max_deviation) or\
  128. (simulator!= ConfigInyL.simulator):
  129. write_ConfIny[ci-1]= True
  130. print("Cambio la Config Inyector: " + str(ci))
  131. ConfigIny.program = ci
  132. ConfigIny.flow = flow
  133. ConfigIny.time_on = timeOn
  134. ConfigIny.litres_pulse = mlPulso
  135. ConfigIny.simulator = simulator
  136. ConfigIny.max_deviation = maxDeviation
  137. cs.allInyection[ci] = ConfigIny
  138. #-----------------------------------------------------------------------------------------------------------
  139. def readFromcontrollerPFert(pf):
  140. FertProgL =cs.allFertilization[pf]
  141. FertProg = FertilizationProgram()
  142. write_fertProg[pf-1] = False
  143. print("Prog Fertilizacion " +str(pf))
  144. Add = BASE_PROGFERT + (pf-1)*18
  145. byteList=[]
  146. byteList=readRegisters(Add,9)
  147. print(byteList)
  148. i = 0
  149. Val = [0]*10
  150. while(i < 8):
  151. Val[i] = (byteList[2*i]*256+byteList[2*i+1])
  152. i = i+1
  153. Val[8] = byteList[16]/10
  154. Val[9] = byteList[17]/10
  155. print("La lista Val " + str(Val))
  156. if(Val[0]!= FertProgL.values_1) or (Val[1]!= FertProgL.values_2) or (Val[2]!= FertProgL.values_3)or\
  157. (Val[3]!= FertProgL.values_4) or (Val[4]!= FertProgL.values_5) or (Val[5]!= FertProgL.values_6)or\
  158. (Val[6]!= FertProgL.values_7) or (Val[7]!= FertProgL.values_8) or (Val[8]!= FertProgL.ec)or\
  159. (Val[9]!= FertProgL.ph):
  160. write_fertProg[pf-1]= True
  161. print("Cambio el Prog de Fert:" + str(pf))
  162. FertProg.program = pf
  163. FertProg.values_1=Val[0]
  164. FertProg.values_2=Val[1]
  165. FertProg.values_3=Val[2]
  166. FertProg.values_4=Val[3]
  167. FertProg.values_5=Val[4]
  168. FertProg.values_6=Val[5]
  169. FertProg.values_7=Val[6]
  170. FertProg.values_8=Val[7]
  171. FertProg.ec=Val[8]
  172. FertProg.ph=Val[9]
  173. cs.allFertilization[pf] = FertProg
  174. #--------------------------------------------------------------------------------------------------------------------
  175. def readFromcontrollerPRiego(pr):
  176. ProgRiegoL = cs.allIrrigation[pr]
  177. write_irrProg[pr-1] = False
  178. ProgRiego = IrrigationProgram()
  179. print("Prog Riego " +str(pr))
  180. Add = BASE_PROGRIEGO + (pr-1)*32
  181. listaA = readRegisters(Add,8)
  182. print(listaA)
  183. ProgRiego.program = pr
  184.  
  185. if(listaA[0]!=ProgRiegoL.water_total_1) or (listaA[1]!=ProgRiegoL.water_total_2)or\
  186. (listaA[2]!=ProgRiegoL.water_before_1) or (listaA[3]!=ProgRiegoL.water_before_2)or\
  187. (listaA[4]!=ProgRiegoL.water_after_1) or (listaA[5]!=ProgRiegoL.water_after_2)or\
  188. (listaA[6]!=ProgRiegoL.time_between_1) or (listaA[7]!=ProgRiegoL.time_between_2)or\
  189. (listaA[8]!=ProgRiegoL.time_start_1) or (listaA[9]!=ProgRiegoL.time_start_2)or\
  190. (listaA[10]!=ProgRiegoL.units) or (listaA[11]!=ProgRiegoL.fertilization_program)or\
  191. (listaA[12]!=ProgRiegoL.kicks) or (listaA[13]!=ProgRiegoL.condition_program):
  192. write_irrProg[pr-1] = True
  193.  
  194. ProgRiego.water_total_1=listaA[0]
  195. ProgRiego.water_total_2=listaA[1]
  196. ProgRiego.water_before_1=listaA[2]
  197. ProgRiego.water_before_2=listaA[3]
  198. ProgRiego.water_after_1=listaA[4]
  199. ProgRiego.water_after_2=listaA[5]
  200. ProgRiego.time_between_1=listaA[6]
  201. ProgRiego.time_between_2=listaA[7]
  202. ProgRiego.time_start_1=listaA[8]
  203. ProgRiego.time_start_2=listaA[9]
  204. ProgRiego.units=listaA[10]
  205. ProgRiego.fertilization_program=listaA[11]
  206. ProgRiego.kicks=listaA[12]
  207. ProgRiego.condition_program=listaA[13]
  208. Add = BASE_PROGRIEGO + (pr-1)*32 +16
  209. listaB = readRegisters(Add,8)
  210. print(listaB)
  211. listaDias = listaA[14:16]+listaB[0:5]
  212. print("Lista_Dias " + str(listaDias))
  213. i=0
  214. for elem in listaDias:
  215. if i==0:
  216. cadDias = str(elem)
  217. else:
  218. cadDias = cadDias + ',' + str(elem)
  219. i=i+1
  220. del listaB[0:5] # borra del 0 al 5 no inclusive
  221. print("Los dias son " + cadDias)
  222. if cadDias != ProgRiegoL.days:
  223. write_irrProg[pr-1] = True
  224.  
  225. ProgRiego.days = cadDias
  226. Cadvalves =DecoValves(listaB)
  227. if Cadvalves!=ProgRiegoL.valves:
  228. write_irrProg[pr-1] = True
  229. ProgRiego.valves= Cadvalves
  230. print("Valvulas " + str(ProgRiego.valves))
  231. print("Cambio el Prog :" + str(write_irrProg[pr-1]))
  232. cs.allIrrigation[pr] = ProgRiego
  233.  
  234. #-----------------------------------------------------------------------------
  235. def readFromControllerConfigAlarms():
  236. ConfigAl = cs.alarm_config
  237. ConfigAlW = AlarmConfig()
  238. write_ConfigAl = False
  239. listaA = readRegisters(BASE_CONFIGECPHPARAMS,6)
  240. listaB = readRegisters(BASE_CONFIGALARMAS-1,7)
  241. listaC = readRegisters(BASE_CONFIGALARMAS+13,6)
  242. ConfigAlW.delay_secs_if_diff_ec_more_1=listaA[0]
  243. ConfigAlW.delay_secs_if_diff_ec_more_05=listaA[1]
  244. ConfigAlW.delay_secs_if_diff_ec_more_03=listaA[2]
  245. ConfigAlW.coefficient_correction_ec_more_1=listaA[3]
  246. ConfigAlW.coefficient_correction_ec_more_05=listaA[4]
  247. ConfigAlW.coefficient_correction_ec_more_03=listaA[5]
  248. ConfigAlW.delay_secs_if_diff_ph_more_1=listaA[6]
  249. ConfigAlW.delay_secs_if_diff_ph_more_05=listaA[7]
  250. ConfigAlW.delay_secs_if_diff_ph_more_03=listaA[8]
  251. ConfigAlW.coefficient_correction_ph_more_1=listaA[9]
  252. ConfigAlW.coefficient_correction_ph_more_05=listaA[10]
  253. ConfigAlW.coefficient_correction_ph_more_03=listaA[11]
  254.  
  255.  
  256.  
  257. if(listaA[0]!= ConfigAl.delay_secs_if_diff_ec_more_1)or\
  258. (listaA[1]!=ConfigAl.delay_secs_if_diff_ec_more_05)or\
  259. (listaA[2]!=ConfigAl.delay_secs_if_diff_ec_more_03)or\
  260. (listaA[3]!=ConfigAl.coefficient_correction_ec_more_1)or\
  261. (listaA[4]!=ConfigAl.coefficient_correction_ec_more_05)or\
  262. (listaA[5]!=ConfigAl.coefficient_correction_ec_more_03)or\
  263. (listaA[6]!=ConfigAl.delay_secs_if_diff_ph_more_1)or\
  264. (listaA[7]!=ConfigAl.delay_secs_if_diff_ph_more_05)or\
  265. (listaA[8]!=ConfigAl.delay_secs_if_diff_ph_more_03)or\
  266. (listaA[9]!=ConfigAl.coefficient_correction_ph_more_1)or\
  267. (listaA[10]!=ConfigAl.coefficient_correction_ph_more_05)or\
  268. (listaA[11]!=ConfigAl.coefficient_correction_ph_more_03):
  269. write_ConfigAl = True
  270. if(listaB[0]!=ConfigAl.secs_first_ec_correction)or\
  271. (listaB[1]!=ConfigAl.deviation_warning_max_error_flow)or\
  272. (listaB[2]!=ConfigAl.delay_alarms_ec_ph_secs)or\
  273. (listaB[3]!=ConfigAl.delay_alarm_ph_dangerous_secs)or\
  274. (listaB[4]!=ConfigAl.delay_alarm_ec_dangerous_secs)or\
  275. (listaB[5]!=ConfigAl.delay_alarm_high_pressure_kg)or\
  276. (listaB[6]!=ConfigAl.delay_alarm_low_pressure_secs)or\
  277. (listaB[7]!=ConfigAl.delay_alarm_flow_secs)or\
  278. (listaB[8]!=ConfigAl.max_diff_warning_error_ec*10)or\
  279. (listaB[9]!=ConfigAl.max_diff_warning_error_ph*10)or\
  280. (listaB[10]!=ConfigAl.max_deviation_under_ph*10)or\
  281. (listaB[11]!=ConfigAl.max_deviation_over_ec*10)or\
  282. (listaB[12]!=ConfigAl.level_alarm_high_pressure_kg*10)or\
  283. (listaB[13]!=ConfigAl.level_alarm_low_pressure_kg*10):
  284. write_ConfigAl = True
  285. if(listaC[1]!=ConfigAl.function_alarm_fertilizer_discontinued)or\
  286. (listaC[2]!=ConfigAl.function_alarm_ec_ph_dangerous)or\
  287. (listaC[3]!=ConfigAl.function_alarm_high_pressure)or\
  288. (listaC[4]!=ConfigAl.function_alarm_dangerous_flow)or\
  289. (listaC[5]!=ConfigAl.function_alarm_no_fertilization)or\
  290. (listaC[6]!=ConfigAl.function_alarm_no_water)or\
  291. (listaC[7]!=ConfigAl.pulses_fertilizer_no_control)or\
  292. (listaC[8]!=ConfigAl.pulses_needs_fertilizer)or\
  293. (listaC[9]!=ConfigAl.max_seconds_between_water_pulses)or\
  294. (listaC[10]!=ConfigAl.over_dangerous_flow_percentage):
  295. write_ConfigAl = True
  296.  
  297. if (write_ConfigAl==True):
  298. print("Cambio la Configuracion de Alarmas " + str(write_ConfigAl))
  299. cs.alarm_config = ConfigAlW
  300.  
  301.  
  302.  
  303. def DecoValves(ListaValves):
  304. CantValv = 0
  305. CadValv = ""
  306. i = 0
  307. while(i < 9): # Registros
  308. j = 0
  309. while(j < 8): # bits
  310. peso = ListaValves[i] & (2**j)
  311. valv = (i*8)+j+1
  312. if(peso != 0):
  313. if(CantValv == 0):
  314. CadValv = str(valv)
  315. else:
  316. CadValv = CadValv + ',' + str(valv)
  317. CantValv = CantValv+1
  318. j = j+1
  319. i = i+1
  320. return(CadValv)
  321. #-----------------------------------------------------------------------------
  322. def writeRegisters(Add,nRegs,byteList):
  323. AddH = int(Add/256)
  324. AddL = Add % 256
  325. Encabezado = [1, 16, AddH, AddL, 0,nRegs,nRegs*2]
  326. byteList = Encabezado + byteList
  327. listaCRC = Calcular_CRC(byteList)
  328. byteList = byteList+listaCRC
  329. # Le agrega los bytes de CRC
  330. incoming = []
  331. Total_in = 8
  332. # Cuando Escribis Recibis 8 Bytes Fijos
  333. while(len(incoming)<(Total_in)):
  334. Test.write(byteList)
  335. Test.flush()
  336. incoming = Test.read(Total_in)
  337. BytesIn = BytesToInteger(incoming)
  338. print(BytesIn)
  339. CRC_in = BytesIn[(Total_in-2):Total_in]
  340. print(CRC_in)
  341. del BytesIn[-2:] # borra los 2 ultimos elementos
  342. listaCRC = Calcular_CRC(BytesIn)
  343. print(listaCRC)
  344. print(" incoming : "+str(len(incoming)))
  345. if(listaCRC==CRC_in):
  346. return True
  347. else:
  348. return False
  349. #--------------------------------------------------------------------------------
  350. def writeTocontrollerPFert(pf):
  351. FertProg = cs.allFertilization[pf]
  352. print("Programa de Ferti "+str(pf))
  353. newList = []
  354. byteList = []
  355. newList.append(int(FertProg.values_1))
  356. newList.append(int(FertProg.values_2))
  357. newList.append(int(FertProg.values_3))
  358. newList.append(int(FertProg.values_4))
  359. newList.append(int(FertProg.values_5))
  360. newList.append(int(FertProg.values_6))
  361. newList.append(int(FertProg.values_7))
  362. newList.append(int(FertProg.values_8))
  363. EC = FertProg.ec *10
  364. pH = FertProg.ph *10
  365. newList.append(int(EC)*256+int(pH))
  366. print("newlist "+str(newList))
  367. i = 0
  368. for elem in newList:
  369. byteList.append(int(newList[i]/256))
  370. byteList.append(newList[i] % 256)
  371. i = i+1
  372. Add = BASE_PROGFERT+(pf-1)*18
  373. print("Direccion " +str(Add))
  374. print("byteList :"+str(byteList))
  375. print(writeRegisters(Add,9,byteList))
  376. #------------------------------------------------------------------------------
  377. def writeTocontrollerConfigIny(iny):
  378. byteList = []
  379. Inyector = cs.allInyection[iny]
  380. CaudMaxVenturi = Inyector.flow
  381. TON = Inyector.time_on
  382. mlPulse = Inyector.litres_pulse
  383. MaxDesvio = Inyector.max_deviation
  384. Simular = Inyector.simulator
  385. print(Inyector)
  386. # ESTA MANDANDO EL NUMERO DE INYECTOR COMO FINCION PORQUE FALTA LA FUNCION EN EL PYTHON ANYWHERE
  387. byteList.insert(0,int(iny))
  388. byteList.insert(1,int(CaudMaxVenturi/256))
  389. byteList.insert(2,int(CaudMaxVenturi % 256))
  390. byteList.insert(3,int(TON))
  391. byteList.insert(4,int(mlPulse/256))
  392. byteList.insert(5,int(mlPulse % 256))
  393. byteList.insert(6,int(Simular))
  394. byteList.insert(7,int(MaxDesvio))
  395. Add = BASE_CONFIGINYECTORES+(iny-1)*8
  396. print("Config Iny :"+str(iny))
  397. print(byteList)
  398. print(writeRegisters(Add,4,byteList))
  399. #-------------------------------------------------------------------------------
  400. def writeTocontrollerPRiego(pr):
  401. byteList = []
  402. lista_Valv=[]
  403. ProgRiego = cs.allIrrigation[pr]
  404. RegistrosValvulas = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  405. if(ProgRiego.valves !=''):
  406. lista_Valv = ProgRiego.valves.split(',')
  407. i = 0
  408. for elem in lista_Valv:
  409. bit = (int(elem)-1) % 8
  410. indice = int((int(elem)-1)/8)
  411. RegistrosValvulas[indice] = RegistrosValvulas[indice] | (2**bit)
  412. i = i+1
  413. lista_days = ProgRiego.days.split(',')
  414. while (len(lista_days)< 7):
  415. lista_days.append("0")
  416. print("Lista Valvulas " + str(lista_Valv))
  417. print("dias de lasemana " + str(lista_days))
  418.  
  419.  
  420. i = 0
  421. print("Escribo Programa de Riego " + str(ProgRiego.program))
  422. byteList.insert(0,ProgRiego.water_total_1)
  423. byteList.insert(1,ProgRiego.water_total_2)
  424. byteList.insert(2,ProgRiego.water_before_1)
  425. byteList.insert(3,ProgRiego.water_before_2,)
  426. byteList.insert(4,ProgRiego.water_after_1)
  427. byteList.insert(5,ProgRiego.water_after_2)
  428. byteList.insert(6,ProgRiego.time_between_1)
  429. byteList.insert(7,ProgRiego.time_between_2)
  430. byteList.insert(8,ProgRiego.time_start_1)
  431. byteList.insert(9,ProgRiego.time_start_2)
  432. byteList.insert(10,ProgRiego.units)
  433. byteList.insert(11,ProgRiego.fertilization_program)
  434. byteList.insert(12,ProgRiego.kicks)
  435. byteList.insert(13,ProgRiego.condition_program)
  436. byteList.insert(14,int(lista_days[0])) # Domingo
  437. byteList.insert(15,int(lista_days[1])) # Lunes
  438. Add = BASE_PROGRIEGO + (pr-1)*32
  439. print(writeRegisters(Add,8,byteList))
  440. byteList = []
  441. byteList.insert(0,int(lista_days[2])) # Martes
  442. byteList.insert(1,int(lista_days[3])) # Miercoles
  443. byteList.insert(2,int(lista_days[4])) # Jueves
  444. byteList.insert(3,int(lista_days[5])) # Viernes
  445. byteList.insert(4,int(lista_days[6])) # Sabado
  446. i = 0
  447. while(i < 10):
  448. byteList.append(RegistrosValvulas[i])
  449. i = i+1
  450. byteList.append(0) # Campo Reservado
  451. Add = BASE_PROGRIEGO+(pr-1)*32+16
  452. print(writeRegisters(Add,8,byteList))
  453. #------------------------------------------------------------------------------
  454. def writeToControllerConfigAlarms():
  455. ConfigAl = cs.alarm_config
  456. byteList=[]
  457. byteList.insert(0,ConfigAl.delay_secs_if_diff_ec_more_1)
  458. byteList.insert(1,ConfigAl.delay_secs_if_diff_ec_more_05)
  459. byteList.insert(2,ConfigAl.delay_secs_if_diff_ec_more_03)
  460. byteList.insert(3,ConfigAl.coefficient_correction_ec_more_1)
  461. byteList.insert(4,ConfigAl.coefficient_correction_ec_more_05)
  462. byteList.insert(5,ConfigAl.coefficient_correction_ec_more_03)
  463. byteList.insert(6,ConfigAl.delay_secs_if_diff_ph_more_1)
  464. byteList.insert(7,ConfigAl.delay_secs_if_diff_ph_more_05)
  465. byteList.insert(8,ConfigAl.delay_secs_if_diff_ph_more_03)
  466. byteList.insert(9,ConfigAl.coefficient_correction_ph_more_1)
  467. byteList.insert(10,ConfigAl.coefficient_correction_ph_more_05)
  468. byteList.insert(11,ConfigAl.coefficient_correction_ph_more_03)
  469. print("COnfig Param ECpH " + str(byteList))
  470. writeRegisters(BASE_CONFIGECPHPARAMS,6,byteList)
  471. byteList=[]
  472. byteList.insert(0,ConfigAl.secs_first_ec_correction)
  473. byteList.insert(1,ConfigAl.deviation_warning_max_error_flow)
  474. byteList.insert(2,ConfigAl.delay_alarms_ec_ph_secs)
  475. byteList.insert(3,ConfigAl.delay_alarm_ph_dangerous_secs)
  476. byteList.insert(4,ConfigAl.delay_alarm_ec_dangerous_secs)
  477. byteList.insert(5,ConfigAl.delay_alarm_high_pressure_kg)
  478. byteList.insert(6,ConfigAl.delay_alarm_low_pressure_secs)
  479. byteList.insert(7,ConfigAl.delay_alarm_flow_secs)
  480. byteList.insert(8,ConfigAl.max_diff_warning_error_ec*10)
  481. byteList.insert(9,ConfigAl.max_diff_warning_error_ph*10)
  482. byteList.insert(10,ConfigAl.max_deviation_under_ph*10)
  483. byteList.insert(11,ConfigAl.max_deviation_over_ec*10)
  484. byteList.insert(12,ConfigAl.level_alarm_high_pressure_kg*10)
  485. byteList.insert(13,ConfigAl.level_alarm_low_pressure_kg*10)
  486. writeRegisters(BASE_CONFIGALARMAS-1,7,byteList)
  487. byteList=[]
  488. byteList.insert(0,0)
  489. byteList.insert(1,ConfigAl.function_alarm_fertilizer_discontinued)
  490. byteList.insert(3,ConfigAl.function_alarm_ec_ph_dangerous)
  491. byteList.insert(3,ConfigAl.function_alarm_high_pressure)
  492. byteList.insert(4,ConfigAl.function_alarm_dangerous_flow)
  493. byteList.insert(5,ConfigAl.function_alarm_no_fertilization)
  494. byteList.insert(6,ConfigAl.function_alarm_no_water)
  495. byteList.insert(7,ConfigAl.pulses_fertilizer_no_control)
  496. byteList.insert(8,ConfigAl.pulses_needs_fertilizer)
  497. byteList.insert(9,ConfigAl.max_seconds_between_water_pulses)
  498. byteList.insert(10,ConfigAl.over_dangerous_flow_percentage)
  499. # Tiempo Anti Picos
  500. byteList.insert(11,10)
  501. writeRegisters(BASE_CONFIGALARMAS+13,6,byteList)
  502.  
  503.  
  504. #------------------------------------------------------------------------------
  505. def sendServer():
  506. print("write_ConfigAl=====" +str(write_ConfigAl))
  507. if(write_ConfigAl):
  508. sendSetConfigAlarms()
  509. for key in cs.allIrrigation:
  510. if(write_irrProg[key-1]==True):
  511. print("Keys :" +str(key))
  512. sendSetIrrigation(key)
  513. for key in cs.allInyection:
  514. if(write_ConfIny[key-1]==True):
  515. sendSetInyection(key)
  516. for key in cs.allFertilization:
  517. if(write_fertProg[key-1]==True):
  518. sendSetFertilization(key)
  519.  
  520. def sendSetFertilization(pf):
  521. if pf in cs.allFertilization:
  522. fert = cs.allFertilization[pf]
  523. response = requests.get(URL_SERVER + '/requests?set_fertilization&username=' +USERNAME +'password=' +PASSWORD+
  524. "&username=Prueba1&password=goldfinger&program="+str(fert.program)+"&who=1"+"&value_1="+str(fert.values_1)+
  525. "&value_2="+str(fert.values_2)+"&value_3="+str(fert.values_3)+"&value_4="+str(fert.values_4)+
  526. "&value_5="+str(fert.values_5)+"&value_6="+str(fert.values_6)+"&value_7="+str(fert.values_7)+
  527. "&value_8="+str(fert.values_8)+"&ec="+str(fert.ec)+"&ph="+str(fert.ph))
  528. dataJson = response.json()
  529. return(dataJson)
  530.  
  531.  
  532.  
  533.  
  534.  
  535. def sendSetIrrigation(irrId):
  536. if irrId in cs.allIrrigation:
  537. irr = cs.allIrrigation[irrId]
  538. print("Prog al json " +str(irr.program))
  539. print("valvulas " + str(irr.valves))
  540. print("dias " + str(irr.days))
  541. response = requests.get(URL_SERVER + '/requests?set_irrigation&username=' +USERNAME +'&password=' +PASSWORD+
  542. "&username=Prueba1&password=goldfinger&program="+str(irr.program)+"&who=1"
  543. "&units="+str(irr.units)+"&water_before_1="+str(irr.water_before_1)+
  544. "&water_before_2="+str(irr.water_before_2)+"&water_after_1="+str(irr.water_after_1)+
  545. "&water_after_2="+str(irr.water_after_2)+"&water_total_1="+str(irr.water_total_1)+
  546. "&water_total_2="+str(irr.water_total_2)+"&kicks="+str(irr.kicks)+
  547. "&fertilization_program="+str(irr.fertilization_program)+
  548. "&condition_program="+str(irr.condition_program)+"&time_start_1="+str(irr.time_start_1)+
  549. "&time_start_2="+str(irr.time_start_2)+"&time_between_1="+str(irr.time_between_1)+
  550. "&time_between_2="+str(irr.time_between_2)+"&valves="+str(irr.valves)+"&days="+str(irr.days))
  551. dataJson = response.json()
  552. return(dataJson)
  553.  
  554. def sendSetInyection(inyId):
  555. if inyId in cs.allInyection:
  556. iny = cs.allInyection[inyId]
  557. print("Config Iny al Json " + str(iny.program))
  558. print("flow " + str(iny.flow) + "time On " + str(iny.time_on))
  559. response = requests.get(URL_SERVER + '/requests?set_inyector&username=' +USERNAME +'&password=' +PASSWORD+
  560. "&username=Prueba1&password=goldfinger&program="+str(iny.program)+"&who=1"
  561. "&flow="+str(iny.flow)+"&time_on="+str(iny.time_on)+"&litres_pulse="+str(iny.litres_pulse)+
  562. "&max_deviation="+str(iny.max_deviation)+"&simulator="+str(iny.simulator))
  563. dataJson = response.json()
  564. print("QUe tira el json " + str(dataJson))
  565. return(dataJson)
  566.  
  567. def sendSetConfigAlarms():
  568. cA = cs.alarm_config
  569. print("ENVIO AL JSON CONFIG ALARMS")
  570. response = requests.get(URL_SERVER + '/requests?set_config_alarms&username=' +USERNAME +'&password=' +PASSWORD+
  571. "&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)+
  572. "&delay_alarms_ec_ph_secs=" + str(cA.delay_alarms_ec_ph_secs)+"&delay_alarm_ph_dangerous_secs="+str(cA.delay_alarm_ph_dangerous_secs)+
  573. "&delay_alarm_ec_dangerous_secs="+str(cA.delay_alarm_ec_dangerous_secs)+"&delay_alarm_high_pressure_kg="+str(cA,delay_alarm_high_pressure_kg)+
  574. "&delay_alarm_low_pressure_secs="+str(cA.delay_alarm_low_pressure_secs)+"&delay_alarm_flow_secs="+str(cA.delay_alarm_flow_secs)+
  575. "&max_diff_warning_error_ec="+str(cA.max_diff_warning_error_ec)+"&max_diff_warning_error_ph="+str(cA.max_diff_warning_error_ph)+
  576. "&max_deviation_under_ph="+str(cA.max_deviation_under_ph)+"&max_deviation_over_ec="+str(cA.max_deviation_over_ec)+
  577. "&level_alarm_high_pressure_kg="+str(cA.level_alarm_high_pressure_kg)+"&level_alarm_low_pressure_kg="+str(cA.level_alarm_low_pressure_kg)+
  578. "&function_alarm_fertilizer_discontinued="+str(cA.function_alarm_fertilizer_discontinued)+"&function_alarm_high_pressure="+str(cA.function_alarm_high_pressure)+
  579. "&function_alarm_dangerous_flow="+str(cA.function_alarm_dangerous_flow)+"&function_alarm_no_fertilization="+str(cA.function_alarm_no_fertilization)+
  580. "&function_alarm_no_water="+str(cA.function_alarm_no_water)+"&pulses_fertilizer_no_control="+str(cA.pulses_fertilizer_no_control)+
  581. "&pulses_needs_fertilizer="+str(cA.pulses_needs_fertilizer)+"&max_seconds_between_water_pulses="+str(cA.max_seconds_between_water_pulses)+
  582. "&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)+
  583. "&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)+
  584. "&coefficient_correction_ec_more_1="+str(cA.coefficient_correction_ec_more_1)+"&coefficient_correction_ec_more_05="+str(cA.coefficient_correction_ec_more_05)+
  585. "&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)+
  586. "&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)+
  587. "&coefficient_correction_ph_more_1="+str(cA.coefficient_correction_ph_more_1)+"&coefficient_correction_ph_more_05="+str(cA.coefficient_correction_ph_more_05)+
  588. "&coefficient_correction_ph_more_03="+str(cA.coefficient_correction_ph_more_03)+"&secs_first_ec_correction="+str(cA.secs_first_ec_correction)+
  589. "&secs_first_ph_correction="+str(cA.secs_first_ph_correction))
  590. dataJson = response.json()
  591. print("QUE TIRA EL JSON DE CONFIG ALARMAS" + str(dataJson))
  592. return(dataJson)
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599. # response = requests.get('{}requests?set_inyection&username={}&who=1&password={}&program={}&flow={}&time_on={}&litres_pulse={}&max_deviation={}&simulator={}'\
  600. # .format(URL_SERVER, USERNAME,PASSWORD, iny.program,iny.flow, iny.time_on, iny.litres_pulse,iny.max_deviation, iny.simulator))
  601. # dataJson = response.json()
  602. # return(dataJson)
  603.  
  604. def getModifiedDataToController():
  605. print("Algo se modifico")
  606. data = fetchJson()
  607. cs.load_from_json(data)
  608. readFromControllerConfigAlarms()
  609. print("escribir config Al = " +str(write_ConfigAl))
  610. for i in range(0, TOTAL_FERT):
  611. readFromcontrollerPFert(i+1)
  612. for i in range(0, TOTAL_IRR):
  613. readFromcontrollerPRiego(i+1)
  614. for i in range(0, TOTAL_INY):
  615. readFromcontrollerConfigIny(i+1)
  616. #------------------------------------------------------------------------------
  617.  
  618.  
  619. def Calcular_CRC(listCRC):
  620. i = 0
  621. rot = 0
  622. result = 0xFFFF
  623.  
  624. while(i < len(listCRC)):
  625. result = result ^ listCRC[i]
  626. while(rot < 8):
  627. if(result & 0x0001) == 1:
  628. result = result >> 1
  629. result = result ^ 0xA001
  630. else:
  631. result = result >> 1
  632. rot = rot + 1
  633. rot = 0
  634. i = i+1
  635.  
  636. CRCH = int(result/256)
  637. CRCL = result % 256
  638. listCRC = [CRCL, CRCH]
  639. return(listCRC)
  640.  
  641. def BytesToInteger(stream):
  642. bytes_in = []
  643. a = 0
  644. for b in stream:
  645. bytes_in.append(int(hex(stream[a]), 16))
  646. a = a+1
  647. return(bytes_in)
  648.  
  649. correctLogin = False
  650. cs = ControllerState()
  651.  
  652. # c.save_to_file(FILEPATH_SAVE)
  653. # cs = ControllerState.load_from_file(FILEPATH_SAVE)
  654. # physicalController = serial.Serial("COM3", 9600)
  655.  
  656.  
  657.  
  658.  
  659. while(True):
  660. if correctLogin == False:
  661. correctLogin = checkLogin()
  662. if correctLogin:
  663. print("login ok")
  664. else:
  665. print("login error")
  666. else:
  667. print("Dirty_Flag " +str(readDirty()))
  668. if readDirty():
  669. getModifiedDataToController()
  670. sendServer()
  671. writeDirty()
  672. lastUpdate = fetchLastUpdate()
  673. if cs.last_update != int(lastUpdate):
  674. data = fetchJson()
  675. cs.load_from_json(data)
  676. writeToControllerConfigAlarms()
  677. for key in cs.allIrrigation:
  678. print("ESCRIBO TODOS LOS PROGRAMAS DE RIEGO")
  679. writeTocontrollerPRiego(key)
  680. for key in cs.allInyection:
  681. writeTocontrollerConfigIny(key)
  682. for key in cs.allFertilization:
  683. writeTocontrollerPFert(key)
  684.  
  685. print("updated")
  686. time.sleep(TIME_UPDATE)
  687.  
  688. if correctLogin:
  689. cs.save_to_file(FILEPATH_SAVE)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement