-
Notifications
You must be signed in to change notification settings - Fork 0
/
bez_fitx.py
187 lines (164 loc) · 6.2 KB
/
bez_fitx.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#!/usr/bin/env python3
import socket, sys, os, select
import szasar
SERVER = 'localhost'
PORT = 6012
#ez aldatu
class Menua:
Fold, Batt, Prop, Dump, Exit = range( 1, 6 )
Options = ( "Eguzki plakak zabaldu/tolestu", "Bateriaren karga maila ikusi", "Pultsatzaile bat martxan jarri", "Sentsoreen neurketak ikusi", "Amaiatu")
def menua():
print( "+{}+".format( '-' * 38 ) )
for i,option in enumerate( Menua.Options, 1 ):
print( "| {}.- {:<33}|".format( i, option ) )
print( "+{}+".format( '-' * 38 ) )
while True:
try:
selected = int( input( "Egin zure aukera: " ) )
except:
print( "Aukera okerra, saiatu berriro." )
continue
if 0 < selected <= len( Menua.Options ):
return selected
else:
print( "Aukera okerra, saiatu berriro." )
#aldatu (ibon)
def iserror(message):
#errorea da
if( message.startswith( "ER" ) ):
code = message[2:4]
if code=="01":
msg="Komando ezezaguna."
elif code=="02":
msg="Espero ez zen parametroa. Parametro bat jaso da espero ez zen tokian."
elif code=="03":
msg="Hautazkoa ez den parametro bat falta da."
elif code=="04":
msg="Parametroak ez du formatu egokia."
elif code=="05":
msg="Segurtasun kode okerra."
elif code=="11":
msg="Eguzki-plakak zabaldu edo tolestu eragiketa egitea ezinezkoa da."
elif code=="12":
msg="Plakak zabaltzea eskatu da eta zabalduta daude jada."
elif code=="21":
msg="Ezinezkoa da karga maila eskuratzea erantzuna negatiboa delako."
elif code=="31":
msg="Ezin zara propultsorearekin hasi, erantzuna negatiboa ematen du."
elif code=="32":
msg="Propultsorearekin hasi zara eta ezin zaio eutsi adierazitako iraupenean."
elif code=="41":
msg="Neurketak ezin izan dira eskuratu."
elif code:
#ez da definitutako errore-zenbaki bat
print("Errore ezezaguna.")
return True
#errore-zenbaki ezaguna da. errorea inprimatu
print("Errorea: " + msg)
return True
#ez da errorea eta OK da
elif(message.startswith("OK")):
return False
#ez da ez ER ez OK
return True
if __name__ == "__main__":
s = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
zerb_helb = (SERVER, PORT)
s.sendto(b"", zerb_helb)
buf, beste_helb = s.recvfrom(1) #mezua ez da garrantzitsua, soliko portu berria jakin nahi da
s.connect(beste_helb)
while True:
option = Menua.menua()
if(option == Menua.Exit):
print("Agur!")
s.send(b"")
s.close()
exit(0)
key = input("Sartu segurtasun-kodea: ")
saiakerak=0
#Kodea ondo sartzeko saiakera kopurua: 3
while(len(key)!=5 and saiakerak<3):
print("Kodeak 5eko luzeera izan behar du. Saiatu berriro.")
key = input("Sartu segurtasun-kodea: ")
saiakerak+=1
if option == Menua.Fold:
print("Zure aukera: Eguzki plakak zabaldu/tolestu\r\n")
param = input("Plakak zabaldu edo tolestu nahi dituzu? [0=zabaldu, 1=tolestu] ")
while(param not in ["0","1"]):
print("Balioa ez da zuzena. Saiatu berriro.")
param = input("Plakak zabaldu edo tolestu nahi dituzu? [0=zabaldu, 1=tolestu] ")
message = key + szasar.Command.Fold + param
s.send(message.encode("ascii"))
buf=s.recv(2+2) ## ER + kodea(2) edo OK
if not iserror(buf.decode("ascii")):
if(param=="0"):
print("Eguzki-plakak zabaltzen...")
else:
print("Eguzki-plakak ixten...")
elif option == Menua.Batt:
print("Zure aukera: Bateriaren karga maila ikusi\r\n")
message = key + szasar.Command.Batt
s.send(message.encode("ascii"))
buf=s.recv(2+3) # ER + kodea(2) edo OK + portzentaia (3)
bufDecoded = buf.decode("ascii")
if not iserror(bufDecoded):
message = bufDecoded[2:5]
print("Bateriaren karga honakoa da: %" + message[0:2] +"," + message[2])
elif option == Menua.Prop:
saiakerak1=0
saiakerak=0
aurkituaid=False
aurkituadenb=False
print("Zure aukera: Pultsatzaile bat martxan jarri\r\n")
paramId = int(input("Adierazi propultsatzailearen identifikatzailea (0-tik 9-rainoko zenbakia) "))
while ( (paramId < 0 or paramId > 9) and saiakerak<2 ):
print("Balioa ez da zuzena. Saiatu berriro.")
paramId = int(input("Adierazi propultsatzailearen identifikatzailea (0-tik 9-rainoko zenbakia) "))
saiakerak+=1
if saiakerak==2:
aurkituaid=True
if aurkituaid:
continue
paramIraupen= int(input("eta propultsioaren iraupena milisegundutan (3 digitu) "))
while ( len(str(paramIraupen)) != 3 and saiakerak1<2 ):
print("Balioa ez da zuzena. Saiatu berriro.")
paramIraupen= int(input("Orain adierazi propultsioaren iraupena milisegundutan (3 digitu) "))
saiakerak1+=1
if saiakerak1==2:
aurkituadenb=True
if aurkituadenb:
continue
message = key + szasar.Command.Prop +str(paramId) + str(paramIraupen)
s.send(message.encode("ascii"))
buf=s.recv(2+2) # OK edo ER + kodea(2)
if not iserror(buf.decode("ascii")):
print("Propultsorea ondo aktibatu da.")
elif option == Menua.Dump:
print("Zure aukera: Sentsoreen neurketak ikusi\r\n")
message = key + szasar.Command.Dump
s.send(message.encode("ascii"))
# Lehen irakurketa: ER / OK + 1000 byte (edo gutxiago) = 1002 byte max + RETURN(1)
buf = s.recv(1003)
# datan neurketa-zati guztiak gorde (OK erantzuna ezik)
data = buf.decode()[2:]
if not iserror(buf.decode("ascii")):
# neurketa-zatiak irakurri, (ER/OK mezurik gabe)
# bufferraren tamaina 1000 byte baino gutxiago den arte
# edo 1000 byte eta hurrengoa hutsa
if(len(buf.decode("ascii")) == 1002+1): #mezua osorik beteta zegoen, 1 gehitu RETURN-agatik
jasota,_,_ = select.select([s],[],[],10)
if not jasota:
print("Eskuratutako neurketak: \r\n" + data)
continue
buf = s.recv(1001)
while(len(buf.decode("ascii")) == 1000+1):
data += buf.decode("ascii")
buf = s.recv(1001)
# azken neurketa-zatia gehitu.
if buf != b"":
data += buf.decode("ascii")
print("Eskuratutako neurketak: \r\n" + data)
# marra bereizlea inprimatu
print("\r\n" + "="*40 + "\r\n")
s.send(b"")
s.close()