Moin,
... mein erster python "Gehversuch"....
Ich stehe vor dem Problem 4 DHT Sensoren abzufragen und bei Ausfall eines oder mehrerer Sensoren die Abfrage nach 5 Versuchen je Sensor abzubrechen.
Mein Versuch dieses durch herunterzählen (varx = 5 // varx = varx -1 u.s.w.) scheiterten.
Ich kann lediglich erkennen, dass die Abfrage unendwegt erfolgt, wenn ein Sensor abgeklemmt wird.
Bisher nutze ich bash und habe die Abfrage in einer sleep / kill Schleife eingebettet ...
Ziel ist es per python alle Daten an ein google docs spreedsheed zu übertragen, was auch gelingt. Nur hängt das ganze in einer Endlosschleife, wenn ein Sensor ausfallen sollte.
Python
#!/usr/bin/python
import sys
import time
import datetime
import Adafruit_DHT
import gspread
# GDOCS page login
GDOCS_EMAIL = 'geheim@gmail.com'
GDOCS_PASSWORD = 'geheimer'
GDOCS_SPREADSHEET_NAME = 'strengGeHeIm'
# Definition
DHT_TYPE = Adafruit_DHT.AM2302
DHT_PIN1 = 27
DHT_PIN2 = 27
DHT_PIN3 = 27
DHT_PIN4 = 27
FREQUENCY_SECONDS = 120
var1 = 5
var2 = 5
var3 = 5
var4 = 5
def login_open_sheet(email, password, spreadsheet):
"""Connect to Google Docs spreadsheet and return the first worksheet."""
try:
gc = gspread.login(email, password)
worksheet = gc.open(spreadsheet).sheet1
return worksheet
except:
print 'Unable to login and get spreadsheet. Check email, password, spreadsheet name.'
sys.exit(1)
print 'Logging sensor measurements to {0} every {1} seconds.'.format(GDOCS_SPREADSHEET_NAME, FREQUENCY_SECONDS)
#print 'Press Ctrl-C to quit.'
worksheet = None
while True:
# Login if necessary.
if worksheet is None:
worksheet = login_open_sheet(GDOCS_EMAIL, GDOCS_PASSWORD, GDOCS_SPREADSHEET_NAME)
humidity1, temp1 = Adafruit_DHT.read(DHT_TYPE, DHT_PIN1)
if humidity1 is None or temp1 is None:
#while humidity1 is None or temp1 is None:
print 'Fehler DHT_PIN1'
time.sleep(2)
#var1 = var1 -1
#print 'var1 =', var1
#if var1 == 0:
# break
#continue
continue
humidity2, temp2 = Adafruit_DHT.read(DHT_TYPE, DHT_PIN2)
if humidity2 is None or temp2 is None:
print 'Fehler DHT_PIN2'
time.sleep(2)
continue
humidity3, temp3 = Adafruit_DHT.read(DHT_TYPE, DHT_PIN3)
if humidity3 is None or temp3 is None:
print 'Fehler DHT_PIN3'
time.sleep(2)
continue
humidity4, temp4 = Adafruit_DHT.read(DHT_TYPE, DHT_PIN4)
if humidity4 is None or temp4 is None:
print 'Fehler DHT_PIN4'
time.sleep(2)
continue
print time.strftime('%Y.%m.%d'), time.strftime('%H:%M'),';', ('FlurUG: {0:0.1f}C, {1:0.1f}%').format(temp1,humidity1),';', ('Schlaf: {0:0.1f}C, {1:0.1f}%').format(temp2,humidity2),';', ('Wohn: {0:0.1f}C, {1:0.1f}%').format(temp3,humidity3),';', ('Aussen: {0:0.1f}C, {1:0.1f}%').format(temp4,humidity4),';'
try:
worksheet.append_row([time.strftime('%d %m %Y'), time.strftime('%H:%M'), str(temp1).replace(".",","), str(humidity1).replace(".",","), str(temp2).replace(".",","), str(humidity2).replace(".",","), str(temp3).replace(".",","), str(humidity3).replace(".",","), str(temp4).replace(".",","), str(humidity4).replace(".",",")])
except:
print 'Append error, logging in again'
worksheet = None
time.sleep(FREQUENCY_SECONDS)
continue
# Wait 30 seconds before continuing
#print 'Wrote a row to {0}'.format(GDOCS_SPREADSHEET_NAME)
time.sleep(FREQUENCY_SECONDS)
Alles anzeigen
Bye
Jürgen