From 730a6a3950b751cb9177c6cabce0e5541de0fa91 Mon Sep 17 00:00:00 2001
From: Reid 'arrdem' McKenzie <me@arrdem.com>
Date: Mon, 19 Jun 2023 23:24:39 -0600
Subject: [PATCH] Use the bedready plugin to check if the bed is clear or
 occupied

---
 .../tentacles/src/python/tentacles/workers.py | 23 ++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/projects/tentacles/src/python/tentacles/workers.py b/projects/tentacles/src/python/tentacles/workers.py
index ec0024d..90f599f 100644
--- a/projects/tentacles/src/python/tentacles/workers.py
+++ b/projects/tentacles/src/python/tentacles/workers.py
@@ -69,6 +69,24 @@ def poll_printers(app: App, db: Db) -> None:
                 log.info(f"Printer {printer.id} {printer.status} -> {status}")
             db.update_printer_status(pid=printer.id, status=status)
 
+        def _bed_clear():
+            if not (
+                snapshots := client._post(
+                    "/api/plugin/bedready", json={"command": "list_snapshots"}
+                )
+            ):
+                return True  # Assume the bed is ready
+
+            status = client._post(
+                "/api/plugin/bedready",
+                json={
+                    "command": "check_bed",
+                    "similarity": 0.97,
+                    "reference": snapshots[0],
+                },
+            )
+            return status.get("bed_clear", True)
+
         printer_job = {}
         try:
             client = get_client(printer.url, printer.api_key)
@@ -98,7 +116,10 @@ def poll_printers(app: App, db: Db) -> None:
                 _set_status("connecting")
 
             elif printer_state.get("ready"):
-                _set_status("idle")
+                if _bed_clear():
+                    _set_status("idle")
+                else:
+                    _set_status("occupied")
 
             else:
                 raise Exception(