Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import serial
- import time
- from opentrons.drivers import connection, get_serial_ports_list
- port = get_serial_ports_list()[0]
- conn = connection.Connection(
- serial.Serial(), port=port, baudrate=115200)
- conn.open()
- conn.flush_input()
- print('Connected to', conn.name())
- def player_progress(c, timeout=5):
- c.flush_input()
- c.write_string('progress\r\n')
- c.wait_for_data(timeout=timeout)
- progress_data = c.readline_string()
- while 'play' not in progress_data.lower() and 'file' not in progress_data.lower():
- c.wait_for_data(timeout=timeout)
- progress_data = c.readline_string()
- c.wait_for_data(timeout=timeout)
- c.readline_string()
- c.flush_input()
- c.write_string('M27\r\n')
- c.wait_for_data(timeout=timeout)
- progress_bytes = c.readline_string()
- c.wait_for_data(timeout=timeout)
- c.readline_string()
- c.wait_for_data(timeout=timeout)
- c.readline_string()
- c.flush_input()
- return _parse_progress_data(progress_data, progress_bytes)
- def _parse_progress_data(progress_a, progress_b):
- progress_info = {
- 'file': None,
- 'percentage': None,
- 'elapsed_time': None,
- 'estimated_time': None,
- 'current_byte': None,
- 'total_bytes': None
- }
- e = 'Not currently playing'
- if progress_a != e and progress_b != e:
- try:
- # file: /sd/protocol.gcode, 7 % complete, elapsed time: 00:00:08, est time: 00:02:06 # noqa
- split_data = progress_a.split(',')
- file = split_data[0].strip().split(' ')[-1]
- progress_info['file'] = file.split('/')[-1]
- perc = split_data[1].split('%')[0].strip()
- progress_info['percentage'] = float(perc) / 100.0
- elapsed_time = split_data[2].split(':')
- t = int(elapsed_time[-1].strip())
- t += (int(elapsed_time[-2].strip()) * 60)
- t += (int(elapsed_time[-3].strip()) * 60 * 60)
- progress_info['elapsed_time'] = t
- # estimated time is not there in the beginning of a job
- estimated_time = None
- if len(split_data) > 3:
- estimated_time = split_data[3].split(':')
- est = int(estimated_time[-1].strip())
- est = int(estimated_time[-1].strip())
- est += (int(estimated_time[-2].strip()) * 60)
- est += (int(estimated_time[-3].strip()) * 60 * 60)
- progress_info['estimated_time'] = est
- except Exception:
- raise RuntimeError(
- 'Error parsing progress: {}'.format(progress_a))
- try:
- # SD printing byte 3980/53182
- byte_data = progress_b.strip().split(' ')[-1].split('/')
- progress_info['current_byte'] = int(byte_data[0])
- progress_info['total_bytes'] = int(byte_data[1])
- except Exception:
- raise RuntimeError(
- 'Error parsing progress: {}'.format(progress_b))
- return progress_info
- if not player_progress(conn)['file']:
- conn.write_string('play /sd/test.gcode\r\n')
- conn.wait_for_data(timeout=3)
- conn.readline_string()
- conn.wait_for_data(timeout=3)
- conn.readline_string()
- conn.wait_for_data(timeout=3)
- conn.readline_string()
- while True:
- progress = player_progress(conn)
- if not progress['file']:
- break
- print(progress['percentage'], progress['estimated_time'])
- conn.flush_input()
- conn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement