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" | bcMit 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 contentMit 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 dataDas 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)