def read_mh_z19_with_temperature(serial_device):
""" Read the CO2 PPM concenration and temperature from a MH-Z19 sensor"""
logger = logging.getLogger(__name__)
ser = serial.Serial(port=serial_device,
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS)
sbuf = bytearray()
starttime = time.time()
finished = False
timeout = 2
res = None
ser.write(MZH19_READ)
while not finished:
mytime = time.time()
if mytime - starttime > timeout:
logger.error("read timeout after %s seconds, read %s bytes",
timeout, len(sbuf))
return None
if ser.inWaiting() > 0:
sbuf += ser.read(1)
if len(sbuf) == MHZ19_SIZE:
# TODO: check checksum
res = (sbuf[2]*256 + sbuf[3], sbuf[4] - 40)
logger.debug("Finished reading data %s", sbuf)
finished = True
else:
time.sleep(.1)
logger.debug("Serial waiting for data, buffer length=%s",
len(sbuf))
return res
评论列表
文章目录