]> git.immae.eu Git - github/bastienwirtz/homer.git/commitdiff
Fixed OctoPrint ‘text’ display when idle. (#607)
authorZach Russell <zachatrocity@gmail.com>
Tue, 2 May 2023 07:27:27 +0000 (01:27 -0600)
committerGitHub <noreply@github.com>
Tue, 2 May 2023 07:27:27 +0000 (09:27 +0200)
* Added moonraker support and temperature when idle

* removed config change

* Delete package-lock.json

docs/customservices.md
dummy-data/octoprint/api/printer [new file with mode: 0644]
src/components/services/OctoPrint.vue

index 31d302ba1d34d6a88b801bf8066a5f54a7076a07..665c6f59ada4feac28fd9995324de22d70364bae 100644 (file)
@@ -31,7 +31,7 @@ within Homer:
   - [Speedtest Tracker](#SpeedtestTracker)
   - [What's Up Docker](#whats-up-docker)
   - [SABnzbd](#sabnzbd)
-  - [OctoPrint](#sabnzbd)
+  - [OctoPrint](#octoprint)
   - [Tdarr](#tdarr)
 
 If you experiencing any issue, please have a look to the [troubleshooting](troubleshooting.md) page.
@@ -384,15 +384,17 @@ the "Config" > "General" section of the SABnzbd config in the SABnzbd web UI.
   downloadInterval: 5000 # (Optional) Interval (in ms) for updating the download count
 ```
 
-## OctoPrint
+## OctoPrint/Moonraker
 
-The OctoPrint service only needs an `apikey` & `url` and optionally a `display` option.
+The OctoPrint/Moonraker service only needs an `apikey` & `endpoint` and optionally a `display` or `url` option. `url` can be used when you click on the service it will launch the `url`
+
+Moonraker's API mimmicks a few of OctoPrint's endpoints which makes these services compatible. See https://moonraker.readthedocs.io/en/latest/web_api/#octoprint-api-emulation for details.
 
 ```yaml
 - name: "Octoprint"
   logo: "https://cdn-icons-png.flaticon.com/512/3112/3112529.png"
-  apikey: "xxxxxxxxxxxx" # insert your own API key here. Request one from https://openweathermap.org/api.
-  url: "http://192.168.0.151:8080"
+  apikey: "xxxxxxxxxxxx" # insert your own API key here.
+  endpoint: "http://192.168.0.151:8080"
   display: "text" # 'text' or 'bar'. Default to `text`.
   type: "OctoPrint"
 ```
diff --git a/dummy-data/octoprint/api/printer b/dummy-data/octoprint/api/printer
new file mode 100644 (file)
index 0000000..b8bbe98
--- /dev/null
@@ -0,0 +1,27 @@
+{
+    "temperature": {
+        "bed": {
+            "actual": 20.52,
+            "offset": 0,
+            "target": 0.0
+        },
+        "tool0": {
+            "actual": 20.44,
+            "offset": 0,
+            "target": 0.0
+        }
+    },
+    "state": {
+        "text": "Operational",
+        "flags": {
+            "operational": true,
+            "paused": false,
+            "printing": false,
+            "cancelling": false,
+            "pausing": false,
+            "error": false,
+            "ready": true,
+            "closedOrError": false
+        }
+    }
+}
\ No newline at end of file
index c5da8d9e4ac76657c81745fde076ceff4bc534e4..1428d9a2a1f26b8d4e5c33b3320414e36efb9140 100644 (file)
@@ -6,7 +6,7 @@
         <template v-if="item.subtitle && !state">
           {{ item.subtitle }}
         </template>
-        <template v-if="!error && display == 'text'">
+        <template v-if="!error && display == 'text' && statusClass == 'in-progress'">
           <i class="fa-solid fa-gear mr-1"></i>
           <b v-if="completion">{{ completion.toFixed() }}%</b>
           <span class="separator mx-1"> | </span>
             {{ toTime(printTime) }}
           </span>
         </template>
+        <template v-if="!error && display == 'text' && statusClass == 'ready'">
+          <i class="fa-solid fa-temperature-half mr-1"></i>
+          <b v-if="printer.temperature.bed">{{ printer.temperature.bed.actual.toFixed() }} C</b>
+          <span class="separator mx-1"> | </span>
+          <b v-if="printer.temperature.tool0">{{ printer.temperature.tool0.actual.toFixed() }} C</b>
+        </template>
         <template v-if="!error && display == 'bar'">
           <progress
             v-if="completion"
@@ -55,6 +61,7 @@ export default {
     printTimeLeft: null,
     completion: null,
     state: null,
+    printer: null,
     error: null,
   }),
   computed: {
@@ -73,6 +80,7 @@ export default {
   },
   created() {
     this.display = this.item.display == "bar" ? this.item.display : "text";
+    this.fetchPrinterStatus();
     this.fetchStatus();
   },
   methods: {
@@ -89,6 +97,16 @@ export default {
         console.error(e);
       }
     },
+    fetchPrinterStatus: async function () {
+      try {
+        const response = await this.fetch(`api/printer?apikey=${this.item.apikey}`);
+        this.printer = response;
+        this.error = response.error;
+      } catch (e) {
+        this.error = `Fail to fetch octoprint data (${e.message})`;
+        console.error(e);
+      }
+    },
     toTime: function (timastamp) {
       return new Date(timastamp * 1000).toTimeString().substring(0, 5);
     },