Added climate logging
This commit is contained in:
parent
8fec41ae33
commit
c7e128d8f2
2 changed files with 31 additions and 4 deletions
|
@ -4,10 +4,17 @@ class Dht22Sensor:
|
||||||
def __init__(self, pin):
|
def __init__(self, pin):
|
||||||
self.sensor = Adafruit_DHT.AM2302
|
self.sensor = Adafruit_DHT.AM2302
|
||||||
self.pin = pin
|
self.pin = pin
|
||||||
|
self.last_read = None
|
||||||
|
|
||||||
def read(self):
|
def read(self):
|
||||||
humidity, temperature = Adafruit_DHT.read_retry(self.sensor, self.pin)
|
humidity, temperature = Adafruit_DHT.read_retry(self.sensor, self.pin)
|
||||||
if humidity is not None and temperature is not None:
|
if humidity is not None and temperature is not None:
|
||||||
return {'temperature': temperature, 'humidity': humidity}
|
self.last_read = {'temperature': temperature, 'humidity': humidity}
|
||||||
|
return self.last_read
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def get_last_read(self):
|
||||||
|
if self.last_read is None:
|
||||||
|
self.read()
|
||||||
|
return self.last_read
|
24
src/main.py
24
src/main.py
|
@ -1,3 +1,4 @@
|
||||||
|
import os
|
||||||
from fastapi import FastAPI, HTTPException
|
from fastapi import FastAPI, HTTPException
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import requests
|
import requests
|
||||||
|
@ -25,10 +26,28 @@ app.add_middleware(
|
||||||
|
|
||||||
should_run_time_loop = True
|
should_run_time_loop = True
|
||||||
dht22_pin = 17
|
dht22_pin = 17
|
||||||
|
climate_log_file = "./climate.csv"
|
||||||
|
|
||||||
matrix_display = MatrixDisplay()
|
matrix_display = MatrixDisplay()
|
||||||
dht22_sensor = Dht22Sensor(dht22_pin)
|
dht22_sensor = Dht22Sensor(dht22_pin)
|
||||||
|
|
||||||
|
# Start background service to log temperature and humidity every minute
|
||||||
|
async def log_temperature():
|
||||||
|
# If file does not exist, create it and write header
|
||||||
|
if not os.path.isfile(climate_log_file):
|
||||||
|
with open(climate_log_file, "w") as f:
|
||||||
|
f.write("timestamp,temperature,humidity\n")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
measurements = dht22_sensor.read()
|
||||||
|
if measurements is not None:
|
||||||
|
with open(climate_log_file, "a") as f:
|
||||||
|
f.write("{},{},{}\n".format(
|
||||||
|
datetime.now().isoformat(),
|
||||||
|
measurements["temperature"],
|
||||||
|
measurements["humidity"]
|
||||||
|
))
|
||||||
|
await asyncio.sleep(60)
|
||||||
|
|
||||||
async def display_time():
|
async def display_time():
|
||||||
while should_run_time_loop:
|
while should_run_time_loop:
|
||||||
|
@ -46,6 +65,7 @@ async def display_time():
|
||||||
|
|
||||||
|
|
||||||
asyncio.create_task(display_time())
|
asyncio.create_task(display_time())
|
||||||
|
asyncio.create_task(log_temperature())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,7 +88,7 @@ async def turn_off():
|
||||||
|
|
||||||
@app.post("/temperature")
|
@app.post("/temperature")
|
||||||
async def temperature():
|
async def temperature():
|
||||||
measurements = dht22_sensor.read()
|
measurements = dht22_sensor.get_last_read()
|
||||||
if measurements is None:
|
if measurements is None:
|
||||||
return {"message": "Failed to read temperature"}
|
return {"message": "Failed to read temperature"}
|
||||||
|
|
||||||
|
@ -89,7 +109,7 @@ async def temperature():
|
||||||
|
|
||||||
@app.post("/humidity")
|
@app.post("/humidity")
|
||||||
async def humidity():
|
async def humidity():
|
||||||
measurements = dht22_sensor.read()
|
measurements = dht22_sensor.get_last_read()
|
||||||
if measurements is None:
|
if measurements is None:
|
||||||
return {"message": "Failed to read humidity"}
|
return {"message": "Failed to read humidity"}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue