diff --git a/docs/widgets/services/watchyourlan.md b/docs/widgets/services/watchyourlan.md
new file mode 100644
index 00000000..1d33b334
--- /dev/null
+++ b/docs/widgets/services/watchyourlan.md
@@ -0,0 +1,14 @@
+---
+title: WatchYourLAN
+description: WatchYourLAN Widget Configuration
+---
+
+Learn more about [WatchYourLAN](https://github.com/aceberg/WatchYourLAN).
+
+No specific configuration is required on WatchYourLAN to configure this widget. The API is enabled by default.
+
+```yaml
+widget:
+ type: watchyourlan
+ url: http://your-ip-address:8840
+```
diff --git a/mkdocs.yml b/mkdocs.yml
index fa2188ad..12f4e382 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -160,6 +160,7 @@ nav:
- widgets/services/urbackup.md
- widgets/services/vikunja.md
- widgets/services/watchtower.md
+ - widgets/services/watchyourlan.md
- widgets/services/wgeasy.md
- widgets/services/whatsupdocker.md
- widgets/services/xteve.md
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 1d738089..572fbc4e 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -1010,5 +1010,9 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
+ },
+ "watchyourlan": {
+ "unknown_hosts": "Unknown Hosts",
+ "known_hosts": "Known Hosts"
}
}
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 19f41d4a..523b51c8 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -134,6 +134,7 @@ const components = {
urbackup: dynamic(() => import("./urbackup/component")),
vikunja: dynamic(() => import("./vikunja/component")),
watchtower: dynamic(() => import("./watchtower/component")),
+ watchyourlan: dynamic(() => import("./watchyourlan/component")),
wgeasy: dynamic(() => import("./wgeasy/component")),
whatsupdocker: dynamic(() => import("./whatsupdocker/component")),
xteve: dynamic(() => import("./xteve/component")),
diff --git a/src/widgets/watchyourlan/component.jsx b/src/widgets/watchyourlan/component.jsx
new file mode 100644
index 00000000..c4ae10b1
--- /dev/null
+++ b/src/widgets/watchyourlan/component.jsx
@@ -0,0 +1,39 @@
+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: watchYourLANData, error: watchYourLANError } = useWidgetAPI(widget, "all");
+
+ if (watchYourLANError) {
+ return ;
+ }
+
+ if (!watchYourLANData) {
+ return (
+
+
+
+
+ );
+ }
+
+ return (
+
+ item.Known != 1).length })}
+ />
+ item.Known == 1).length })}
+ />
+
+ );
+}
diff --git a/src/widgets/watchyourlan/widget.js b/src/widgets/watchyourlan/widget.js
new file mode 100644
index 00000000..f8107151
--- /dev/null
+++ b/src/widgets/watchyourlan/widget.js
@@ -0,0 +1,14 @@
+import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
+
+const widget = {
+ api: "{url}/api/{endpoint}",
+ proxyHandler: credentialedProxyHandler,
+
+ mappings: {
+ all: {
+ endpoint: "all",
+ },
+ },
+};
+
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 9d4bb935..cd7368b8 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -124,6 +124,7 @@ import uptimekuma from "./uptimekuma/widget";
import uptimerobot from "./uptimerobot/widget";
import vikunja from "./vikunja/widget";
import watchtower from "./watchtower/widget";
+import watchyourlan from "./watchyourlan/widget";
import wgeasy from "./wgeasy/widget";
import whatsupdocker from "./whatsupdocker/widget";
import xteve from "./xteve/widget";
@@ -263,6 +264,7 @@ const widgets = {
urbackup,
vikunja,
watchtower,
+ watchyourlan,
wgeasy,
whatsupdocker,
xteve,