diff --git a/README.md b/README.md
index 11c67fb7..8c820fa6 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@
- **Getting Started**
- [π Features](#features-)
- - [β‘Demo](#demo-)
+ - [β‘ Demo](#demo-)
- [π Getting Started](#getting-started-)
- [π§ Configuring](#configuring-)
- **Feature Overview**
diff --git a/docs/widgets.md b/docs/widgets.md
index 1749ec85..de637eb8 100644
--- a/docs/widgets.md
+++ b/docs/widgets.md
@@ -47,9 +47,12 @@ Dashy has support for displaying dynamic content in the form of widgets. There a
- [CPU History](#cpu-history-netdata)
- [Memory History](#memory-history-netdata)
- [System Load History](#load-history-netdata)
- - [Pi Hole Stats](#pi-hole-stats)
- - [Pi Hole Queries](#pi-hole-queries)
- - [Pi Hole Recent Traffic](#pi-hole-recent-traffic)
+ - [Pi-Hole Stats](#pi-hole-stats)
+ - [Pi-Hole Stats v6](#pi-hole-stats-v6)
+ - [Pi-Hole Queries](#pi-hole-queries)
+ - [Pi-Hole Queries v6](#pi-hole-queries-v6)
+ - [Pi-Hole Recent Traffic](#pi-hole-recent-traffic)
+ - [Pi-Hole Recent Traffic v6](#pi-hole-recent-traffic-v6)
- [Stat Ping Statuses](#stat-ping-statuses)
- [Synology Download Station](#synology-download-station)
- [AdGuard Home Block Stats](#adguard-home-block-stats)
@@ -1722,7 +1725,7 @@ Pull recent load usage in 1, 5 and 15 minute intervals, from NetData.
---
-### Pi Hole Stats
+### Pi-Hole Stats
Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/).
@@ -1763,12 +1766,58 @@ Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/).
- **CORS**: π’ Enabled
- **Auth**: π΄ Required
- **Price**: π’ Free
-- **Host**: Self-Hosted (see [GitHub - Pi-hole](https://github.com/pi-hole/pi-hole))
+- **Host**: Self-Hosted (see [GitHub - Pi-Hole](https://github.com/pi-hole/pi-hole))
- **Privacy**: _See [Pi-Hole Privacy Guide](https://pi-hole.net/privacy/)_
---
-### Pi Hole Queries
+### Pi-Hole Stats v6
+
+Displays the number of queries blocked by [Pi-Hole](https://pi-hole.net/). Use this version of the widget if you have a v6+ Pi-Hole instance.
+
+

+
+#### Options
+
+**Field** | **Type** | **Required** | **Description**
+--- | --- | --- | ---
+**`hostname`** | `string` | Required | The URL to your Pi-Hole instance
+**`hideStatus`** / **`hideChart`** / **`hideInfo`** | `boolean` | _Optional_ | Optionally hide any of the three parts of the widget
+**`apiKey`** | `string` | Required | Your Pi-Hole web password or application password. It **IS** your Pi-Hole admin interface password **UNLESS** you have 2FA turned on (in contrast to the old widget). If you have 2FA turned on you will need to create an application password. Refer to Pi-Hole documentation for how to create an application password.
+
+#### Example
+
+```yaml
+- type: pi-hole-stats-v6
+ options:
+ hostname: http://192.168.130.1
+ apiKey: xxxxxxxxxxxxxxxxxxxxxxx
+```
+
+> [!TIP]
+> In order to avoid leaking secret data, both `hostname` and `apiKey` can leverage environment variables. Simply pass the name of the variable, which MUST start with `VUE_APP_`.
+
+```yaml
+- type: pi-hole-stats-v6
+ options:
+ hostname: VUE_APP_pihole_ip
+ apiKey: VUE_APP_pihole_key
+```
+
+> [!IMPORTANT]
+> You will need to restart the server (or the docker image) if adding/editing an env var for this to be refreshed.
+
+#### Info
+
+- **CORS**: π’ Enabled
+- **Auth**: π΄ Required
+- **Price**: π’ Free
+- **Host**: Self-Hosted (see [GitHub - Pi-Hole](https://github.com/pi-hole/pi-hole))
+- **Privacy**: _See [Pi-Hole Privacy Guide](https://pi-hole.net/privacy/)_
+
+---
+
+### Pi-Hole Queries
Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net/).
@@ -1801,7 +1850,40 @@ Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net
---
-### Pi Hole Recent Traffic
+### Pi-Hole Queries v6
+
+Shows top queries that were blocked and allowed by [Pi-Hole](https://pi-hole.net/). Use this version of the widget if you have a v6+ Pi-Hole instance.
+
+
+
+#### Options
+
+**Field** | **Type** | **Required** | **Description**
+--- | --- | --- | ---
+**`hostname`** | `string` | Required | The URL to your Pi-Hole instance
+**`apiKey`** | `string` | Required | Your Pi-Hole web password or application password. It **IS** your Pi-Hole admin interface password **UNLESS** you have 2FA turned on (in contrast to the old widget). If you have 2FA turned on you will need to create an application password. Refer to Pi-Hole documentation for how to create an application password.
+**`count`** | `number` | _Optional_ | The number of queries to display. Defaults to `10`
+
+#### Example
+
+```yaml
+- type: pi-hole-top-queries-v6
+ options:
+ hostname: https://pi-hole.local
+ apiKey: xxxxxxxxxxxxxxxxxxxxxxx
+```
+
+#### Info
+
+- **CORS**: π’ Enabled
+- **Auth**: π΄ Required
+- **Price**: π’ Free
+- **Host**: Self-Hosted (see [GitHub - Pi-hole](https://github.com/pi-hole/pi-hole))
+- **Privacy**: _See [Pi-Hole Privacy Guide](https://pi-hole.net/privacy/)_
+
+---
+
+### Pi-Hole Recent Traffic
Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole](https://pi-hole.net/)
@@ -1833,6 +1915,38 @@ Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole]
---
+### Pi-Hole Recent Traffic v6
+
+Shows number of recent traffic, using allowed and blocked queries from [Pi-Hole](https://pi-hole.net/). Use this version of the widget if you have a v6+ Pi-Hole instance.
+
+
+
+#### Options
+
+**Field** | **Type** | **Required** | **Description**
+--- | --- | --- | ---
+**`hostname`** | `string` | Required | The URL to your Pi-Hole instance
+**`apiKey`** | `string` | Required | Your Pi-Hole web password or application password. It **IS** your Pi-Hole admin interface password **UNLESS** you have 2FA turned on (in contrast to the old widget). If you have 2FA turned on you will need to create an application password. Refer to Pi-Hole documentation for how to create an application password.
+
+#### Example
+
+```yaml
+- type: pi-hole-traffic-v6
+ options:
+ hostname: https://pi-hole.local
+ apiKey: xxxxxxxxxxxxxxxxxxxxxxx
+```
+
+#### Info
+
+- **CORS**: π’ Enabled
+- **Auth**: π΄ Required
+- **Price**: π’ Free
+- **Host**: Self-Hosted (see [GitHub - Pi-hole](https://github.com/pi-hole/pi-hole))
+- **Privacy**: _See [Pi-Hole Privacy Guide](https://pi-hole.net/privacy/)_
+
+---
+
### Stat Ping Statuses
Displays the current and recent uptime of your running services, via a self-hosted instance of [StatPing](https://github.com/statping/statping)
diff --git a/src/components/Widgets/PiHoleStats.vue b/src/components/Widgets/PiHoleStats.vue
index fb5aa56d..ef453b46 100644
--- a/src/components/Widgets/PiHoleStats.vue
+++ b/src/components/Widgets/PiHoleStats.vue
@@ -38,7 +38,7 @@ export default {
hostname() {
const usersChoice = this.parseAsEnvVar(this.options.hostname);
if (!usersChoice) this.error('You must specify the hostname for your Pi-Hole server');
- return usersChoice || 'http://pi.hole';
+ return usersChoice;
},
apiKey() {
const usersChoice = this.parseAsEnvVar(this.options.apiKey);
@@ -53,9 +53,7 @@ export default {
hideInfo() { return this.options.hideInfo; },
},
filters: {
- capitalize(str) {
- return capitalize(str);
- },
+ capitalize,
},
methods: {
/* Make GET request to local pi-hole instance */
diff --git a/src/components/Widgets/PiHoleStatsV6.vue b/src/components/Widgets/PiHoleStatsV6.vue
new file mode 100644
index 00000000..7cb3d5aa
--- /dev/null
+++ b/src/components/Widgets/PiHoleStatsV6.vue
@@ -0,0 +1,252 @@
+
+
+
+
+ {{ $t('widgets.pi-hole.status-heading') }}:
+ {{ status | capitalize }}
+
+
+
+
+
+
+
{{ row.lbl }}
+
{{ row.val }}
+
+
+
+
+
+
+
+
diff --git a/src/components/Widgets/PiHoleTopQueries.vue b/src/components/Widgets/PiHoleTopQueries.vue
index b72b2426..39a780a1 100644
--- a/src/components/Widgets/PiHoleTopQueries.vue
+++ b/src/components/Widgets/PiHoleTopQueries.vue
@@ -103,5 +103,4 @@ export default {
}
}
}
-
diff --git a/src/components/Widgets/PiHoleTopQueriesV6.vue b/src/components/Widgets/PiHoleTopQueriesV6.vue
new file mode 100644
index 00000000..2da16342
--- /dev/null
+++ b/src/components/Widgets/PiHoleTopQueriesV6.vue
@@ -0,0 +1,159 @@
+
+
+
+
{{ section.title }}
+
+
{{ query.domain }}
+
{{ query.count }}
+
+
+
+
+
+
+
+
diff --git a/src/components/Widgets/PiHoleTrafficV6.vue b/src/components/Widgets/PiHoleTrafficV6.vue
new file mode 100644
index 00000000..5a59eb04
--- /dev/null
+++ b/src/components/Widgets/PiHoleTrafficV6.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
diff --git a/src/components/Widgets/UptimeKuma.vue b/src/components/Widgets/UptimeKuma.vue
index a6995cc6..e7fb312f 100644
--- a/src/components/Widgets/UptimeKuma.vue
+++ b/src/components/Widgets/UptimeKuma.vue
@@ -60,10 +60,10 @@ export default {
},
/* Create authorisation header for the instance from the apiKey */
authHeaders() {
- if (!this.options.apiKey) {
+ if (!this.apiKey) {
return {};
}
- const encoded = window.btoa(`:${this.options.apiKey}`);
+ const encoded = window.btoa(`:${this.apiKey}`);
return { Authorization: `Basic ${encoded}` };
},
},
diff --git a/src/components/Widgets/WidgetBase.vue b/src/components/Widgets/WidgetBase.vue
index f67c72aa..a1efa1cd 100644
--- a/src/components/Widgets/WidgetBase.vue
+++ b/src/components/Widgets/WidgetBase.vue
@@ -103,8 +103,11 @@ const COMPAT = {
'nextcloud-user': 'NextcloudUser',
'nextcloud-user-status': 'NextcloudUserStatus',
'pi-hole-stats': 'PiHoleStats',
+ 'pi-hole-stats-v6': 'PiHoleStatsV6',
'pi-hole-top-queries': 'PiHoleTopQueries',
+ 'pi-hole-top-queries-v6': 'PiHoleTopQueriesV6',
'pi-hole-traffic': 'PiHoleTraffic',
+ 'pi-hole-traffic-v6': 'PiHoleTrafficV6',
'proxmox-lists': 'Proxmox',
'public-holidays': 'PublicHolidays',
'public-ip': 'PublicIp',