[Modul] PiHole

Version Version License Check Style

PiHole

Bindet einen Pi-hole (ab Version 6) über dessen REST-API in IP-Symcon ein. Ein Splitter hält die Verbindung, einzelne Instanzen bilden die Bereiche der API ab.

Funktionen

  • Konfigurator, der alle Instanztypen anbietet, vorhandene markiert und fehlende am Splitter anlegt
  • Blocking ein- und ausschalten, auch zeitlich begrenzt, mit Restzeit als Variable
  • Kacheln für die Kachel-Visualisierung: Blocking pausieren per Klick, Statistik mit Verlauf und Top-Listen, Systemzustand, Netzwerk, Filter und Wartungsaktionen
  • Statistik des Pi-holes als Variablen, dazu Top-Listen, Verlauf und DNS-Abfragen für Skripte
  • Systemzustand, Auslastung, Temperatur, Versionen, Diagnosemeldungen und Logs
  • Wartung: Gravity aktualisieren, DNS neu starten, Caches und Logs leeren, Teleporter-Backup
  • Verwaltung von Domains, Gruppen, Clients und Blocklisten, dazu Suche in den Listen
  • Netzwerkgeräte, Routen, Schnittstellen und DHCP-Leases
  • Lesen und Ändern der Pi-hole Konfiguration per Skript
  • Anmeldung mit Passwort oder App-Passwort (auch bei aktivierter 2FA), HTTPS, eine gemeinsame Sitzung für alle Instanzen
  • Jeder Endpunkt der API ist über die Funktion PIHSPL_Request des Splitters erreichbar

Enthaltene Instanzen

  • PiHole Splitter: Verbindung zur API mit Anmeldung, Sitzung und Weiterreichen der Anfragen. Alle anderen Instanzen brauchen ihn als übergeordnete Instanz.
  • PiHole Configurator: Zeigt alle Instanztypen, markiert die vorhandenen und legt fehlende mit dem Splitter verbunden an.
  • PiHole Statistics: Statistik des Pi-holes als Variablen, dazu Top-Listen, Verlauf und DNS-Abfragen für Skripte.
  • PiHole DNS: Schaltet das Blocking ein und aus, auch zeitlich begrenzt.
  • PiHole System: Auslastung, Temperatur, Versionen und Diagnosemeldungen, dazu Logs und Systeminformationen.
  • PiHole Maintenance: Gravity aktualisieren, DNS neu starten, Caches und Logs leeren, Teleporter-Backup.
  • PiHole Filters: Verwaltung von Domains, Gruppen, Clients und Blocklisten, dazu Suche in den Listen.
  • PiHole Network: Netzwerkgeräte, Routen, Schnittstellen und DHCP-Leases.
  • PiHole Config: Lesen und Ändern der Pi-hole Konfiguration per Skript.

Screenshots

Voraussetzungen

  • IP-Symcon 8.1 oder neuer
  • Pi-hole ab Version 6 (REST-API)
  • Passwort oder App-Passwort des Pi-holes (entfällt, wenn kein Passwort gesetzt ist)

Installation

Die Installation erfolgt über den Module Store.

Dokumentation und Changelog

Die Konfiguration, die Variablen und die Funktionen stehen in der README auf GitHub.

Das Changelog steht im zweiten Beitrag dieses Threads.

Spenden

Dieses Modul ist für die nicht kommerzielle Nutzung kostenlos. Schenkungen als Unterstützung für den Autor werden gerne angenommen:

PayPal Amazon Wunschzettel

Wünsche und Rückmeldungen gerne hier im Thread. :slight_smile:

Grüße,
Kai

Changelog

09.10.2026 - Version 2.0

Neu

  • Komplett neu aufgebaut für die REST-API von Pi-hole v6 (die alte api.php entfällt).
  • PiHole Splitter: Anmeldung per Passwort oder App-Passwort, eine gemeinsame Sitzung für alle Instanzen, HTTPS, Funktion PIHSPL_Request für beliebige Endpunkte.
  • Neue Instanzen: Statistics, DNS, System, Maintenance, Filters, Network und Config. Zusammen bilden sie die gesamte API ab.
  • PiHole Configurator: Zeigt alle Instanztypen, markiert vorhandene und legt fehlende per Klick am Splitter an.
  • Kacheln für die Kachel-Visualisierung bei DNS (Blocking per Klick pausieren und fortsetzen, mit Restzeit), Statistics (Anteil geblockt, 24-Stunden-Verlauf, Top-Listen), System (Auslastung, Temperatur, Versionen), Network, Filters und Maintenance (Wartungsaktionen per Klick).
  • Die Instanzen lesen ihre Werte direkt nach dem Anlegen und nach dem Speichern, nicht erst im nächsten Intervall.
  • Blocking mit Timer, Restzeit und Statistik als Variablen mit nativen Darstellungen.
  • Teleporter-Backup, Verwaltung von Domains, Gruppen, Clients und Listen, DHCP-Leases, Konfiguration.

Fixes

  • Das Modul funktioniert wieder mit Pi-hole v6.
  • Achtung: Die frühere Instanz „PiHole“ und der API Token entfallen. Instanzen müssen neu angelegt werden, die Zugangsdaten stehen im Splitter.

09.02.2022 - Version 1.6
Fix: Die Statusvariable funktionierte mit den neueren Pi-hole Versionen nicht mehr richtig.
Fix: Interne Funktionen umgestellt

15.02.2019 - Version 1.5
Fix: GUID

17.08.2018 - Version 1.5
Neu: Abfragen zwischengespeichert
Neu: Gesamte DNS Abfragen
Neu: Gravitiy zuletzt aktualisiert

16.08.2018 - Version 1.4
Neu: Übersetzungen hinzugefügt
Neu: Variable prozentualer Anteil heute gesperrter Seiten hinzugefügt

15.08.2018 - Version 1.3
Fix: Redundanten Code rausgeworfen
Fix: Überprüfung ob Request Rückgabewert ungleich NULL ist

14.08.2018 - Version 1.2
Fix: Update Timer
Fix: Error Handling (Meldung wird im Webfront ausgegeben), falls Pi-hole nicht erreichbar ist.

14.08.2018 - Version 1.1
Fix: Wenn keine IP angegeben ist wird der Timer nicht aktiviert.
Fix: Fehlermeldung im Debug, wenn keine Verbindung zur API hergestellt werden kann.
Fix: IP und Port Namen geändert.

1 „Gefällt mir“

Erzeugt im nicht konfigurierten Zustand, bereits während der Einrichtung

14.08.2018 23:23:19*| TimerPool*| Pi-hole (Pih_updateStatus): <br />
<b>Warning</b>:  file_get_contents(http://:80/admin/api.php?status&auth=): failed to open stream: operation failed in <b>/var/lib/symcon/modules/IPS-PiHole/IPS-PiHole/module.php</b> on line <b>45</b><br />
<br />
<b>Warning</b>:  file_get_contents(http://:80/admin/api.php?summaryRaw&auth=): failed to open stream: operation failed in <b>/var/lib/symcon/modules/IPS-PiHole/IPS-PiHole/module.php</b> on line <b>45</b><br />

Und Copy&Paste Fehler „TV Headend Settings“ im Formular ;).

Keine Fehlerbehandlung bei file_get_contents und aktivieren des Intervall auch wenn PihIP (warum nicht ‚Host‘ wie bei anderen Modulen?) nicht gesetzt ist.
Was war den da los Kai? Solche Fehler machst du doch sonst nicht. :wink:
Michael

Und die IP darauf prüfen, dass es eine IP ist ;). Der blöde Anwender hat eine URL mit http:// eingetragen, ich kann auch copy&paste Error :banghead:.

Hallo,

hm oh Gott! Sorry.
Wird natürlich korrigiert…
Keine Ahnung was da los war… Hab mich schon gewundert, wieso bei mir beim testen keine Fehler gekommen sind. :smiley:

Ich glaube jeder hat mal einen schlechten Tag, ich habe meine jetzt aufgebraucht. :smiley:

Grüße,
Kai

Sorry, ich musste sofort installieren, da mich das ständige Einloggen und Deaktivieren genervt hat. Speziell bei meiner Tageszeitung sorgt pi-hole für extreme Ladezeiten, die haben irgendeinen Werbemist drin, der das Laden der Seite extrem verzögert.

Mein erster Versuch mit einem file_get… auf die URL der API liegt schon in einem Testscript :eek:.

Beim Aus- und Einschalten solltest du den Status auch direkt setzen und nicht erst die Rückmeldung abwarten, dann vergehen „Intervall“-Sekunden bis die Anzeige stimmt.

Hallo,

so Version 1.1 ist online.
Naja, wenn ich schalte, dauert es wirklich so lange, zumindest bei mir. Erst wenn der Status wirklich un IPS umspringt ist auch der Dienst gestoppt!

Grüße,
Kai

Ganz schlechte Idee.
Was ist mit Hostnamen?
Auf leer prüfen reicht.

Das hat er aktuell in RequestAction.
Dort ist das aber falsch.
Das muss in setStatus (eigentlich fangen InstanzFunktionen mit einem großen Buchstaben an; da SetStatus schon vergeben ist, schlage ich SetActive vor. Und für getStatus ist RequestState auch quasi IPS Standard :wink: ).
Und liefert der Response nicht zurück ob das starten/stoppen erfolgreich war?
Dies kann man bestimmt nutzen um die Variable zu setzen oder einen Fehler auszugeben.
Michael

Es ist einfach zu spät, natürlich gehört das in setStatus()…
Und auch das Thema hatten wir schon, das man setStatus() nicht nutzen sollte… :banghead::banghead::banghead::banghead:

Weiß auch nicht was heute los ist. :confused:

Ja das tut er, jetzt nimmst du mich aber auseinander. :smiley: Ich brauch nur auf $data[„status“] prüfen und wenn dort enabled drin steht, die Bool Variable auf true setzen! Sonst auf false…

Grüße,
Kai

Jep :smiley:
Gute Nacht,
Michael

Ihr habt recht, aber … :smiley:

15.08.2018 00:15:28 | PHPLibrary | Parameter value in function Pih_setStatus has no type hint. Please use either 'bool', 'int', 'float' or 'string'.

direkt nach dem Modulupdate.

Das weiß ich, muss ich bei allen Modulen noch anpassen. :slight_smile:

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Beim Update wurde die IP gelöscht :eek: und ich wundere mich bei mehreren Versuchen, warum nicht ein-/ausgeschaltet wird.

Hallo,

ja, weil ich die Namen (Host und Port) angepasst habe.

Grüße,
Kai

Hallo,

so die Type Hints sind auch drin, redundanten Code habe ich rausgeworfen und die Request Abfrage bzw. das Ergebnis davon wird jetzt auf ungleich NULL überprüft.

Grüße,
Kai

Hallo Kai,

klasse - das klingt sehr interessant - lässt du PI-hole auf dem selben PI laufen wie ip-symcon?

Irgendwie ärgere ich mich immer wieder, dass der symcon-pi nur vor sich hindümpelt und würde ihn gern mehr machen lassen.

Gruß Steffan

Hallo,

das funktioniert.
Allerdings hatte ich Probleme Pi-hole auf einem Pi zu installieren, wo schon piVCCU lief.

Grüße,
Kai


15.08.2018 14:48:06 | ScriptEngine | Result for Event 16804
<br />
<b>Fatal error</b>:  Uncaught Error: Call to protected method IPSModule::setStatus() from context '' in /var/lib/symcon/scripts/__generated.inc.php:23
Stack trace:
#0 /var/lib/symcon/scripts/59385.ips.php(10): Pih_setStatus(24462, false)
#1 {main}
  thrown in <b>/var/lib/symcon/scripts/__generated.inc.php</b> on line <b>23</b><br />

beim Versuch zu Schalten

Pih_setStatus(24462 /*[IT\PI-Hole\Pi-hole]*/, true);