Advertisement
Tlams

Voiture_slave

Aug 10th, 2013
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.52 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import threading
  3. import socket
  4. import pyk8055_nv
  5. import time
  6. import hashlib
  7.  
  8. ############################
  9. ###Variables à configurer###
  10. ############################
  11. Adresse_cart = 3  #Voir cavalier carte
  12. UDP_PORT = 26010  #Port de communication commum
  13. PW = "Password"   #MDP Commun
  14. timer_in = 0
  15. marge_ana_in = 1
  16.  
  17. ############################
  18. ####Fonctions autorisés#####
  19. ############################
  20. autorise_func = [
  21.     "analog_clear",
  22.     "analog_all_clear",
  23.     "analog_out",
  24.     "analog_all_out",
  25.     "digital_write",
  26.     "digital_off",
  27.     "digital_all_off",
  28.     "digital_on",
  29.     "digital_all_on",
  30.     "counter_reset",
  31.     "counter_read",
  32.     "counter_set_debounce"
  33.     ]
  34.  
  35. ############################
  36. #####Def. des fonctions#####
  37. ############################
  38.  
  39. def presque_egal(l1,l2,eps):
  40.     for i in range(len(l1)):
  41.         if abs(l1[i] - l2[i]) > eps:
  42.             return False
  43.     return True
  44.  
  45.    
  46. def dat_heure():
  47.     return time.strftime('%d/%m/%y %H:%M:%S',time.localtime())
  48.  
  49.  
  50. def enter_k8055_result(timer):
  51.     back_digi_result = []
  52.     back_ana_result = [0, 0]
  53.     while a.isAlive() is True:
  54.         time.sleep(timer)
  55.         compteur = 1
  56.         digi_result = []
  57.         ana_result = []
  58.         while (compteur < 6):
  59.             digi_result.append(dev.digital_in(compteur))
  60.             compteur += 1
  61.         ana_result.append(dev.analog_in(1))
  62.         ana_result.append(dev.analog_in(2))  
  63.         if (add_eme != "None" and (not presque_egal(ana_result,back_ana_result,marge_ana_in) or (back_digi_result != digi_result) )):
  64.             sock_renvoie.sendto(hashlib.sha256(PW).hexdigest() +"|-|L|-|" + str(digi_result) +"|-|"+ str(ana_result), (add_eme, UDP_PORT))  
  65.             print dat_heure(), "(" + add_eme + ")" + " Données envoyés: "+str(digi_result)+str(ana_result)
  66.             back_digi_result = digi_result
  67.             back_ana_result = ana_result
  68.            
  69. def out_k8055_result():
  70.     while b.isAlive() is True:
  71.         data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
  72.         data_traitement = data.split('|-|')
  73.         PW_Server = data.split('|-|')[0]
  74.         if ((hashlib.sha256(PW).hexdigest() == PW_Server)):
  75.  
  76.             if data_traitement[1] == "end":
  77.                 end()
  78.             elif len(data_traitement) == 2:
  79.                 data_result = "dev."+data_traitement[1]+"()"
  80.             elif len(data_traitement) == 3:
  81.                 data_result = "dev."+data_traitement[1]+"("+data_traitement[2]+")"
  82.             elif len(data_traitement) == 4:
  83.                 data_result = "dev."+data_traitement[1]+"("+data_traitement[2]+","+data_traitement[2]+")"          
  84.  
  85.             print dat_heure(), "(" + addr[0] + ")" + " Données recu: data_result"
  86.  
  87.             try:
  88.                 if data_traitement[1] in autorise_func:
  89.                     exec(data_result)                    
  90.                     sock_renvoie.sendto(hashlib.sha256(PW).hexdigest()+"|-|Commande exécuté", (addr[0], UDP_PORT))
  91.                     print dat_heure(), "(" + addr[0] + ")" + " Données envoyés: Commande exécuté"
  92.                     global add_eme
  93.                     add_eme = addr[0]
  94.             except:
  95.                 sock_renvoie.sendto(hashlib.sha256(PW).hexdigest()+"|-|Commande échoué !", (addr[0], UDP_PORT))
  96.                 print dat_heure(), "(" + addr[0] + ")" +  " Données envoyés: Commande échoué !"
  97.         else:
  98.             sock_renvoie.sendto(PW_Server+"|-| Mot de passe incorrect", (addr[0], UDP_PORT))
  99.             print dat_heure(), "(" + addr[0] + ")" + " Données envoyés: Mot de passe incorrect"
  100.            
  101. def end():
  102.     dev.disconnect()
  103.     print dat_heure(),"Déconnexion carte"
  104.     sock.close()
  105.     print dat_heure(),"Déconnexion du socket"
  106.     a._Thread__stop()
  107.     print dat_heure(),"Arrêt du thread d'envoie des informations d'entrées"
  108.     b._Thread__stop()
  109.     print dat_heure(),"Arrêt du thread de réception"  
  110.  
  111.  
  112.  
  113. add_eme = "None"
  114. dev = pyk8055_nv.device(Adresse_cart)
  115.  
  116. UDP_IP = socket.gethostbyname(socket.gethostname())
  117. sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  118. sock_renvoie = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)              
  119. sock.bind((UDP_IP, UDP_PORT))
  120.  
  121. a = threading.Thread(None,enter_k8055_result,None,(timer_in,))
  122. b = threading.Thread(None,out_k8055_result)
  123.  
  124. print dat_heure(),"Lancement du thread d'envoie des entrées"
  125. a.start()
  126. print dat_heure(),"Lancement du thread de reception des commandes"
  127. b.start()
  128. print dat_heure(),"Démmarage effectué"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement