Merge branch 'WLED' into LocalMain

This commit is contained in:
Karl Hudgell 2024-02-08 13:05:33 +00:00
commit 0c010a32d4
6 changed files with 96 additions and 3 deletions

View File

@ -845,10 +845,13 @@
"romm": {
"platforms": "Platforms",
"totalRoms": "Total ROMs"
}
,
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
},
"wled": {
"deviceName": "Device Name",
"deviceState": "Device State"
}
}

View File

@ -114,6 +114,7 @@ const components = {
watchtower: dynamic(() => import("./watchtower/component")),
whatsupdocker: dynamic(() => import("./whatsupdocker/component")),
wgeasy: dynamic(() => import("./wgeasy/component")),
wled: dynamic(() => import("./wled/component")),
xteve: dynamic(() => import("./xteve/component")),
};

View File

@ -108,6 +108,8 @@ import wgeasy from "./wgeasy/widget";
import xteve from "./xteve/widget";
import jdrssdownloader from "./jdrssdownloader/widget";
import urbackup from "./urbackup/widget";
import romm from "./romm/widget";
import wled from "./wled/widget";
const widgets = {
adguard,
@ -222,6 +224,7 @@ const widgets = {
whatsupdocker,
wgeasy,
xteve,
wled
};
export default widgets;

View File

@ -0,0 +1,36 @@
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { widget } = service;
const { data: wledData, error: wledError } = useWidgetAPI(widget, "api");
if (wledError) {
return <Container service={service} error={wledError} />;
}
if (!wledData) {
return (
<Container service={service}>
<Block label="wled.deviceName" />
<Block label="wled.deviceState " />
</Container>
);
}
let state
if (wledData.state.on === 1){
state = "On";
} else {
state = "Off";
}
return (
<Container service={service}>
<Block label="wled.deviceName" value= {wledData.info.name} />
<Block label="wled.deviceState" value={state} />
</Container>
);
}

36
src/widgets/wled/proxy.js Normal file
View File

@ -0,0 +1,36 @@
import { formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
import createLogger from "utils/logger";
import widgets from "widgets/widgets";
import getServiceWidget from "utils/config/service-helpers";
const logger = createLogger("wledProxyHandler");
export default async function wledProxyHandler(req, res) {
const { group, service, endpoint } = req.query;
if (!group || !service) {
return res.status(400).json({ error: "Invalid proxy service type" });
}
const widget = await getServiceWidget(group, service);
const api = widgets?.[widget.type]?.api;
if (!api) {
return res.status(403).json({ error: "Service does not support API calls" });
}
const url = formatApiCall(api, { endpoint, ...widget });
const method = "GET";
const [status, contentType, data] = await httpProxy(url, {
method,
});
if (status !== 200) {
logger.debug("Error %d calling wled endpoint %s", status, url);
return res.status(status).json({ error: { message: `HTTP Error ${status}`, url, data } });
}
if (contentType) res.setHeader("Content-Type", contentType);
return res.status(status).send(data);
}

View File

@ -0,0 +1,14 @@
import wledProxyHandler from "./proxy";
const widget = {
api: "{url}/{endpoint}",
proxyHandler: wledProxyHandler,
mappings: {
api: {
endpoint: "json/",
},
},
};
export default widget;