diff --git a/pico/src/connection.py b/pico/src/connection.py index 44ec12f..71fec10 100644 --- a/pico/src/connection.py +++ b/pico/src/connection.py @@ -44,3 +44,6 @@ async def ensure_network(): nic.connect(SSID, PASSWORD) await asyncio.sleep(1) + +async def request(): + pass diff --git a/pico/src/main.py b/pico/src/main.py index 4e59bd7..0c652cd 100644 --- a/pico/src/main.py +++ b/pico/src/main.py @@ -1,30 +1,34 @@ import asyncio +import json +import requests +# from vendor.microdot import Microdot, Request + from actors.valve import ValveActor from sensors.moisture import MoistureSensor -from vendor.microdot import Microdot, Request - from statusled import STATUS_LED from log import Logger, Color from sensors.ultrasonic import UltraSonicSensor from connection import ensure_network -app = Microdot() +# app = Microdot() -@app.route("/") -async def index(_request: Request): - return "Hello from pico" +# @app.route("/") +# async def index(_request: Request): +# return "Hello from pico" -async def read_sensor(): + +async def read_distance(): log = Logger("tank", Color.CYAN) - sensor = UltraSonicSensor(22, 21) + sensor = UltraSonicSensor(17, 16) while True: d = sensor.query_mm() if d is None: log.warning("distance unreadable!") else: log.info(f"distance: {d}mm") - await asyncio.sleep(0.5) + await asyncio.sleep(0.1) + async def toggle_valves(): log = Logger("vlvs", Color.GREEN) @@ -39,46 +43,40 @@ async def toggle_valves(): await v.dispense(1) await asyncio.sleep(0.5) + async def read_moisture(): log = Logger("mstr", Color.YELLOW) - sensors = [ - MoistureSensor(26, submerged=39_000), - MoistureSensor(27, submerged=39_000), - MoistureSensor(28, submerged=39_000), - ] - """ - minmax = [ - (65535, 0) - for _ in sensors - ] + sensors = { + "a0": MoistureSensor(26, submerged=39_000), + "a1": MoistureSensor(27, submerged=39_000), + "a2": MoistureSensor(28, submerged=39_000), + } while True: - res: list[str] = [] - for i, sensor in enumerate(sensors): - v = sensor.read() - 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 - ] + values = { + k: sensor.read_raw() + for (k, sensor) in sensors.items() + } 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(): await asyncio.gather( STATUS_LED.task(), read_moisture(), - toggle_valves(), - # ensure_network(), - # read_sensor(), + # toggle_valves(), + ensure_network(), + # read_distance(), # app.start_server(port=80), ) diff --git a/pico/src/sensors/moisture.py b/pico/src/sensors/moisture.py index c1f860d..79b98f7 100644 --- a/pico/src/sensors/moisture.py +++ b/pico/src/sensors/moisture.py @@ -14,6 +14,8 @@ class MoistureSensor: self.submerged = submerged self.dry = dry + def read_raw(self): + return self.a.read_u16() + def read(self): - return (self.a.read_u16() - self.dry) / (self.submerged - self.dry) - # return self.a.read_u16() + return (self.read_raw() - self.dry) / (self.submerged - self.dry)