• 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.
So I've been taking a lot from this forum over the last year or so without giving much back, so here's a screenshot of my RPints layout:

screenshot-12-medium-68211.png


My current setup can only fit 3 kegs, but I plan to upgrade to a 6 keg setup which will look more like this:

screenshot-11-medium-68210.png


Next steps: hook up PIR & temp logging kit courtesy of day_trippr (parts acquired, just need to allocate time).

Thanks to all involved in this amazing project including a posthumous thank you to the long departed original devs who started this.

Cheers,

Kal
 
Finaly i have arduino uno hooked with usb in RPi3 aflow meter connected like the following schema and jessie already installed in RPi3 whats next?
which code must be upload in arduino?

IMG_0499.PNG
 
This follow-up is an attempt to capture all of the changes required when installing RaspberryPints on Raspbian Jessie using the latest Apache2 web server and the latest LXDE desktop.

The full installation procedure can be found here.
Changes required to "make various things work" are listed below.

Notes For All New Installations On Jessie

Two of the instructions in Step 5 are out of date:

- Instead of using the autostart file shown in the instructions as
/etc/xdg/lxsession/LXDE-pi/autostart

use

/home/pi/.config/lxsession/LXDE-pi/autostart

- and instead of adding

@chromium --kiosk localhost

add

@chromium-browser --incognito --start-fullscreen localhost

Step 7 refers to the "default apache page" at /var/www

The current release of Apache2 has the default document root located at /var/www/html, where the RaspberryPints instructions reference /var/www, so you need to adjust accordingly - or change the document root back to /var/www.

If you want to keep the document root at /var/www/html you have to change a pointer in the Python listener.

Edit /var/www/html/python/flow_monitor.py
Find these two lines:

# Edit this line to point to where your rpints install is
poursdir = '/var/www'

Change /var/www to /var/www/html

If you want to change the document root to /var/www, don't change the Python listener pointer, but instead change the Apache2 config file.

Edit /etc/apache2/sites-available

and change DocumentRoot setting from /var/www/html to /var/www.

Using an AlaMode with Raspbian Jessie on RPi3

The RaspberryPints installation procedure as documented was developed using Raspbian Wheezy on RPiB and RPi2B platforms.
Since then, the warty Raspbian Jessie became the defacto standard, the RPiB and RPi2B faded into history, and the RPi3 implementation broke many paradigms.
One of which was to commandeer the hardware serial port for use by wifi and bluetooth modules on the RPi3.
This leaves a software serial port for use by devices such as the AlaMode.

To get an AlaMode working with RaspberryPints on an RPi3, do the following:

- Follow the full RaspberryPints installation up to Step 6 (don't execute what's shown).

- Install DOS2UNIX (a conversion tool to make text files written on Windows platforms more "unix-y"):

$ sudo apt-get update
$ sudo apt-get install dos2unix

- Disable Serial Port messaging:

Edit /boot/config.txt
Change enable_uart=0

- Now, fetch the Alamode setup kit:
wget https://github.com/wyolum/alamode/raw/master/bundles/alamode-setup.tar.gz

- Unpack it from your /home/pi folder:
pi@raspberrypi ~ $ tar -xvzf alamode-setup.tar.gz

- Change focus into the kit you just unpacked:
pi@raspberrypi ~ $ cd alamode-setup

- Run DOS2UNIX against the setup file for Jessie:

$ sudo dos2unix jessie-setup

- Execute the converted script:

$ sudo jessie-setup

- Re-start the RaspberryPi before continuing

- Continue the installation procedure from Step 7 as shown on the raspberrypints.com page, noting the applicable changes listed in this post.



If using an Uno instead of AlaMode

Do not perform the AlaMode support installation in Step 6 of the raspberrypints installation procedure. Skip Step 6 entirely.

The Python port "listener" needs to know what device to monitor for "pour" messages.
The default setting is to listen for TTYS0, while an Uno connected via USB will typically show up as TTYACM0.

Edit /var/www/html/python/flow_monitor.py
Find these lines:

#The following line is for serial over GPIO
port = '/dev/ttyS0'
#The following line is for serial over USB
#port = '/dev/ttyACM0'

Add a comment # in front of the ttyS0 line and remove same from the ttyACM0 line.


If using an Uno CLONE instead of AlaMode

Do not perform the AlaMode support installation in Step 6 of the raspberrypints installation procedure. Skip Step 6 entirely.

Again, the Python port "listener" needs to know what device to monitor for "pour" messages.
The default setting is to listen for TTYS0, while an Uno Clone connected via USB will typically show up as TTYUSB0
I believe this is due to clones using a CH340 USB/serial bridge chip instead of the Mega16U2 used on "genuine" Arduino Uno boards.

Edit /var/www/html/python/flow_monitor.py
Find these lines:

#The following line is for serial over GPIO
port = '/dev/ttyS0'
#The following line is for serial over USB
#port = '/dev/ttyACM0'

Add a comment # in front of the ttyS0 line and remove same from the ttyACM0 line.
Then change /dev/ttyACM0 to /dev/ttyUSB0.


If using the Adafruit flow meters

There are two files that need to be changed.
The first one is the sketch file that has to be loaded via the Arduino IDE.
This is the same file that always requires user-specific edits for the number of pins and the pin list.

- Edit /var/www/html/arduino/raspberrypints/raspberrypints.ino

Find this line:
if ( pulseCount > 100 ) {

and change it to:
if ( pulseCount > 35 ) {


The second file receives pour messages from the Python port listener (/var/www/html/python/flow_monitor.py) and translates them into data that fits the MySql database format.

- Edit /var/www/html/includes/pours.php

Find this line:
$amount = $PULSE_COUNT / 21120;

and change it to:
$amount = $PULSE_COUNT / 1500;


Cheers!

[edit]
Thought I'd try to capture everything in one post, so I've added the changes for using a USB-connected Uno instead of the AlaMode, and for using the Adafruit flow meters instead of the SwissFlow SF800s.
 
And he'll need to adjust the pours data because he's using the Adafruit meters instead of the default Swissflow meters. That's in pours.ino iirc.

Edit: pours.php is where the pours data is stored. raspberrypints.ino is where you would change the sensor to customize for those meters.
 
wow thanks for the replies tommorow i will config everything ang i will cross my fingers :)
 
hello again i ve already install everything according all the instructions but i have problem with flow meter when i try to start flow_monitor.py the following error raised
Traceback (most recent call last):
File "flow_monitor.py", line 13, in <module>
arduino = serial.Serial(port,9600,timeout=2)
File "/usr/local/lib/python2.7/dist-packages/serial/serialutil.py", line 240, in __init__
self.open()
File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 268, in open
raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0'

any idea?
 
[...]serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0'

any idea?

Your system isn't seeing the Uno. Do you have it plugged into one of the USB ports on your RPi?
Were you able to load the Arduino sketch file in the IDE?

Cheers!
 
Your system isn't seeing the Uno. Do you have it plugged into one of the USB ports on your RPi?
Were you able to load the Arduino sketch file in the IDE?

Cheers!

yes already plugged and sketch already uploaded successfully according sketch uploader but on /dev/ttyUSB0

Screen Shot 2017-07-10 at 01.42.30.jpg
 
Yeeeaaah!!! i found it Thanks a lot all for your support i have change the port to /dev/ttyUSB0 and finally i have a working flow meter!!!!!!!!
 
I've added a blurb to my earlier roll-up post covering Uno clones.

We're allowed 30 days to edit posts, and the clock is running on that one.
If anyone has anything worth adding to the roll-up please let me know.
If it passes muster I'll add it, and eventually I'll have one of the mods stick a link to it from the first post in this thread...

Cheers!
 
My only very minor suggestion would be to make an edit to this line and make it less specific to the situation that you helped for panzo and more generic since the rest of your terrific post covers a lot of different options. It might confuse a first timer if they read that and skip the AlaMode support install without understanding what that means.

Keep in mind that you do not need to install the AlaMode support as shown in Step 6 as you're using an Uno which has native Arduino IDE support.
 
I really like the beer color images you have. Are those from BeerSmith? If so, how did you get them in RPints?

Right you are, as clever as the algorithm that the original devs used the colours always seemed slightly off in RPints compared to Beersmith, so I located the image files, resized them and edited the styles.css and index.php files.

If you want the same, extract this zip file, replace the existing srm folder within www/img/ with the new srm folder, then in styles.css starting from around line 182 replace:

PHP:
width: 55px;

with:

PHP:
width: 58px;

replace from around line 186:

PHP:
.srm-indicator{
	position: absolute; 
	height: 100%;
	width: 100%;
	top: 0;
	left: 0;
	z-index: 1;
	
	-webkit-mask-image: url(img/srm/pint-mask.png);
	-o-mask-image: url(img/srm/pint-mask.png);
	-moz-mask-image: url(img/srm/pint-mask.png);
	mask-image: url(img/srm/pint-mask.png);
}

.srm-stroke{
	position: absolute; 
	height: 100%;
	width: 100%;
	top: 0;
	left: 0;
	z-index: 2;
	
	background: url(img/srm/pint-stroke.png)
}

With:

PHP:
.srm-indicator{
	position: absolute; 
	height: 100%;
	width: 100%;
	top: 0;
	left: 0;
	
	background: url(img/srm/pint-stroke.png)
}

.srm-indicator .srm-0{
	background-image: url(img/srm/0-srm.png);
}
.srm-indicator .srm-1{
	background-image: url(img/srm/1-srm.png);
}
.srm-indicator .srm-2{
	background-image: url(img/srm/2-srm.png);
}
.srm-indicator .srm-3{
	background-image: url(img/srm/3-srm.png);
}
.srm-indicator .srm-4{
	background-image: url(img/srm/4-srm.png);
}
.srm-indicator .srm-5{
	background-image: url(img/srm/5-srm.png);
}
.srm-indicator .srm-6{
	background-image: url(img/srm/6-srm.png);
}
.srm-indicator .srm-7{
	background-image: url(img/srm/7-srm.png);
}
.srm-indicator .srm-8{
	background-image: url(img/srm/8-srm.png);
}
.srm-indicator .srm-9{
	background-image: url(img/srm/9-srm.png);
}
.srm-indicator .srm-10{
	background-image: url(img/srm/10-srm.png);
}
.srm-indicator .srm-11{
	background-image: url(img/srm/11-srm.png);
}
.srm-indicator .srm-12{
	background-image: url(img/srm/12-srm.png);
}
.srm-indicator .srm-13{
	background-image: url(img/srm/13-srm.png);
}
.srm-indicator .srm-14{
	background-image: url(img/srm/14-srm.png);
}
.srm-indicator .srm-15{
	background-image: url(img/srm/15-srm.png);
}
.srm-indicator .srm-16{
	background-image: url(img/srm/16-srm.png);
}
.srm-indicator .srm-17{
	background-image: url(img/srm/17-srm.png);
}
.srm-indicator .srm-18{
	background-image: url(img/srm/18-srm.png);
}
.srm-indicator .srm-19{
	background-image: url(img/srm/19-srm.png);
}
.srm-indicator .srm-20{
	background-image: url(img/srm/20-srm.png);
}
.srm-indicator .srm-21{
	background-image: url(img/srm/21-srm.png);
}
.srm-indicator .srm-22{
	background-image: url(img/srm/22-srm.png);
}
.srm-indicator .srm-23{
	background-image: url(img/srm/23-srm.png);
}
.srm-indicator .srm-24{
	background-image: url(img/srm/24-srm.png);
}
.srm-indicator .srm-25{
	background-image: url(img/srm/25-srm.png);
}
.srm-indicator .srm-26{
	background-image: url(img/srm/26-srm.png);
}
.srm-indicator .srm-27{
	background-image: url(img/srm/27-srm.png);
}
.srm-indicator .srm-28{
	background-image: url(img/srm/28-srm.png);
}
.srm-indicator .srm-29{
	background-image: url(img/srm/29-srm.png);
}
.srm-indicator .srm-30{
	background-image: url(img/srm/30-srm.png);
}
.srm-indicator .srm-31{
	background-image: url(img/srm/31-srm.png);
}
.srm-indicator .srm-32{
	background-image: url(img/srm/32-srm.png);
}
.srm-indicator .srm-33{
	background-image: url(img/srm/33-srm.png);
}
.srm-indicator .srm-34{
	background-image: url(img/srm/34-srm.png);
}
.srm-indicator .srm-35{
	background-image: url(img/srm/35-srm.png);
}
.srm-indicator .srm-36{
	background-image: url(img/srm/36-srm.png);
}

In index.php around line 158 replace:

PHP:
								<?php if($config[ConfigNames::ShowSrmCol]){ ?>
									<td class="srm">
										<h3><?php echo $beer['og']; ?> OG</h3>
										
										<div class="srm-container">
											<div class="srm-indicator" style="background-color: rgb(<?php echo $beer['srmRgb'] != "" ? $beer['srmRgb'] : "0,0,0" ?>)"></div>
											<div class="srm-stroke"></div> 
										</div>
										
										<h2><?php echo $beer['srm']; ?> SRM</h2>
									</td>
								<?php } ?>

With:

PHP:
								<?php if($config[ConfigNames::ShowSrmCol]){ ?>
									<td class="srm">
										<h3><?php echo $beer['og']; ?> OG</h3>
										<?php
											$ebc = $beer['srm'];
											?>
										<?php
										$srmImgClass = "";
										if( $ebc < 1 ) {
											$srmImgClass = "srm-0"; }
										else if( $ebc < 2 )
											$srmImgClass = "srm-1";
										else if( $ebc < 3 )
											$srmImgClass = "srm-2";
										else if( $ebc < 4 )
											$srmImgClass = "srm-3";
										else if( $ebc < 5 )
											$srmImgClass = "srm-4";
										else if( $ebc < 6 )
											$srmImgClass = "srm-5";
										else if( $ebc < 7 )
											$srmImgClass = "srm-6";
										else if( $ebc < 8 )
											$srmImgClass = "srm-7";
										else if( $ebc < 9 )
											$srmImgClass = "srm-8";
										else if( $ebc < 10 )
											$srmImgClass = "srm-9";
										else if( $ebc < 11 )
											$srmImgClass = "srm-10";
										else if( $ebc < 12 )
											$srmImgClass = "srm-11";
										else if( $ebc < 13 )
											$srmImgClass = "srm-12";
										else if( $ebc < 14 )
											$srmImgClass = "srm-13";
										else if( $ebc < 15 )
											$srmImgClass = "srm-14";
										else if( $ebc < 16 )
											$srmImgClass = "srm-15";
										else if( $ebc < 17 )
											$srmImgClass = "srm-16";
										else if( $ebc < 18 )
											$srmImgClass = "srm-17";
										else if( $ebc < 19 )
											$srmImgClass = "srm-18";
										else if( $ebc < 20 )
											$srmImgClass = "srm-19";
										else if( $ebc < 21 )
											$srmImgClass = "srm-20";
										else if( $ebc < 22 )
											$srmImgClass = "srm-21";
										else if( $ebc < 23 )
											$srmImgClass = "srm-22";
										else if( $ebc < 24 )
											$srmImgClass = "srm-23";
										else if( $ebc < 25 )
											$srmImgClass = "srm-24";
										else if( $ebc < 26 )
											$srmImgClass = "srm-25";
										else if( $ebc < 27 )
											$srmImgClass = "srm-26";
										else if( $ebc < 28 )
											$srmImgClass = "srm-27";
										else if( $ebc < 29 )
											$srmImgClass = "srm-28";
										else if( $ebc < 30 )
											$srmImgClass = "srm-29";
										else if( $ebc < 31 )
											$srmImgClass = "srm-30";
										else if( $ebc < 32 )
											$srmImgClass = "srm-31";
										else if( $ebc < 33 )
											$srmImgClass = "srm-32";
										else if( $ebc < 34 )
											$srmImgClass = "srm-33";
										else if( $ebc < 35 )
											$srmImgClass = "srm-34";
										else if( $ebc < 36 )
											$srmImgClass = "srm-35";
										else if( $ebc >= 36 )
											$srmImgClass = "srm-36";
										?>
										<div class="srm-container">
											<div class="srm-indicator"><div class="srm-indicator <?php echo $srmImgClass ?>"></div></div>
										</div>
										<h2><?php echo $beer['srm']; ?> SRM</h2>
									</td>
								<?php } ?>

Also around line 320 remove:
PHP:
											<div class="srm-stroke"></div>

Cheers,

Kal
 
Last edited:
Sure! You can use phpmyadmin, open the raspberrypints database, open the beerStyles table, edit any desired records, then save the table.

It'll look like this:

attachment.php


Cheers!

To make this happen, I exported the beerStyles table to CSV, downloaded the 2015 BJCP listing, rearranged the columns and values in that to match the beerStyles table listing, imported the 2015 data into a new table, made sure it looked similar to the original, then renamed original to 'beerStyles_orig' and the new table to 'beerStyles'.

Sorry for being long-winded to get to the point. The issue I'm having is that I've added a line to the table for 'Soda'. This style shows up in the drop down for style in the Beer Edit Window. I can select it and press Save, but when it goes back to the Beer list, it does not update to 'Soda'. Do I need to do any changes to any other tables to allow the addition of new styles? This is odd, because the number of styles increased significantly when I did the 2015 styles (118 items) and RPints is having no issue with any of the first 118. Just the 119th item.

I can provide pics if that would help.

Thanks!
 
To make this happen, I exported the beerStyles table to CSV, downloaded the 2015 BJCP listing, rearranged the columns and values in that to match the beerStyles table listing, imported the 2015 data into a new table, made sure it looked similar to the original, then renamed original to 'beerStyles_orig' and the new table to 'beerStyles'.

Sorry for being long-winded to get to the point. The issue I'm having is that I've added a line to the table for 'Soda'. This style shows up in the drop down for style in the Beer Edit Window. I can select it and press Save, but when it goes back to the Beer list, it does not update to 'Soda'. Do I need to do any changes to any other tables to allow the addition of new styles? This is odd, because the number of styles increased significantly when I did the 2015 styles (118 items) and RPints is having no issue with any of the first 118. Just the 119th item.

I can provide pics if that would help.

Thanks!

Have you done a restart? That table is also referenced by the wvGetActiveTaps table. Normally database changes require a server restart to apply.
Code:
sudo reboot
should fix it for you.
 
Good. I'm assuming at this point you have a working tap list and the only thing needed is to get the pour monitoring running.

Somewhere along the way you should also have executed these commands:
Code:
$ sudo chmod a+x /etc/init.d/flowmon
$ sudo update-rc.d flowmon defaults
And a reboot is advised.

One thing you can try will at least prove the AlaMode is issuing a pour packet towards the host RPi.

- Open a terminal window on console

- Stop the flowmon service:
Code:
$ sudo /etc/init.d/flowmon stop

- Now run flow_monitor.py in the terminal session:
Code:
$ sudo python /var/www/html/python/flow_monitor.py

If you have your meters wired and plumbed, try a short pour while observing the running terminal session (if not plumbed, gently blow through one in the forward-flow direction).
Within a second of stopping the pour you should see a few lines of "complaints" about display settings etc but the bottom line is you'll definitely see something after a pour (this worked cleaner on Wheezy - you could see the actual three line "pour message" instead a bunch of OS and app whining. I miss Wheezy, Jessie blows chunks ;))

If there's no response then the AlaMode isn't working properly. Double-check the ino file and make sure when uploading the sketch that there weren't any errors. Re-check your meter wiring for all three connections (btw, which meters are you using) being sure that the data connection is to one of the pins you've enabled in the sketch...

Cheers!

I ended up ditching the AlaMode. I just could not get it to work with the RPi3. I swapped in an Uno and uploaded the sketch no problem.

I'm now just trying to get the flowmon services right. I'm not able to get the GUI to reflect a pour yet. I followed your advice above and the terminal replies each time I pour with:

Code:
No Active Taps
Chrome does refresh. I have all of my taps active. :confused:

EDIT: Did some rebooting and everything works fine now. GUI updating and everything. Thank you guys again for the help!
 
Have you done a restart? That table is also referenced by the wvGetActiveTaps table. Normally database changes require a server restart to apply.
Code:
sudo reboot
should fix it for you.

I've rebooted countless times and it's still not keeping the 'soda' value. Also, interestingly, I changed the SRM on one of my stored beers. It reflects it in the values now, but is NOT updating my taplist! What could be going on?

Thanks!

2017-07-14-190805_1440x900_scrot.png
 
Which pins on the UNO are everyone using for flow sensor inputs? I'm having weird results trying to use what I think are 2,3,4,5,6,7 on the "Digital" header. Some are working but aren't seeming to correspond with the right taps. I have them set as "[2,3,4,5,6,7]" in the sketch that I uploaded with it set to 6 taps.

For example: pin 2 does not respond, pin 3 updates tap 4, pin 5 updates tap 5, etc.
 
I've rebooted countless times and it's still not keeping the 'soda' value. Also, interestingly, I changed the SRM on one of my stored beers. It reflects it in the values now, but is NOT updating my taplist! What could be going on?

Thanks!

Did you only update SRM in your Beers list? If so you need to edit the beer in your Tap list and resave it, descriptions seem to update immediately, but SRM, IBU, etc only updates on tap or edit keg.
 
Which pins on the UNO are everyone using for flow sensor inputs? I'm having weird results trying to use what I think are 2,3,4,5,6,7 on the "Digital" header. Some are working but aren't seeming to correspond with the right taps. I have them set as "[2,3,4,5,6,7]" in the sketch that I uploaded with it set to 6 taps.

For example: pin 2 does not respond, pin 3 updates tap 4, pin 5 updates tap 5, etc.

Any chance your optical registration is off by one pin? ;)

I've never run into an issue like that, but if I did the first thing I'd do is get a fresh copy of the raspberrypints.ino file and start over.
And double check my wiring.

fwiw, I run six taps and use digital IO 2 and 5 through 9, and have not had a single problem in over two years.

Back when we first got the flow meters working I tried using 2 through 7 but had unresolved issues with 3 and 4.
On the AlaMode digital IO 3 is shared with the RTC chip on the back of the board so potential conflict there seemed logical, but I was never able to find a similar shared status for digital IO 4. As I didn't need to use it I simply avoided it as well...

Cheers!
 
Did you only update SRM in your Beers list? If so you need to edit the beer in your Tap list and resave it, descriptions seem to update immediately, but SRM, IBU, etc only updates on tap or edit keg.



Updating the actual Taps fixed that issue! Thank you for the help!



I made the changes you specified regarding the SRM files, and now I'm getting the following. Any ideas why the images aren't showing up?



ugh, sorry for all the questions... does anyone know a decent php/css editor for raspbian? Vim was suggested but appears to be more terminal based.

Edit: fixed attachment.

View attachment ImageUploadedByHome Brew1500129449.291137.jpg
 
Updating the actual Taps fixed that issue! Thank you for the help!

I made the changes you specified regarding the SRM files, and now I'm getting the following. Any ideas why the images aren't showing up?

ugh, sorry for all the questions... does anyone know a decent php/css editor for raspbian? Vim was suggested but appears to be more terminal based.

Not sure if you intended to add a screenshot in that last post as I can't see what you are now getting, but caching is always an issue with editing css so
CTRL+F5 usually does a hard refresh and forces it to download all the new assets.

As for text editors I use nano in the Pi eg:
Code:
nano /var/www/index.php
nano /var/www/style.css
Though I prefer to download a copy of the file to my local machine and edit it locally in a text editor then upload it back up as it makes it a lot easier to revert changes if you make a mistake (of which I've made many).
 
[...]ugh, sorry for all the questions... does anyone know a decent php/css editor for raspbian? Vim was suggested but appears to be more terminal based.

fwiw, I almost never use local consoles on my RPi fleet, preferring to access them via WinSCP and doing edits using UltraEdit on my workstation remotely.
UE is a fabulous context-sensitive editor that I've been using for well over a decade to the point that my brain is wired into it.
WinSCP lets me just double-click on the selected file, do whatever edits are needed, and the save is written straight back to the RPi...

Cheers!
 
fwiw, I almost never use local consoles on my RPi fleet, preferring to access them via WinSCP and doing edits using UltraEdit on my workstation remotely.
UE is a fabulous context-sensitive editor that I've been using for well over a decade to the point that my brain is wired into it.
WinSCP lets me just double-click on the selected file, do whatever edits are needed, and the save is written straight back to the RPi...

Cheers!

Completely agree, I use Notepad++ and FileZilla but exactly the same ideology!
 
Back
Top