Fishtank Temperature monitor

Screenshot 2016-08-04 09.20.52So while having an enforced break from work I figured maybe it would be fun to hook my Pi Zero up to a waterproof temperature sensor and drop the sensor into my aquarium.

A spot of research suggested this was a common use for a Pi, with almost everybody using the 1 Wire DS18B20 sensor. A bit of googling later found this sensor on eBay, waterproof and with a nice long cable. Sorted.

A very useful blog post is here,  much more detail is provided there, I used the sample python code almost verbatim for the reading of the temp, only adding a few config options and the ability to post to a MQTT broker.

Water Proof DS18B20-500x500I’ve pushed two versions of my code to GitHub here, one which publishes to an MQTT broker and the almost unchanged version of the code from the blog post linked above, which simply prints the temp (only in C in my version) to STDOUT.  The only modification I made was to enable the specification of the 1-Wire sensor device name via the ‘W1_DEVICE‘ environment variable. If you don’t provide that the code tries to figure it out, but then will only support a single sensor (I think!). If you have multiple sensors then just put the name of the device in the ‘W1_DEVICE‘ variable.

Other things of note.

I had to fiddle with the config.txt settings, they seem dependant on kernel version. For reference, on my Pi Zero I’m running this version:

Linux zero 4.1.13+ #826 PREEMPT Fri Nov 13 20:13:22 GMT 2015 armv6l GNU/Linux

My working config.txt settings:

dtoverlay=w1-gpio,gpiopin=4,pullup=on

I also created the file “/etc/modules-load.d/one-wire.conf” containing just these two lines:

w1-gpio
w1_therm

This forces the module loader to load the 1 Wire GPIO module and the 1 Wire Thermometer sensor.

If you have troubles with my python code, the following bash, pasted into a terminal should work ok.

 Finally

Now I had the temperature being published to my MQTT broker (Mosquitto), it was a simple matter to pull that off the bus using the Paho JavaScript MQTT client, and render out a little gauge using the excellent Highcharts JS charting library. A snapshot of the gauge can be seen up at the top of this blog post, info.riviera.org.uk – which is where I keep a bunch of my ‘data’ collection things.

Scripting the Sonatype Nexus Pro instalation

The installer for NexusPro uses Install4J. Although the Nexus documentation doesn’t explain how, you can script the installer by providing a response.varfile. I found this to be quite picky about order and arguments, the ones shown below are known to work in this specific order.

% bash ./nexus-pro-trial-installer-latest-unix.sh -varfile response.varfile -q -dir /home/builder/nexus -overwrite -splash

Boom! It installs without question. It should be available at http://localhost:8081/nexus/index.html

Example response file

#install4j response file for Sonatype Nexus Pro Trial 2.11.4-01
#Mon Nov 02 12:38:09 UTC 2015
nexus.evalGuideDir=/home/root/nexus-evalguide
sys.adminRights$Boolean=false
nexus.launchControl$Boolean=true
nexus.startService$Boolean=true
sys.programGroupDisabled$Boolean=false
sys.component.pro$Boolean=true
nexus.createDesktopLinks$Boolean=true
nexus.tmpDir=/root/.nexus-pro-trial/tmp
nexus.workDir=/root/.nexus-pro-trial
nexus.httpPort$Long=8081
sys.languageId=en
sys.installationDir=/root/nexus-pro-trial-2.11.4-01
nexus.openEvalGuide$Boolean=false
nexus.openAppUrl$Boolean=false
sys.symlinkDir=/usr/local/bin
sys.component.trial-config$Boolean=true
sys.component.trial-evalguide$Boolean=true

Good luck!

Fortigate Firewall Logstash Grok filter

I’ve been playing with Logstash recently, just this week I was asked to import a Fortigate firewall log. I did this by putting up a logstash syslog interface on a specific port, tagging the inbound traffic as type=fortigate and then using a simple RE and the kv{} filter to parse the log.

The gist can be seen here, or embedded below:

Monitoring beanstalkd with monit

A new project I’ve just deployed onto live uses the fast and lightweight beanstalkd work queue.  As part of putting it into live I wanted to get at least some basic monitoring on the beanstalkd daemon.  All my servers run monit for keeping an eye on processes I care about, so that seemed a good place to start.

I had a bit of a look around the interwebs but couldn’t find any examples, so I set about putting something together myself. As it turns out beanstalkd has a nice simple text protocol, detailed in protocol.txt which is included in the source, and monit has the ability to send and expect arbitrary strings to a given port.  For starters I’ve set it up to issue a stats command and check for the expected response which is:

OK <bytes>\r\n

Adding this to my monit config file for beanstalkd gives me:

check process beanstalkd with pidfile /var/run/beanstalkd.pid
 start "/etc/init.d/beanstalkd start"
 stop "/etc/init.d/beanstalkd stop"
 if failed port 11300
   send "stats\r\n"
   expect "OK [0-9]{1,}\r\n"
 then alert

This is a pretty simple check but at least will enable monit to alert if beanstalkd isn’t listening or is returning garbage.

I think in the long term I’d like nagios to alert on  the current-jobs-delayed and possibly the current-waiting variables reported by the stats-tube command for a given tube, but that is for another day!

Another thought is possibly to have a cacti graph of the total-jobs field, it looks like a always increasing counter, so should be pretty trivial to hook up to cacti.

Missing BNX2 firmware for Debian PXE/Netboot installations

I seem to have a inherent disklike of Debian and the feeling appears to be mutual. It never makes my life easy. Just this morning I needed to install it on a Dell R210 rather than our usual Centos builds. The server is 15 odd miles away, so I took my standard route of PXE installing. After downloading the netboot.tar.gz and dropping the right files in place on my netboot server, I booted the R210 and began the install. Only a couple of screens in I was presented with this most unhelpful message. So I have to drive 30 miles to plug a usb stick into this machine to continue? That isn’t acceptable imho.

In my case it was the non free firmware for the Broadcom ethernet cards in the machine, I needed this package.

Unhelpful Debian

Turns out there is a fix. You just need to download the missing .deb, cpio it and cat it into the end of the initrd:

% mkdir /tmp/firmware
% cd /tmp/firmware
% wget http://ftp.uk.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.28+squeeze1_all.deb
% cd /tmp
% find firmware | cpio -o | gzip -c > firmware.cpio.gz

Now cat the resultant firmware.cpio.gz onto the end of the existing initrd.gz, which for me was in /tftpboot/debian-installer/amd64/initrd.gz. So I ran this:

% cat /tmp/firmware.cpio.gz >> /tfpboot/debian-installer/amd64/initrd.gz

That will overwrite the initrd.gz without warning, so might want to take a backup of it first.

Apple Aperture 3.4 update

So on the day of iOS6 Apple also released the 3.4 update to Aperture and osX 10.8.2. It seems if you apply all these updates, Aperture first updates your library, and then quits every time you load it. Brilliant, gee thanks Apple. why bother with actually testing software, you wouldn’t want to dent the 100 billion you have in the bank. Anyway, apparently it is something to do with the Facebook account info held within Aperture, you can zero this out by runnning the following at the command line:

defaults remove com.apple.Aperture AccountConfigurations

This worked for me but Aperture no longer knew about my Flickr, or Facebook accounts. At least I got my photos back. Between this and iOS6 maps, this isn’t a great week to own Apple products.

 

Local RPMs update

This is an update to the earlier post where I linked to some RPMs which I maintain for my own purposes. If you find these useful, please feel free to download them.

In the filenames, el6 is Red Hat Enterprise Linux 6 (Centos), el5 is Red Hat Enterprise Linux 5 (Centos), fc7 is Fedora Core 7.

If a link is broken, feel free to have a click around the SVN repository, the root of where I keep all the RPM stuff is here. Or please email me.