Sorry, there's nothing at this address.
+Loading…
+} +else +{ + +Total Jobs
+@_records.Count
+Total Print Time
+@FormatDuration(_totalPrintTime)
+Total Filament (g)
+@_totalFilament.ToString("F0")
+No data recorded yet.
+ } + else + { +| Printer ID | Time | Filament (g) |
|---|---|---|
@id.ToString()[..8]… |
+ @FormatDuration(time) | +@grams.ToString("F1") | +
No jobs recorded yet.
+ } + else + { +| Job | Duration | Date |
|---|---|---|
| @r.JobName | +@FormatDuration(r.Duration) | +@r.Timestamp.ToString("MM/dd HH:mm") | +
@t.Status
+ @if (t.Status == PrinterStatus.Printing && !string.IsNullOrEmpty(t.PrintJobName)) + { +@t.PrintJobName
+ } +| Hotend | +@t.HotendTemp.ToString("F1") / @t.HotendTarget.ToString("F0") °C | +
|---|---|
| Bed | +@t.BedTemp.ToString("F1") / @t.BedTarget.ToString("F0") °C | +
| Chamber | +@t.ChamberTemp.ToString("F1") / @t.ChamberTarget.ToString("F0") °C | +
@t.PrintProgress.ToString("F1") %
+ + Duration: @FormatDuration(t.PrintDuration) + | Filament: @t.FilamentUsed.ToString("F1") mm + +Loading…
+} +else +{ +| Material | +Brand | +Color | +Remaining | +Total | ++ |
|---|---|---|---|---|---|
| @spool.Material | +@spool.Brand | +@spool.Color | +
+
+
+
+
+
+ @spool.RemainingWeightGrams.ToString("F0") g
+ |
+ @spool.TotalWeightGrams.ToString("F0") g | ++ + + | +
Not connected
+ } +Sorry, there's nothing at this address.
+@id.ToString()[..8]…@TruncateId(id)
+/// "EdgeAgent": {
+/// "CameraIntervalSeconds": 10,
+/// "Cameras": [
+/// { "CameraId": "printer-1", "Label": "Ender-3 Cam", "MjpegUrl": "http://192.168.1.10:8080/?action=snapshot" },
+/// { "CameraId": "printer-2", "Label": "Voron Cam", "MjpegUrl": "http://192.168.1.11/webcam/?action=snapshot" }
+/// ]
+/// }
+///
+///
+/// Each camera entry must supply a
+/// builder.Services.AddSingleton<ITelemetryStore>(sp =>
+/// new InfluxDbTelemetryStore(
+/// url: "http://influxdb:8086",
+/// token: "my-api-token",
+/// org: "makerprompt",
+/// bucket: "telemetry",
+/// sp.GetRequiredService<ILogger<InfluxDbTelemetryStore>>()));
+///
+///
+/// Or use environment variables:
+/// INFLUXDB_URL, INFLUXDB_TOKEN, INFLUXDB_ORG, INFLUXDB_BUCKET
+///
+/// CREATE TABLE camera_snapshots (
+/// id INTEGER PRIMARY KEY AUTOINCREMENT,
+/// camera_id TEXT NOT NULL,
+/// label TEXT NOT NULL,
+/// captured_at TEXT NOT NULL, -- ISO-8601 UTC
+/// width INTEGER NOT NULL DEFAULT 0,
+/// height INTEGER NOT NULL DEFAULT 0,
+/// jpeg_data BLOB NOT NULL
+/// );
+/// CREATE INDEX ix_camera_captured ON camera_snapshots (camera_id, captured_at DESC);
+///
+///
+/// Usage
+/// -----
+///
+/// builder.Services.AddSingleton<ICameraSnapshotStore>(sp =>
+/// new SqliteCameraSnapshotStore("Data Source=cameras.db", sp.GetRequiredService<ILogger<SqliteCameraSnapshotStore>>()));
+///
+///
+/// CREATE TABLE telemetry_snapshots (
+/// id INTEGER PRIMARY KEY AUTOINCREMENT,
+/// printer_id TEXT NOT NULL,
+/// captured_at TEXT NOT NULL, -- ISO-8601 UTC
+/// payload TEXT NOT NULL -- JSON-serialised PrinterTelemetry
+/// );
+/// CREATE INDEX ix_telemetry_printer_captured ON telemetry_snapshots (printer_id, captured_at DESC);
+///
+///
+/// The full
+/// builder.Services.AddSingleton<ITelemetryStore>(sp =>
+/// new SqliteTelemetryStore("Data Source=telemetry.db", sp.GetRequiredService<ILogger<SqliteTelemetryStore>>()));
+///
+///