Many thanks for your feedback. I resolved it slightly different. The main bug was that the status was never updated once the initialization was successful:
/** mlx.begin() always returns true, hence we need to check the I2C adress */
bool isMLX90614Present() {
Wire.beginTransmission(MLX90614_I2CADDR);
byte error = Wire.endTransmission();
mlx.begin();
mlxData.status = (error == 0);
return (mlxData.status);
}
void updateMLX() {
if (mlxData.status || (mlxData.status = isMLX90614Present())) {
mlxData.ambient_t = mlx.readAmbientTempC();
mlxData.object_t = mlx.readObjectTempC();
}
}