For a while now, I thought about mounting a simple display somewhere that shows the most important parameters of my BitCoin miner. First I started with an AtMega equipped with an Ethernet module. But parsing json without any library support became too cumbersome quickly. So I copy pasted together a small python script, and used a nokia display that I already equipped with an i2c interface. If I knew how easy it is, to use those json interfaces, I would have implemented this display project earlier. The code is at the bottom. It is specific to my setup with p2pool and CHF, but it is so easy to change that you can adapt it to whatever your setting is. The python script now runs on an Alix on the same i2c bus as my simple home automation transmitter. Now all that is left to do, is adding a line to /etc/crontab to execute the script once a minute.
As you can see on the image below, the hash rate is too hight for a stock Saturn. That is because I recently added an extension module. So it has now three instead of two hashing modules. All of a sudden, KncMiner announced they had 200 extension modules for the October batch, and that future modules would be incompatible. So, that was pretty much the only chance for an upgrade. My existing power supply should have room for one more module, and they were moderately priced. The demand was high enough that they were sold out in three minutes. The i30 cooler that was recommended was not available at the time, so I had to use an Xtreme rev2. I had a fun time finding out how to correctly mount it. Even for the original, there was no manual or description how to mount it. Just look at the existing modules said someone in the forum.
#! /usr/bin/python # Show the current hashrate of my bitcoin miner on a nokia display import httplib2 import json import time from nokia_display import NokiaDisplay class p2pool: def __init__(self, url, payout_addr): self.baseurl = url self.payout_addr = payout_addr def poolHashrate(self): # in GH/s h = httplib2.Http(".cache") h.debuglevel = 2 url = "%s/rate" % (self.baseurl) resp, content = h.request(url, "GET") ghash = float(content) / 1024.0 / 1024.0 / 1024.0 return ghash def localHashrate(self): h = httplib2.Http(".cache") h.debuglevel = 2 url = "%s/local_stats" % (self.baseurl) resp, content = h.request(url, "GET") jj = json.loads(content) ghash = float(jj['miner_hash_rates'][self.payout_addr]) / 1024.0 / 1024.0 / 1024.0 return ghash def shares(self): h = httplib2.Http(".cache") h.debuglevel = 2 url = "%s/local_stats" % (self.baseurl) resp, content = h.request(url, "GET") jj = json.loads(content) shares = int(jj['shares']['total']) return shares def current_payout(self): h = httplib2.Http(".cache") h.debuglevel = 2 url = "%s/current_payouts" % (self.baseurl) resp, content = h.request(url, "GET") jj = json.loads(content) payout = float(jj[self.payout_addr]) return payout class bitcoincharts: def __init__(self, symb): self.baseurl = 'http://api.bitcoincharts.com/v1/markets.json' h = httplib2.Http(".cache") h.debuglevel = 2 resp, content = h.request(self.baseurl, "GET") jj = json.loads(content) for i in range(len(jj)): market = jj[i] if market['symbol'] == symb: self.market = market def last_close(self): price = float(self.market['close']) return price def ask(self): price = float(self.market['ask']) return price def bid(self): price = float(self.market['bid']) return price class blockchain: def __init__(self, addr): self.baseurl = 'https://blockchain.info/address' h = httplib2.Http(".cache") h.debuglevel = 2 url = '%s/%s?format=json&limit=0' % (self.baseurl, addr) resp, content = h.request(url, "GET") self.jj = json.loads(content) def total_received(self): ammount = float(self.jj['total_received']) / 100000000 return ammount def balance(self): ammount = float(self.jj['"final_balance']) / 100000000 return ammount # test code if __name__ == "__main__": payout = 'putYourBitCoinAddressHere' p2p = p2pool('http://TheMachineWhereYourP2PoolNodeRuns:9332', payout) btcch = bitcoincharts('mtgoxCHF') blkch = blockchain(payout) txtHash = 'GHash %f' % p2p.localHashrate() txtShares = 'Shares %d' % p2p.shares() txtPay = 'Pay/blk %f' % p2p.current_payout() txtPrice = 'CHFgox %f' % btcch.bid() txtRecv = 'Recv %f' % blkch.total_received() txtTime = time.strftime('%x %X')[0:14] print 'pool hashrate : ', p2p.poolHashrate() print 'local hashrate : ', txtHash print 'shares : ', txtShares print 'current payout : ', txtPay print 'total mined : ', txtRecv print 'mtGoxCHF latest: ', txtPrice print 'time : ', txtTime disp = NokiaDisplay(0x19, 0) disp.SetContrast(0x40) disp.Backlight(True) disp.TextOut(1, 1, txtHash) disp.TextOut(1, 2, txtShares) disp.TextOut(1, 3, txtPay) disp.TextOut(1, 4, txtRecv) disp.TextOut(1, 5, txtPrice) disp.TextOut(1, 6, txtTime) disp.UpdateDisplay()
Leave a Reply