Accessing 1-wire devices on Raspberry Pi using OWFS

To connect 1-wire serial devices to the RPi I am using a DS9490R USB 1-wire adapter (rather than wiring I2C 1-Wire master components to GPIO I2C – which I might look at sometime down the track)

Install packages

sudo apt-get install owfs ow-shell

Edit config file

vim /etc/owfs.conf

! server: server = localhost:4304
# USB device: DS9490
server: usb = all
######################### OWFS ##########################
mountpoint = /mnt/1wire
allow_other
####################### OWHTTPD #########################
http: port = 2121
####################### OWFTPD ##########################
ftp: port = 2120
####################### OWSERVER ########################
server: port = localhost:4304

Create Startup Script

I created a startup script for owfs modelled on the owserver script (not sure why this one is actually missing)

vim /etc/init.d/owfs

#!/bin/sh
### BEGIN INIT INFO
# Provides: owfs
# Required-Start: $remote_fs $syslog $network $named
# Required-Stop: $remote_fs $syslog $network $named
# Should-Start: owfs
# Should-Stop: owfs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: 1-wire file system mount & update daemon
# Description: Start and stop 1-wire file system mount & update daemon.
### END INIT INFO
CONFFILE=/etc/owfs.conf
DESC="1-Wire file system mount"
NAME="owfs"
DAEMON=/usr/bin/$NAME
case "$1" in
start)
echo "Starting $NAME"
$DAEMON -c $CONFFILE
;;
stop)
echo "Stopping $NAME"
killall $NAME
;;
*)
echo "Usage: $N {start|stop}" >&2
exit 1
;;
esac
exit 0

Starting daemons

/etc/init.d/owserver start
/etc/init.d/owfs start

Checking output

#ls /mnt/1wire/

Should show output similar to:

10.575349000000 12.95DD17000000 alarm simultaneous uncached
10.575349000000 12.95DD17000000 bus.0 statistics
12.57DD16000000 81.B2EA2E000000 bus.1 structure
12.57DD16000000 81.B2EA2E000000 settings system

cat /mnt/1wire/10.575349000000/temperature

Will then show the temperature of the particular DS18S20 temperature sensor.

Installing OMXPlayer on Raspberry Pi

Since I didn’t have any luck playing videos on the RPi using mplayer I found omxplayer after some search. It has the ability to use the RPi’s GPU thus taking some load of the CPU.


UPDATE 2013-04-01: omxplayer is now included in the Raspbian (Debian Wheezy) repositories and can be simply installed by one line.

sudo apt-get install omxplayer

Check another article on how to install Raspbian.


OMXPlayer binary (.deb) downloads can be found here: http://omxplayer.sconde.net/

Install dependencies

apt-get install libpcre3 fonts-freefont-ttf fbset libpcre3-dev libpcrecpp0 libva-dev libva-x11-1 libva1

Install omxplayer

wget http://omxplayer.sconde.net/builds/omxplayer_0.2.4~git20121205~ec7ac68f_armhf.deb
dpkg -i omxplayer_0.2.4~git20121205~ec7ac68f_armhf.deb

Play video

omxplayer -o hdmi video.mp4

Note: If there is no sound when playing through the HDMI interface make sure your /boot/config.txt file has the following line (and it’s not commented out).

hdmi_drive = 2

OMXPlayer Key bindings

Key Action
1 Increase Speed
2 Decrease Speed
j Previous Audio stream
k Next Audio stream
i Previous Chapter
o Next Chapter
n Previous Subtitle stream
m Next Subtitle stream
s Toggle subtitles
q Exit OMXPlayer
Space or p Pause/Resume
- Decrease Volume
+ Increase Volume
Left Seek -30
Right Seek +30
Down Seek -600
Up Seek +600

Raspberry Pi – Text to Speech

Just a quick note on Speech Synthesis a Raspberry Pi project. I had to research some of the options on the Raspberry Pi while looking into a project where I need some audio announcements.

Configuring Sound

echo 'snd-bcm2835' >> /etc/modules
sudo modprobe snd-bcm2835

sudo apt-get install mplayer alsa-base alsa-utils pulseaudio mpg123
# make mplayer use mpg123 codec instead of default ffmp3float
echo "afm=mp3lib" >> ~/.mplayer/config

Since I am using Raspbian which is a Debian based (Wheezy) Distribution I used some Ubuntu documentation (https://help.ubuntu.com/community/TextToSpeech) as the starting point.

Festival

sudo apt-get install festival festival-english
echo "Hello World - Testing" | festival --tts

Plus: Local install (no internet connection required)
Minus: Mechanical sounding voice

Espeak

sudo apt-get install espeak
espeak -v en "Hello World - Testing"

Plus: Local install (no internet connection required)
Minus: Mechanical sounding voice (slightly better than Festival)

Google Translate

Create a shell script tts.sh
#!/bin/bash
mplayer -ao alsa -noconsolecontrols "http://translate.google.com/translate_tts?tl=en&q=$*" > /dev/null 2>&1

chmot +x tts.sh
./tts.sh "Hello World - Testing"

Plus: needs live internet connection
Minus: excellent human sounding voice

Google Speech API

I will most likely look at this in the long run to get better control rather than calling the Google Translate url too much.

Creating Twitter Archives

One of the more common uses of Twitter for me is to monitor “back-channels” at events (often events I can attend, but more often these days events I am unable to attend).

Unfortunately Twitter’s search capabilities cease to be useful after a little while and so it is very handy to be able to create an archive for the events ‘hashtag’. There used to be a number of tools in the early days, but mainly because of Twitter’s changes to policies and very unfortunate morphing into a closed ‘media-publishing’ platform, the developers of such tools were forced to discontinue their services.

Tags Explorer

Here is IMHO the best remaining tools I have found that still work:

TweetArchivist

This is an easy to used & fairly polished product which allows download of raw data.

http://www.tweetarchivist.com/

TAGSExplorer

This is a more involved, but open solution based on a Google Spreadsheet and can be modified to suit.

http://mashe.hawksey.info/2011/11/twitter-how-to-archive-event-hashtags-and-visualize-conversation/

Kudos Martin Hawksey from JISC CETIS

Enable GeoIP lookups on CentOS

GeoIP enables you to identify the location, organization, connection speed, and user type of your website visitors.

yum install GeoIP mod_geoip
cd /usr/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoIP.dat.gz
gunzip GeoLiteCity.dat.gz
rm -f *.gz

Edit the VirtualHost settings in httpd.conf

<ifmodule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat Standard
GeoIPDBFile /usr/share/GeoIP/GeoLiteCity.dat Standard
</ifmodule>

Restart Apache

/etc/init.d/httpd restart

Accessing Amazon RDS from Desktop

Every once in a while it is handy to be able to access an Amazon RDS Database Instance remotely from a desktop.

ssh -i YOUR-AMAZON-PRIVATE-KEY.pem -l YOUR-AMAZON-RDS-USERNAME -L 33060:YOUR-AMAZON-RDS-PRIVATE-IPADDRESS:3306 -N ec2-usr@YOUR-AMAZON-EC2-INSTANCE-PUBLIC-ADDRESS

Note: YOURAMAZONRDSPRIVATEIPADDRESS needs to be the AWS internal RDS IP Address – not the external hostname

You can then connect to RDS using mysql commands or any GUI tool such as MySQL Workbench via localhost:33060

Thanks to: Dirk Taggesell via AWS Forums

Wireshark install on Ubuntu 12.04

Just a short note on Wireshark install (needed to beat an Asterisk SIP install into submission)

sudo apt-get install wireshark
sudo useradd -U -M -s /bin/false wireshark
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 754 /usr/bin/dumpcap
sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
sudo gpasswd -a YOURUSERNAME wireshark

Source: http://wiki.wireshark.org/CaptureSetup/CapturePrivileges

Organisational micro-blogging for all

Having seen more and more articles on the use of micro-blogging tools in educational and corporates settings, I am constantly surprised that one of the most useful options from my point-of-view seems to be constantly overlooked. Micro-blogging is like Twitter, but private to your organisation. It is a great way to capture those more informal internal discussions. It can help distribute useful information (such as links) throughout your organisation or help kick-start conversations.

StatusNet poster

The major advantages of StatusNet as a platform over competing proprietary systems (such as Jammer) are:

  • Ownership of information: you can host StatusNet yourself and StatusNet fully supports DataPortability.org to get your data exported from StatusNet as well.
  • Customisation: since you can host Status.net yourself it is possible to fully customise it to suit your needs.
  • Integration potential: since StatusNet is Open Source software you can easily integrate and build upon it.

To download Status.net head to http://gitorious.org/statusnet/ or try a personal account with Identi.ca. You can also use a cloud-hosted version provided by StatusNet http://status.net/cloud. A Yammer import tool is also available for users looking for a Yammer Alternative.

However being a tool that is private to your organisation does not mean your users will be isolated. There is the ability for your user to connect StatusNet with with their Twitter account should they wish to post messages outside.

Note: this is a cross-posting from my work blog at http://www.brightcookie.com/blog

Offline RSS Reading on Ubuntu

I sometimes have time to read RSS feeds when I have no Internet connection. Granted this is happening less often these days with wireless connectivity pretty much ubiquitous, but I frequently have that need. Most often it’s in an air-plane when you want to catch up on non-essential news and don’t have any connectivity.

This is where Lightread comes in handy. It synchronizes your Google Reader Account with excellent integration into the Ubuntu UI (desktop notification of new items …).

Lightread Screenshot

sudo add-apt-repository ppa:cooperjona/lightread
sudo apt-get update
sudo apt-get install lightread