Definitely run it off a battery, assuming you have one that will last several days. Clean power is important.
I haven't looked at your code but have you checked for memory leaks? If you use the String functions you might be leaking memory. There are sample code snippets out there that you can drop in to report free memory. That might help with debugging.
Connect it up to a serial monitor (eg laptop) and get it to send you diag info regularly. Make it print out the value of one of your variables at regular time intervals. Note what happens when you send it a failed command. Does the output pause? Does the value of that variable make sense?
Checking for humidity: if you can't measure humidity easily, package your board up into a plastic box, sealed as best you can, and put a packet of Do Not Eat in there to absorb as much moisture as possible.
Since you have apparently had it working in the garage for up to five days, the fact it seemed to work fine in your room is not to be trusted. The fault is so intermittent that you'd need to run it for several weeks before you can be reasonably sure it is ok.