Implement moisture logging
This commit is contained in:
parent
e568baad96
commit
4d7139b48a
@ -44,3 +44,6 @@ async def ensure_network():
|
|||||||
nic.connect(SSID, PASSWORD)
|
nic.connect(SSID, PASSWORD)
|
||||||
|
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
|
async def request():
|
||||||
|
pass
|
||||||
|
@ -1,30 +1,34 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
|
import json
|
||||||
|
import requests
|
||||||
|
# from vendor.microdot import Microdot, Request
|
||||||
|
|
||||||
from actors.valve import ValveActor
|
from actors.valve import ValveActor
|
||||||
from sensors.moisture import MoistureSensor
|
from sensors.moisture import MoistureSensor
|
||||||
from vendor.microdot import Microdot, Request
|
|
||||||
|
|
||||||
from statusled import STATUS_LED
|
from statusled import STATUS_LED
|
||||||
from log import Logger, Color
|
from log import Logger, Color
|
||||||
from sensors.ultrasonic import UltraSonicSensor
|
from sensors.ultrasonic import UltraSonicSensor
|
||||||
from connection import ensure_network
|
from connection import ensure_network
|
||||||
|
|
||||||
app = Microdot()
|
# app = Microdot()
|
||||||
|
|
||||||
@app.route("/")
|
# @app.route("/")
|
||||||
async def index(_request: Request):
|
# async def index(_request: Request):
|
||||||
return "Hello from pico"
|
# return "Hello from pico"
|
||||||
|
|
||||||
async def read_sensor():
|
|
||||||
|
async def read_distance():
|
||||||
log = Logger("tank", Color.CYAN)
|
log = Logger("tank", Color.CYAN)
|
||||||
sensor = UltraSonicSensor(22, 21)
|
sensor = UltraSonicSensor(17, 16)
|
||||||
while True:
|
while True:
|
||||||
d = sensor.query_mm()
|
d = sensor.query_mm()
|
||||||
if d is None:
|
if d is None:
|
||||||
log.warning("distance unreadable!")
|
log.warning("distance unreadable!")
|
||||||
else:
|
else:
|
||||||
log.info(f"distance: {d}mm")
|
log.info(f"distance: {d}mm")
|
||||||
await asyncio.sleep(0.5)
|
await asyncio.sleep(0.1)
|
||||||
|
|
||||||
|
|
||||||
async def toggle_valves():
|
async def toggle_valves():
|
||||||
log = Logger("vlvs", Color.GREEN)
|
log = Logger("vlvs", Color.GREEN)
|
||||||
@ -39,46 +43,40 @@ async def toggle_valves():
|
|||||||
await v.dispense(1)
|
await v.dispense(1)
|
||||||
await asyncio.sleep(0.5)
|
await asyncio.sleep(0.5)
|
||||||
|
|
||||||
|
|
||||||
async def read_moisture():
|
async def read_moisture():
|
||||||
log = Logger("mstr", Color.YELLOW)
|
log = Logger("mstr", Color.YELLOW)
|
||||||
sensors = [
|
sensors = {
|
||||||
MoistureSensor(26, submerged=39_000),
|
"a0": MoistureSensor(26, submerged=39_000),
|
||||||
MoistureSensor(27, submerged=39_000),
|
"a1": MoistureSensor(27, submerged=39_000),
|
||||||
MoistureSensor(28, submerged=39_000),
|
"a2": MoistureSensor(28, submerged=39_000),
|
||||||
]
|
}
|
||||||
"""
|
|
||||||
minmax = [
|
|
||||||
(65535, 0)
|
|
||||||
for _ in sensors
|
|
||||||
]
|
|
||||||
while True:
|
while True:
|
||||||
res: list[str] = []
|
values = {
|
||||||
for i, sensor in enumerate(sensors):
|
k: sensor.read_raw()
|
||||||
v = sensor.read()
|
for (k, sensor) in sensors.items()
|
||||||
v_min, v_max = minmax[i]
|
}
|
||||||
v_min = min(v_min, v)
|
|
||||||
v_max = max(v_max, v)
|
|
||||||
minmax[i] = (v_min, v_max)
|
|
||||||
res.append(f"[{i}] v={v} min={v_min} max={v_max}")
|
|
||||||
log.info("\n".join(res))
|
|
||||||
await asyncio.sleep(0.2)
|
|
||||||
"""
|
|
||||||
while True:
|
|
||||||
values = [
|
|
||||||
sensor.read()
|
|
||||||
for sensor in sensors
|
|
||||||
]
|
|
||||||
log.info(f"{values=}")
|
log.info(f"{values=}")
|
||||||
await asyncio.sleep(0.2)
|
from secret import TOKEN
|
||||||
|
try:
|
||||||
|
r = requests.post(
|
||||||
|
"https://plantlog.leafbla.de/log",
|
||||||
|
headers={"Authorization": f"Bearer {TOKEN}"},
|
||||||
|
data=json.dumps(values)
|
||||||
|
)
|
||||||
|
log.info(f"{r.status_code=} {r.text}")
|
||||||
|
except OSError as e:
|
||||||
|
log.warning(repr(e))
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
async def _main():
|
async def _main():
|
||||||
await asyncio.gather(
|
await asyncio.gather(
|
||||||
STATUS_LED.task(),
|
STATUS_LED.task(),
|
||||||
read_moisture(),
|
read_moisture(),
|
||||||
toggle_valves(),
|
# toggle_valves(),
|
||||||
# ensure_network(),
|
ensure_network(),
|
||||||
# read_sensor(),
|
# read_distance(),
|
||||||
# app.start_server(port=80),
|
# app.start_server(port=80),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,6 +14,8 @@ class MoistureSensor:
|
|||||||
self.submerged = submerged
|
self.submerged = submerged
|
||||||
self.dry = dry
|
self.dry = dry
|
||||||
|
|
||||||
|
def read_raw(self):
|
||||||
|
return self.a.read_u16()
|
||||||
|
|
||||||
def read(self):
|
def read(self):
|
||||||
return (self.a.read_u16() - self.dry) / (self.submerged - self.dry)
|
return (self.read_raw() - self.dry) / (self.submerged - self.dry)
|
||||||
# return self.a.read_u16()
|
|
||||||
|
Loading…
Reference in New Issue
Block a user