def run(self, *args, initial_port=None, baud=None, dry=None):
        port = self.get_port(initial_port)
        ser = Serial(port, baud)

        measurement = Measurement()

        while 1:
            try:
                while not ser.is_open:
                    port = self.get_port(initial_port)
                    print('.', end='', flush=True)
                    if port:
                        ser.setPort(port)
                        try:
                            ser.open()
                            print('Serial connected', port, baud)
                            break
                        except SerialException as e:
                            print('\n', e)
                    time.sleep(5)
                serial_line = ser.readline().decode("utf-8")
                measurement.parse_line(serial_line)
                if measurement.completed:
                    if measurement.is_complete():
                        if dry:
                            print(measurement.as_dict())
                        else:
                            ok = send_measurement(measurement)
                            print('measurement send,', ok)
                    measurement = Measurement()

            except KeyboardInterrupt:
                print('Serial reader closed, keyboard interrupt')
                ser.close()
                break

            except SerialException as e:
                print('Serial exception', e)
                ser.close()

            except Exception:
                # Something went very wrong ?? Very dirty fix for now
                update_script = '/home/pi/update.sh'
                if os.path.isfile(update_script):
                    subprocess.call(update_script)