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.
Still waiting on the code update for the HERMS setup so I can pull the trigger on a spark model.
 
I use brewpi to do pretty much this on my second brew fridge it works perfectly, I believe you can also run raspberry pints and brewpi concurrently (with some tweaking the Apache) if you wanted to monitor your flow of beer.

Running both BrewPi and RPints is easy, you just need to put one (or both) in a dedicated directory within the Apache document root (typically /var/www/ or /var/www/html on newer Debian installs). This is best done while cloning the repository by changing the destination path, or by just specifying /var/www/html/brewpi during the automated installation. See day_trippr's info below for better guidance. I still prefer separating things by directory but that's more about personal preference.

You could, for example, put the BrewPi files in /var/www/brewpi and then put RPints in /var/www/rpints and they'd be separate. Of course, to reach either, you'd have to navigate to your.ip.address/brewpi or your.ip.address/rpints instead of just the IP address.
 
Last edited:
I'd also like to add a bit of info for those of us installing on a non-RPi device (like a Debian box). The automated install worked just fine for me start to finish. I had one hiccup where it didn't see the brewpi directory it just made and failed, but I manually created it and it worked fine after that.

I also made it easier on myself by opening the install.sh script and changing both instances of the "pi" user to "myusername" so it added me instead of the default pi user it expects on an RPi.
 
fwiw, there's no /html in the default file path for either BrewPi or RaspberryPints.

As well, RaspberryPints and BrewPi file sets only conflict at a single file: index.php.

So, you can install either package first in the default /var/www root, rename its .php file (eg: rename BrewPi's index.php to brewpi.php), and then install RaspberryPints to the same default root.

The latter will then be accessible just by using the ip address of the host, the former will need /brewpi appended to the same ip address.

It's really that simple...until you want multiple BrewPi instances...

Cheers!
 
The /html/ directory is something you'll deal with under Debian Jessie.

That explains it on my end. I was wondering why I didn't remember it from the last time I set up a Debian install. ;)

Also thanks to day_trippr for the corrections.
 
Haven't read of anyone using that particular board, but it should work fine.
It appears to be an R3 knock-off using an actual 328P.
I'd go for it...

Cheers!
 
Fwiw. I haven't found a knock-off brand yet that won't work. I'm buying minis and nanos for $2.85 and $3.89 on eBay. Haven't even looked into a full size board price in a while.
 
I ordered it. Will report back. Per wbarber69 I should be fine though. According to the reviews someone had an issue with flashing and the parts might be a little cheap, but if it works I don't mind.

Also does it matter what resistor you get? I was just at the electronics store and saw 4.7k resistors in 1/4, 1/8, 1/2 watt, ect. I got the 1/2. Will this work or do I need something else?
Might want to update the parts list on the first page with this info. Sorry if it was covered in the thread but I searched for a bit and could not find it. Also on the parts list the two black things with 3 prongs on each are not listed. From my understanding they are not needed? See attached.

Opps, I just realized those are probably the two sensors...correct? :-D

Capture.jpg
 
Is there an east way to extract the LCD display from the brewpi webpage and add it to it's own webpage?

Consider what i need an idiots guide, but what i'm trying to do is get the display popping up via kiosk on a little 4inch display plugged into my Pi when i boot it up with the graph etc it's too cramped
 
There is a post a few pages back on using an old cell phone to display the LCD on. It took me longer to get the browser on the phone to display full screen than to set it up
 
I'm not using a phone, I'm using an lcd attached to the gpio of the RPI so that would work in this instance
 
Look on the op there are a few listings for installing multiple instances and its one of them.
 
[...]Also does it matter what resistor you get? I was just at the electronics store and saw 4.7k resistors in 1/4, 1/8, 1/2 watt, ect. I got the 1/2. Will this work or do I need something else?[...]

1/8 watt is plenty. It's just a mid-range pull-up that probably doesn't actually see anything within a couple of orders of magnitude of an eighth watt, but smaller ones are trickier to handle.

Opps, I just realized those are probably the two sensors...correct? :-D

Affirmative...

Cheers!
 
I'm not using a phone, I'm using an lcd attached to the gpio of the RPI so that would work in this instance

So, you want to use an LCD (presumably a character array) attached to the RPi to display the information that the LCD character array attached to the Uno displays?

Cheers! :drunk:
 
OK so with some help from my brother in law (well most of it anyway)

I was given the Waveshare spot pear 4inch touchscreen display, that i thought i'd use as a display panel for my second brew fridge.

you can create an independent lcd.html and a lcd.css that are saved in the same location as index.html. which allows you to extract the top left panel only and it serves as a display.

and you get something like the picture at the bottom (i need some more trial and error to get it looking perfect)

for anyone interested in doing it hear is the lcd.html text

Code:
<html>
<head>
	<title>BrewPi LCD</title>
	<link type="text/css" href="lcd.css" rel="stylesheet"/>
	<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
</head>

<body>

<div id="lcd" class="lcddisplay"><span class="lcd-text">
	<span class="lcd-line" id="lcd-line-0">Live LCD waiting</span>
	<span class="lcd-line" id="lcd-line-1">for update from</span>
	<span class="lcd-line" id="lcd-line-2">script...</span>
	<span class="lcd-line" id="lcd-line-3"></span>
</div>

<script type="text/javascript">
function refreshLcd(){
	"use strict";
	$.post('socketmessage.php', {messageType: "lcd", message: ""},
        function(lcdText){
            var $lcdText = $('#lcd .lcd-text');
            for (var i = lcdText.length - 1; i >= 0; i--) {
                $lcdText.find('#lcd-line-' + i).html(lcdText[i]);
            }
        }, "json")
        .fail(function() {
            var $lcdText = $('#lcd .lcd-text');
			$lcdText.find('#lcd-line-0').html("Cannot receive");
			$lcdText.find('#lcd-line-1').html("LCD text from");
			$lcdText.find('#lcd-line-2').html("Python script");
			$lcdText.find('#lcd-line-3').html(" ");
	    }).always(function() {
            window.setTimeout(refreshLcd,5000);
        }
    );
}
$(document).ready(function(){
	"use strict";
	refreshLcd();
});
</script>
</body>
</html>

and hear is the separate CSS file that you need in order to change the size of the panel text etc.

Code:
.lcddisplay {
	width: 480px;
	height: 320px;
	float: left;
	margin: 5px;
	background: #000000; /* Old browsers */
	background: -moz-linear-gradient(top, #000000 2%, #2b2b2b 11%, #212121 54%, #212121 92%, #000000 100%); /* FF3.6+ */
	background: -webkit-gradient(linear, left top, left bottom, color-stop(2%,#000000), color-stop(11%,#2b2b2b), color-stop(54%,#212121), color-stop(92%,#212121), color-stop(100%,#000000)); /* Chrome,Safari4+ */
	background: -webkit-linear-gradient(top, #000000 2%,#2b2b2b 11%,#212121 54%,#212121 92%,#000000 100%); /* Chrome10+,Safari5.1+ */
	background: -o-linear-gradient(top, #000000 2%,#2b2b2b 11%,#212121 54%,#212121 92%,#000000 100%); /* Opera11.10+ */
	background: -ms-linear-gradient(top, #000000 2%,#2b2b2b 11%,#212121 54%,#212121 92%,#000000 100%); /* IE10+ */
	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#000000',GradientType=0 ); /* IE6-9 */
	background: linear-gradient(top, #000000 2%,#2b2b2b 11%,#212121 54%,#212121 92%,#000000 100%); /* W3C */
	-webkit-box-shadow: inset 1px 1px 5px #333333;
	-moz-box-shadow: inset 1px 1px 5px #333333;
	box-shadow: inset 1px 1px 5px #333333;
	border: 2px solid #333;
	-webkit-border-radius: 2px;
	-moz-border-radius: 2px;
	border-radius: 2px;
}

.lcddisplay .lcd-text{
	float:left;
	margin: 65px 16px;
}

.lcd-line{
	float:left;
	clear:left;
	font-size: 35px;
	font-weight: normal;
	font-style: normal;
	font-family: '5x8LCDHD44780UA02Regular', monospace;
	color: #FFFF00;
	white-space: pre;
}

to edit the display to fit your device change
.lcddisplay {
width: 480px;
height: 320px;

to edit the placement of the text change
.lcddisplay .lcd-text{
float:left;
margin: 65px 16px;

and to make the text fill the screen edit
.lcd-line{
font-size: 35px;

i inspected the elements in chrome and made the adjustments there to see how it looked (you can set the screen size to replicate a device) and used trial and error.

I am sure there is an easier way to do that but it worked for me.

For anyone thinking of using the same display, it was a pain to set up but i finally found a great link that i followed and it worked perfectly. http://futurice.com/blog/id-like-to-have-some-lcd-on-my-pi

and anyone wanting to boot their RPI straight to the LCD display i followed this.
https://www.danpurdy.co.uk/web-development/raspberry-pi-kiosk-screen-tutorial/
as i was using raspbian under setting up the kiosk instructions i had to edit this file /etc/xdg/lxsession/LXDE-pi/autostart

you access the LCD display by ipaddress/lcd.html

hope someone finds this useful

777D77DF-032E-4FDA-B064-A0C907C0D1F5.JPG
 
U might dial the font size down a smidge. You are cutting off a whole character there at the end.
 
OK so with some help from my brother in law (well most of it anyway)



I was given the Waveshare spot pear 4inch touchscreen display, that i thought i'd use as a display panel for my second brew fridge.



you can create an independent lcd.html and a lcd.css that are saved in the same location as index.html. which allows you to extract the top left panel only and it serves as a display.



and you get something like the picture at the bottom (i need some more trial and error to get it looking perfect)



for anyone interested in doing it hear is the lcd.html text



Code:
<html>

<head>

<title>BrewPi LCD</title>

<link type="text/css" href="lcd.css" rel="stylesheet"/>

<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>

</head>



<body>



<div id="lcd" class="lcddisplay"><span class="lcd-text">

<span class="lcd-line" id="lcd-line-0">Live LCD waiting</span>

<span class="lcd-line" id="lcd-line-1">for update from</span>

<span class="lcd-line" id="lcd-line-2">script...</span>

<span class="lcd-line" id="lcd-line-3"></span>

</div>



<script type="text/javascript">

function refreshLcd(){

"use strict";

$.post('socketmessage.php', {messageType: "lcd", message: ""},

        function(lcdText){

            var $lcdText = $('#lcd .lcd-text');

            for (var i = lcdText.length - 1; i >= 0; i--) {

                $lcdText.find('#lcd-line-' + i).html(lcdText[i]);

            }

        }, "json")

        .fail(function() {

            var $lcdText = $('#lcd .lcd-text');

$lcdText.find('#lcd-line-0').html("Cannot receive");

$lcdText.find('#lcd-line-1').html("LCD text from");

$lcdText.find('#lcd-line-2').html("Python script");

$lcdText.find('#lcd-line-3').html(" ");

    }).always(function() {

            window.setTimeout(refreshLcd,5000);

        }

    );

}

$(document).ready(function(){

"use strict";

refreshLcd();

});

</script>

</body>

</html>



and hear is the separate CSS file that you need in order to change the size of the panel text etc.



Code:
.lcddisplay {

width: 480px;

height: 320px;

float: left;

margin: 5px;

background: #000000; /* Old browsers */

background: -moz-linear-gradient(top, #000000 2%, #2b2b2b 11%, #212121 54%, #212121 92%, #000000 100%); /* FF3.6+ */

background: -webkit-gradient(linear, left top, left bottom, color-stop(2%,#000000), color-stop(11%,#2b2b2b), color-stop(54%,#212121), color-stop(92%,#212121), color-stop(100%,#000000)); /* Chrome,Safari4+ */

background: -webkit-linear-gradient(top, #000000 2%,#2b2b2b 11%,#212121 54%,#212121 92%,#000000 100%); /* Chrome10+,Safari5.1+ */

background: -o-linear-gradient(top, #000000 2%,#2b2b2b 11%,#212121 54%,#212121 92%,#000000 100%); /* Opera11.10+ */

background: -ms-linear-gradient(top, #000000 2%,#2b2b2b 11%,#212121 54%,#212121 92%,#000000 100%); /* IE10+ */

filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#000000',GradientType=0 ); /* IE6-9 */

background: linear-gradient(top, #000000 2%,#2b2b2b 11%,#212121 54%,#212121 92%,#000000 100%); /* W3C */

-webkit-box-shadow: inset 1px 1px 5px #333333;

-moz-box-shadow: inset 1px 1px 5px #333333;

box-shadow: inset 1px 1px 5px #333333;

border: 2px solid #333;

-webkit-border-radius: 2px;

-moz-border-radius: 2px;

border-radius: 2px;

}



.lcddisplay .lcd-text{

float:left;

margin: 65px 16px;

}



.lcd-line{

float:left;

clear:left;

font-size: 35px;

font-weight: normal;

font-style: normal;

font-family: '5x8LCDHD44780UA02Regular', monospace;

color: #FFFF00;

white-space: pre;

}



to edit the display to fit your device change

.lcddisplay {

width: 480px;

height: 320px;



to edit the placement of the text change

.lcddisplay .lcd-text{

float:left;

margin: 65px 16px;



and to make the text fill the screen edit

.lcd-line{

font-size: 35px;



i inspected the elements in chrome and made the adjustments there to see how it looked (you can set the screen size to replicate a device) and used trial and error.



I am sure there is an easier way to do that but it worked for me.



For anyone thinking of using the same display, it was a pain to set up but i finally found a great link that i followed and it worked perfectly. http://futurice.com/blog/id-like-to-have-some-lcd-on-my-pi



and anyone wanting to boot their RPI straight to the LCD display i followed this.

https://www.danpurdy.co.uk/web-development/raspberry-pi-kiosk-screen-tutorial/

as i was using raspbian under setting up the kiosk instructions i had to edit this file /etc/xdg/lxsession/LXDE-pi/autostart



you access the LCD display by ipaddress/lcd.html



hope someone finds this useful


That's pretty cool.
 
U might dial the font size down a smidge. You are cutting off a whole character there at the end.


Yeah I've made it smaller since posting, I'm sure there's a smarter way to get the whole thing to auto scale to any device, as it's still small ok my iPhone if I want to glance at it. But it's clutter free and works.

Just need to scour the Internet to get rid of the irritating safari can't receive Python error every 10 seconds.
 
Yeah it does that. I think it's got something to do with iOS 8.1 and above. Since is never did it before I upgraded.
 
Yeah I've made it smaller since posting, I'm sure there's a smarter way to get the whole thing to auto scale to any device, as it's still small ok my iPhone if I want to glance at it. But it's clutter free and works.

Just need to scour the Internet to get rid of the irritating safari can't receive Python error every 10 seconds.


You can use the @media Rule in CSS to change it...

you can keep the same ones, then duplicate them under and add this before with a closing } at the end...


Code:
@media screen and (max-width: 480px) {

   .lcddisplay {

    width: 480px;
    height: 320px; 
      }


   .lcddisplay .lcd-text{

       float:left;

          margin: 65px 16px;
      }


   .lcd-line{

        font-size: 35px;
    }
}

You can set up multiple rules with min/max widths for the CSS to interpret.
 
Sorry for the Frazzled post, but I am in dire need. I have a beer fermenting and of course my pi decided to **** out last night.. I tried feverishly to set it back up, but I am missing something....can you please help?

I was running multiple instances of brewpi (2) but now neither can recieve from python scripts, it looks like somehow they are both trying to use the same script, but I can't for the life of me find the error. Here is what I have

If I run

pi@raspberrypi ~ $ python /home/brewpi/brewpi1/brewpi.py --status
[{'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi2/', 'wwwPath': '/var/www/brewpi2/', 'port': '/dev/brewpi2', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'My First BrewPi Run', 'interval': '120.0', 'dataLogging': 'active'}),
'pid': 2536,
'port': '/dev/brewpi2',
'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi2/BEERSOCKET'}},
{'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi1/', 'wwwPath': '/var/www/brewpi1/', 'port': '/dev/brewpi1', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'My First BrewPi Run', 'interval': '120.0', 'dataLogging': 'active'}),
'pid': 2549,
'port': '/dev/brewpi1',
'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi1/BEERSOCKET'}}]

then run

pi@raspberrypi ~ $ python /home/brewpi/brewpi2/brewpi.py --status
[{'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi2/', 'wwwPath': '/var/www/brewpi2/', 'port': '/dev/brewpi2', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'My First BrewPi Run', 'interval': '120.0', 'dataLogging': 'active'}),
'pid': 2536,
'port': '/dev/brewpi2',
'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi2/BEERSOCKET'}},
{'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi2/', 'wwwPath': '/var/www/brewpi2/', 'port': '/dev/brewpi2', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'My First BrewPi Run', 'interval': '120.0', 'dataLogging': 'active'}),
'pid': 2549,
'port': '/dev/brewpi2',
'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi2/BEERSOCKET'}}]


I can also manually start the python script for one of them, but if I try to to the other I get this:
pi@raspberrypi ~ $ sudo -u brewpi python /home/brewpi/brewpi2/brewpi.py
Conflict: same config file as another BrewPi instance already running.
Jun 14 2015 14:14:31 Another instance of BrewPi is already running, which will conflict with this instance. This instance will exit



sorry for the blurb, but I have a fermenting beer raising temp and am racing around..

I have a join.me screen share set up if that helps, PM me for the code.


thanks!
 
Look at:

/home/brewpi/brewpi1/settings/config.cfg

and compare that file to

/home/brewpi/brewpi2/settings/config.cfg

Make sure the paths defined therein are pointing to the proper instance files paths and port assignments, it looks like the one for brewpi1 is pretty well munged up right now.

Then check these files for the correct scriptpath defines:

/var/www/brewpi1/config_user.php
$scriptPath = '/home/brewpi/brewpi1';

/var/www/brewpi2/config_user.php
$scriptPath = '/home/brewpi/brewpi2';

Fix all those and you should be back on the air.

Then create a backup image so you don't have to do this again :)

Cheers!
 
Ok, so I checked them again:
scriptPath = /home/brewpi/brewpi1/
wwwPath = /var/www/brewpi1/
port = /dev/brewpi1
altport = /dev/null
boardType = uno

scriptPath = /home/brewpi/brewpi2/
wwwPath = /var/www/brewpi2/
port = /dev/brewpi2
altport = /dev/null
boardType = uno


<?php
// The default settings in config.php are overruled by the settings in config_user.php
// To use custom settings, copy this file to config_user.php and make your changes in config_user.php
// do not add a php closing tag, because newlines after closing tag might be included in the html

// Do not include a trailing slash on the path
// $scriptPath = '/home/brewpi/brewpi1';


<?php
// The default settings in config.php are overruled by the settings in config_user.php
// To use custom settings, copy this file to config_user.php and make your changes in config_user.php
// do not add a php closing tag, because newlines after closing tag might be included in the html

// Do not include a trailing slash on the path
// $scriptPath = '/home/brewpi/brewpi2';


What else am i missing?

thanks!
 
99-arduino.rules

SUBSYSTEM=="tty", KERNEL=="ttyACM*", KERNELS=="1-1.3:1.0", SYMLINK+="brewpi1"
SUBSYSTEM=="tty", KERNEL=="ttyACM*", KERNELS=="1-1.5:1.0", SYMLINK+="brewpi2"

KERNEL=="ttyACM0"
SUBSYSTEM=="tty"
DRIVER==""

looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0':
KERNELS=="1-1.3:1.0"


KERNEL=="ttyACM1"
SUBSYSTEM=="tty"
DRIVER==""

looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.5/1-1.5:1.0':
KERNELS=="1-1.5:1.0"
 
So I just found a huge bug in that BrewPi status command.

tl;dr : Solve this problem and ignore everything else:

Code:
pi@raspberrypi ~ $ python /home/brewpi/brewpi1/brewpi.py --status
[{'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi2/', 'wwwPath': '/var/www/brewpi2/', 'port': '/dev/brewpi2', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'My First BrewPi Run', 'interval': '120.0', 'dataLogging': 'active'}),
'pid': 2536,
'port': '/dev/brewpi2',
'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi2/BEERSOCKET'}},


So I have four BrewPi instances running, brewpi1 through brewpi4.
If I use this command:

$ python /home/brewpi/brewpi1/brewpi.py --status

the status of all four instances is returned, and all of the paths, port assigns and the like are correctly listed.

Code:
pi@rpints ~ $ python /home/brewpi/brewpi1/brewpi.py --status
[{'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi1/', 'wwwPath': '/var/www/brewpi1/', 'port': '/dev/brewpi1', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'BrewPi1%20Test4', 'interval': '120.0', 'dataLogging': 'active'}),
  'pid': 3220,
  'port': '/dev/brewpi1',
  'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi1/BEERSOCKET'}},
 {'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi4/', 'wwwPath': '/var/www/brewpi4/', 'port': '/dev/rfcomm2', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'BrewPi4%20Test2', 'interval': '120.0', 'dataLogging': 'active'}),
  'pid': 3221,
  'port': '/dev/rfcomm2',
  'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi4/BEERSOCKET'}},
 {'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi2/', 'wwwPath': '/var/www/brewpi2/', 'port': '/dev/rfcomm0', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'BrewPi2%20Test4', 'interval': '120.0', 'dataLogging': 'active'}),
  'pid': 30528,
  'port': '/dev/rfcomm0',
  'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi2/BEERSOCKET'}},
 {'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi3/', 'wwwPath': '/var/www/brewpi3/', 'port': '/dev/rfcomm1', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'BrewPi3%20Test5', 'interval': '120.0', 'dataLogging': 'active'}),
  'pid': 30529,
  'port': '/dev/rfcomm1',
  'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi3/BEERSOCKET'}}]
pi@rpints ~ $

But if I use the same command but pointing to instances 2, 3 or 4, the returned status for the selected instance is all effed up:

Code:
pi@rpints ~ $ python /home/brewpi/brewpi2/brewpi.py --status
[{'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi1/', 'wwwPath': '/var/www/brewpi1/', 'port': '/dev/brewpi1', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'BrewPi1%20Test4', 'interval': '120.0', 'dataLogging': 'active'}),
  'pid': 3220,
  'port': '/dev/brewpi1',
  'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi1/BEERSOCKET'}},
 {'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi4/', 'wwwPath': '/var/www/brewpi4/', 'port': '/dev/rfcomm2', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'BrewPi4%20Test2', 'interval': '120.0', 'dataLogging': 'active'}),
  'pid': 3221,
  'port': '/dev/rfcomm2',
  'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi4/BEERSOCKET'}},
 {'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi2/', 'wwwPath': '/var/www/brewpi2/', 'port': '/dev/rfcomm0', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'BrewPi2%20Test4', 'interval': '120.0', 'dataLogging': 'active'}),
  'pid': 30528,
  'port': '/dev/rfcomm0',
  'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi2/BEERSOCKET'}},
 {'cfg': ConfigObj({'scriptPath': '/home/brewpi/brewpi3/', 'wwwPath': '/var/www/brewpi3/', 'port': '/dev/rfcomm1', 'altport': '/dev/null', 'boardType': 'uno', 'beerName': 'BrewPi3%20Test5', 'interval': '120.0', 'dataLogging': 'active'}),
  'pid': 30529,
  'port': '/dev/rfcomm1',
  'sock': {'sock': 0, 'host': 'localhost', 'type': 'f', 'port': None, 'file': '/home/brewpi/brewpi3/BEERSOCKET'}}]
pi@rpints ~ $

And that is AFU.

So I'd be careful about being led astray as that can clearly happen if you're not aware of this bug (which I wasn't)...

Cheers!
 
Does anyone know if the script paths 'n' stuff are actually saved to the Arduino eeprom? So, if one cloned an Uno then tried to assign it to life as a second instance, this kind of conflict could occur?

With all the minions around here it occurred to me that I've never "cloned" one - each one was programmed after its instance had already been created.

Anyway, I guess reprogramming the Uno for the brewpi1 instance might be worth trying, because you have all of the setup files correct afaict...

Cheers!
 
Edit, after a complete rebuild, I see the error in my ways...

I used the wrong Kernel, I used the first I saw, and needed to use the one where it specified arduino.

Thanks all!
 
Using the devices serial number is a much better way to address the arduinos. That way if you connect them to the wrong USB port it won't matter. Running the Python script manually will always conflict with multiple instances. Hell if you go through your logs you'll see that every now and then the instances see one another and panic but it all seems to right itself after a while.
 
I totally agree, serials is the way to go.

Code:
SUBSYSTEM=="tty", KERNEL=="ttyACM*", ATTRS{serial}=="85336303532351F0A031", SYMLINK+="brewpi1", GROUP="brewpi"
SUBSYSTEM=="tty", KERNEL=="ttyACM*", ATTRS{serial}=="754373038303510BF870", SYMLINK+="brewpi2", GROUP="brewpi"
SUBSYSTEM=="tty", KERNEL=="ttyACM*", ATTRS{serial}=="5543131323835130B160", SYMLINK+="brewpi3", GROUP="brewpi"
SUBSYSTEM=="tty", KERNEL=="ttyACM*", ATTRS{serial}=="55431313238351104021", SYMLINK+="brewpi4", GROUP="brewpi"

Cheers!
 
Hey all,
This thread is amazing. I haven't been able to get through all the postings, but started building my own BrewPi with this method and have run into a hiccup :drunk:

My Device List is not showing the 2 temp probes. I see only the devices seen in the pics attached. I have checked my circuitry and see voltage running through the 3 wires on my probes (I purchased the ones listed on the OP from ebay). I've attached a pic of my breadboard setup too for any troubleshooting help.

I apologize in advance if someone has asked this and gotten a reply in the thread. It's long and I didn't get through all of it, but if it has been answered, if you can point me to the right thread, I would appreciate it.

Thanks!

Screen shot 2015-06-14 at 3.05.20 PM.png


Screen shot 2015-06-14 at 3.05.30 PM.png


2015-06-14 15.12.29.jpg
 
Hey all,

This thread is amazing. I haven't been able to get through all the postings, but started building my own BrewPi with this method and have run into a hiccup :drunk:



My Device List is not showing the 2 temp probes. I see only the devices seen in the pics attached. I have checked my circuitry and see voltage running through the 3 wires on my probes (I purchased the ones listed on the OP from ebay). I've attached a pic of my breadboard setup too for any troubleshooting help.



I apologize in advance if someone has asked this and gotten a reply in the thread. It's long and I didn't get through all of it, but if it has been answered, if you can point me to the right thread, I would appreciate it.



Thanks!


The breadboard is a bit difficult to make out but have you got the resistor between then ground and live rather than the live and data?
 
Hi, thanks for the fast reply. The resistor is between the 5v and the data (I had to use a black jumper despite it being the data line, since it's what I had). Yeah, the photo is hard to make out, sorry!
 
Status
Not open for further replies.
Back
Top