mirror of
https://github.com/karl0ss/homepage.git
synced 2025-04-29 12:03:41 +01:00
working wled logic
This commit is contained in:
parent
74a52d9288
commit
8c2f00d6a3
@ -770,7 +770,7 @@
|
|||||||
"ping": "Ping"
|
"ping": "Ping"
|
||||||
},
|
},
|
||||||
"urbackup": {
|
"urbackup": {
|
||||||
"ok" : "Ok",
|
"ok": "Ok",
|
||||||
"errored": "Errors",
|
"errored": "Errors",
|
||||||
"noRecent": "Out of Date",
|
"noRecent": "Out of Date",
|
||||||
"totalUsed": "Used Storage"
|
"totalUsed": "Used Storage"
|
||||||
@ -825,5 +825,9 @@
|
|||||||
"netdata": {
|
"netdata": {
|
||||||
"warnings": "Warnings",
|
"warnings": "Warnings",
|
||||||
"criticals": "Criticals"
|
"criticals": "Criticals"
|
||||||
|
},
|
||||||
|
"wled": {
|
||||||
|
"deviceName": "Device Name",
|
||||||
|
"deviceState": "Device State"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -110,6 +110,7 @@ const components = {
|
|||||||
urbackup: dynamic(() => import("./urbackup/component")),
|
urbackup: dynamic(() => import("./urbackup/component")),
|
||||||
watchtower: dynamic(() => import("./watchtower/component")),
|
watchtower: dynamic(() => import("./watchtower/component")),
|
||||||
whatsupdocker: dynamic(() => import("./whatsupdocker/component")),
|
whatsupdocker: dynamic(() => import("./whatsupdocker/component")),
|
||||||
|
wled: dynamic(() => import("./wled/component")),
|
||||||
xteve: dynamic(() => import("./xteve/component")),
|
xteve: dynamic(() => import("./xteve/component")),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,6 +104,7 @@ import whatsupdocker from "./whatsupdocker/widget";
|
|||||||
import xteve from "./xteve/widget";
|
import xteve from "./xteve/widget";
|
||||||
import urbackup from "./urbackup/widget";
|
import urbackup from "./urbackup/widget";
|
||||||
import romm from "./romm/widget";
|
import romm from "./romm/widget";
|
||||||
|
import wled from "./wled/widget";
|
||||||
|
|
||||||
const widgets = {
|
const widgets = {
|
||||||
adguard,
|
adguard,
|
||||||
@ -214,6 +215,7 @@ const widgets = {
|
|||||||
watchtower,
|
watchtower,
|
||||||
whatsupdocker,
|
whatsupdocker,
|
||||||
xteve,
|
xteve,
|
||||||
|
wled
|
||||||
};
|
};
|
||||||
|
|
||||||
export default widgets;
|
export default widgets;
|
||||||
|
36
src/widgets/wled/component.jsx
Normal file
36
src/widgets/wled/component.jsx
Normal 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
36
src/widgets/wled/proxy.js
Normal 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);
|
||||||
|
}
|
14
src/widgets/wled/widget.js
Normal file
14
src/widgets/wled/widget.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import wledProxyHandler from "./proxy";
|
||||||
|
|
||||||
|
const widget = {
|
||||||
|
api: "{url}/{endpoint}",
|
||||||
|
proxyHandler: wledProxyHandler,
|
||||||
|
|
||||||
|
mappings: {
|
||||||
|
api: {
|
||||||
|
endpoint: "json/",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default widget;
|
Loading…
x
Reference in New Issue
Block a user