diff --git a/firmware/rust1/reset.py b/firmware/rust1/reset.py
new file mode 100644
index 0000000000000000000000000000000000000000..2e20e038a2869399283eff1955f4e4df34147abf
--- /dev/null
+++ b/firmware/rust1/reset.py
@@ -0,0 +1,11 @@
+# https://github.com/earlephilhower/arduino-pico/blob/c095fce5b2f26b03fa0e6374e3371a1799abb5b1/tools/uf2conv.py#L374C1-L382C32
+import serial, time
+ser = serial.Serial()
+ser.port = "/dev/ttyACM0"
+ser.open()
+ser.baudrate = 9600
+ser.dtr = True
+time.sleep(0.1)
+ser.dtr = False
+ser.baudrate = 1200
+ser.close()
diff --git a/firmware/rust1/rtumaster_pymodbus.py b/firmware/rust1/rtumaster_pymodbus.py
index bd890c24faee1626907d461b8132ed1d664f4836..9c8ba6831b0afecec8c1cc52d5d931034fa37756 100644
--- a/firmware/rust1/rtumaster_pymodbus.py
+++ b/firmware/rust1/rtumaster_pymodbus.py
@@ -39,6 +39,8 @@ def main():
         logger.info("connected")
 
         x = client.read_holding_registers(address=1, count=1, slave=DEVICE_ADDR)
+        if isinstance(x, ModbusException):
+            raise x
         logger.info("holding reg 1: %s: %r", x, x.registers)
 
         scratch_reg = 2
@@ -96,7 +98,7 @@ def main():
             time.sleep(0.1)
 
     except ModbusException as exc:
-        logger.error("%s", exc)
+        logger.exception("%s", exc)
 
 if __name__ == "__main__":
     main()