Monthly Archives: January 2014
How to: Run a command on start / boot up on Raspberry Pi Wheezy (Autostart)
I recently had the problem that my OpenVPN tunnel did not assigned to an IP address. Since i was not in a mood to find out what causes the problem i simply wrote a bash script that runs “dhclient tap0” after booting up the system.
for example, “sudo nano /home/pi/myautoip.sh” :
printf “Trying to get an IP address for tap0”
dhclient tap0
In order to achieve that this command is executed we have to add a command to /etc/rc.local.
so “sudo nano /etc/rc.local”. Add this ABOVE the “exit 0”:
bash /home/pi/myautoip.sh
HowTo: Build your own temperature logger with Raspberry Pi (DS18B20)
Last week I received my fourth Raspberry Pi. Yes, I really love this tiny machines. I already build a media center (xbmc), a smart home light switch + android app, a remote backup system using openvpn, samba and rsync, security camera using motion and kinect and a temperature logger.
Since some people wanted to know how to build it, i will make a “short” tutorial.
1. Go Shopping:
1x DS18B20 (Datasheet / Amazon US / Amazon UK / Amazon DE )
1x Resistor 4,7 k Ohm ( Amazon US / Amazon DE )
(optional) 1x Breadboard + Wires (Amazon US / Amazon DE)
2. Circuit
First of all we have a look at the sensor, the Dallas 18b20. On the illustration you can see the function of each pin.
(Source: Datasheet of DS18B20)
Since the raspberry pi is not able to work with analog signals it seem to be strange that the sensor is working. The answer is: It is a one wire bus sensor. It outputs the temperature in binary code, e.g.: 0000 0001 1001 0001 = 25 C°
Each sensor has a UNIQUE number which allows us to use even multiple sensors with one wire !
Ok now it’s time to wire all together. Since i have no more red and black wires its bit colorful 🙂 sorry for that.
btw.: i guess the circuit is also in the datasheet… anyway:
Now connect it to your breadboard:
That’s it ! Ok let’s check if you did it correct.
Step 3: “installing” the sensor end write a bashscript to read the temperature in °C.
After starting you Raspberry Pi, type:
sudo apt-get install bc
sudo modprobe w1-gpio
sudo modprobe w1-therm
This allows us to use the one wire transmission. Now we double check whether the raspberry pi recognized the sensor.
cd /sys/bus/w1/devices/
There it is! 28-0000054bb784 is the id of mine. To read from the sensor we can type:
cat /sys/bus/w1/devices/28-0000053bb784/w1_slave
Now we can write our bash script to read the temperature. Since i have no idea of regex it was hard for me. So if someone has a better solution to get the value behind ‘t=’ it would be nice if you could write it in the comments. So “nano readtemp.sh” and copy/paste:
#!/bin/bash
catresult=`cat /sys/bus/w1/devices/28-0000053bb784/w1_slave | tail -n 1| egrep -o ‘.{5}$’`
temperature=`echo “scale=2; $catresult / 1000” | bc`
echo $temperature
BINGO ! 🙂
Step 4: Installing postgres
First of all install postgres and other stuff we will need later.
sudo apt-get install postgresql libpq-dev python-dev python-setuptools easy_install pip
login as postgres user and create new user :
sudo su – postgres
createuser tempuser -P
psql
Enter a password and pack it superuser. Start psql and add this new db:
create database temperature;
CRTL+D and type “psql temperature” to log into and create new table:
(if you had problems with tempuser try: )
(ALTER USER tempuser with password ‘12345678’; )CREATE TABLE temp_record(
temp_id serial primary key,
temperature double not null,
stamptime TIMESTAMP
);
press CTRL+D to exit psql. Type “exit” to logout as postgres user.
If you like to reach the DB from other machines in your network, we need to configure that.
sudo nano /etc/postgresql/9.1/main/pg_hba.conf
add this line:
host all all 192.168.178.0/24 trust
next:
sudo nano /etc/postgresql/9.1/main/postgresql.conf
change listen_addresses to this line:
listen_addresses = ‘*’
restart the service:
sudo service postgresql restart
Step 5: A little python script
To use python with postgresql a special library is necessary
pip install psycopg2
No create new file with “nano pushdata.py” and copy/paste this:
(Mine Pi’s IP: 192.168.1.103 change it to yours Pi’s IP)
import psycopg2
import commands
import datetimecall = commands.getoutput(“bash /home/pi/readtemp.sh”)
print call
try:
conn = psycopg2.connect(“dbname=’temperature’ user=’tempuser’ host=’192.168.1.103′ port=’5432′ password=’12345678′”)
except:
print “I am unable to connect to the database”cur = conn.cursor()
cur.execute(“INSERT INTO temp_record (temperature,stamptime) VALUES (“+str(call)+”,NOW()); “)conn.commit()
Save and next Step ! 😉
Step 6: add cron job:
to temporarily add a cron job write:
crontap -e
5 0 0 0 0 python /home/pi/pushdata.py
HowTo: Use WD myBook external Drive with Raspberry Pi
If you want to mount your WD MyBook HDD (external Drive) with the Raspberry pi long term, you need to first install ntfs-3g. after than you need to create a folder to mount the drive … so Type:
sudo apt-get install ntfs-3g
sudo mkdir /media/myBook
ok 50% id already done. Next you have to check whats the name of the device. So Disconnect your drive. And call “ls /dev/”. Than connect the drive and again write “ls /dev/”. Compare both outputs. On the second call there should be apprear a device starting with “sd*”. My is called “sda” but “sdb” could also be possible. Now we will add a line to /etc/fstab to automatically mount this drive.
sudo nano /etc/fstab
add this line:
/dev/sda1 /media/myBook/ ntfs-3g default 0 0
By pressing ctrl+o you can save the file. And to leave nano press ctrl+x.
To refresh the system and mount the drive call:
sudo mount -a
now go to /media/myBook/ and check if it’s working 🙂
cd /media/myBook/
Another example for FAT32:
/dev/sda1 /media/myBook/ vfat defaults 0 2
HowTo: Raspberry Pi mount SMB Share
If you want to mount a SMB Share in your Network this short Tutorial might be helpful for you.
Lets say the SMB Folder, “myFolder”, is on a pc with the ip 192.168.2.100.
It is ptrotected with username “Peter” and password “miller123”.
On you Raspberry, type:
smbclient -U Peter -L 192.168.2.100
… it will ask you for the password (miller123).
to see all shares. It should also show the share “myFolder”. Now we will Create a Folder on the Pi to mount the share to it.
sudo mkdir /mnt/theFolder
To actually mount “myFolder” type:
sudo mount -t cifs //192.168.2.100/myFolder /mnt/theFolder -o username=Peter
add -r for READ ONLY
That’s it. You can now go to /mnt/theFolder and check your remote files.
cd /mnt/theFolder
ls -la
Have Fun.