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.
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.
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.
Michael
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.
Ich glaube jeder hat mal einen schlechten Tag, ich habe meine jetzt aufgebraucht.
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.
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!
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 ).
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…
Weiß auch nicht was heute los ist.
Ja das tut er, jetzt nimmst du mich aber auseinander. Ich brauch nur auf $data[„status“] prüfen und wenn dort enabled drin steht, die Bool Variable auf true setzen! Sonst auf false…
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.
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 />