Login
Register
Forum
Kontakt
Bitmania
2012-05-30 17:20
by bitman
USB-Wetterdaten-Funk-Empfänger
Nachdem ich nun schon über ein jahr die Temperatur im Arbeitszimmer mit dem selbstgebauten USB-ATMega88 Sensor erfasst hatte fand ich das es an der Zeit ist auch die Aussentemperatur mit aufzunehmen.

Nach etwas Herumstöbern im Netz bin ich auf diesen Funk-Wetterdatenempfänger USB-WDE1 von ELV gestoßen.
Das Gerät empfängt Wetter-Funksensoren und kann per USB-Serial-Port mit einem PC verbunden werden.
Damit kann ich 8 Sensoren mit Temperatur und Luftfeuchte empfangen.

Der Bausatz kostet 24,95 € und ist somit 5 € günstiger als das ebenfalls erhältliche Fertiggerät.
Das Zusammenbauen stellt mit 14 Lötstellen keine Herausforderung dar.








Das Ding war also schnell zusammengelötet.

Dazu hatte ich noch drei von diesen Funk-Temperatur-/Luftfeuchteaußensensoren S300 TH bestellt.
Diese senden auf 868.3 MHz und man kann je Sensor 8 verschiedene Addressen einstellen.



Ich habe erstmal einen Funktionstest gemacht und die Werte der drei nebeneinander gestellten Sensoren gecheckt. (Vor einigen Jahren hatte ich mal eine billige Wetterstation die bei diesem Test schon verschiedene Werte angezeigt hatte)

Aber hier scheint alles in Ordnung zu sein:
Sensor 1: xx 
Sensor 2: xx
Sensor 3: xx
Sensor 4: xx
Sensor 5: 26,4C; 48%
Sensor 6: 26,9C; 48%
Sensor 7: 26,6C; 47%
Sensor 8: xx
Kombi-S.: xx

also ab damit an die Meßstellen.

Für den Aussensensor habe ich noch fix aus Resten einen Wetterschutz gebaut, damit es nicht direkter Sonneneinstrahlung oder Regen ausgesetzt ist:



Neben dem Vogelfutterhaus hängt es nun schön in 2m Höhe.
Ein anderer Sensor kommt in die Waschküche. Mal sehn vielleicht bau ich noch mal einen taupunktgesteuerten Lüfter, der sich nur einschaltet wenn die Luft von draussen trockener ist.

Der Empfänger wird im Arbeitzimmer plaziert und an den Heimserver angeschlossen.
Erfreulicherweise ist der Emfang aller drei Sensoren perfekt.
Selbst bei dem Waschküchensensor durch 2 Betondecken hindurch

Nun habe ich das Statistik-Erfassungsscript noch um diesen Empfänger erweitert und schiebe die 8 Temperaturen und Feuchtewerte in die RRD-Datenbank zur grafischen Darstellung:



Hier der Teil des Python Scriptes zum Auslesen der Werte über das serielle USB-Interface:

#!/usr/bin/python
import os, sys, string, time, serial, socket, struct, datetime, re, urllib, urllib2, urlparse

def logger(string):
ts=time.time()
timestamp = time.strftime("%Y-%m-%d %H:%M:%S.",time.localtime(ts))
timestamp = timestamp+str(ts % 1)[2:5] # adding milliseconds
print timestamp+" "+str(os.getpid())+" "+string
return 0

#--------------------------
# Temp
#--------------------------
logger( "read serial interface" )
ser = serial.Serial('/dev/ttyUSB0', baudrate=9600, bytesize=8, stopbits=1, timeout=0 )

# check if serial device is ELV USB-WDE1
t=5
tty_error=0
ser.write("?
") # Query System Status of USB-WDE1
while t > 0:
t=t-1
#logger( str(t) )
data = ser.read(1000)
if len(data) > 0:
#logger("["+data+"]")
t=0
if data.find("USB-WDE1") >= 0:
logger("Device is ELV USB-WDE1");
else:
logger("Device is not ELV USB-WDE1")
tty_error=1

# Check if mode is LogView or if we need to change it
if data.find("Mode:LogView") >= 0:
logger("Mode is: LogView");
else:
tty_error=1
logger("Mode is not LogView, try to change it...")
ser.write("m2
")
t=5
while t > 0:
t=t-1
data = ser.read(1000)
if len(data) > 0:
t=0
if data.find("Mode:LogView") >= 0:
logger("Success");
tty_error=0
else:
logger("Failed to set mode to LogView")
logger("["+data+"]")
tty_error=1
time.sleep(1)
time.sleep(1)

# USB-WDE1 default values
wde_values_ready=0
wde_1_temp='nan'
wde_1_humi='nan'
wde_2_temp='nan'
wde_2_humi='nan'
wde_3_temp='nan'
wde_3_humi='nan'
wde_4_temp='nan'
wde_4_humi='nan'
wde_5_temp='nan'
wde_5_humi='nan'
wde_6_temp='nan'
wde_6_humi='nan'
wde_7_temp='nan'
wde_7_humi='nan'
wde_8_temp='nan'
wde_8_humi='nan'


# LogView: $1;1;;;;;;26,3;21,7;25,3;;;;;;46;52;48;;;;;;;0
if( tty_error==0 ):
t=180 # maximum number of seconds to wait for a valid LogView String
while t > 0:
t=t-1
#logger( str(t) )
data = ser.read(1000)
if len(data) > 0:
if (len(data.split(";"))<25 ): # read more data
logger("incomplete: "+str(data))
# data=data+ser.read(1000)
# logger(" more: "+str(data))

logger( "["+data[:-2]+"]" )
data=data.split(";")
if(len(data)==25 and data[0]=='$1' ):
#logger(str(data))
t=0
if(data[ 3]!=''): wde_1_temp=float(data[ 3].replace(',', '.'))
if(data[ 4]!=''): wde_2_temp=float(data[ 4].replace(',', '.'))
if(data[ 5]!=''): wde_3_temp=float(data[ 5].replace(',', '.'))
if(data[ 6]!=''): wde_4_temp=float(data[ 6].replace(',', '.'))
if(data[ 7]!=''): wde_5_temp=float(data[ 7].replace(',', '.'))
if(data[ 8]!=''): wde_6_temp=float(data[ 8].replace(',', '.'))
if(data[ 9]!=''): wde_7_temp=float(data[ 9].replace(',', '.'))
if(data[10]!=''): wde_8_temp=float(data[10].replace(',', '.'))

if(data[11]!=''): wde_1_humi=int(data[11])
if(data[12]!=''): wde_2_humi=int(data[12])
if(data[13]!=''): wde_3_humi=int(data[13])
if(data[14]!=''): wde_4_humi=int(data[14])
if(data[15]!=''): wde_5_humi=int(data[15])
if(data[16]!=''): wde_6_humi=int(data[16])
if(data[17]!=''): wde_7_humi=int(data[17])
if(data[18]!=''): wde_8_humi=int(data[18])
wde_values_ready=0
time.sleep(1)

if(wde_values_ready!=0):
logger("could not retrieve USB-WDE1 Sensor measures")
ser.close()

logger("wde_1_temp : "+str(wde_1_temp)) #
logger("wde_2_temp : "+str(wde_2_temp)) #
logger("wde_3_temp : "+str(wde_3_temp)) #
logger("wde_4_temp : "+str(wde_4_temp)) #
logger("wde_5_temp : "+str(wde_5_temp)) # Arbeitszimmer
logger("wde_6_temp : "+str(wde_6_temp)) # Waschkueche
logger("wde_7_temp : "+str(wde_7_temp)) # Garten
logger("wde_8_temp : "+str(wde_8_temp)) #
logger("wde_1_humi : "+str(wde_1_humi)) #
logger("wde_2_humi : "+str(wde_2_humi)) #
logger("wde_3_humi : "+str(wde_3_humi)) #
logger("wde_4_humi : "+str(wde_4_humi)) #
logger("wde_5_humi : "+str(wde_5_humi)) # Arbeitszimmer
logger("wde_6_humi : "+str(wde_6_humi)) # Waschkueche
logger("wde_7_humi : "+str(wde_7_humi)) # Garten
logger("wde_8_humi : "+str(wde_8_humi)) #


Fazit: Sehr empfehlenswert!


1 Comment

master32 2012-05-30 17:20 ^ 124

Moderator
Posts: 32
Pages: 36
Registered: 2010-09-04
sehr schön gamacht, welche reste hast du benutzt :-)