· 10 years ago · Mar 17, 2016, 06:39 AM
1import hashlib
2import hmac
3import socket
4import time
5import serial
6#import mysql.connector
7
8from datetime import datetime
9
10secretKey = 'j344rfdas'
11
12ser = serial.Serial("COM9", 9600, timeout=1) ##ARDUINO
13
14client_id = None
15event_id = None
16request = None
17hmaccc = None
18message = None
19
20client_id = "s995-549g"
21
22#Loome DB ühenduse
23try:
24 cnx = mysql.connector.connect(user='iot', password='userpar1',
25 host='127.0.0.1',
26 database='iot')
27 print("SQL connected")
28except:
29 print("SQL error")
30
31origkey = None
32calculatedKey = None
33requ = None
34HOST = '193.40.232.159'
35PORT = 8888
36
37def send_packet():
38 exit()
39
40def writelog():
41 exit()
42
43def calculate_hmac():
44 exit()
45
46def validate_request(req):
47 print("Sisend on:", req, "\n")
48
49 originaal = origkey
50 print ("Originaal vƵti on:", originaal)
51 calculatedKey = bytes.decode( hashpacket(requ ))
52 print("Arvutatud vƵti on:", calculatedKey)
53
54 if calculatedKey == originaal:
55 return True
56 else:
57 return False
58
59
60
61def create_hmac():
62 exit()
63
64def create_packet(klient_id, even_id, request):
65 timest = (int(time.time()))
66 packet = "{}.{}.{}.{}.{}".format(klient_id, even_id, timest, request, bytes.decode (hashpacket("{}.{}.{}.{}".format(klient_id, even_id, timest, request))))
67 global requ
68 requ = "{}.{}.{}.{}".format(klient_id, even_id, timest, request)
69 return packet
70
71def hashpacket(packet):
72 bytes = str.encode(packet)
73 key = str.encode(secretKey)
74 print(key)
75 print(bytes)
76 hashedpacket = ( hmac.HMAC(key, bytes,hashlib.sha256))
77 global origkey
78 origkey = hashedpacket.hexdigest()
79 return str.encode(hashedpacket.hexdigest())
80
81
82
83serversocket = socket.socket(
84 socket.AF_INET, socket.SOCK_STREAM)
85serversocket.bind((HOST, PORT))
86serversocket.listen(5)
87
88
89def log_packet(klient_id, even_id, s_timestamp,s_request ):
90 try:
91 print(klient_id, even_id, s_timestamp,s_request)
92 query = "INSERT INTO `event`(`seade_id`, `date`, `event`, `value`) VALUES ('{}','{}','{}','{}')".format(klient_id, s_timestamp, even_id, s_request)
93 #print (query)
94
95 cursor = cnx.cursor()
96 cursor.execute(query)
97 cnx.commit()
98 cursor.close()
99 print("DB done")
100 return
101 except:
102 print("Midagi lƤks valest")
103
104requestino = 1
105
106def arvuta():
107 global requestino
108 try:
109 data2 = bytes.decode(data)
110 s_client_id, s_event_id, s_timestamp, s_request, s_key = data2.split(".")
111 #print (s_client_id, s_event_id, s_timestamp, s_request, s_key)
112 print ("\n Arvutame paketi ja võtme üle\n")
113 pakett = "{}.{}.{}.{}".format(s_client_id, s_event_id, s_timestamp, s_request)
114 print(pakett)
115 hmac_calculated = bytes.decode( hashpacket(pakett))
116 hmac_originaal = s_key
117
118 if hmac_calculated == hmac_originaal:
119 print("Vastu vƵetud")
120 log_packet(s_client_id, s_event_id, (datetime.fromtimestamp(int(s_timestamp))), s_request)
121 else:
122 print("packet invalid")
123
124 print ()
125 requestino = int(s_event_id)
126
127 except ValueError:
128 print("Midagi lƤks valest ", ValueError)
129
130def arduino(): #### ARDUINO
131 if requestino < 125:
132 ser.write(bytes(b'1'))
133 print "1"
134 if requestino < 250 and requestino > 125:
135 ser.write(bytes(b'2'))
136 print "2"
137 if requestino < 375 and requestino > 250:
138 ser.write(bytes(b'3'))
139 print "3"
140 if requestino < 500 and requestino > 375:
141 ser.write(bytes(b'4'))
142 print "4"
143 if requestino < 625 and requestino > 500:
144 ser.write(bytes(b'5'))
145 print "5"
146 if requestino < 750 and requestino > 625:
147 ser.write(bytes(b'6'))
148 print "6"
149 if requestino < 875 and requestino > 750:
150 ser.write(bytes(b'7'))
151 print "7"
152 if requestino > 875:
153 ser.write(bytes(b'8'))
154 print "8"
155
156while 1:
157 (clientsocket, address) = serversocket.accept()
158
159 global data
160 data = clientsocket.recv(10000000)
161# print(data)
162
163 clientsocket.sendall(b'Tanan')
164 clientsocket.close()
165 arvuta()
166 print (requestino)
167 arduino()
168
169 #break