Crypto radiator mk3 – bring in the asics

So once again we had quite a cold winter and in our extension had to rely on additional electric heating to stay warm. So despite the crypto bear market/nuclear-winter my mind turned back to the crypto radiator idea.

Even though we had to turn the ASICs off when profitability dropped below our power costs, the idea of using mining as a rebate on heating actually still holds some water.

Given that for heating our default option is literally burning electricity and getting only heat from it.,.well, an antminer can still do better than that even if below mining profitability.

Another factor is that the extension gets damp as well as cold, so things like oil radiators aren’t even that useful since they don’t move much air. But nothing moves air like an antminer!

The previously most successful heating method (before crypto rad experiments) was an LCD projector which moved a lot of air and produced good heat, whilst only using ~150w..and it displayed pretty pics or video at the same time..multi-win.

At the time the one main issue was that the antminers are very very loud, and a bit all-or-nothing. I’d planned to do a hot air feed from the attic but in practice I ended up having concerns about fibreglass particles from the loft insulation, so had to shelve that idea.

No, this needs to be a bit more like a standalone unit, almost like a dull grey box you could mount on a wall like your normal combi-boiler or like a mid-sized hot-air heater.

The L3+ antminer was the slightly quieter of the two plus I don’t actually own the S14 so I wasn’t about to start customising it or messing with alternative firmware (yet).

As it turns out there’s custom firmware you can download – Blissz firmware – which gives you much better control over the fans, as well as further over/underclocking options.

Antminer L3+ Blissz firmware (14/01/2018 v1.02 stable)

My thinking was to clock the miner right down and have it running super quietly using the auto/silent fan option for longer periods rather than blasting and being more noisy.

In the past when I’ve looked into the power consumption of PCs, I noticed that if you overclock them the power consumption becomes rapidly less efficient & lossy, as heat is introduced. Conversely sometimes *under*-clocking things can give somewhat disproportionate energy/heat savings, and given I’m not necessarily concerned with making the max LTC/hour, perhaps I can gain slightly on the efficiency instead.

Please note: supposedly the download links for blissz firmware have been removed due to a copyright issue, but if you can the forum posts below you’ll find various links in the quoted replies….If you can’t find it shoot me a message and I’ll see if i can find a link for you

So where to start?

I got myself a copy of the Blissz firmware and flashed the antminer, always a few moments of trepidation when you wonder if you’ve bricked your expensive mining hardware…but the warranty is long done anyway so YOLO.

The Blissz firmware works great and even on full power/hashrate now the L3+ uses ~650w instead of ~800w. Good start – nice!

We did some tests with the miner in the part of the house which gets cold, taking cold air from near the window and warming it and pumping it out into the room at floor level.

The cold air feed means the miner runs pretty cold even on full power, which means the fans are actually quite tolerable.

We tried on low power but it didn’t really seem to make much noticable difference.

One thing to note, my partner is very sensitive to dry air and this setup produces a LOT of dry air, which was a problem for her. The solution was to put a small bowl of water in front of the miner’s warm exhaust, which through latent heat of evaporation basically adjust the humidity of the warm air to the point where it wasn’t a problem anymore. I’m presuming that as the design gets refined I’ll find a more elegant solution than a small jug of water, but at this stage I’m just looking to map out the process, there’s plenty of time to optimise later 😉

The control system?

Obviously we don’t really want an antminer running 24/7, the whole point is that it should kick in only when it’s cold. So how do we go about switching that, given the fairly significant electrical loads involved?

Previously when they were in the attic I used a raspberry pi zero with a usb temperature control, which would send ssh commands to the ASICS to shut down when their cab got too hot. That works but is a little inelegant. Spamming the miners with service messages every minute to keep them from booting did work reliably but there has to be a better way.

Having recently gotten into arduino stuff I thought this might be a good opportunity to put those skills to use.

[pic of monitoring thing mk1]

So I built a thing which monitors temp and humidity. I figured i’ll leave that out the back and see how realistic the figures are, and then we can switch a big relay or something perhaps…there’s home automation stuff now so let’s see if there’s something we can’t repurpose.

One caveat with this is i want it to work even if the wifi is down. I’m not against having browser-based control so we can turn the heating on and off from our phones, but it should work even if there’s no wifi, just like our actual central heating.

The ssh-based system didn’t have that resilience and arguably if there’s no wifi then the miner won’t be able to send to the pool so should probably stop, but we have a bunch of different wifis and the miners were hard-wired, so if the wifi the controller was on went down (which happens), then the miner’s would be like “oh yay let’s mine” regardless of the cab temperatures.

The miner’s *should* auto shut off at 84deg or so i think but who knows what might have happened by then in a confined space. Hence – no-wifi resilience please..

Welcome Sonoff-basic!

So after consulting with my research department (Luna labs) it turns out this £6 device could well be what we need.

Apparently it’s actually based on an ESP8266 so has its own wifi capabilities with switch on/off via a minimal web interface, as well as a hardware button to switch on/off.

The power rating is 10a allegedly.. I don’t know if I’d trust it on the Antminer S14 which runs at 1500w but the (now) 650w L3+ should be fine.

This is apparently the newer version which has better isolation of the high-voltage load, which is always nice to hear. I just about managed to maintain the earth cable, was a bit tight though
Shows how they’ve used air-gaps to try and further isolate the high and low voltage parts of the sonoff . Red arrows show the solder points for the serial header

So how do we make the sonoff switch on and off? options:

1) do something with the button on the sonoff…e.g. hijack the contacts and connect them via a relay controlled by another arduino or similar

2) use one of the home automation protocols to activate the sonoff via software from another esp/arduino (fails the no-wifi requirement though)

3) Other? ideas?

I wasn’t really feeling hijacking the button – it would work but meh. The home automation stuff is (according to my research dept) not always that reliable and also fails the no-wifi requirement…so what else is there.

Well it turns out apparently, with the sonoff being based on an esp8266, there’s solder points for a serial connection! Ok that’s good – but can we control it over serial? Also yes!

In fact there’s a whole bunch of special commands you can send to the sonoff e.g. to pre-configure it for a particular wifi or whatever

[link to guide] – to follow soon as i find it

Usb serial interface used to make the initial serial connection to the sonoff. ONce the controller device is up and running that would be sending the serial messages instead

All we need however are “POWER ON” and “POWER OFF”,

You need to solder on the connecting pins on the sonoff but it’s very straightforward.

So ok let’s test – I set up my arduino project to write power on/off messages to the serial bus and hooked the serial from the arduino to the serial on the sonoff….and by jingo it switches on and off.

Now I just need to make the control unit send serial commands when the appropriate temperatures are detected, and off we go…

The finished power cable – gettign all the wires in the sonoff (esp whilst maintaining a usable earth) was a bit tight but it all fitted, just

Temperature vs humidity – arg!

This is where I ended up going down a bit of a rabbit-hole. Where we’re wanting to use this system damp is a problem, so we figured maybe run off the humidity rather than the temperature?

Apparently “ideal” humidity was in the 40-60% range so let’s shoot of the middle of that. Well, you remember the initial arduino jobbie I built to begin monitoring temp/humidity….well it had been running a while now, and it seemed like our humidity was sometimes super high, like 70%+ yikes!

Given this slightly alarming reading we wanted to know what the humidity was in other parts of the house so I built another temp-monitoring device like the first……except this one gave us totally different readings from the same exact spot as the first one.

The temp/humidity module I was using was a DHT11 based model and I’d only ordered two sensors, but both were giving very different readings.

I swapped the sensors over in case it was down to one device being esp8266-based and one being arduino-nano-based.. but no the readings were tied to each sensor.

To give you an idea they temperatures would be within a degree or two of each other but the humidity varied hugely. One might be reading 35% (too low) and the other was reading 60% (upper limit). Which is correct? ugh!

So I ordered a couple more sensors to see if this was a one-off, and I also ordered a bog-standard temp/humidity gauge as another “opinion”.

Well I ended up with 4x DHT-11 sensors, two of which read low and two which read high…with a variation of up to 15% across all sensors. THIS IS BULLSHIT!

The additional temp/humidity sensor also seemed to more or less make up its own readings…literally no consensus to be had. I was going a bit nuts here.

Eventually my research dept suggested using a bosch sensor instead since being branded they might be more consistent…and I’ve now got one of those to test, however then we decided to switch to using temp sensing instead, which the DHT11 sensors do reasonably consistently…so nevermind.

Still though – the only way I could see to get a *truly* accurate reading of humidity using the DHT11s was maybe to run 4 or 5 of them and then take the average of all their readings, but I still have no way of validating the accuracy of that end-reading.

If I find out what the bosch ones are like I’ll updated this post, but you’d hope they might be a bit better, being branded, but you’d think all sorts of things so pics or it didn’t happen.

Ok so back to the story…

the humidity thing was proving a bit of a nightmare so in this last round of updates I switched it to use temperature instead.

Since it’s now running on an ESP8266, I also added a web interface so that we can control the heater from our phones too. It’s super minimal because arduino but it works 😀

The way the ESP8266 handles “running a webserver” doesn’t necessarily gel with the general “loop” function I had set up so that took a bit of finagling but eventually I got it to work.

One thing I noticed in the process is that if you connect to the ESP8266 webserver from chrome, once it’s made the HTTP request it keeps the connection open, which means the ESP8266 basically hangs whilst waiting for http data…this plays havoc if you’re relying on running the normal loop() function as well as handling http requests.

I’ll post my code if anyone’s interested. The way I solved it is a bit of a hack since it doesn’t respond to http requests right away, but the main loop runs every 0,5 second and that handles any pending requests as part of its run. That means the ESP8266 webserver isn’t quite as responsive as if it was sitting there doing nothing but waiting for your http request, but not by much, and actually it’s not very responsive anyway even when it’s trying so you hardly notice the difference in use.

With the chrome issue, that was a problem since my partner and I both use it (I also use others, depending on the application but still mostly chrome for now) and I don’t want to have to use a specific browser to operate the heating, or risk having the heating get stuck in a loop because of something stupid like the wrong browser being left connected. ugh. Fking computers lol.

Again, a bit of a dirty hack but I discovered that if you connect with chome, the request gets sent, response gets received and then the arduino is stuck, waiting for anything more from chrome. But if there’s an event from chrome – e.g. a page reload or other http request, then the arduino becomes unstuck and does the “handle http request” function again.

So in the end I made it so that even if the arduino is “stuck” with an active chrome client, that chrome client reloads the page one a min or so with a bit of javascript, and thereby forces the main loop (and the temp controls) to keep doing what they’re supposed to.

As soon as the chome client disconnects properly (i.e. when you close browser/tab) then the normal main loop resumes as it should.


This actually brings up an interesting point – namely if chrome maintains a conection to every page, then if you hoard tabs on your desktop like I do – I must have 9 windows each with 20+ tabs, then is chrome maintaining a connection to every one of those sites? in which case yikes!!! I bet that could be used to profile one’s online presence beyond IP addresses….aanyway. Maybe time to re-think my tab-usage/management

Also note Firefox had no issues – connects, does its thing and then disconnects cleanly. Easy peasy.

So here we are now pretty much up to date. All the previous testing has taken place over the course of the last 4-5 months, but now we have a system which works (without wifi) but can still be controlled from your phone. It’s simple enough for someone non-technical to use with only a quick explanation, and it doesn’t spam our network with ssh messages…but we can set the comfort level of the miner from wherever.

Most importantly it doesn’t dry out my partner’s eyes so I don’t get any complaints about it 🙂

Plot twist!

It might only be short-lived but btc’s recent rally up to $8400 and generally slightly more optimistic market may mean that our asics are getting back into the realm of actually profitable, in which case we literally get paid to be warm, rather than just recouping some of the costs, which kinda blows my mind!

We haven’t actually had a decent cold spell since I did the latest round of updates so we haven’t really been able to test it properly or calculate the efficiency, but it’s got a power-usage monitor attached so we should see how many KWH we end up using for how much LTC.

I’ll try to revise this post with wiring diagrams and the arduino C code soon. If you have questions or are doing something similar then give me a shout and I’ll help where I can 🙂

More details of the components

The Oled display gives basic info about the status of the system – current temp & humidity readings, the last few letters of the wifi SSID it’s connected to as well as the last 3 digits of it’s ip address.

Screenshot of the web-page served by the ESP8266 – You can set the temp where it switches on and where it switches off separately so that it’s not constantly switching on and off to maintain an exact temp, which gets really annoying.
The antminer fits snugly under a chair out in the extension
warm air exhaust directs output towards the middle fo the room at floor level, *toasty feet!*

A big thank you to Luna Labs for helping me figure this out (including getting me started with the arduino stuff) – without their research none of this would have happened 🙂

Download the code/project

This is the latest version and is provided AS IS, use at your own risk.

My setup is using an ESP8266 Nodemcu board which has a slightly funky way of assigning the pins if you’re used to an arduino uno or similar, but we need the wifi so it is what it is.

You’ll want your DHT11 on gpio 5 (pin D1), and your oled display data on pin D3, with the clock on D5. Drop me a message if you get stuck or have questions.

Below are the links to buy the parts needed for this project:

Leave a Reply