Start with go version
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -1,78 +0,0 @@
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from src.config import Config
|
||||
from src.util.homeassistant import HomeAssistant
|
||||
from src.util.mqtt import MQTT
|
||||
from src.util.notion import NotionAsync
|
||||
|
||||
|
||||
class PooRecorder:
|
||||
CONFIG_TOPIC = "homeassistant/text/poo_recorder/config"
|
||||
AVAILABILITY_TOPIC = "studiotj/poo_recorder/status"
|
||||
COMMAND_TOPIC = "studiotj/poo_recorder/update_text"
|
||||
STATE_TOPIC = "studiotj/poo_recorder/text"
|
||||
JSON_TOPIC = "studiotj/poo_recorder/attributes"
|
||||
ONLINE = "online"
|
||||
OFFLINE = "offline"
|
||||
|
||||
class RecordField(BaseModel):
|
||||
status: str
|
||||
latitude: str
|
||||
longitude: str
|
||||
|
||||
def __init__(self, mqtt: MQTT, notion: NotionAsync, homeassistant: HomeAssistant) -> None:
|
||||
print("Poo Recorder Initialization...")
|
||||
self._notion = notion
|
||||
self._table_id = Config.get_env("POO_RECORD_NOTION_TABLE_ID")
|
||||
self._mqtt = mqtt
|
||||
self._mqtt.publish(PooRecorder.CONFIG_TOPIC, PooRecorder.compose_config(), retain=True)
|
||||
self._mqtt.publish(PooRecorder.AVAILABILITY_TOPIC, PooRecorder.ONLINE, retain=True)
|
||||
self._homeassistant = homeassistant
|
||||
|
||||
async def _note(self, now: datetime, status: str, latitude: str, longitude: str) -> None:
|
||||
formatted_date = now.strftime("%Y-%m-%d")
|
||||
formatted_time = now.strftime("%H:%M")
|
||||
status.strip()
|
||||
await self._notion.append_table_row_text(self._table_id, [formatted_date, formatted_time, status, latitude + "," + longitude])
|
||||
|
||||
async def record(self, record_detail: RecordField) -> None:
|
||||
webhook_id: str = Config.get_env("HOMEASSISTANT_POO_TRIGGER_ID")
|
||||
self._publish_text(record_detail.status)
|
||||
now = datetime.now(tz=datetime.now().astimezone().tzinfo)
|
||||
self._publish_time(now)
|
||||
await self._note(now, record_detail.status, record_detail.latitude, record_detail.longitude)
|
||||
await self._homeassistant.trigger_webhook(payload={"status": record_detail.status}, webhook_id=webhook_id)
|
||||
|
||||
def _publish_text(self, new_text: str) -> None:
|
||||
self._mqtt.publish(PooRecorder.AVAILABILITY_TOPIC, PooRecorder.ONLINE, retain=True)
|
||||
self._mqtt.publish(PooRecorder.STATE_TOPIC, new_text, retain=True)
|
||||
|
||||
def _publish_time(self, time: datetime) -> None:
|
||||
formatted_time = time.strftime("%a | %Y-%m-%d | %H:%M")
|
||||
self._mqtt.publish(PooRecorder.AVAILABILITY_TOPIC, PooRecorder.ONLINE, retain=True)
|
||||
json_string = {"last_poo": formatted_time}
|
||||
self._mqtt.publish(PooRecorder.JSON_TOPIC, json_string, retain=True)
|
||||
|
||||
@staticmethod
|
||||
def compose_config() -> dict:
|
||||
return {
|
||||
"device": {
|
||||
"name": "Dog Poop Recorder",
|
||||
"model": "poop-recorder-backend",
|
||||
"sw_version": Config.VERSION,
|
||||
"identifiers": ["poo_recorder"],
|
||||
"manufacturer": "Studio TJ",
|
||||
},
|
||||
"unique_id": "poo_recorder",
|
||||
"name": "Poo Status",
|
||||
"availability_topic": PooRecorder.AVAILABILITY_TOPIC,
|
||||
"availability_template": "{{ value_json.availability }}",
|
||||
"json_attributes_topic": PooRecorder.JSON_TOPIC,
|
||||
"min": 0,
|
||||
"max": 255,
|
||||
"mode": "text",
|
||||
"command_topic": PooRecorder.COMMAND_TOPIC,
|
||||
"state_topic": PooRecorder.STATE_TOPIC,
|
||||
}
|
||||
Reference in New Issue
Block a user