Add location in poo record

This commit is contained in:
2024-08-24 22:11:15 +02:00
parent b7aaca1650
commit 9a5fc701bb
2 changed files with 15 additions and 13 deletions

View File

@@ -1,7 +1,6 @@
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from fastapi import FastAPI from fastapi import FastAPI
from pydantic import BaseModel
from src.cloud_util.homeassistant import HomeAssistant from src.cloud_util.homeassistant import HomeAssistant
from src.cloud_util.mqtt import MQTT from src.cloud_util.mqtt import MQTT
@@ -26,10 +25,6 @@ async def _lifespan(_app: FastAPI): # noqa: ANN202
await mqtt.stop() await mqtt.stop()
class PooRecordField(BaseModel):
status: str
app = FastAPI(lifespan=_lifespan) app = FastAPI(lifespan=_lifespan)
@@ -45,8 +40,8 @@ async def homeassistant_publish(payload: HomeAssistant.Message) -> dict:
# Poo recorder # Poo recorder
@app.post("/poo/record") @app.post("/poo/record")
async def record(record_detail: PooRecordField) -> PooRecordField: async def record(record_detail: PooRecorder.RecordField) -> PooRecorder.RecordField:
await poo_recorder.record(record_detail.status) await poo_recorder.record(record_detail)
return record_detail return record_detail

View File

@@ -1,5 +1,7 @@
from datetime import datetime from datetime import datetime
from pydantic import BaseModel
from src.cloud_util.homeassistant import HomeAssistant from src.cloud_util.homeassistant import HomeAssistant
from src.cloud_util.mqtt import MQTT from src.cloud_util.mqtt import MQTT
from src.cloud_util.notion import NotionAsync from src.cloud_util.notion import NotionAsync
@@ -15,6 +17,11 @@ class PooRecorder:
ONLINE = "online" ONLINE = "online"
OFFLINE = "offline" OFFLINE = "offline"
class RecordField(BaseModel):
status: str
latitude: str
longitude: str
def __init__(self, mqtt: MQTT, notion: NotionAsync, homeassistant: HomeAssistant) -> None: def __init__(self, mqtt: MQTT, notion: NotionAsync, homeassistant: HomeAssistant) -> None:
print("Poo Recorder Initialization...") print("Poo Recorder Initialization...")
self._notion = notion self._notion = notion
@@ -24,18 +31,18 @@ class PooRecorder:
self._mqtt.publish(PooRecorder.AVAILABILITY_TOPIC, PooRecorder.ONLINE, retain=True) self._mqtt.publish(PooRecorder.AVAILABILITY_TOPIC, PooRecorder.ONLINE, retain=True)
self._homeassistant = homeassistant self._homeassistant = homeassistant
async def _note(self, now: datetime, status: str) -> None: async def _note(self, now: datetime, status: str, latitude: str, longitude: str) -> None:
formatted_date = now.strftime("%Y-%m-%d") formatted_date = now.strftime("%Y-%m-%d")
formatted_time = now.strftime("%H:%M") formatted_time = now.strftime("%H:%M")
await self._notion.append_table_row_text(self._table_id, [formatted_date, formatted_time, status]) await self._notion.append_table_row_text(self._table_id, [formatted_date, formatted_time, status, latitude + "," + longitude])
async def record(self, status: str) -> None: async def record(self, record_detail: RecordField) -> None:
webhook_id: str = Config.get_env("HOMEASSISTANT_POO_TRIGGER_ID") webhook_id: str = Config.get_env("HOMEASSISTANT_POO_TRIGGER_ID")
self._publish_text(status) self._publish_text(record_detail.status)
now = datetime.now(tz=datetime.now().astimezone().tzinfo) now = datetime.now(tz=datetime.now().astimezone().tzinfo)
self._publish_time(now) self._publish_time(now)
await self._note(now, status) await self._note(now, record_detail.status, record_detail.latitude, record_detail.longitude)
await self._homeassistant.trigger_webhook(payload={"status": status}, webhook_id=webhook_id) await self._homeassistant.trigger_webhook(payload={"status": record_detail.status}, webhook_id=webhook_id)
def _publish_text(self, new_text: str) -> None: def _publish_text(self, new_text: str) -> None:
self._mqtt.publish(PooRecorder.AVAILABILITY_TOPIC, PooRecorder.ONLINE, retain=True) self._mqtt.publish(PooRecorder.AVAILABILITY_TOPIC, PooRecorder.ONLINE, retain=True)