• Please visit and share your knowledge at our sister communities:
  • If you have not, please join our official Homebrewing Facebook Group!

    Homebrewing Facebook Group

[Version 2 Release] RaspberryPints - Digital Taplist Solution

Homebrew Talk

Help Support Homebrew Talk:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
Use the built-in browser developer tool's to determine what is happening/not happening in regard to rendering/css. Most modern browsers have some sort of built-in developer tools (might be called a different name, but they allow inspecting the rendered DOM).
Thanks I have been trying. I used the dev tools to change fonts, spacing and widths without a problem. I can't seem to do anything with it to change the way it renders the image. You would think the object-fit or image-fit or auto would work, but alas... I even changed the graphic to 150 X 75 and it still doesn't fit. I'm not good at this stuff, I appreciate the help.
 
Thanks I have been trying. I used the dev tools to change fonts, spacing and widths without a problem. I can't seem to do anything with it to change the way it renders the image. You would think the object-fit or image-fit or auto would work, but alas... I even changed the graphic to 150 X 75 and it still doesn't fit. I'm not good at this stuff, I appreciate the help.
Look for overridden styles, things with a line thru them. Perhaps, the image is correctly set, but then overrode by a later style. Remember, CSS = cascading style sheet (in other words the last style wins).
 
Thanks I have been trying. I used the dev tools to change fonts, spacing and widths without a problem. I can't seem to do anything with it to change the way it renders the image. You would think the object-fit or image-fit or auto would work, but alas... I even changed the graphic to 150 X 75 and it still doesn't fit. I'm not good at this stuff, I appreciate the help.
Remember too things are rendered, aka images, based on their container. Perhaps, a div or span or other item is ruining the images.

To drive yourself totally mental, try making a scrolling list (table) where the header row remains (doesn't scroll). Is possible, not exactly easy, but doable.
 
Remember too things are rendered, aka images, based on their container. Perhaps, a div or span or other item is ruining the images.

To drive yourself totally mental, try making a scrolling list (table) where the header row remains (doesn't scroll). Is possible, not exactly easy, but doable.
Are you drunk? No wait, haha that's me. I have 8 taps and RandR+ helped me put them in a portrait mode screen with double columns. Hopefully, I won't need to scroll the table under the header. Everything is fitting really well on full screen and looks awesome. Just a couple more things to fix. The tap graphics fitting and I put "Your beer is being poured at a COLD 34.56° F" at the bottom of the table. Currently with last pour at the top, I'm struggling to pull show the converted $temp variable at the bottom. It's something I think I can figure out. I'll look into some of your suggestions on the tap graphic. Thanks!
 
I'm to the point of trying to get the tap number graphics to fit. I PM'd Troyp42 and used what worked for him, but it didn't for me. He modified the class for the tap circle. I've been trying .tap-num without success. It is also is browser dependent. It works great on FireFox, but none of the other browsers including Chromium.

Anyone able to point me to the class that needs modifying?

Bit surprised you get that issue in Chromium. I know older Browsers, such as Safari from a couple years ago will render the page like that.

Anyway, what you seek to change can be located here: /var/www/html/includes/beerListTable.php

about Line 88. (I cant remember if I added anything to throw my line count off) You'll want to set your height and width to a set px. I set mine to 51px x 54px and I render the image in all the browsers important to me.

As Tabor said....the base element wins. in this case it's beerListTable.php.
 
After doing this now the heading POURS is completely gone/.

View attachment 664625

Edit:- Ok its back again after a reboot. Ill keep playing around. thanks heaps mate.

EDIT:- Nope. It showed one pour then I changed the count per litre from 7000 to 3000 as it only showed 33mls when I had poured 500mls, but it won't show the second pour now?
Is that background original art?
 
Just a couple more things to fix. The tap graphics fitting and I put "Your beer is being poured at a COLD 34.56° F" at the bottom of the table. Currently with last pour at the top, I'm struggling to pull show the converted $temp variable at the bottom. It's something I think I can figure out. I'll look into some of your suggestions on the tap graphic. Thanks!

What you're attempting to do is modify the displayed/rendered DOM. Must use javascript or jQuery.

Please realize the Raspberry Pints Tap List is rendered from the server. Once done the server is disconnected from the browser. This is what is known as "stateless".

If we want ongoing updating to happen once the Tap List is rendered, then we are on the client and must handle accordingly (otherwise we'll not see our changes).
 
Last edited:
This is so frustrating. Ive changed the baud rate from 9600 to 115200, then to 57600 after reading various posts on here but no matter what I do it wont register pours. It has worked a few times and for a bit was working every pour whilst trying to calibrate it. But now wont work at all. Please help????

If I run serial monitor in the Arduino IDE I get a constant ALIVE message so I know the Arduino is working properly. Ive gone back to a baud rate of 115200.
 
Bit surprised you get that issue in Chromium. I know older Browsers, such as Safari from a couple years ago will render the page like that.

Anyway, what you seek to change can be located here: /var/www/html/includes/beerListTable.php

about Line 88. (I cant remember if I added anything to throw my line count off) You'll want to set your height and width to a set px. I set mine to 51px x 54px and I render the image in all the browsers important to me.

As Tabor said....the base element wins. in this case it's beerListTable.php.

Thanks, that sounds right. So here is what I have from 70-100

<?php for($i = 1; $i <= ceil($numberOfBeers/$maxTapCol); $i++) {
$beer = null;
if( isset($beers[$i]) ) $beer = $beers[$i];
if($tapOrBottle != ConfigNames::CONTAINER_TYPE_KEG && !isset($beer) ) continue;
?>
<tr class="<?php if($i%2 > 0){ echo 'altrow'; }?>" id="<?php echo $beer['id']; ?>">
<?php
for($tapCol = 0; $tapCol< $maxTapCol && $numberOfBeers > $tapCol; $tapCol++){
$beer = null;
if( isset($beers[$i+($tapCol * (ceil($numberOfBeers/$maxTapCol)))]) ) $beer = $beers[$i+($tapCol * (ceil($numberOfBeers/$maxTapCol)))];
if($tapOrBottle != ConfigNames::CONTAINER_TYPE_KEG && !isset($beer) ) continue;
?>
<?php if($config[ConfigNames::ShowTapNumCol]){ ?>
<td class="tap-num">
<?php if($tapOrBottle == ConfigNames::CONTAINER_TYPE_KEG){
if($config[ConfigNames::AllowSamplePour]){
?>
<a href ="./includes/pours.php/?tapId=<?php echo $beer['id']; ?>" style="height:100%">
<?php
}
$style = "";
if(isset($beer) && isset($beer['tapRgba']) && $beer['tapRgba']) $style = "background-color: ".$htmlHelper->CreateRGB($beer['tapRgba']);
$imgs = glob ( 'img/tap/tap'.$beer['id'].'.*' );
if(count($imgs) > 0) $style .= ($style != ""?";":"").'background:url('.$imgs[0].') no-repeat bottom left; background-size:cover; -webkit-border-radius:0px; -mox-border-radius:0px; height:100%; width:50px';
?>
<span class="tapcircle" style="<?php echo $style; ?>">
<?php if(isset($beer['tapNumber']) && $beer['tapNumber'] != 0){echo $beer['tapNumber'];}elseif(count($imgs) == 0){echo $i;}else{echo '&nbsp;';} ?>
</span>
<?php if($config[ConfigNames::AllowSamplePour]){ ?>
</a>
<?php }?>

Did I mention the best I can do is cut and paste what someone else has done? I'm waay out of my league and really appreciate the patience and help everyone has given me here. This is RandR+ file he modified for the two column beer table. Is it the 6th line up from the bottom or out of this range?
 
Thanks, that sounds right. So here is what I have from 70-100

<?php
}
$style = "";
if(isset($beer) && isset($beer['tapRgba']) && $beer['tapRgba']) $style = "background-color: ".$htmlHelper->CreateRGB($beer['tapRgba']);
$imgs = glob ( 'img/tap/tap'.$beer['id'].'.*' );
if(count($imgs) > 0) $style .= ($style != ""?";":"").'background:url('.$imgs[0].') no-repeat bottom left; background-size:cover; -webkit-border-radius:0px; -mox-border-radius:0px; height:100%; width:50px';
?>

Did I mention the best I can do is cut and paste what someone else has done? I'm waay out of my league and really appreciate the patience and help everyone has given me here. This is RandR+ file he modified for the two column beer table. Is it the 6th line up from the bottom or out of this range?

The above is what you're looking for.

change to:

Code:
<?php
            }
       $style = "";      
       if(isset($beer) && isset($beer['tapRgba']) && $beer['tapRgba']) $style = "background-color: ".$htmlHelper->CreateRGB($beer['tapRgba']);
       $imgs = glob ( 'img/tap/tap'.$beer['id'].'.*' );
       if(count($imgs) > 0) $style .= ($style != ""?";":"").'background:url('.$imgs[0].') no-repeat bottom left; background-size:cover; -webkit-border-radius:0px; -mox-border-radius:0px; height:51px; width:54px';
       ?>

With that being said....the height and width that I have in my php may not be right for you and you may have to expand/contract the size based off of your needs....but that's the base element that needs to be altered.
 
Those lines for self Arduino (line 225) and serial.begin (line 124) weren't the same as you quoted..But I assume that doesn't matter?
No the line numbers don't matter, but it looks like you made the right changes as the log doesn't show it restarting over and over again. And shows what I would expect it to be at startup

After doing this now the heading POURS is completely gone/.
That's to be expected until a new pour is registered. it sounds like the first pour worked but the seconded didnt

After you do a pour check /var/log/rpints.log to see if there is any errors.
 
it the 6th line up from the bottom or out of this range?
I used your style.css and the inspection tool and found the issue for chrome

The bold are the styles causing the issue in chromium with your changes, if you remove them chrome looks better
if(count($imgs) > 0) $style .= ($style != ""?";":"").'background:url('.$imgs[0].') no-repeat bottom left; background-size:cover; -webkit-border-radius:0px; -mox-border-radius:0px; height:100%; width:50px';

BUT I also tried it without your changes in chrome and it looked ok on chrome/edge/firefox, a little small tweaking the above line made it look great so try this (on the beerListTable.php)
if(count($imgs) > 0) $style .= ($style != ""?";":"").'background:url('.$imgs[0].') no-repeat center; background-size:cover; -webkit-border-radius:0px; -mox-border-radius:0px; height:100px; width:50px';
 
Verify what port is being used...most likely /dev/ttyACM0 or /dev/ttyACM1.

Then modify /var/www/html/Config.py

"config['flowmon.port'] = '/dev/ttyACM0'

As an aside, I ran into issues of my RPi 3+ bouncing between ttyACM0 and ttyACM1 and did this...


http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/


my "99-usb-serial.rules" looked like this...

SUBSYSTEM=="tty", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0043", SYMLINK+="arduino"

after I made this modification...I could use "/dev/arduino" in Config.py

Then you can go back to GUI and use Arduino IDE Programmer. (still sees ttyACM0 though, so make sure it's selected under Tools/Serial Port)

raspberrypints.ino is located in "/var/www/html/arduino/raspberrypints"

Thanks, i've changed the info in the config file but i'm not getting any pours registered.
So, to double check. Can i power the uno via the raspberry pi or does it have to be powered via it's own port?
Also, are there any other things that need changing considering i was originally on the alamode?
And lastly. i have 1 red solid led on the uno and 1 flashing, does this mean anything?
 
.....After you do a pour check /var/log/rpints.log to see if there is any errors.
Will do when I’m back home. Does the length of wires matter? I am using Ethernet cable. I have a 3 foot run inside the fridge to an Ethernet plug on the outside. Then a 6ft patch lead to my box and into another Ethernet port.
 
Well bugger me. It works now. They all work fine for some reason. Heres the log file anyway.


2020-02-02 07:53:57 RPINTS:
2020-02-02 07:53:57 RPINTS: starting WS server
2020-02-02 07:53:57 RPINTS: starting tap flow meters...
2020-02-02 07:53:57 RPINTS: resetting alamode
2020-02-02 07:53:57 RPINTS: starting command server
2020-02-02 07:53:57 RPINTS: starting fan control
2020-02-02 07:53:57 RPINTS: Fan Control fanControl1 is Running
2020-02-02 07:53:57 RPINTS: Not Configured to run Fan
2020-02-02 07:53:58 RPINTS: waiting for alamode to come alive
2020-02-02 07:54:00 RPINTS: alamode alive...
2020-02-02 07:54:01 RPINTS: getting config data for alamode
2020-02-02 07:54:01 RPINTS: alamode config, about to send: C:4:3:4:5:6:0:300:200:30:250:0:0|
2020-02-02 07:54:01 RPINTS: Waiting for Config Response
2020-02-02 07:54:01 RPINTS: alamode says: alive
2020-02-02 07:54:01 RPINTS: 1Wire Temperature Thread 1 is Running
2020-02-02 07:54:02 RPINTS: listening to alamode
2020-02-02 07:54:02 RPINTS: alive
2020-02-02 07:54:02 RPINTS: alamode was restarted, restart flowmonitor
2020-02-02 07:54:02 RPINTS: closing serial connection to alamode...
2020-02-02 07:54:03 RPINTS: flowmonitor aborted, restarting...
2020-02-02 07:54:03 RPINTS: resetting alamode
2020-02-02 07:54:04 RPINTS: waiting for alamode to come alive
2020-02-02 07:54:05 RPINTS: alamode alive...
2020-02-02 07:54:05 RPINTS: getting config data for alamode
2020-02-02 07:54:05 RPINTS: alamode config, about to send: C:4:3:4:5:6:0:300:200:30:250:0:0|
2020-02-02 07:54:05 RPINTS: Waiting for Config Response
2020-02-02 07:54:06 RPINTS: alamode says: C:4:3:4:5:6:0:300:200:30:250:0:0|
2020-02-02 07:54:06 RPINTS: 1Wire Temperature Thread 1 is Running
2020-02-02 07:54:06 RPINTS: listening to alamode
2020-02-02 07:54:06 RPINTS: Sending Status;NOTOK;-1;0;0;0;0;0;|
2020-02-02 07:54:48 RPINTS: got WS connection from ('::1', 35898, 0, 0)
2020-02-02 07:55:48 RPINTS: got WS connection from ('::1', 35904, 0, 0)
2020-02-02 07:58:09 RPINTS: got WS connection from ('::ffff:192.168.1.163', 50472, 0, 0)
2020-02-02 07:58:13 RPINTS: got WS connection from ('::ffff:192.168.1.163', 50477, 0, 0)
2020-02-02 07:58:15 RPINTS: got WS connection from ('::ffff:192.168.1.163', 50479, 0, 0)
2020-02-02 07:58:16 RPINTS: got WS connection from ('::ffff:192.168.1.163', 50480, 0, 0)
2020-02-02 07:58:24 RPINTS: got WS connection from ('::ffff:192.168.1.163', 50494, 0, 0)
2020-02-02 07:59:24 RPINTS: got WS connection from ('::ffff:192.168.1.163', 50515, 0, 0)
2020-02-02 07:59:39 RPINTS: got a pour: P;-1;3;211
Pourpour on pin: 3, count: 211, conversion: 7000, amount: 0.030142857142857, amountUnit: ml, user: N/A
2020-02-02 07:59:40 RPINTS: restarting fan timer after pour
2020-02-02 07:59:40 RPINTS: count update: RPU:FLOW:3=211:-1
2020-02-02 07:59:40 RPINTS: received server update, sending 'RPU:FLOW:3=211:-1' to ('::ffff:192.168.1.163', 50477, 0, 0)
2020-02-02 07:59:40 RPINTS: received server update, sending 'RPU:FLOW:3=211:-1' to ('::ffff:192.168.1.163', 50479, 0, 0)2020-02-02 07:59:40 RPINTS: received server update, sending 'RPU:FLOW:3=211:-1' to ('::1', 35898, 0, 0)
2020-02-02 07:59:40 RPINTS: received server update, sending 'RPU:FLOW:3=211:-1' to ('::ffff:192.168.1.163', 50494, 0, 0)

2020-02-02 07:59:40 RPINTS: received server update, sending 'RPU:FLOW:3=211:-1' to ('::ffff:192.168.1.163', 50515, 0, 0)
2020-02-02 07:59:40 RPINTS: received server update, sending 'RPU:FLOW:3=211:-1' to ('::ffff:192.168.1.163', 50472, 0, 0)
2020-02-02 07:59:40 RPINTS: received server update, sending 'RPU:FLOW:3=211:-1' to ('::1', 35904, 0, 0)
2020-02-02 07:59:40 RPINTS: received server update, sending 'RPU:FLOW:3=211:-1' to ('::ffff:192.168.1.163', 50480, 0, 0)
2020-02-02 07:59:40 RPINTS: Sending Status;NOTOK;-1;0;0;0;0;0;|
2020-02-02 07:59:40 RPINTS: got WS connection from ('::ffff:192.168.1.163', 50525, 0, 0)
2020-02-02 07:59:42 RPINTS: got a pour: P;-1;3;215
Pourpour on pin: 3, count: 215, conversion: 7000, amount: 0.030714285714286, amountUnit: ml, user: N/A
2020-02-02 07:59:42 RPINTS: count update: RPU:FLOW:3=215:-1
2020-02-02 07:59:42 RPINTS: received server update, sending 'RPU:FLOW:3=215:-1' to ('::1', 35898, 0, 0)
2020-02-02 07:59:42 RPINTS: received server update, sending 'RPU:FLOW:3=215:-1' to ('::ffff:192.168.1.163', 50525, 0, 0)
2020-02-02 07:59:42 RPINTS: received server update, sending 'RPU:FLOW:3=215:-1' to ('::ffff:192.168.1.163', 50479, 0, 0)
2020-02-02 07:59:42 RPINTS: received server update, sending 'RPU:FLOW:3=215:-1' to ('::ffff:192.168.1.163', 50515, 0, 0) 2020-02-02 07:59:42 RPINTS: received server update, sending 'RPU:FLOW:3=215:-1' to ('::ffff:192.168.1.163', 50480, 0, 0)
2020-02-02 07:59:42 RPINTS: received server update, sending 'RPU:FLOW:3=215:-1' to ('::1', 35904, 0, 0)2020-02-02 07:59:42 RPINTS: received server update, sending 'RPU:FLOW:3=215:-1' to ('::ffff:192.168.1.163', 50477, 0, 0)

2020-02-02 07:59:42 RPINTS: received server update, sending 'RPU:FLOW:3=215:-1' to ('::ffff:192.168.1.163', 50472, 0, 0)

2020-02-02 07:59:42 RPINTS: received server update, sending 'RPU:FLOW:3=215:-1' to ('::ffff:192.168.1.163', 50494, 0, 0)
2020-02-02 07:59:42 RPINTS: [Errno 32] Broken pipe
2020-02-02 07:59:42 RPINTS: closing WS connection to ('::ffff:192.168.1.163', 50477, 0, 0)
2020-02-02 07:59:42 RPINTS: [Errno 32] Broken pipe
2020-02-02 07:59:42 RPINTS: closing WS connection to ('::1', 35898, 0, 0)
2020-02-02 07:59:42 RPINTS: [Errno 32] Broken pipe
2020-02-02 07:59:42 RPINTS: closing WS connection to ('::ffff:192.168.1.163', 50472, 0, 0)
2020-02-02 07:59:42 RPINTS: [Errno 32] Broken pipe
2020-02-02 07:59:42 RPINTS: closing WS connection to ('::ffff:192.168.1.163', 50494, 0, 0)
2020-02-02 07:59:42 RPINTS: [Errno 32] Broken pipe
2020-02-02 07:59:42 RPINTS: [Errno 32] Broken pipe
2020-02-02 07:59:42 RPINTS: closing WS connection to ('::1', 35904, 0, 0)2020-02-02 07:59:42 RPINTS: closing WS connection to ('::ffff:192.168.1.163', 50479, 0, 0)

2020-02-02 07:59:42 RPINTS: [Errno 32] Broken pipe
2020-02-02 07:59:42 RPINTS: closing WS connection to ('::ffff:192.168.1.163', 50480, 0, 0)
2020-02-02 07:59:42 RPINTS: Sending Status;NOTOK;-1;0;0;0;0;0;|
[2020-02-02 07:59:42,573] [ERROR] mod_pywebsocket.standalone.WebSocketServer: Exception in processing request from: ('::1', 35898, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 599, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/dist-packages/mod_pywebsocket/standalone.py", line 664, in __init__
self, request, client_address, server)
File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 283, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

[2020-02-02 07:59:42,576] [ERROR] mod_pywebsocket.standalone.WebSocketServer: Exception in processing request from: ('::1', 35904, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 599, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/dist-packages/mod_pywebsocket/standalone.py", line 664, in __init__
self, request, client_address, server)
File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 283, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

[2020-02-02 07:59:42,577] [ERROR] mod_pywebsocket.standalone.WebSocketServer: Exception in processing request from: ('::ffff:192.168.1.163', 50477, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 599, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/dist-packages/mod_pywebsocket/standalone.py", line 664, in __init__
self, request, client_address, server)
File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 283, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

[2020-02-02 07:59:42,578] [ERROR] mod_pywebsocket.standalone.WebSocketServer: Exception in processing request from: ('::ffff:192.168.1.163', 50494, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 599, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/dist-packages/mod_pywebsocket/standalone.py", line 664, in __init__
self, request, client_address, server)
File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 283, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

[2020-02-02 07:59:42,578] [ERROR] mod_pywebsocket.standalone.WebSocketServer: Exception in processing request from: ('::ffff:192.168.1.163', 50479, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 599, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/dist-packages/mod_pywebsocket/standalone.py", line 664, in __init__
self, request, client_address, server)
File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 283, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

[2020-02-02 07:59:42,579] [ERROR] mod_pywebsocket.standalone.WebSocketServer: Exception in processing request from: ('::ffff:192.168.1.163', 50472, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 599, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/dist-packages/mod_pywebsocket/standalone.py", line 664, in __init__
self, request, client_address, server)
File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 283, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

[2020-02-02 07:59:42,582] [ERROR] mod_pywebsocket.standalone.WebSocketServer: Exception in processing request from: ('::ffff:192.168.1.163', 50480, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 599, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/dist-packages/mod_pywebsocket/standalone.py", line 664, in __init__
self, request, client_address, server)
File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 283, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
 
Well it appears my issue is that blowing through the flow meters registers a pour but pouring water or beer through them is not enough pressure to get them turning. Even if I blow through the beer line connected to the flow meter it still doesn’t turn. It if I take the beer line off and blow through the Flowmeter it works.
I’m using 4mm EVA Barrier line around 2 metres long and regulator is set at 100kpa (14psi)
Does this mean I have to switch to 5 or 6mm line and run a longer length?
 
Refresh the collective memory: what make/model flow meters?
Do you have more than one meter being tested?

imo, if you are pouring a little over an ounce per second (a bit under 2 liters per minute) and a meter isn't spinning I'd suspect the meter. Even the Adafruit is spec'd at 1 lpm at the low end - which means it'll likely work even lower with perhaps some loss of accuracy...

Cheers!
 
Refresh the collective memory: what make/model flow meters?
Do you have more than one meter being tested?

imo, if you are pouring a little over an ounce per second (a bit under 2 liters per minute) and a meter isn't spinning I'd suspect the meter. Even the Adafruit is spec'd at 1 lpm at the low end - which means it'll likely work even lower with perhaps some loss of accuracy...

Cheers!
These are the flow meters I’m using.
https://www.auselectronicsdirect.com.au/hall-effect-water-flow-meter-sensor

I have 3 metres and I tested them all by blowing and all worked. Tested 2 with a pour and neither worked. When I first set it all up yesterday it worked but my gas pressure was up a bit more as I actually had to turn it down and burp the keg. I’ve only just realised now that’s what caused it to stop working. But even if I keep the beer line connected and blow as hard as I can the meters don’t spin. It’s like the 4mm line is causing too much restriction.
 
It says it will work at 1liter per minute which seem fine for most tap systems.
what are you tap settings like count pulse count per gallon, update trigger count and pour trigger count?

I think the setting should be 1700 for count per gallon, maybe a update count around 200 and trigger count of a once or two maybe 15 to 25.

edit; maybe try a lower value like 50 and 10 for update count and trigger count to see if you get anything to register.
 
Last edited:

[Version 2 Release] RaspberryPints - Digital Taplist Solution At this post I talk about flow meters and what their rated frequency relates to. In your case, your flow meters are at a theoretical 7.5Hz. That means your meter generates 450 pulses per Liter (theoretically). Your meters have an error of 10%, meaning your actual frequency can be +/- .75Hz in either direction of 7.5Hz.

As @ba-brewer just mentioned start around 1700 p/G, and his limit recommendations.
 
Last edited:
Thanks guys, I’m out for the weekend but I think I have my pulse count set at 7000 per litre. I’ll drop it right down and see how I go. Thanks for the tips.
 
Can i power the uno via the raspberry pi or does it have to be powered via it's own port?
I would power the Uno on its own.

Also check /var/log/rpints.log for any errors or anomalies.

you may need to change the baudrate

stop the service (sudo /etc/init.d/flowmon stop)
In /var/www/html/python/FlowMonitor.py change line 225
from
self.arduino = serial.Serial(self.port,9600,timeout=.5)
to
self.arduino = serial.Serial(self.port,115200,timeout=.5)
and save
in the raspberrypints.ino change line 124
from
Serial.begin(9600);
to
Serial.begin(115200);

delete /var/www/html/arduino/raspberrypints/raspberrypints.hex
upload the sketch via Arduino ide
then start the service (sudo /etc/init.d/flowmon start)
 
Can i power the uno via the raspberry pi or does it have to be powered via it's own port?
I would power the Uno on its own.

Also check /var/log/rpints.log for any errors or anomalies.

you may need to change the baudrate

stop the service (sudo /etc/init.d/flowmon stop)
In /var/www/html/python/FlowMonitor.py change line 225
from
self.arduino = serial.Serial(self.port,9600,timeout=.5)
to
self.arduino = serial.Serial(self.port,115200,timeout=.5)
and save
in the raspberrypints.ino change line 124
from
Serial.begin(9600);
to
Serial.begin(115200);

delete /var/www/html/arduino/raspberrypints/raspberrypints.hex
upload the sketch via Arduino ide
then start the service (sudo /etc/init.d/flowmon start)
 
Just did a Mass Update to my branch
Major:
Fix ardunio RFID tag logic
Added option to split home page horizontal beer list into 2 columns
Improved logging and added Database logging visiable from admin page
Load Cell Logic
Initial logic for ordering columns on home page (need customization page in works)
Minor:
Show pour list on home page config
Changed alamode to Arduino for logging
Python now checks the file time of the ino and if newer then the hex don't upload assume manual upload
minor fixes
 
Just did a Mass Update to my branch
Major:
Fix ardunio RFID tag logic
Added option to split home page horizontal beer list into 2 columns
Improved logging and added Database logging visiable from admin page
Load Cell Logic
Initial logic for ordering columns on home page (need customization page in works)
Minor:
Show pour list on home page config
Changed alamode to Arduino for logging
Python now checks the file time of the ino and if newer then the hex don't upload assume manual upload
minor fixes
Awesome stuff RandR+. I just tried to update and received the usual message. I don't want to jump the gun and lose anything like last time so what's the best course of action here? How do I commit these changes?

error: Your local changes to the following files would be overwritten by merge:
admin/header.php
admin/includes/config_names.php
admin/includes/managers/tap_manager.php
admin/includes/paginateTableRow.php
admin/left_bar.php
admin/load_cell_list.php
admin/personalize.php
admin/rpints_log.php
admin/temp_log.php
admin/temp_probe_list.php
arduino/raspberrypints/raspberrypints.cpp.hex
arduino/raspberrypints/raspberrypints.ino
includes/beerListTable.php
includes/beerListTableVerticle.php
includes/common.php
includes/pourListTable.php
python/Config.py
python/FlowMonitor.py
python/PintDispatch.py
python/ws/rpupdate_wsh.py
sql/schema.sql
sql/update.sql
style.css
util/installRaspberryPints
Please commit your changes or stash them before you merge.
Aborting
Updating 26f159c..8cb107e
/home/pi
pi@rpints:~$
 
Well gents thanks again for your help. I changed my settings and now get a pour showing. It varies from around 245mls to 270mls on a 250 ml pour but I suppose that's the best I'm going to get with these flow meters.

Screen Shot 2020-02-03 at 7.27.39 am.png
 
Might want to lower the pour trigger count, I think that that is minimum size to determine what to register. At 450 pulses per liter a 100 count represent a sizable amount of beer, not sure if that will register a small or top off pour.
 
I don't want to jump the gun and lose anything like last time so what's the best course of action here? How do I commit these changes?
You have to sign up for GitHub and register your account to your pi from what I've read, but I haven't played around enough

Whats easier is to make a copy of /var/www/html (sudo cp /var/www/html /var/www/html-bak -r)
then revert your local files like before
get the latest
then use a compare tool to look for manual changes you made (I use winmerge (for windows) by pulling the files to my computer then comparing then pushing) or www.scootersoftware.com/features.php
I would also think about copying the files that you upload back to /var/www/html (sudo cp /var/www/html-bak /var/www/html -r -n)
 
Might want to lower the pour trigger count, I think that that is minimum size to determine what to register. At 450 pulses per liter a 100 count represent a sizable amount of beer, not sure if that will register a small or top off pour.
Ive dropped it to 50. Cheers.
 
You have to sign up for GitHub and register your account to your pi from what I've read, but I haven't played around enough

Whats easier is to make a copy of /var/www/html (sudo cp /var/www/html /var/www/html-bak -r)
then revert your local files like before
get the latest
then use a compare tool to look for manual changes you made (I use winmerge (for windows) by pulling the files to my computer then comparing then pushing) or www.scootersoftware.com/features.php
I would also think about copying the files that you upload back to /var/www/html (sudo cp /var/www/html-bak /var/www/html -r -n)

What do you mean by revert your local files like before?

How do I pull the files to my computer?

Could I just copy all these files it mentions in the update to another folder. Do the update then copy them back and overwrite the new ones?

admin/header.php
admin/includes/config_names.php
admin/includes/managers/tap_manager.php
admin/includes/paginateTableRow.php
admin/left_bar.php
admin/load_cell_list.php
admin/personalize.php
admin/rpints_log.php
admin/temp_log.php
admin/temp_probe_list.php
arduino/raspberrypints/raspberrypints.cpp.hex
arduino/raspberrypints/raspberrypints.ino
includes/beerListTable.php
includes/beerListTableVerticle.php
includes/common.php
includes/pourListTable.php
python/Config.py
python/FlowMonitor.py
python/PintDispatch.py
python/ws/rpupdate_wsh.py
sql/schema.sql
sql/update.sql
style.css

If so how do I let it do the update?
 
Last edited:
Ok strange, after receiving the first error message when trying to update I went in and backed up the folder. Then when I attempted an update again it said "Already up to date".
I had only lost my tap, and background images and it reverts back to Imperial after every update. Other than that everything else seems as it was before the update.

These updates are great RAndR+

Good option if you want to see more pours.
Screen Shot 2020-02-03 at 9.55.59 am.png
 
Last edited:
Things are getting more interesting here :)
@RandR+, I gather displaying the pour list or not is the config addition noted above, but is the pour list count also settable from the config page?

Cheers!
 
The above is what you're looking for.

change to:

Code:
<?php
            }
       $style = "";     
       if(isset($beer) && isset($beer['tapRgba']) && $beer['tapRgba']) $style = "background-color: ".$htmlHelper->CreateRGB($beer['tapRgba']);
       $imgs = glob ( 'img/tap/tap'.$beer['id'].'.*' );
       if(count($imgs) > 0) $style .= ($style != ""?";":"").'background:url('.$imgs[0].') no-repeat bottom left; background-size:cover; -webkit-border-radius:0px; -mox-border-radius:0px; height:51px; width:54px';
       ?>

With that being said....the height and width that I have in my php may not be right for you and you may have to expand/contract the size based off of your needs....but that's the base element that needs to be altered.
Thanks mate this worked for me to after the update made my tap images too big. Cheers.
 
This is so frustrating. I did the update and now the pours dont work again. I re -did all of this (Except deleting the hex file as I did the first time and the log showed an error about it so didn't delete it the second time)
But still no pours and the Rpints log doesn't show anything.

stop the service (sudo /etc/init.d/flowmon stop)
In /var/www/html/python/FlowMonitor.py change line 225
from
self.arduino = serial.Serial(self.port,9600,timeout=.5)
to
self.arduino = serial.Serial(self.port,115200,timeout=.5)
and save
in the raspberrypints.ino change line 124
from
Serial.begin(9600);
to
Serial.begin(115200);

delete /var/www/html/arduino/raspberrypints/raspberrypints.hex
upload the sketch via Arduino ide
then start the service (sudo /etc/init.d/flowmon start)

Here is the log

2020-02-03 11:42:36 RPINTS: Could not import RFID Reader, RFID disabled. Assuming SPI not installed/configured
2020-02-03 11:42:38 RPINTS: Ino new than Hex. manual upload assumed
2020-02-03 11:42:38 RPINTS: starting WS server
2020-02-03 11:42:38 RPINTS: starting tap flow meters...
2020-02-03 11:42:38 RPINTS: starting command server
2020-02-03 11:42:38 RPINTS: starting fan control
2020-02-03 11:42:38 RPINTS: Fan Control fanControl1 is Running
2020-02-03 11:42:38 RPINTS: Not Configured to run Fan
2020-02-03 11:42:39 RPINTS: 1Wire Temperature Thread 1 is Running
 
Ok got them all working. Hooked them back up properly and started pouring and not working again. Im wasting a lot of beer here even though I am using a keg of water too..lol. Any clues from this log file?



2020-02-03 12:24:44 RPINTS: got WS connection from ('::1', 52856, 0, 0)
2020-02-03 12:25:29 RPINTS: got a update: U;-1;4;51
2020-02-03 12:25:30 RPINTS: Sending Status;NOTOK;-1;0;0;0;0;0;|
2020-02-03 12:25:33 RPINTS: got a pour: P;-1;4;97
Pourpour on pin: 4, count: 97, conversion: 575, amount: 0.16869565217391, amountUnit: ml, user: N/A
2020-02-03 12:25:33 RPINTS: count update: RPU:FLOW:4=97:-1
2020-02-03 12:25:33 RPINTS: received server update, sending 'RPU:FLOW:4=97:-1' to ('::1', 52846, 0, 0)2020-02-03 12:25:33 RPINTS: received server update, sending 'RPU:FLOW:4=97:-1' to ('::1', 52850, 0, 0)

2020-02-03 12:25:33 RPINTS: received server update, sending 'RPU:FLOW:4=97:-1' to ('::1', 52856, 0, 0)
2020-02-03 12:25:33 RPINTS: [Errno 32] Broken pipe
2020-02-03 12:25:33 RPINTS: [Errno 32] Broken pipe
2020-02-03 12:25:33 RPINTS: closing WS connection to ('::1', 52846, 0, 0)
[2020-02-03 12:25:33,793] [ERROR] mod_pywebsocket.standalone.WebSocketServer: Exception in processing request from: ('::1', 52846, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 599, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/dist-packages/mod_pywebsocket/standalone.py", line 664, in __init__
self, request, client_address, server)
File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 283, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

2020-02-03 12:25:33 RPINTS: closing WS connection to ('::1', 52850, 0, 0)
[2020-02-03 12:25:33,797] [ERROR] mod_pywebsocket.standalone.WebSocketServer: Exception in processing request from: ('::1', 52850, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 599, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/dist-packages/mod_pywebsocket/standalone.py", line 664, in __init__
self, request, client_address, server)
File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 283, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

2020-02-03 12:25:33 RPINTS: Sending Status;NOTOK;-1;0;0;0;0;0;|
2020-02-03 12:25:34 RPINTS: got WS connection from ('::1', 52860, 0, 0)
2020-02-03 12:26:00 RPINTS: got a update: U;-1;3;51
2020-02-03 12:26:01 RPINTS: Sending Status;NOTOK;-1;0;0;0;0;0;|
2020-02-03 12:26:04 RPINTS: got a update: U;-1;3;102
2020-02-03 12:26:04 RPINTS: Sending Status;NOTOK;-1;0;0;0;0;0;|
2020-02-03 12:26:07 RPINTS: got a pour: P;-1;3;148
Pourpour on pin: 3, count: 148, conversion: 575, amount: 0.25739130434783, amountUnit: ml, user: N/A
2020-02-03 12:26:07 RPINTS: count update: RPU:FLOW:3=148:-1
2020-02-03 12:26:07 RPINTS: received server update, sending 'RPU:FLOW:3=148:-1' to ('::1', 52860, 0, 0)
2020-02-03 12:26:07 RPINTS: received server update, sending 'RPU:FLOW:3=148:-1' to ('::1', 52856, 0, 0)
2020-02-03 12:26:07 RPINTS: Sending Status;NOTOK;-1;0;0;0;0;0;|
2020-02-03 12:26:08 RPINTS: got WS connection from ('::1', 52864, 0, 0)
2020-02-03 12:27:08 RPINTS: got WS connection from ('::1', 52870, 0, 0)
2020-02-03 12:27:48 RPINTS: reconfigure trigger: all
2020-02-03 12:27:48 RPINTS: resetting alamode config from db
2020-02-03 12:27:48 RPINTS: Sending Status;NOTOK;-1;1;0;0;0;0;|
2020-02-03 12:27:48 RPINTS: alamode reconfig in progress...
2020-02-03 12:27:48 RPINTS: closing serial connection to alamode...
2020-02-03 12:27:49 RPINTS: flowmonitor aborted, restarting...
2020-02-03 12:27:49 RPINTS: resetting alamode
2020-02-03 12:27:50 RPINTS: waiting for alamode to come alive
2020-02-03 12:27:58 RPINTS: got WS connection from ('::ffff:192.168.1.163', 58490, 0, 0)
2020-02-03 12:27:59 RPINTS: got WS connection from ('::1', 52892, 0, 0)
2020-02-03 12:28:58 RPINTS: got WS connection from ('::ffff:192.168.1.163', 58510, 0, 0)
2020-02-03 12:28:59 RPINTS: got WS connection from ('::1', 52902, 0, 0)
2020-02-03 12:29:59 RPINTS: got WS connection from ('::ffff:192.168.1.163', 58530, 0, 0)
2020-02-03 12:30:00 RPINTS: got WS connection from ('::1', 52914, 0, 0)
2020-02-03 12:30:59 RPINTS: got WS connection from ('::ffff:192.168.1.163', 58551, 0, 0)
2020-02-03 12:31:00 RPINTS: got WS connection from ('::1', 52924, 0, 0)
 
Last edited:

Latest posts

Back
Top