#
# Python script to send MODBUS RTU to XY-MD01 to read Temperature and humidity
#
# This has examples of converting the bytes received.
#
#
#data = ser.read( ser.in_waiting )
# print received bytes as list
#print( list( data ) )

# if you convert to string, it gets in a muddle
# ret=str(ser.read(ser.in_waiting))

import time
import sys
import serial

#sys.stdin.read(1)

ser = serial.Serial(
    port="com15", baudrate=9600,
#    port="com4", baudrate=9600,
    parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS, xonxoff=False,
#    rtscts=True, dsrdtr=True, timeout=3)
    rtscts=False, dsrdtr=False, timeout=2 )

print(ser.name)

#sys.stdin.read(1)
cmd = b'\x01\x04\x00\x01\x00\x01\x60\x0A' # temperature
#cmd = b'\x01\x04\x00\x02\x00\x01\x90\x0A' # humidity

#ser.write(b'\x01\x04\x00\x01\x00\x01\x60\x0A')
#ser.write(b'\x01\x04\x00\x02\x00\x01\x90\x0A')

cmd = b'\x01\x04\x00\x01\x00\x01\x60\x0A' # temperature
#cmd = b'\x01\x04\x00\x02\x00\x01\x90\x0A' # humidity

ser.write( cmd )

# pause so that the data is available.
time.sleep(0.1)

#ret=str(ser.read(ser.in_waiting))
#print( ret )

data = ser.read( ser.in_waiting )
# print received bytes as list
print( list( data ) )
# print bytes 
print( data.hex('_') )

print( data[3], data[4] )


print( "temperature:" )
# Temperature
cmd = b'\x01\x04\x00\x01\x00\x01\x60\x0A' # temperature
ser.write( cmd )
time.sleep(0.1)
data = ser.read( ser.in_waiting )
# print received bytes as list
print( list( data ) )
print( list( data[3:5])  )
print( int.from_bytes( data[3:5], "big" )/10.0 , "C") 

# Humidity
print( "Humidity:" )

cmd = b'\x01\x04\x00\x02\x00\x01\x90\x0A' # humidity
ser.write( cmd )
time.sleep(0.1)
data = ser.read( ser.in_waiting )
# print received bytes as list
print( list( data ) )
print( int.from_bytes( data[3:5], "big" )/10.0 , "%") 

#convert the string to byte array by using the b' prefix
ser.write( b'AUTO' )
time.sleep(1)
data = ser.read( ser.in_waiting )
# print received bytes as list
print( str( data ) )

ser.write( b'STOP' )
time.sleep(1)
data = ser.read( ser.in_waiting )
# print received bytes as list
print( str( data ) )

ser.write( b'PARAM' )
time.sleep(1)
data = ser.read( ser.in_waiting )
# print received bytes as list
print( str( data ) )

ser.close()
