Sensordaten an Thingspeak übergeben

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Sedge
User
Beiträge: 5
Registriert: Samstag 13. November 2021, 19:37

Hallo zusammen!

Ich bin interessierter Laie, bisher hat Google gute Dienste geleistet. Jetzt brauche ich aber Hilfe von Profis ;)

Das Projekt:
Raspberry Pi Zero WH
CO2 mit MH-Z19b (https://tutorials-raspberrypi.de/raspbe ... -tutorial/)
Luftdruck/Temperatur mit DHT22, die Daten sollen mittels Thingspeak geloggt/angezeigt werden (https://tutorials-raspberrypi.de/raspbe ... auswerten/)

Zum testen habe ich zwei Skripte:

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import Adafruit_DHT

humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.AM2302, 17)
print("%.2f °C  %.2f %%" % (temperature, humidity))
pi@RasPi-Zero1:~ $ sudo python temp.py
16.20 °C 62.60 %

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import mh_z19
print(mh_z19.read())
pi@RasPi-Zero1:~ $ sudo python co2.py
{'co2': 575}


So weit, so gut!

Also Thingspeak-Account eingerichtet und die Anleitung (aus dem Link oben) befolgt. Das Skript habe ich (mit meinen ergoogelten Py-Skills :? ) um die CO2-Werte ergänzt:

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import thingspeak
import time
import Adafruit_DHT
import mh_z19

channel_id = xxxx # PUT CHANNEL ID HERE
write_key  = 'xxx' # PUT YOUR WRITE KEY HERE
read_key   = 'xxx' # PUT YOUR READ KEY HERE
pin = 17
sensor = Adafruit_DHT.AM2302

def measure(channel):
    try:
        humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
        co2 = mh_z19.read()
        # write
        response = channel.update({'field1': temperature, 'field2': humidity, 'field3': co2})
    except:
        print("connection failed")


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)
Auf meinem Thingspeak-Channel werden dann in Feldern 1 und 2 die Werte für Temperatur und Luftfeuchtigkeit wie gewünscht angezeigt.

Feld 3 für CO2 bleibt aber leer. Jetzt ist die Frage: warum! Und wo habe ich was falsch gemacht?

Danke im Voraus, ich freu mich auf Hilfe!
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Nackte excepts sind schlecht, weil sie alle Fehler, auch viele Programmierfehler abfangen. Exceptions immer so konkret wie möglich angeben.
Und dann schau Dir mal den Inhalt der Variablen `humidity`/`temperature` gegenüber `co2` an. Was ist da der Unterscheid?
Sedge
User
Beiträge: 5
Registriert: Samstag 13. November 2021, 19:37

Vom einen Sensor kommt ein reiner Zahlenwert, vom CO2 Sensor nicht. Ich weiß nicht wie ich beim CO2 einen reinen Zahlenwert ausgebe. Habe diverse Beiträge zu dem Sensor, und zur Beeinflussung von Ausgaben (Strip) angeschaut und werde nicht schlau draus...

Was du mit exceptions meinst verstehe ich nicht...
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

`mh_z19.read` liefert ein Wörterbuch, wie man damit umgeht, gehört zu den absoluten Grundlagen. Da Du selbst bereits Wörterbücher erzeugst, solltest Du das eigentlich schon kennen.
Sedge
User
Beiträge: 5
Registriert: Samstag 13. November 2021, 19:37

Nein, kenne ich noch nicht. Bin noch am Anfang meiner Python-Karriere :D Wo liegt der Fehler?
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sedge: Der Fehler liegt darin das Du Python lernen musst um in Python zu Programmieren. Grundlagen werden in Tutorials erklärt, beispielsweise in dem in der Python-Dokumentation. Und Ausnahmen („exceptions“) auch. Solange Du das nicht kennst, benutze es nicht. Das ``try``/``except`` muss da also raus.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sedge
User
Beiträge: 5
Registriert: Samstag 13. November 2021, 19:37

Nuja, bin ja beim lernen ;)

Die Zeilen mit try/except hab ich aus einem Tutorial, siehe mein erster Post. Warum wird es dort verwendet?

Mein zweites (eigentliches?) Problem ist die Ausgabe des CO2-Sensors, und warum dieser nicht in Thingspeak landet.
Benutzeravatar
sparrow
User
Beiträge: 4184
Registriert: Freitag 17. April 2009, 10:28

Es wird dir hier niemand sagen können, warum das im Tutorial falsch gemacht wird.

Und das Problem wurde oben bereits gelöst.
Wenn du mit der Aussage von Sirius3 nichts anfangen kannst, dass der Aufruf ein Wörterbuch bzw dict liefert, dann bist du bei den absoluten Grundlagen noch nicht vorbei.
Sedge
User
Beiträge: 5
Registriert: Samstag 13. November 2021, 19:37

Ok. Danke.
Antworten