Hi!
For fun I decided to try removing the auto-shutdown from bus.py on an I2C NACK to see what would happen with my machine. I only have BME280 and SGP40s on I2C, everything else is using UART or another interface.
Interestingly, throughout an 06h 26m 03s print where the 2x BME280s and 2x SGP40s get sampled every 1s (at least 138,000 I2C reads/writes), I encountered 6x START_READ_NACKs or START_NACKs with no adverse effects. The errors appeared transient and no problems encountered.
I did hit 1x genuine NACK from the SGP40 when writing to the device and following this, the next read from the BME280 fails with a BUS_TIMEOUT. Something broke here, but I don’t know what exactly. At any rate, 1s later the SGP40 recovered from this (all future reads/writes succeed), but the BME280 degrades in place and returns self.reactor.NEVER, so it stops updating.
Obviously more testing is needed, but my initial smoke test seems to indicate that START NACKs in this context are benign and while there’s more to see with the true NACK + BUS_TIMEOUT, it also appeared to be a transient error.