From 64e8245542d91641e5fa8ad3bde9e38ef8f7efd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20Kr=C3=B6ger?= Date: Tue, 26 Sep 2023 22:02:41 +0200 Subject: [PATCH] Add OpenDTU Widget (#2069) * add opendtu widget * optimize widget * Revert de translation files --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- public/locales/en/common.json | 6 ++++ src/widgets/components.js | 1 + src/widgets/opendtu/component.jsx | 48 +++++++++++++++++++++++++++++++ src/widgets/opendtu/widget.js | 8 ++++++ src/widgets/widgets.js | 2 ++ 5 files changed, 65 insertions(+) create mode 100644 src/widgets/opendtu/component.jsx create mode 100644 src/widgets/opendtu/widget.js diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 9a6da7a45..16648977b 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -529,6 +529,12 @@ "streams_active": "Active Streams", "streams_xepg": "XEPG Channels" }, + "opendtu": { + "yieldDay": "Today", + "absolutePower": "Power", + "relativePower": "Power %", + "limit": "Limit" + }, "opnsense": { "cpu": "CPU Load", "memory": "Active Memory", diff --git a/src/widgets/components.js b/src/widgets/components.js index 4ed79044b..660444065 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -61,6 +61,7 @@ const components = { octoprint: dynamic(() => import("./octoprint/component")), omada: dynamic(() => import("./omada/component")), ombi: dynamic(() => import("./ombi/component")), + opendtu: dynamic(() => import("./opendtu/component")), opnsense: dynamic(() => import("./opnsense/component")), overseerr: dynamic(() => import("./overseerr/component")), openmediavault: dynamic(() => import("./openmediavault/component")), diff --git a/src/widgets/opendtu/component.jsx b/src/widgets/opendtu/component.jsx new file mode 100644 index 000000000..bd7c9fd85 --- /dev/null +++ b/src/widgets/opendtu/component.jsx @@ -0,0 +1,48 @@ +import { useTranslation } from "next-i18next"; + +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 { t } = useTranslation(); + + const { widget } = service; + + const { data: opendtuData, error: opendtuError } = useWidgetAPI(widget); + + if (opendtuError) { + return ; + } + + if (!opendtuData) { + return ( + + + + + + + ); + } + + const yieldDay = opendtuData.total.YieldDay.v + const yieldDayUnit = opendtuData.total.YieldDay.u + + const power = opendtuData.total.Power.v + const powerUnit = opendtuData.total.Power.u + + const totalLimit = opendtuData.inverters.map(inverter => inverter.limit_absolute).reduce((a,b) => a+b); + const totalLimitUnit = "W" + + const powerPercentage = (power / totalLimit) * 100 + + return ( + + + + + + + ); +} diff --git a/src/widgets/opendtu/widget.js b/src/widgets/opendtu/widget.js new file mode 100644 index 000000000..f0ac2cc6f --- /dev/null +++ b/src/widgets/opendtu/widget.js @@ -0,0 +1,8 @@ +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/api/livedata/status", + proxyHandler: genericProxyHandler, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index a2b97dd37..6bc682dad 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -55,6 +55,7 @@ import nzbget from "./nzbget/widget"; import octoprint from "./octoprint/widget"; import omada from "./omada/widget"; import ombi from "./ombi/widget"; +import opendtu from "./opendtu/widget"; import opnsense from "./opnsense/widget"; import overseerr from "./overseerr/widget"; import openmediavault from "./openmediavault/widget"; @@ -156,6 +157,7 @@ const widgets = { octoprint, omada, ombi, + opendtu, opnsense, overseerr, openmediavault,