1+ import espnow
2+ import json
3+
4+ class CLIENT :
5+ def __init__ (self ) -> None :
6+ self .esp = espnow .ESPNow ()
7+
8+ def configure (self , timeout = 5 ) -> None :
9+ self .timeout : int = timeout
10+
11+ def connect (self , peer : str ) -> None :
12+ self .peer : str = peer
13+ self .esp .active (True )
14+ self .esp .add_peer (self .peer )
15+
16+ def send_message (self , data : str ) -> bool :
17+ ack : bool = self .esp .send (self .peer , data )
18+ return ack
19+
20+ def receive_message (self , recv_timeout :int = 5 ) -> list | None :
21+ received = self .esp .recv (recv_timeout )
22+ if received [0 ] == None : return
23+ return received
24+
25+ def send_txt (self , filename : str ) -> bool :
26+ with open (filename , 'r' ) as f :
27+ data : str = str (f .readlines ())
28+ sent : bool = self .send_message (data )
29+ return sent
30+
31+ def send_json (self , filename : str , * , indent : int = 4 ) -> bool :
32+ with open (filename , 'r' ) as f :
33+ unparsed = json .load (f )
34+ parsed : str = json .dumps (unparsed , indent = indent )
35+ sent : bool = self .send_message (parsed )
36+ return sent
37+
38+ def receive_to_txt (self , target_file : str , mode : str = 'a' ) -> bool :
39+ if ".txt" not in target_file : raise SyntaxError ("File format must be .txt" )
40+ try :
41+ data : list | None = self .receive_message ()
42+ if data == None : return False
43+ data_list : list [str ] = str (data [- 1 ]).split ("\n " )
44+ if data_list [- 1 ] == "" : data_list = data_list [:- 1 ]
45+ with open (target_file , mode ) as f :
46+ f .writelines (data_list )
47+ return True
48+ except SyntaxError :
49+ raise
50+
51+ def receive_to_json (self , target_file : str , mode : str = 'a' ) -> bool :
52+ if ".json" not in target_file : raise SyntaxError ("File format must be .json" )
53+ try :
54+ data : list | None = self .receive_message ()
55+ if data == None : return False
56+ mac : str = str (data [0 ])
57+ message = json .loads (str (data [- 1 ]))
58+ unparsed : dict = {
59+ "mac" : mac ,
60+ "message" : message
61+ }
62+ with open (target_file , mode ) as f :
63+ json .dump (unparsed , f )
64+ return True
65+ except SyntaxError :
66+ raise
67+
68+ def receive_to_dict (self ) -> dict :
69+ data : list | None = self .receive_message ()
70+ if data == None : return {}
71+ mac : str = str (data [0 ])
72+ message = json .loads (str (data [- 1 ]))
73+ unparsed : dict = {
74+ "mac" : mac ,
75+ "message" : message
76+ }
77+ return unparsed
0 commit comments