HOWTO - Make a BrewPi Fermentation Controller For Cheap

Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum

Help Support Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
Status
Not open for further replies.
Where did you get those wires!? And what are they called?? That looks way better than stripping copper wire and doing a terrible soldering job like I did.

Someone posted or mentioned these a little while ago, and they seem to be similar to what you have. http://www.amazon.com/dp/B008MRZSH8/?tag=skimlinks_replacement-20
Is what you have similar to those except that they are the specific to the connections that you're making (M to F, F to F, or M to M)?

I bought these a while ago for most of my DIY projects
http://www.amazon.com/gp/product/B00BQA5BWU/?tag=skimlinks_replacement-20
 
Last edited by a moderator:
Looks like switching an old Xbox over to Linux is a pain in the rear, so I will probably end up using the old PC. I did find an old netbook that is just gathering dust in a closet, do you guys think that could be a good option for something like this?
 
If you can install a recent vintage Debian or other Unix-y OS on it, and it has a USB port on it, I suppose you could get it to work...

Cheers!
 
I havent all 381 pages to find this our for myself, so I'll ask and hopefully if its been asked 200 times already, someone will be nice enough to answer it the 201st time!

I dont have a dedicated ferm chamber yet. Its on the list of things....
But I do have a kegerator. Can this be used with just 1 sensor to monitor the inside temp of the kegerator to provide a more constant temp and have the ability to see the temp its actually at? Right now it just has a "Coldness" slider for adjustment. No real way of knowing what temp its trying to maintain.

I know there are easier ways to do it than a Brewpi style setup, but I have all the stuff and want to play with it.
 
Can this be used with just 1 sensor to monitor the inside temp of the kegerator to provide a more constant temp and have the ability to see the temp its actually at?

As he said, yes. You can just set the mode to "Fridge Constant".
 
Sweet.
I figured there was a way. I just need to stop by Microcenter and get some jumper wires and I will be set to wire it up.

Thanks guys
 
I run my keezer with BrewPi, but I use all three probes in "Beer Constant" mode with the beer probe strapped and insulated to the side of one of the kegs. Obviously the Room temp probe is just for info, but I'm pretty sure BrewPi uses both the Beer temp probe and the Chamber temp probe to control the keezer...

Cheers!
 
I am getting my Raspi/Arduino controller up and running and have everything installed. When I access via my web browser, the script shows the temps and everything on the top left LCD area, then it stops running and the "LCD" displays, "Cannot receive LCD text from Python script". The script status then becomes, "Script not running!" After several seconds, the script status shows "Script Running" and the appropriate info is displayed on the "LCD". This just keeps repeating. Is this how it is supposed to work? Comments/suggestion? Thanks!
 
If you can install a recent vintage Debian or other Unix-y OS on it, and it has a USB port on it, I suppose you could get it to work...

Cheers!

Haven't had much luck, so I'll probably just end up getting a Rasberry Pi instead, unless I want to get rid of all the dust on my ancient pc...
 
I am getting my Raspi/Arduino controller up and running and have everything installed. When I access via my web browser, the script shows the temps and everything on the top left LCD area, then it stops running and the "LCD" displays, "Cannot receive LCD text from Python script". The script status then becomes, "Script not running!" After several seconds, the script status shows "Script Running" and the appropriate info is displayed on the "LCD". This just keeps repeating. Is this how it is supposed to work? Comments/suggestion? Thanks!


It's normal if your using and iPhone or safari it'll be working fine behind the Serbs just a bug in the system.
 
No, that's not how this is supposed to work.

If you're not using a compatible browser as noted above, take a look in the Log window and see what other messages might be present.
I would typically suspect there are comm errors and the link is making and breaking. That could be due to how you have the Arduino powered (hint: don't use USB power, get yourself a 9V wall wart that will plug into the Uno)...

Cheers!
 
y0fxdYb.png


So that's what it looks like when the heater you have installed is too powerful. Had to set the hair dryer to lowest settings to get it to stop moving the beer 2 degrees every time it kicked on for the minimum 3 minutes.

I can't believe I didn't put one of these things together sooner. I won a wyse client with debian installed on it for running raspberrypints in a silent auction a few months ago, discovered I really didn't have a need for raspberrypints, and then realized this thing had wifi and 4 usb ports. Now it's controlling 3 brewPi boxes.

I've set up the main index.php file just to serve the graph and lcd readout, and removed the profile link and the script button and maintenance panel button. Then moved the page with full controls to another .php file behind a password.

Now I can obsess about my beer even more while I'm out of the house. Awesome.
 
BrewPi is 100% up and running! Now if only I had a beer that needed fermenting today!

I am curious about the wiring diagram for adding a CPU fan for a uniform air temp. I tried googling "brewpi CPU fan wiring diagram site:https://www.homebrewtalk.com/showthread.php?t=466106" and searching this thread directly. Neither worked. None of the other results that came up on Google were helpful. I know it has to be in one of these 380 pages of the thread
 
The BrewPi AVR code does support adding a Chamber Fan controlled by Digital IO pin 2, which is turned on when either heat or cool modes are active.

But you can't just wire a peecee fan directly to the Arduino board as AVR pins are only good for a handful of milliamps at 5 volts, and a fan needs hundreds of milliamps, usually at 12 volts.

The BrewPi folks integrated switching FETs into their shield design to drive things like SCRs and fans; you'd need a substitute for that functionality, using a channel on a relay board, or a FET or transistor circuit, to provide the power needed to run the fan.

All that said, I don't agree with the intrinsic philosophy that a "stirring" fan should run only when the chamber is actively cooling or heating. Chest freezers, for example, exhibit a huge amount of "cold sink" after the compressor shuts off that can cause major temperature stratification if it isn't broken up.

In all three of my coolers (a keezer and a pair of fridges) when they're in use there's always a small DC fan running 24/7. I don't use the Chamber Fan function at all...

Cheers!
 
In all three of my coolers (a keezer and a pair of fridges) when they're in use there's always a small DC fan running 24/7. I don't use the Chamber Fan function at all...

Cheers!

Same idea I had. I just didn't know how the software was configured. I'm using a PC, and, as soon as you said this, I realized that I could just use a USB fan. It's on the way! Thanks for the Ah Hah! moment.
 
Anyone have any idea why my public page would show up blank? It loads and obviously has an outline of where the graph and graphics should exist but it never loads them. I copied the entries found on post 87 here regarding a public page and ensured they were correct but for some reason I cannot get it to display correctly.

http://crunkworx.servebeer.com/crunkworxpublic.php
 
Anyone have any idea why my public page would show up blank? It loads and obviously has an outline of where the graph and graphics should exist but it never loads them. I copied the entries found on post 87 here regarding a public page and ensured they were correct but for some reason I cannot get it to display correctly.

http://crunkworx.servebeer.com/crunkworxpublic.php

The link to your jquery is broken: http://crunkworx.servebeer.com/js/jquery-1.9.1.js

You could try changing this
Code:
<script type="text/javascript" src="js/jquery-1.11.0.js"></script>
to this
Code:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
 
The link to your jquery is broken: http://crunkworx.servebeer.com/js/jquery-1.9.1.js

You could try changing this
Code:
<script type="text/javascript" src="js/jquery-1.11.0.js"></script>
to this
Code:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

Thanks for the tips, it appears that the jquery file/version was updated to 1.11.0 since the post by Fuzze. I tried both of your suggestions to use the script file from the link but both appears to be give me the same behavior even though it appears that all the script files within the main php page should be resolving now.

Any other ideas? Right now the PHP page source should show the google link script file location if you'd like to check it.

<!-- Load scripts after the body, so they don't block rendering of the page -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.10.3.custom.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-timepicker-addon.js"></script>
 
Hopefully someone with some javascript knowledge can help me debug this. Ok so far my index.php page works without issue with public and internal network access but my public.php page (crunkworxpublic.php) fails on the dygraph-combined.js script at the following lines.

Error (Warning) : dygraphs: Constructing dygraph with a non-existent div! (dygraph-combined.js:206:19) @ dygraph-combined.js:3718

Code (Bad code shown in bold red) :

Dygraph.log = function (c, g) {
var b;
if (typeof(printStackTrace) != "undefined") {
try {
b = printStackTrace({guess: false});
while (b[0].indexOf("stacktrace") != -1) {
b.splice(0, 1)
}
b.splice(0, 2);
for (var d = 0; d < b.length; d++) {
b[d] = b[d].replace(/\([^)]*\/(.*)\)/, "@$1").replace(/\@.*\/([^\/]*)/, "@$1").replace("[object Object].", "")
}
var j = b.splice(0, 1)[0];
g += " (" + j.replace(/^.*@ ?/, "") + ")"
} catch (h) {
}
}
if (typeof(window.console) != "undefined") {
var a = window.console;
var f = function (e, k, i) {
if (k && typeof(k) == "function") {
k.call(e, i)
} else {
e.log(i)
}
};
switch (c) {
case Dygraph.DEBUG:
f(a, a.debug, "dygraphs: " + g);
break;
case Dygraph.INFO:
f(a, a.info, "dygraphs: " + g);
break;
case Dygraph.WARNING:
f(a, a.warn, "dygraphs: " + g);
break;
case Dygraph.ERROR:
f(a, a.error, "dygraphs: " + g);
break
}
}
if (Dygraph.LOG_STACK_TRACES) {
window.console.log(b.join("\n"))
}
};
Dygraph.info = function (a) {
Dygraph.log(Dygraph.INFO, a)
};

Error :

Uncaught TypeError: Cannot read property 'state' of undefinedDygraph.indexFromSetName @ dygraph-combined.js:3648

Code (Bad code shown in bold red) :

};
Dygraph.prototype.indexFromSetName = function (a) {
return this.setIndexByName_[a]
};

Thoughts anyone?
 
Sweet.
I figured there was a way. I just need to stop by Microcenter and get some jumper wires and I will be set to wire it up.

Thanks guys

Love Love Love Microcenter... They had the new Pi 2's for sale for $30, so naturally I bought 2...

Now I have 4 Pi's and a very disgruntled wife...

Also, if your patient (I'm not.) banggood.com has Dupont wires for crazy cheap, as well as pretty much everything else you need. Basically got the cost of building each controller to around $15, not including the project box and other fancy stuff. I know it's all Chinese stuff but $3 for an Arduino clone and another $3 for a protoshield, and $6 for an LCD is pretty good...
 
Hopefully someone with some javascript knowledge can help me debug this. Ok so far my index.php page works without issue with public and internal network access but my public.php page (crunkworxpublic.php) fails on the dygraph-combined.js script at the following lines.

Error (Warning) : dygraphs: Constructing dygraph with a non-existent div! (dygraph-combined.js:206:19) @ dygraph-combined.js:3718

Code (Bad code shown in bold red) :

Dygraph.log = function (c, g) {
var b;
if (typeof(printStackTrace) != "undefined") {
try {
b = printStackTrace({guess: false});
while (b[0].indexOf("stacktrace") != -1) {
b.splice(0, 1)
}
b.splice(0, 2);
for (var d = 0; d < b.length; d++) {
b[d] = b[d].replace(/\([^)]*\/(.*)\)/, "@$1").replace(/\@.*\/([^\/]*)/, "@$1").replace("[object Object].", "")
}
var j = b.splice(0, 1)[0];
g += " (" + j.replace(/^.*@ ?/, "") + ")"
} catch (h) {
}
}
if (typeof(window.console) != "undefined") {
var a = window.console;
var f = function (e, k, i) {
if (k && typeof(k) == "function") {
k.call(e, i)
} else {
e.log(i)
}
};
switch (c) {
case Dygraph.DEBUG:
f(a, a.debug, "dygraphs: " + g);
break;
case Dygraph.INFO:
f(a, a.info, "dygraphs: " + g);
break;
case Dygraph.WARNING:
f(a, a.warn, "dygraphs: " + g);
break;
case Dygraph.ERROR:
f(a, a.error, "dygraphs: " + g);
break
}
}
if (Dygraph.LOG_STACK_TRACES) {
window.console.log(b.join("\n"))
}
};
Dygraph.info = function (a) {
Dygraph.log(Dygraph.INFO, a)
};

Error :

Uncaught TypeError: Cannot read property 'state' of undefinedDygraph.indexFromSetName @ dygraph-combined.js:3648

Code (Bad code shown in bold red) :

};
Dygraph.prototype.indexFromSetName = function (a) {
return this.setIndexByName_[a]
};

Thoughts anyone?

Did you remove all the content from the beer-panel div?
Or is it just not loading the correct php file for that div?
That JS looks like its trying to draw a graph in a div that doesn't exist.
From your page source

<div id="beer-panel" class="ui-widget ui-widget-content ui-corner-all">
A whole bunch of crap should be between these lines.
</div>

if you check your crunkworxpublic.php file you should see where it calls the beer-panel.php file. This file could have been renamed, moved, or the permissions are wrong.
When I try http://crunkworx.servebeer.com/beer-panel.php
I get a forbidden error. I would check permissions on that file first.

Your web server (apache, nginx, whatever) error logs probably have something to say about it.
 
Did you remove all the content from the beer-panel div?
Or is it just not loading the correct php file for that div?
That JS looks like its trying to draw a graph in a div that doesn't exist.
From your page source

<div id="beer-panel" class="ui-widget ui-widget-content ui-corner-all">
A whole bunch of crap should be between these lines.
</div>

if you check your crunkworxpublic.php file you should see where it calls the beer-panel.php file. This file could have been renamed, moved, or the permissions are wrong.
When I try http://crunkworx.servebeer.com/beer-panel.php
I get a forbidden error. I would check permissions on that file first.

Your web server (apache, nginx, whatever) error logs probably have something to say about it.

Interesting observation, I pulled the code for this public page from here. You're right it does call on a div id of beer-panel which doesn't show up anywhere in the reference file of publicbeerpanel.php.

I still have the beer-panel.php file located in my /var/www directory and it has not been modified currently. For a test I actually took the contents of beer-panel.php and copied them directly into the "publicbeerpanel.php" file and the same issue persists.
 
Interesting observation, I pulled the code for this public page from here. You're right it does call on a div id of beer-panel which doesn't show up anywhere in the reference file of publicbeerpanel.php.

I still have the beer-panel.php file located in my /var/www directory and it has not been modified currently. For a test I actually took the contents of beer-panel.php and copied them directly into the "publicbeerpanel.php" file and the same issue persists.

I hadn't seen those instructions. I haven't looked into it but that post is more than a year old. Perhaps the html from that post is different than what the updated script from the repository is looking for.

I'd try
sudo tail -f /var/log/apache2/error.log
in your terminal and then try to hit the public website from outside the network that the webserver is on. From your phone or something not on wifi.
sudo tail -f /var/log/apache2/access.log might help as well.

That is if you're using apache as a webserver.
 
Guess I lied about it being 100%... Hope I'll be out of everyone's hair soon enough. My setup is in the basement with no Wifi access. So I have my BrewPi hooked up to a static IP with wlan0, even though it can't connect to a network. I just use a monitor, keyboard, and mouse right there. Before bringing the unit to the basement, it worked fine with SSH from laptop.

Doing a test water batch at 50F. Experiencing the same issue that I had a few days ago. I was using localhost before but am still having the same issue now when typing in the Static IP address into chromium. It will work for X number of hours and then come up with "Live LCD waiting for update from script" on the LCD display. I try to go to "Refresh Devices", but it spits out an error (sorry, it's working now, so I can't see it. I'll probably be able to in the morning). Restart the comp, and it's good to go. I've tried reformatting the hex for Uno too, which works every few times. I even disconnected the Wifi adapter, but I believe that the program needs to see a wlan0 setting (maybe?). Can I just set up a static IP on lo? Any way to force it to keep running?

Thanks!
 
You don't need wifi unless you are using it to connect from another pc. Many people have issues with wifi.
 
You don't need wifi unless you are using it to connect from another pc. Many people have issues with wifi.

Here's the problem that I'm having. Seems like it's been document before that it's wifi and/or browser. I'm using chromium and/or iceweasel on debian. http://forum.brewpi.com/discussion/...m-python-script-inconsistent-state-of-devices

Here is an imgur post with what I'm seeing and some explanation. I'll also just post the explanation here. http://imgur.com/a/LEJXb

Came downstairs at 9 AM. I had started the program, hold at 50F, the night before. The light on the chest freezer was on when I saw it, indicating that it was currently running. Turned on the monitor, and the interface displayed "Cannot receive LCD text from Python Script". It appears as if the program was still running and my turning on monitor and moving mouse screwed up the program.

This one is from the device list. I refreshed list and got the error "Error while receiving data configuration: Syntax Error: Unexpected token C" which is shown on the last picture.

I went to update the hex file, and here are the displays. It appears as if the script doesn't like that my wlan0 doesn't connect to a network (in the basement and can't reach my wifi). Problems with wifi checker and unable to reach the router. Worked after re-programming the hex file.

Just got home from work. Appears as if the USB WiFi adapter shut off. No green light on it. And the script is trying to connect every ten min. So maybe make sure the adapter doesn't sleep?
 
Regarding the fan discussion:

If I'm planning on using a simple CPU fan to circulate the air in the fridge, would I be able to have it pull double duty as a home made stir plate?
 
Here's the problem that I'm having. Seems like it's been document before that it's wifi and/or browser. I'm using chromium and/or iceweasel on debian. http://forum.brewpi.com/discussion/...m-python-script-inconsistent-state-of-devices

Here is an imgur post with what I'm seeing and some explanation. I'll also just post the explanation here. http://imgur.com/a/LEJXb

Came downstairs at 9 AM. I had started the program, hold at 50F, the night before. The light on the chest freezer was on when I saw it, indicating that it was currently running. Turned on the monitor, and the interface displayed "Cannot receive LCD text from Python Script". It appears as if the program was still running and my turning on monitor and moving mouse screwed up the program.

This one is from the device list. I refreshed list and got the error "Error while receiving data configuration: Syntax Error: Unexpected token C" which is shown on the last picture.

I went to update the hex file, and here are the displays. It appears as if the script doesn't like that my wlan0 doesn't connect to a network (in the basement and can't reach my wifi). Problems with wifi checker and unable to reach the router. Worked after re-programming the hex file.

Just got home from work. Appears as if the USB WiFi adapter shut off. No green light on it. And the script is trying to connect every ten min. So maybe make sure the adapter doesn't sleep?


The hex file has absolutely nothing to do with your wifi. And by re flashing the hex every few hours any chance of getting the arduino to perform properly is out the window. See when your raspi stops communicating or gets some bad characters and stops running the script, the arduino is still doing its job. And your fridge is running like it should (hopefully). It's your raspi that's not playing nice. All you'd need to do to troubleshoot is restart the pi. Not totally reinstall every facet of the system. You can't really do any good debugging either because you're always starting from scratch. Whoever told you to constantly reprogram the hex file really got you good. It seems like there are some communication issues with your pi to arduino connection ( prolly a bad usb cable or faulty psu like just about every person has had before you). Then there's the wifi issue. The only successful wifi settings that I've seen from all the other users out there are the default ones, i.e. Not changing anything and using dhcp. You are using yours as an adhoc network from what I can tell. So you are on your own with that one. There are scripts that check to see that wifi is working and in your case it never really is. But for the sake of all that is holy, quit re-flashing the hex file every time something doesn't go your way.
 
Anyone using multiple instances of the brewpi software and fermwraps to control individual fermenter temps within the same fridge? The idea to just set the fridge in fridge constant mode at some lowest common temperature, say 55F. Then have fermwraps around each fermenter, each with their own brewpi instance? If this is viable you could even keep the fridge at serving temps and serve and ferment out of the same chest freezer.

Not knowing how intense the heat a fermwrap radiates I wonder how well multiple fermwraps could work in proximity to each other in this manner. Or would all the control algorithms be busy fighting each other?

I have done this with a BrewPi and a couple of STC1000+ units controlling individual temps of fermenters. The BrewPi currently controls the chest freezer temp (which is typically kept at serving/lagering temps), and the STC1000+ units control the FermWraps. I have the FermWraps installed inside "carboy coozies" made of dual layers of Reflectix. The coozies were made using Reflectix to wrap around the carboys 2x, and then a round bottom (dual layer) was affixed to the Reflectix cylinder using duct tape. For the top, I cut out two circles of Reflectix with holes in the center to fit over the neck of the carboys. I also use SS thermowells for the temp probes. In this configuration, I have been able to ferment at ale temps despite having the chest freezer in the low 30's. This may seem highly inefficient, but it works incredibly well. I've noticed a very minor increase in cycling times on the chest freezer while fermenting two carboys at ale temps. Also, the STC1000+/Fermwrap combination is heating only a small amount of time, especially during active fermentation. I'm pleasantly surprised it all works, but would be happier if it were all controlled from a single controller. At the time I put together my BrewPi, it didn't allow for this without having a bunch of separate Arduinos running off different directories on the RPi. I'm not sure if this issue has been addressed but it would definitely be nice.
 
I highly doubt there will ever be standardized multi-ferment system that doesn't need multiple instances at least. The spark was supposed to eventually support all sorts of things but even if they could do it with a single controller, you'd still have most of the hardware side to contend with only it wouldn't need the arduino, I've come to accept the fact that I'll be using multiple arduinos for this and I'm kind of content with the fact that each beer will be independently controlled instead of depending on one device to handle them all.
 
It's your raspi that's not playing nice.

Using a PC with Debian, which, along with not being on a WiFi Network, is causing a lot of the issues.


All you'd need to do to troubleshoot is restart the pi. Not totally reinstall every facet of the system. You can't really do any good debugging either because you're always starting from scratch. Whoever told you to constantly reprogram the hex file really got you good.

Restarting the PC doesn't fix it. It completely stopped working yesterday. After 4 or 5 restarts, going to bed, and trying again in the morning, I got the BrewPi to work on Iceweasel. And, like usual, I got myself good with flashing the hex. It worked the first time I was trying to debug it, so that's been my go to now.

Then there's the wifi issue. The only successful wifi settings that I've seen from all the other users out there are the default ones, i.e. Not changing anything and using dhcp. You are using yours as an adhoc network from what I can tell. So you are on your own with that one. There are scripts that check to see that wifi is working and in your case it never really is.

This is where I would like the most help. Is there some file in the script where I can tell BrewPi to check "lo" rather than wlan0? I'd rather just remove the flaky USB WiFi adapter, since I'm not even connected to a WiFi network anyway. I'm also actively searching for a way to get my WiFi adapter to ping every period of time. I'm also making sure that the "sleep" function is disabled.
 
Remove the script that checks for wifi. If you're having t&a newsflash the arduino everyday, then buy a new arduino. They're only a couple dollars on eBay. Fwiw I don't use wifi so I don't have any advice to give on it. But I can't see why there should ever be a script that checks for wifi and then totally borks the system if it can't find the Internet.
 
The only successful wifi settings that I've seen from all the other users out there are the default ones, i.e. Not changing anything and using dhcp.

I had to change to static ip to get the wifi to function reliably.
 
Remove the script that checks for wifi.

Is this only in the cron file? I was checking around in the directories and found a cron file that had "wifichecker" in it. This was the issue that was displaying on the prompt on BrewPi page. I just don't want to delete the cron file and crash everything if there's another script that calls on it.

Fwiw I don't use wifi so I don't have any advice to give on it. But I can't see why there should ever be a script that checks for wifi and then totally borks the system if it can't find the Internet.

Are you using eth0, lo, or just on the local machine? I'd love to hear how you have it setup to run without wifi and which alterations you had to make. Since I have the monitor, keyboard, and mouse, I really don't need internet access at all.
 
Status
Not open for further replies.

Latest posts

Back
Top