mirror of
				https://github.com/karl0ss/homepage.git
				synced 2025-11-04 00:10:57 +00: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"
 | 
				
			||||||
@ -823,7 +823,11 @@
 | 
				
			|||||||
        "totalRoms": "Total ROMs"
 | 
					        "totalRoms": "Total ROMs"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "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