This commit is contained in:
Karl Hudgell 2023-09-20 17:39:58 +01:00
parent c439661a93
commit 5ba3bd046f
3 changed files with 84 additions and 11 deletions

View File

@ -8,24 +8,29 @@ export default function Component({ service }) {
const { widget } = service;
const { data: printerStats, error: printerStatsError } = useWidgetAPI(widget, "printer_stats");
const { data: jobStats, error: jobStatsError } = useWidgetAPI(widget, "job_stats");
// const { data: jobStats, error: jobStatsError } = useWidgetAPI(widget, "job_stats");
if (printerStatsError) {
const msg = JSON.parse(Buffer.from(printerStatsError.resultData.data).toString());
let msg
try {
msg = JSON.parse(Buffer.from(printerStatsError.resultData.data).toString()).error;
} catch (error) {
msg = 'Octoprint Not Found'
}
return (
<Container service={service}>
<Block label="OFFLINE" value={msg.error} />
<Block label="Error" value={msg} />
</Container>
);
}
if (jobStatsError) {
return <Container service={service} error={jobStatsError} />;
}
// if (jobStatsError) {
// return <Container service={service} error={jobStatsError} />;
// }
const state = printerStats?.state?.text;
const tempTool = printerStats?.temperature?.tool0?.actual;
const tempBed = printerStats?.temperature?.bed?.actual;
const state = printerStats[1].Status;
const tempTool = printerStats[1].Temp.Tool;
const tempBed = printerStats[1].Temp.Bed;
if (!printerStats || !state || !tempTool || !tempBed) {
return (

View File

@ -0,0 +1,68 @@
import getServiceWidget from "utils/config/service-helpers";
import { httpProxy } from "utils/proxy/http";
import createLogger from "utils/logger";
const proxyName = "octoprintProxyHandler";
const logger = createLogger(proxyName);
async function getWidget(req) {
const { group, service } = req.query;
if (!group || !service) {
logger.debug("Invalid or missing service '%s' or group '%s'", service, group);
return null;
}
const widget = await getServiceWidget(group, service);
if (!widget) {
logger.debug("Invalid or missing widget for service '%s' in group '%s'", service, group);
return null;
}
return widget;
}
//http://192.168.4.200/api/printer?apikey=97F8AA6805FD428E8395C8E5E805D01A
async function printer_stats(params) {
const path = `/api/printer?apikey=${params.key}`;
const url = `${new URL(`${params.url}${path}`)}`
const [status, , data] = await httpProxy(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (status !== 200) {
logger.error("HTTP %d communicating with jdownloader. Data: %s", status, data.toString());
return [status, data];
}
try {
const decryptedData = JSON.parse(data)
return [status, {
"Status": decryptedData.state.text,
"Flags": decryptedData.state.flags,
"Temp":{
"Tool": decryptedData.temperature.tool0.actual,
"Bed": decryptedData.temperature.bed.actual
}
}];
} catch (e) {
logger.error("Error decoding jdownloader API data. Data: %s", data.toString());
return [status, null];
}
}
export default async function octoprintProxyHandler(req, res) {
const widget = await getWidget(req);
if (!widget) {
return res.status(400).json({ error: "Invalid proxy service type" });
}
logger.debug("Getting data from JDRss API");
const d = await printer_stats(widget)
return res.send(d);
}

View File

@ -1,8 +1,8 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
import octoprintProxyHandler from "./proxy";
const widget = {
api: "{url}/api/{endpoint}?apikey={key}",
proxyHandler: genericProxyHandler,
proxyHandler: octoprintProxyHandler,
mappings: {
printer_stats: {