Current version release: July 27, 2014
*includes only version 1.3.1 or newer
CGWatcher is a GUI for bitcoin miners CGMiner and BFGMiner (32-bit and 64-bit). Along with giving a graphical interface to the miner, it has several options to monitor the miner and correct problems when they are detected, minimizing downtime. It is not affiliated with CGMiner or BFGMiner, it just helps to ensure they stay running while providing something a little easier to look at.
It works via the miner's API, which was created for this purpose - to allow other software to communicate with the miner. While there are several web applications to allow remote monitoring of these miners, that is not the purpose of CGWatcher. It is designed to run on the same computer as the miner, and will watch for the conditions you set to determine if the miner is working properly. If it is not, CGWatcher takes the appropriate actions to correct the problem. The idea is to create a program that does the monitoring for you, so you don't have to use those web applications to constantly check on your miners.
CGWatcher is a small and portable .NET application. It will run as a 64-bit application in 64-bit Windows, and a 32-bit application in 32-bit Windows. It can be run inside sandbox environments like Sandboxie if you don't trust it, however settings and profiles may not be saved. The application includes a few libraries (see credits below) and creates its own config file (CGWatcher.exe.ini), log (cgwatcher.log), log for mining events (miner.log) and data files for profiles and named config files (profiles.dat, config.dat).
*Screenshots are as of version 220.127.116.11 and do not include the About tab.
Monitor mining - Set an interval (in seconds) for checking mining status. This is how often CGWatcher will update mining data. This must be enabled to use the checking features,
■ Restarting the miner or computer when a sick or dead GPU/FPGA/ASIC is detected.
■ Restart the miner if the total hashrate falls below a specified number or percentage of average hashrate for a specified number of seconds. You can specify hashrates for sha256 and scrypt separately.
■ Restart the miner if CGWatcher had full API access but now only has read-only (in the same miner process), or if the API access was enabled but was lost completely.
■ Restart the miner or computer if accepted or total shares do not increase for X number of minutes.
■ Restart the miner after X hours of continuous mining to cover any problems that other checks may have missed. That ensures that if a problem arises, at worst the downtime will be limited to the number of hours you set here.
■ Ensure miner stays running option makes sure that mining never stops unless you stop it using CGWatcher (by clicking the Pause Mining or Stop buttons.)
■ Restart the miner if a minimum number of devices are not properly mining.
For GPUs that miner is providing overheat protection for (AMD), CGWatcher takes a hands-off approach except for when the miner disables them for exceeding temp-cutoff. Although the miner is supposed to re-enable them once they return to target temperatures, this does not seem to happen so CGWatcher will restart the GPU once it has returned to temp-target temperature.
You can create profiles for each coin you mine, then set CGWatcher to switch to whatever is most profitable at the times or intervals you specify.
You can also set CGWatcher to increase GPU intensities when the computer is idle, and it will return them to their original values once you start using the computer again. You set the intensity, you set how long the computer must be idle before intensities are changed.
Variables - You can post config files online and use their URL when setting up profiles in CGWatcher. You can also create custom variables on each computer to customize the shared config file to each computer's hardware or configuration. Set your variable names and values in CGWatcher and it replaces the variable name with the value in config files, arguments, and batch files before it uses those files to start or restart the miner.
CGWatcher allows you to create mining profiles using different miners, config files, and/or arguments. When you first use it, it will create a default profile and try to locate a miner if one is running or one is located in the same directory or subdirectories of CGWatcher. If it cannot find a miner, you will have to manually specify where it is located and (optionally) a config file and/or arguments you want to use. You can do this by clicking the 'Manage Profiles...' button in the Settings tab. You can create as many profiles as you'd like for the different crypto-currencies you mine. You can also rename the default profile if you'd like, it just names the first one Default because I had to name it something.
When you switch to a new profile ("activate" a profile), CGWatcher will use that profile's settings any time it starts or restarts the miner. However, if you switch profiles while a miner is running, you will obviously need to restart the miner in order for the new profile to be used. You can see which profile a currently running miner is using on the Status tab. Ideally it would always be the same as the active profile you've set... but if you changed profiles while mining and chose not to restart the miner when prompted, keep in mind that the miner will still be running on the previous profile until it is restarted (or stopped and started).
Coin profitability is updated continuously at regular intervals to show which coins are most profitable at the moment. This information is also used when you create scheduled actions to automatically switch to your profile that is most profitable, has lowest difficulty, highest reward, etc. You can also choose the rank of the coin, so setting it to switch to 2nd most profitable instead of 1st may give you more time on that coin without difficulty spikes. And if none of those fields suit you, you can create your own formula for determining profitability using coin fields and common mathematical functions.
More information on Profitability Mining with CGWatcher
Config File Editor
The Config File Editor attempts to make editing your miner's configuration easier. To start, it displays the config file in a grid allowing you to see all available settings and a description of each. Settings that can only be enabled or disabled will have a true or false option. Settings that allow numbers only (not including lists of numbers) will only allow numbers. The 'Validate' button attempts to check your settings for errors that may prevent the miner from starting or working correctly. Some things to know about the Config File Editor:
- Settings that are set to default values are not written to the config file upon saving. They are also not converted to arguments, because they are set to default values and don't need to be explicitly set.
- To add, edit, or remove pools, locate Pools in the config file grid. (There may be a Pools category heading as well in Category view mode), but you want the Pools that says '(Collection)' in the cell next to it. Click on the word ' (Collection)' and a small [...] button will appear in the cell. Click on this [...] button to open the pool window. If you've ever used a property grid in Microsoft or similar software, you will recognize this type of grid and the accompanying collection editor.
- When editing pools, you can create names for them as well so they are more easily identifiable when editing them later on. Pool names are saved inside the config file, but will not cause a problem with the miner. To change pool priorities, use the up and down arrows in the pools window to move pools up and down the list. The top of the list is the first priority, the bottom of the list is last priority.
- 'Name #' textbox - You can name your config files so when you're using them in profiles they will be easier to access. Enter a name for the config file in the Name textbox. Then when managing your profiles, you can select a Named config file from the Config File textbox drop-down instead of needing to browse your computer for it. After clicking out of the Config File textbox, it will be converted to the config file path automatically.
- Ensure API is enabled upon saving' : If enabled, the API access needed by CGWatcher will always be enabled when saving the config file, regardless if these settings were enabled in the grid. It will not affect other groups/IP address in the api-allow setting, it only makes sure api-listen is enabled and that 127.0.0.1 is included in the W: group of api-allow.
- The Config File Editor Menu
■ File -> Open - Open an existing config file.
■ File -> Save (As) - Save the current config file.
■ File -> Close - Close the Config File Editor.
■ Tools -> Import Settings -> From Config File... - select an existing config file to import settings from. The current settings will be overwritten, but will not be permanent until you save the config file.
■ Tools -> Import Settings -> From Named Config File -> <select> - if you've set names for config files using the Name textbox in Config File Editor, these config files can be loaded quickly by just this name, both in Config File Editor and in the Mining Profiles window. This is the same as the previous menu item, but quicker and easier.
■ Tools -> Import Settings -> From Arguments - enter or paste miner arguments to have them converted to a config file. If you have a config file open, you will be asked if you want to overwrite only the settings listed in the arguments, or if you want to create a new config file using only the settings listed in the arguments.
■ Tools -> Export Settings -> To Arguments - converts the current config file to miner arguments.
■ Tools -> Open this Config File in Notepad - opens config file in Notepad. There is also a button next to the config file's Path to open in Notepad.
■ Tools -> Validate this Config File - checks the config file for errors in the settings' formats or values.
CGWatcher runs on Windows and requires the .NET framework 4.0. It should work with the latest versions of CGMiner and BFGMiner, although changes to those miners may require changes to CGWatcher.
In order for CGWatcher to work correctly, it needs full access to the miner's API. While previous versions required that you ensure this is enabled manually, version 18.104.22.168 now does this automatically when the miner is started using CGWatcher. Regardless of whether the api-listen and api-allow options are set correctly, CGWatcher will make sure they are enabled before starting the miner without altering your config file or arguments.
While you no longer need to manually ensure these options are set, the following is how you would set these options via arguments or a config file:
--api-listen --api-allow W:127.0.0.1
Configuration file entries (separate entries with commas):
"api-listen" : true
"api-allow" : "W:127.0.0.1"
- Originally created to use with CGMiner, testing with BFGMiner is not as thorough.
I am working on a program called CGRemote which will create a dashboard to monitor and control your miners remotely. It will communicate with CGWatcher or the miner directly (for non- Windows miners). This program is currently in beta and updates and information can be found here:
You can send bugs or feature requests to the email address in the ReadMe or post in a comment here. You can check #cgwatcher on Freenode for live support. Donations are greatly appreciated as they motivate me and allow me to spend more time on this project. After all, the program's goal is to help you make more money. Feature requests from those who donate get priority.
More donation options are available in the About tab.
By downloading you agree that while CGWatcher will attempt to provide basic overheat protection to supported devices not already protected by the miner, there is no guarantee made and you assume sole responsibility for any problems caused by overheating. See how overheat protection works in the ReadMe.
Microsoft .NET Framework 4.0 Client Profile
AMS.Profile.dll by Alvaro Mendez
Newtonsoft.Json.dll by James Newton-King
CGMiner written by Con Kolivas
BFGMiner by Luke-Jr.
OpenHardwareMonitorLib.dll by Michael Möller
OpenCLNET.dll by ananth
NCalc.dll by sebastienros