Hardware shutdown switch for RPi

Sometimes I need to power off one of my Raspberry Pis, and since I run these computers headless, going to a remote SSH terminal to issue a shutdown command can be extra work. I saw a webpage mentioning using a simple 2 pin jumper to initiate a shutdown script for the Pi. So that’s what I did (green tab on the GPIO pins), I chose python due to the wait_for_edge function.

This script will shutdown the RPi when the tab is pulled. Strangely the RPi will boot if you plug the jumper back in after it has shutdown, or if you pull it out after it has completed shut down (putting it back before it has completed shutting down). If there is no jumper in during boot, then the script will close.

#!/usr/bin/env python
#note crontab for superuser required a new PATH variable as here http://unix.stackexchange.com/questions/43392#answer-43394
import subprocess
try:
 import RPi.GPIO as GPIO
except RuntimeError:
 print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")

#http://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering
GPIO.setmode(GPIO.BOARD)
GPIO.setup(5, GPIO.IN) #Hardware Pullup on this pin..

ShutdownCommand = ['shutdown', '-h', 'now', '"System halted by GPIO action"']

if GPIO.input(5) == 0:
 #run script waiting for jumper removal
 GPIO.wait_for_edge(5, GPIO.RISING)
 GPIO.remove_event_detect(5)
 KillProcess = subprocess.Popen(ShutdownCommand, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
 MountData, MountError = KillProcess.communicate()
 GPIO.cleanup() 
else:
 GPIO.cleanup()

Then I simply added this script to the bottom of my root crontab (sudo crontab -e) to run at reboot:

@reboot python /usr/local/sbin/ShutdownJumper.py

DIY USB charger

20160920_222327-2I got a hold of a USB outlet from ebay, and I wanted to use it basically as a hub for charging. I sourced a 3A 12V plug-type power supply which I figured would work well with the ‘UBEC 5V buck converter I got made for RC plane receivers, changed the UBEC cables to DC barrel jacks and. hmm doesn’t work.. :/

Monitoring RPi Temp and CPU with Thingspeak

I made the following python script to update CPU Temperature and 5 minute average CPU load of my RPi to Thingspeak:

#!/usr/bin/env python
import subprocess
import httplib, urllib

GetTempCommand = "cat /sys/class/thermal/thermal_zone0/temp"
GetCPUCommand = "cat /proc/loadavg"

GetTempProcess = subprocess.Popen(GetTempCommand.split(), stdout=subprocess.PIPE)
GetTempOutput = GetTempProcess.communicate()[0]
Temp = float(GetTempOutput) / 1000
#print Temp
GetCPUProcess = subprocess.Popen(GetCPUCommand.split(), stdout=subprocess.PIPE)
GetCPUOutput = GetCPUProcess.communicate()[0]
CPU = GetCPUOutput.split()
#print CPU[1]

params = urllib.urlencode({'field1': CPU[1],'field2': Temp, 'key':'######'})     # use your API key generated in the thingspeak channels for the value of 'key'
# temp is the data you will be sending to the thingspeak channel for plotting the graph. You can add more than one channel and plot more graphs
headers = {"Content-typZZe": "application/x-www-form-urlencoded","Accept": "text/plain"}
conn = httplib.HTTPConnection("api.thingspeak.com:80")                
try:
    conn.request("POST", "/update", params, headers)
    response = conn.getresponse()
    data = response.read()
    conn.close()
except:
    print "connection failed"

The script is run every 5 mins using cron ($ crontab -e):

*/5 * * * * python "/home/ubuntu/logging/TempCPUtoThingspeak.py"

I borrowed some script from here and here.

LinkyMcLinkFace Part 2

So my initially Nanobridge factory reset itself, before resetting itself every minute or so. I assumed it was due to my crappy wiring initially. First thing I did was get a Ubiquiti ETH-SP Ethernet Surge Protector, this really is more related to the safety of the LAN than anything else, except that now I have the Ethernet port for the NanoBridge accessible from my ceiling. When I went to install the ETH-SP I found one pair of the network cable wasn’t connected properly.

Continue reading “LinkyMcLinkFace Part 2”

Raspbian on RPi3 for NAS

Note: I have swapped the RPi3 for a RPi2 due to Ubuntu compatibility. Even the supported RPi2 with Ubuntu is proving problematic, I want to move to something more reliable.

20161025_134850
Using a Western Digital PiDrive Cable to power the setup.
  • Raspbian comes with default user:pass = pi:raspbian so this needs to be changed
  • I confirmed SSH was installed and working.
  • Following these instructions;
    • I installed ufw
      sudo apt-get install ufw
      sudo ufw allow ssh
      etc..
    • I confirmed NTP configuration.
  • Installed autoupdates, similar to this with different config.
  • Installed postfix, kind of like this.
  • the rest of the steps are basically the same that I used for Ubuntu – except that there isn’t a proper Ubuntu release for RPI3 yet.

LinkyMcLinkFace

Monday a wifi stumble returned some surprisingly decent numbers, initially my idea was to have a mast up by Tuesday. I repaired my hammer drill and got to constructing. This effort resulted in a total of half a hole drilled once I’d gotten up to the roof.

I’ve been looking at the lovely new Makita hammer drill I bought and feeling a bit guilty. Oh well I bought it now, lets hope Makita doesn’t pull any planned obsolescence schemes on the batteries any time soon.

It’s now Thursday, I was able to run a cable to my LAN and stumble a connection. Initially I was getting signal around 80dBm, I went to google earth so I knew at least which direction to aim and zing we’re online!

Using SSL (https) on RouterOS WebFig

So when I googled this I got links to setting up a hot spot and other assorted irrelevant stuff, so I did this. I created a certificate in winbox using System/Certificates. Then, here’s the best part, went to IP/Services and gained access to to all the current services, making routerOS look like an actual OS for me, rather than a complicated WebUI for this router thing. So now I set all the services to a /16 Mask (leaving room for my old subnet if I need it) on my LAN IP range, and I shouldn’t be getting a crazy amount of login attempts now – after selecting my cert and ticking the box for www-ssl, thats all, ticking the freaking box. cranking out the command line not required 😀

Reminded me of this inspiring video, which linked to a new dam video. snackpot!