The loop assumes there is only one fan, and tries to open a socket to it, rather than waiting to open a socket to the current device for the plugin in the iteration over devices - i.e.:
I rearranged the code to encapsulate getting the fan status in a new method (getFanStatus), which runConcurrentThread (and deviceStartComm) simply call upon.
A couple of problems:
The loop assumes there is only one fan, and tries to open a socket to it, rather than waiting to open a socket to the current device for the plugin in the iteration over devices - i.e.: