11import socket
2- import asyncio
3- import time
4- from sys import argv
52
63PH803W_DEFAULT_TCP_PORT = 12416
74PH803W_PING_INTERVAL = 4000
@@ -13,36 +10,42 @@ class Device(object):
1310 def __init__ (self , host ):
1411 self .result = {}
1512 self .host = host
16- self .socket = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
13+ self ._socket = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
14+ self ._loop = True
1715
1816 async def run_async (self ):
1917 self .run ()
2018
21- def run (self ) :
22- self .loop = True
23- self .socket .connect ((self .host , PH803W_DEFAULT_TCP_PORT ))
19+ def run (self , once : bool = False ) -> bool :
20+ self ._loop = True
21+ self ._socket .connect ((self .host , PH803W_DEFAULT_TCP_PORT ))
2422
25- data = bytes .fromhex (' 0000000303000006' )
26- self .socket .sendall (data )
27- response = self .socket .recv (1024 )
23+ data = bytes .fromhex (" 0000000303000006" )
24+ self ._socket .sendall (data )
25+ response = self ._socket .recv (1024 )
2826 passcode_lenth = response [9 ]
2927 passcode_raw = response [10 : 10 + passcode_lenth ]
3028 passcode = passcode_raw .decode ("utf-8" )
31- print (passcode )
32-
33- data = bytes .fromhex ('000000030f00000800' ) + passcode_lenth .to_bytes (1 , 'little' ) + passcode_raw
34- self .socket .sendall (data )
35- response = self .socket .recv (1024 )
29+ # print(passcode)
30+
31+ data = (
32+ bytes .fromhex ("000000030f00000800" )
33+ + passcode_lenth .to_bytes (1 , "little" )
34+ + passcode_raw
35+ )
36+ self ._socket .sendall (data )
37+ response = self ._socket .recv (1024 )
3638 if response [8 ] != 0 :
37- print ('Error connecting' )
39+ # print("Error connecting")
40+ return False
3841
3942 # Connection established, from now on some cyclig bahavior
40- data = bytes .fromhex (' 000000030400009002' )
41- self .socket .sendall (data )
43+ data = bytes .fromhex (" 000000030400009002" )
44+ self ._socket .sendall (data )
4245 empty_counter = 0
43- data = bytes .fromhex (' 0000000303000015' )
44- while self .loop and empty_counter < 10 :
45- response = self .socket .recv (1024 )
46+ data = bytes .fromhex (" 0000000303000015" )
47+ while self ._loop and empty_counter < 10 :
48+ response = self ._socket .recv (1024 )
4649 if len (response ) == 0 :
4750 empty_counter += 1
4851 continue
@@ -51,44 +54,58 @@ def run(self):
5154 if len (response ) == 18 :
5255 flag1 = response [8 ]
5356 if flag1 & 0b0000_0100 :
54- print (' In water' )
57+ print (" In water" )
5558 flag2 = response [9 ]
5659 if flag2 & 0b0000_0010 :
57- print (' ORP on' )
60+ print (" ORP on" )
5861 if flag2 & 0b0000_0001 :
59- print ('PH on' )
60- #state_raw = response[8 : 9]
61- ph_raw = response [10 : 12 ]
62- ph = int .from_bytes (ph_raw , 'big' ) * 0.01
63- redox_raw = response [12 : 14 ]
64- redox = int .from_bytes (redox_raw , 'big' ) - 2000
65- unknown1_raw = response [14 : 16 ]
66- unknown1 = int .from_bytes (unknown1_raw , 'big' )
67- unknown2_raw = response [15 : 18 ]
68- unknown2 = int .from_bytes (unknown2_raw , 'big' )
69- print ('pH: %s, Redox: %s, U1: %s, U2: %s' % (ph , redox , unknown1 , unknown2 ), flush = True )
70-
71-
72-
73- self .socket .sendall (data )
74- response = self .socket .recv (1024 )
75-
62+ print ("PH on" )
63+ # state_raw = response[8 : 9]
64+ ph_raw = response [10 :12 ]
65+ ph = int .from_bytes (ph_raw , "big" ) * 0.01
66+ redox_raw = response [12 :14 ]
67+ redox = int .from_bytes (redox_raw , "big" ) - 2000
68+ unknown1_raw = response [14 :16 ]
69+ unknown1 = int .from_bytes (unknown1_raw , "big" )
70+ unknown2_raw = response [15 :18 ]
71+ unknown2 = int .from_bytes (unknown2_raw , "big" )
72+ print (
73+ "pH: %s, Redox: %s, U1: %s, U2: %s"
74+ % (ph , redox , unknown1 , unknown2 ),
75+ flush = True ,
76+ )
77+ self ._socket .sendall (data )
78+ response = self ._socket .recv (1024 )
79+ if once :
80+ break
7681
7782 def _handle_response (self , data ):
7883 if data [0 ] != 0 and data [1 ] != 0 and data [2 ] != 0 and data [2 ] != 3 :
79- print ('Ignore data package because invalid prefix: %s' % data [0 :3 ])
80- self .result ['status' ] = ['Error' , 'Ignore data package because invalid prefix' ]
84+ # print("Ignore data package because invalid prefix: %s" % data[0:3])
85+ self .result ["status" ] = [
86+ "Error" ,
87+ "Ignore data package because invalid prefix" ,
88+ ]
8189 return
8290 data_length = data [4 ]
8391 if len (data ) != data_length + 5 :
8492 if len (data ) > data_length :
85- additional_data = data [data_length : len (data )]
86- data = data [0 : data_length ]
87- print ('Split into two data packages because additional data detected. First %s - Second %s}' % (data .toString ('hex' ), additional_data .toString ('hex' )))
93+ additional_data = data [data_length : len (data )]
94+ data = data [0 :data_length ]
95+ # print(
96+ # "Split into two data packages because additional data detected. First %s - Second %s}"
97+ # % (data.toString("hex"), additional_data.toString("hex"))
98+ # )
8899 self ._handle_response (additional_data )
89100 else :
90- print ('Ignore data package because invalid length(%s): %s' % (data_length , data ))
91- self .result ['status' ] = ['Error' , 'Ignore data package because invalid length' ]
101+ # print(
102+ # "Ignore data package because invalid length(%s): %s"
103+ # % (data_length, data)
104+ # )
105+ self .result ["status" ] = [
106+ "Error" ,
107+ "Ignore data package because invalid length" ,
108+ ]
92109 return
93110
94111 message_type = data [7 ]
@@ -103,20 +120,32 @@ def _handle_response(self, data):
103120 elif message_type == 0x94 :
104121 self ._handle_data_extended_response (data )
105122 else :
106- print ('Ignore data package because invalid message type %s: %s' % (message_type , data ))
107- self .result ['status' ] = ['Ignore' , 'Ignore data package because invalid length' , message_type , data ]
123+ # print(
124+ # "Ignore data package because invalid message type %s: %s"
125+ # % (message_type, data)
126+ # )
127+ self .result ["status" ] = [
128+ "Ignore" ,
129+ "Ignore data package because invalid length" ,
130+ message_type ,
131+ data ,
132+ ]
108133
109134 def _handle_passcode_response (self , data ):
110135 pass
136+
111137 def _handle_login_response (self , data ):
112138 pass
139+
113140 def _handle_ping_pong_response (self ):
114141 pass
142+
115143 def _handle_data_extended_response (self , data ):
116144 pass
117145
118146 def _send_ping (self ):
119147 pass
148+
120149 # if (this.pingWaitTimeout) {
121150 # clearTimeout(this.pingWaitTimeout);
122151 # this.pingWaitTimeout = null;
@@ -133,10 +162,10 @@ def _send_ping(self):
133162 # } def _handle_data_response(self, data):
134163
135164 def abort (self ):
136- self .loop = False
165+ self ._loop = False
137166
138167 def close (self ):
139- self .socket .close ()
168+ self ._socket .close ()
140169
141170 def get_result (self ):
142171 return str (self .result )
@@ -146,4 +175,4 @@ def __enter__(self):
146175 return self
147176
148177 def __exit__ (self , type , value , traceback ):
149- self .socket .close ()
178+ self ._socket .close ()
0 commit comments