Page 1 of 1

DHT22 Integer zu String?

Posted: Tue Jul 16, 2019 8:50 pm
by tesla400
Hallo zusammen,
ich bin Raspi Anfänger und habe folgendes Problem:
Ich schreibe zurzeit einen Code der den DHT22 Sensor auslesen und anschließend die Temperatur und die Luftfeuchtigkeit auf einem Thingspeak-Server speichern soll. Das funktioniert auch soweit.
Ich wollte den Skript nun erweitern indem der Raspi bei einer Luftfeuchtigkeit von unter 50% eine LED durch einen GPIO ansteuert. (Für eine Pflanze)
Ich bekomme die Luftfeuchtigkeit aber nicht in einer Variable gespeichert, da ich eine Fehlermeldung bekomme(siehe unten).
Muss ich die Variable anders definieren?
Der Code:

Code: Select all

Import RPi.GPIO as GPIO
import thingspeak
import time
import Adafruit_DHT
 GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(26, GPIO.OUT)

channel_id = 'XYZ' 
write_key  = 'XYZ' 
read_key   = ''XYZ' ' 
pin = 4
sensor = Adafruit_DHT.DHT22
 
def measure(channel):
    try:
        humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
        # write
        response = channel.update({'field1': temperature, 'field2': humidity})
        
        # read
        read = channel.get({})
        print("Read:", read)
        
    except:
        print("connection failed")
hum = ‘{0:0.1f}’.format(humidity)
if hum < 50:
GPIO.output(26,GPIO.HIGH)
else:	GPIO.output(26, GPIO.LOW)
 
 
if __name__ == "__main__":
    channel = thingspeak.Channel(id=channel_id, write_key=write_key, api_key=read_key)
    while True:
        measure(channel)
        # free account has an api limit of 15sec
        time.sleep(15)

Die Fehlermeldung:

Re: DHT22 Integer zu String?

Posted: Wed Jul 17, 2019 5:01 am
by mline
Mit den Einrückungen stimmt was nicht. Überprüfe mal ob die Zeilen unter dem try except auch wirklich eingerückt sind.
Sonst werden diese Zeilen nämlich nicht in der Funktion ausgeführt sondern Global. Und da gibt es die Variablen humidity und temperature nicht. Die sind nur in der Funktion measure verfügbar

Re: DHT22 Integer zu String?

Posted: Wed Jul 17, 2019 8:10 am
by tesla400
Danke für deine Antwort, das Problem wurde durchs Einrücken behoben.
Allerdings wird GPIO 26 nie auf HIGH gesetzt.
Ich dachte mir das es daran lag, dass die if-Anweisung bei except mit eingebunden war, welches nicht ausgeführt wurde, da die Datenübertragung funktioniert. Dann habe ich die Variablendeklaration und die if-Anweisung in den Try-Teil verschoben aber es funktioniert immer noch nicht.
In welchen Teil muss ich die Anweisung+Deklaration einsetzten?
Gruß