Having released FanBoy into the wild it has been clear from the start that, although being a Linux and CLI guy, I didn't want to stick with just the plain serial text interface. When it comes to data visualization and control parameter tweaking a GUI is much more efficient. I therefore kept the serial communication 'protocol' simple enough to make it understandable by a stateless parser.

In order to keep the project as platform-independent as possible my choice fell on Qt for an application framework. While writing stuff in QML seems to be en vogue these days I deliberately chose not to do so, mainly because of the look-and-feel of the result. I really like the simplicity of describing UIs in QML but these applications just don't feel right on a desktop, more like running an Android app in an emulator. I must admit that, while fully supporting the idea of cross-platform development, I don't think cross-device-type applications make much sense... I digress.

So here's an impression of what I came up with: meet FanMan!

FanMan Screenshot

The name is of course an allusion to the one of its hardware counterpart. There are timed plots for all of the temperature and fan inputs as well as a configuration dialog that lets you set custom input names as well as control parameters for the fans. It is minimizable to system tray and saves its last window position and state, so to have it start in tray mode just make sure to hide the main window before shutting it down.

One thing worth mentioning might be the tray menu: as FanMan is designed to be a direct interface to FanBoy you need to save any changes you have done to make them permanent, just as you would do via serial interface. For this purpose you can find corresponding entries in aforementioned tray menu.

FanMan auto-detects which (USB-)serial interface to use by iterating over all available ones and comparing Vendor- and Product-ID against the ones reported by the Arduino Leonardo HID implementation. This has the drawback that it currently cannot distinguish between a FanBoy and any other Leonardo based device. I plan to fix this by actively probing the device as well as providing a command line option to manually select the interface. The latter will provide the option to use multiple FanBoys as well.

Licensing got a bit tricky there: I usually prefer publishing my open source projects under MIT License in order to allow for commercial re-usage of the code. Qt (apart from the commercial license) only offers LGPLv3 and GPLv2/GPLv3 of which the former does not cover the Qt Charts add-on which I use to draw the graphs. So this leaves me with GPL which essentially forces any derived application to be licensed under GPL as well. So if I ever decide to make FanBoy a commercial product I will always have to keep its GUI open source to fulfill the terms of the GPL. I don't see this as an issue though, just something to keep in mind.

As always, the code is on GitHub: https://github.com/lynix/fanman