Liebes Sensemap/Sensebox-Team,
ich möchte fragen ob ihr mal einen Blick auf mein Python-Skript für
den Import der Daten des Niederschlagsmessers an meiner RasPi-Wetterstation werfen könnt. Dazu muss ich sagen, dass ich wenige Grundkenntnisse im Programmieren habe, bisher aber ganz gut durchgeschliddert bin.
Die Datei getInfo_zeroTestRain_SenseBox.py soll die Bewegung der Regenwippe zählen
und gibt alle fünf Sekunden den entsprechenden Wert aus. Anschließend
wird der Wert wieder auf Null gesetzt. Das funktioniert soweit (auf Komandozeile ohne die Angaben zur Sensemap getestet)
getInfo_zeroTestRain_SenseBox.py ist um die Angaben von Sensemap
ergänzt. Die Angaben habe ich aus anderen Skripten kopiert die bei mir
erfolgreich laufen und regelmäßig Daten senden. Die Sensor_ID habe ich
angepasst. Beim Ausführen bekomme ich den folgenden Fehler:
root@pi:~/Raspberry-Weather/production# python getInfo_zeroTestRain_SenseBox.py
()
Traceback (most recent call last):
File “getInfo_zeroTestRain_SenseBox.py”, line 55, in
status=readInfo() #get the readings
File “getInfo_zeroTestRain_SenseBox.py”, line 44, in readInfo
send_to_opensensemap(rainfall, sensebox_id =
“59592d0994f05200114428e8”, sensor_id = “5ca64511cbf9ae001ac2f6d1”)
File “getInfo_zeroTestRain_SenseBox.py”, line 18, in send_to_opensensemap
data = “{“value”:%.1f}” % float(value)
TypeError: float() argument must be a string or a number
Ich verstehe das so, dass eine Fließkommazahl erwartet, aber wohl
keine übergeben wird. Allerdings sollte rainfall eine Zahl enthalten?
Hier das Skript:
#!/usr/bin/python
import sys
from gpiozero import Button
import subprocess
import re
import os
import time
import datetime
import urllib2
interval = 5 # measurements recorded every 5 seconds
BUCKET_SIZE = 1,65289
rain_count = 0
def send_to_opensensemap(value, sensebox_id, sensor_id):
opensensemap_url = "https://ingress.opensensemap.org/boxes/%s/%s" % (sensebox_id, sensor_id)
data = "{\"value\":%.1f}" % float(value)
try:
req = urllib2.Request(opensensemap_url, data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
f.read()
f.close()
except urllib2.HTTPError as error:
print error.code, error.reason
def bucket_tipped():
global rain_count
rain_count = rain_count + 1
def reset_rainfall():
global rain_count
rain_count = 0
def readInfo():
while True:
start_time = time.time()
while time.time() - start_time <= interval:
rainfall = rain_count * BUCKET_SIZE
print(rainfall)
if ( rainfall > 0 ):
send_to_opensensemap(rainfall, sensebox_id = "59592d0994f05200114428e8", sensor_id = "5ca64511cbf9ae001ac2f6d1")
else:
print "Failed to get reading. Try again!"
sys.exit(1)
if time.time() - start_time > interval:
reset_rainfall()
rain_sensor = Button(6)
rain_sensor.when_pressed = bucket_tipped
status=readInfo() #get the readings
Ich würde mich über Kommentare freuen.