Hallo zusammen,
ich bauen gerade bzw. habe schon eine Kühlschranküberwachung aufgebaut. Es sollen einfach die Werte vom Kühlschrank und vom Gefrierschrank zu einem Ziel geschickt werden. Welches ist egal. Aktuell ist es Thingspeak oder MongoDB atlas zum testen. Hierbei fällt mir auf, dass einer der beiden Sensoren dauerhaft falsche Werte liefert und ich kann mir absolut nicht erklären warum. Ich arbeite mit Python in der Version > 3.0.
Vielleicht kann mir hier jemand von euch einen Tipp geben?
Raspberry Pi4 mit aktuellem Raspbian Lite
DHT22 Sensoren
Hier seht ihr alles was ich bis jetzt habe. Wenn ich die Sensoren die Werte direkt auf die Kommandozeile ausgeben lasse, dann sind die Werte wie erwartet also größtenteils korrekt:
import Adafruit_DHT as dht
from time import sleep
#Set DATA pin
Pin_Fridge = 15
Pin_Freezer = 14
while True:
h_Fridge,t_Fridge = dht.read_retry(dht.DHT22, Pin_Fridge)
h_Freezer,t_Freezer = dht.read_retry(dht.DHT22, Pin_Freezer)
print('Fridge: Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(t_Fridge,h_Fridge))
print('Freezer: Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(t_Freezer,h_Freezer))
sleep(5)
Display More
Werte:
Thingspeak (Feld 1 = Temperatur Kühlschrank, Feld 2 = Luftfeuchtigkeit Kühlschrank, Feld 3 = Temperatur Gefrierschrank, Feld 4 = Luftfeuchtigkeit Gefrierschrank)
import thingspeak
import time
import Adafruit_DHT
channel_id = XXXXXX # PUT CHANNEL ID HERE
write_key = 'XXXXX' # PUT YOUR WRITE KEY HERE
#Set DATA pin
Pin_Fridge = 15
Pin_Freezer = 14
dht = Adafruit_DHT
def measure(channel):
try:
#Read Temp and Hum from DHT22
h_Freezer,t_Freezer = dht.read_retry(dht.DHT22, Pin_Freezer)
h_Fridge,t_Fridge = dht.read_retry(dht.DHT22, Pin_Fridge)
# write
response = channel.update({'field1': t_Fridge, 'field2': h_Fridge, 'field3': t_Freezer, 'field4': h_Freezer})
print(response)
except:
print("connection failed")
if __name__ == "__main__":
channel = thingspeak.Channel(id=channel_id, api_key=write_key)
while True:
measure(channel)
# free account has an api limit of 15sec
time.sleep(15)
Display More
Werte welche an Thingspeak gesendet werden:
MogoDB Atlas:
from http import client
import Adafruit_DHT as dht
from time import sleep
from pymongo import MongoClient
import pymongo
import datetime;
#Set DATA pin
Pin_Fridge = 15
Pin_Freezer = 14
Interval = 6
def get_database():
try:
# Provide the mongodb atlas url to connect python to mongodb using pymongo
CONNECTION_STRING = "mongodb+srv://XXXXXXX/?retryWrites=true&w=majority"
# Create a connection using MongoClient. You can import MongoClient or use pymongo.MongoClient
client = MongoClient(CONNECTION_STRING)
print("Connected to MongoDB successfully!!!")
# Create the database for our example
return client['brk-regenstauf']
except Exception as e:
print(e)
print("Could not connect to MongoDB. Trying again!")
# Get the database
dbname = get_database()
collection_name = dbname["Cooling Reporting"]
while True:
try:
h_Fridge,t_Fridge = dht.read_retry(dht.DHT22, Pin_Fridge)
sleep(2)
h_Freezer,t_Freezer = dht.read_retry(dht.DHT22, Pin_Freezer)
# ct stores current time
ct = datetime.datetime.now()
print(ct)
fridge = {"type":"fridge","time":ct,"temperature":t_Fridge,"humidity":h_Fridge}
freezer = {"type":"freezer","time":ct,"temperature":t_Freezer,"humidity":h_Freezer}
print(fridge)
print(freezer)
results = collection_name.insert_many([fridge, freezer])
except pymongo.errors.DuplicateKeyError:
continue
sleep(Interval)
Display More
Werte welche zur Mongo DB geschrieben werden:
Ich bin gespannt auf eure Meinungen. Btw. ich habe das ganze nochmal identisch nachgebaut und habe dort ebenfalls das gleiche Problem. (Natürlich neu gekaufte DHT22)