Temperaturmessung RaspberryPi (one wire)
Da ich mich bereits längere Zeit mit dem Thema Wetter und der Beobachtung des Wetters beschäftigte, kam schnell die Idee auf, meine Wetterdaten auch anderen Wetter-Netzwerken zur Verfügung zu stellen.
Mit ein paar Drähten und einem Widerstand kann der Sensor mit dem GPIO Port verbunden, und ausgelesen werden.
Es müssen lediglich 2 Kernelmodule galeden werden:
sudo modprobe w1-gpio pullup=1 sudo modprobe w1-therm
Script: install
#!/bin/bash
#Scriptname: install
MODFILE="/etc/modules"
if [ ! $USER = "root" ]
then
echo "... please run as root!"
exit 1
fi
if [ ! -f /usr/bin/bc ]
then
apt-get -y install bc
fi
cp one-wire.gettemp /usr/local/bin/
MODULES=("# Edit by one-wire-temp deployment script" "w1-gpio" "w1-therm")
for((i=0;i<${#MODULES[@]};i++));
do
MODULE=${MODULES[$i]};
#echo "Module:$MODULE"
if ! grep "$MODULE" "$MODFILE"
then
echo "$MODULE" >> $MODFILE
echo "Write: $MODULE >> $MODFILE"
fi
done
echo "... bitte Neustart!"
Mittels install werden alle benötigten Pakete installiert, und /etc/modules entsprechend erweitert.
Script: one-wire.gettemp
#!/bin/bash
#Scriptname: one-wire.gettemp
LINE=$(grep t= /sys/bus/w1/devices/10-00080201ec9e/w1_slave)
TEMP=${LINE##*t=}
echo "scale=5; $TEMP/1000" | bc
Mit dem one-wire.gettemp Script wird das Temperatur aus dem angeschlossenen DS1820 Temperatursensor ausgelesen, und ausgegeben.Die Seriennummer des Sensors muss auf jeden Fall angepasst werden.
Script: hamnet_wxdata
#!/usr/bin/python
#Scriptname: hamnet_wxdata
import urllib
import httplib2
import hashlib
import time
import sys
temp = sys.argv[1]
hash = hashlib.md5("************")
currDateTime = time.gmtime()
currDate = str(currDateTime.tm_mday).zfill(2)
+ "." + str(currDateTime.tm_mon).zfill(2) + "."
+ str(currDateTime.tm_year).zfill(4)
currTime = str(currDateTime.tm_hour+2).zfill(2)
+ ":" + str(currDateTime.tm_min).zfill(2)
username = "dk9mbs"
password = hash.hexdigest()
data = currDate + ";"
+ currTime + ";"
+ str(temp) + ";"
+ ";;;;;;;;;;;;;;;;;0;0;"
url = "http://db0tv.ampr.org/wxnet/daten/reports/directdata.php?dataset="
+ password + ";"
+ username + ";"
+ data
print url
http = httplib2.Http()
body = {'USERNAME': 'foo', 'PASSWORD': 'bar'}
headers = {'Content-type': 'text/html'}
response, content = http.request(url, 'GET', headers=headers, body=urllib.urlencode(body))
print content
Mit dem Script hamnet_wxdata werden die Temperaturdaten an den Wetterserver im HAMNET übergeben.Der Aufruf (z.B. mittels crontab) erfolgt wie folgt:
hamnet_wxdata $(one-wire.gettemp)
Zugangsdaten sind entsprechend anzupassen.
Script: aprs_wx
Die Übergabe der Wetterdaten an das APRS Netzwerk ist etwas komplizierter.
#!/usr/bin/python
#Scriptname: aprs_wx
import socket
import sys
import os
TCP_IP = 'cwop.aprs.net'
TCP_PORT = 10152
BUFFER_SIZE = 1024
call = sys.argv[1]
passwd = sys.argv[2]
celsius = sys.argv[3]
dest = "APZ100"
fahrenheit = round( float ( float(celsius) * 1.8 + 32 ))
fahrenheit = int( float(fahrenheit) )
print "Fahrenheit:" + str(fahrenheit)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send ("user " + call + " pass " + passwd + "rn")
data = s.recv(BUFFER_SIZE)
print data
s.send (call + ">" + dest + ",TCPIP*:=5202.73N/01022.09E_.../...g...t0"
+ str(fahrenheit).zfill(2) + "r...p...P...h..b.....xRSWrn")
data = s.recv(BUFFER_SIZE)
print data
Das Script aprs_wx überträgt die Wetterdaten an einen APRS-IS Server im HAMNET/Internet.Der Aufruf erfolgt wie folgt:
aprs_wx [cwop Station ID] [APRS PASSCODE] $(one-wire.gettemp)