Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Neuer Adapter pi-hole2 für pihole>=V6

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    223

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Neuer Adapter pi-hole2 für pihole>=V6

Geplant Angeheftet Gesperrt Verschoben Tester
56 Beiträge 10 Kommentatoren 4.3k Aufrufe 14 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • OliverIOO OliverIO

    @BananaJoe

    ok, das kann @MartinP dann testen und Rückmeldung geben.

    Dann könnte man für jede Gruppe einen Bool Datenpunkt anlegen um die zu aktivieren/deaktivieren.
    Falls die Zugehörigkeit zu einer Gruppe darüber bestimmt ob geblockt wird oder nicht könnte man ein sendTo Befehl machen, bei dem ein client dann (ggfs auch zeitbasiert) zwischen Gruppen hin und hergeschoben wird.

    BananaJoeB Online
    BananaJoeB Online
    BananaJoe
    Most Active
    schrieb am zuletzt editiert von
    #47

    @OliverIO Ein Client kann ja auch in mehreren Gruppen sein.
    Theoretisch auch in einer "Keine Filterung" und "Blockiert".
    Was gewinnt weis ich ohne Tests nicht, bei einer Firewall würde blockieren gewinnen oder die Reihenfolge entscheiden.
    Dann bräuchte es das hin und herswitchen zwischen gruppen nicht

    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

    OliverIOO 1 Antwort Letzte Antwort
    0
    • BananaJoeB BananaJoe

      @OliverIO Ein Client kann ja auch in mehreren Gruppen sein.
      Theoretisch auch in einer "Keine Filterung" und "Blockiert".
      Was gewinnt weis ich ohne Tests nicht, bei einer Firewall würde blockieren gewinnen oder die Reihenfolge entscheiden.
      Dann bräuchte es das hin und herswitchen zwischen gruppen nicht

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von OliverIO
      #48

      @BananaJoe

      Aber ist alles Vermutung basierend auf Vermutung.
      Wie gesagt:
      Ausprobieren wie das über die über das Userinterface zu bedienen ist, dann kann man schauen wie man das über die API bewerkstelligt, so das es alle über die üblichen iobroker Methoden einfachst zu bedienen ist und auf Knöpfe/Schalter/etc. zu legen ist.

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      1 Antwort Letzte Antwort
      1
      • BananaJoeB Online
        BananaJoeB Online
        BananaJoe
        Most Active
        schrieb am zuletzt editiert von BananaJoe
        #49

        So, mal eben remote zu Hause drauf und extra getestet,
        Wenn ein Client sowohl in der Default-Gruppe ist (bei der Standardmäßig gefiltert wird) und in einer Gruppe bei der nicht gefiltert wird,
        dann wird trotzdem gefiltert.
        Erst wenn ich ihn aus Default herausnehme geht es.

        Wie üblich gewinnt verbieten vor erlauben

        ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

        1 Antwort Letzte Antwort
        0
        • BananaJoeB Online
          BananaJoeB Online
          BananaJoe
          Most Active
          schrieb am zuletzt editiert von
          #50

          Da hatte ich auch einen Denkfehler. Die Blocklisten sind Gruppen zugeordnet, ist man Mitglied der Gruppe, wird diese auch angewandt.
          Der Trick mit einer Gegenregel / Ausnahme die nur für die Gruppe gilt, funktioniert nicht

          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

          OliverIOO 1 Antwort Letzte Antwort
          0
          • BananaJoeB BananaJoe

            Da hatte ich auch einen Denkfehler. Die Blocklisten sind Gruppen zugeordnet, ist man Mitglied der Gruppe, wird diese auch angewandt.
            Der Trick mit einer Gegenregel / Ausnahme die nur für die Gruppe gilt, funktioniert nicht

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von OliverIO
            #51

            @BananaJoe

            also wird eine funktion benötigt, die einen user von einer gruppe zu einer anderen schiebt. ggfs kann ein user auch in mehreren gruppen aktiv sein um evtl teilweise sperren aufrecht zu erhalten

            default: alles wird gesperrt
            gruppe 1: liste A (windows nach Hause telefonieren)
            gruppe 2: liste B (listen mit google adsense etc. werbung)
            gruppe 3: keine Liste, also keine Sperrung

            Szenario1
            user ist zu beginn in gruppe 1 und 2 um alles ungewünschte zu sperren
            temporär soll user überhaupt keine sperre haben, also wird user von 1 nach 3 gesetzt und 2 gelöscht

            Szenario2
            oder einfach nur von 2 nach 3, 1 bleibt erhalten um nur ein teilweises blocken zu erlauben.
            bspw windows telefoniert nach hause soll immer unterdrückt werden, aber google shopping manchmal deaktiviert werden um auf die gesponsorten links oder produktvorschläge zu klicken

            default ist dann nur der fallback für die clients für die keine bersondere behandlung erfolgen soll.

            @MartinP kannst du das verifizieren ob das für dich passen würde?

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            1 Antwort Letzte Antwort
            1
            • Meister MopperM Online
              Meister MopperM Online
              Meister Mopper
              schrieb am zuletzt editiert von
              #52

              Da die API von Pi-hole v6 nicht den Abruf der insgesamt geblockten unique domains vorsieht, habe ich mich mal mit einer KI auf die Suche gemacht und eine Lösung vermittels Abfrage der sqlite3-Datenbank des Pi-hole gefunden.

              Diese wird mit einem exec-Befehl vermittels Skript initiiert. Das funktioniert natürlich nur, wenn der Systemuser iobroker auch einen passwortfreien ssh-Zugriff vermittels Schlüssel auf den Pi-hole Server hat und im Javascript-Adapter exec aktiviert wurde.

              736a0952-52af-46cd-ad76-d278c2bf5f91-image.png

              Zur Erläuterung:
              Ich habe zwei Pi-hole Server laufen, deshalb werden hier täglich zwei Datenpunkte befüllt (das muss dann nach eigenen Bedürfnissen angepasst werden).

              Hier das Skript:

              // Konfiguration der Pi-hole Server und Datenpunkte
              const piholeServers = [
                 // Struktur: 0_userdata.0.Pihole.piholeX.UniqueGravityDomains
                 { host: 'pihole', datapoint: '0_userdata.0.Pihole.pihole0.UniqueGravityDomains' },
                 { host: 'rpifr24', datapoint: '0_userdata.0.Pihole.pihole1.UniqueGravityDomains' }
              ];
              
              // Funktion zum Erstellen der Datenpunkte, falls diese noch nicht existieren
              function createDataPoints() {
                 piholeServers.forEach(server => {
                     createState(server.datapoint, 0, {
                         name: `Anzahl der einzigartigen Domains auf ${server.host}`,
                         type: 'number',
                         role: 'value',
                         unit: 'Domains'
                     });
                 });
                 console.log("Struktur der Pi-hole Datenpunkte erstellt oder geprüft.");
              }
              
              // Hauptfunktion zum Abrufen und Aktualisieren der Daten
              function updatePiHoleData() {
                 console.log("Starte tägliche Pi-hole Datenaktualisierung...");
              
                 // SQL-Befehl: Jetzt werden die inneren doppelten Anführungszeichen escaped,
                 // während die einfachen Anführungszeichen ('gravity_count') direkt stehen bleiben können,
                 // da sie vom äußeren Doppel-Anführungszeichen-Kontext geschützt werden.
                 const sqlQuery = "SELECT value FROM info WHERE property = 'gravity_count';"; 
              
                 piholeServers.forEach(server => {
                     // ENDGÜLTIGE LÖSUNG: Äußeres JS-Kommando in Backticks.
                     // Das SSH-Kommando wird von doppelten Anführungszeichen (`"`) umschlossen.
                     // Die innere Anführungszeichenstruktur muss von der Datenbank die einfachen Anführungszeichen erhalten.
                     const command = `ssh thomas@${server.host} "sudo pihole-FTL sqlite3 /etc/pihole/gravity.db \\"${sqlQuery}\\""`;
                     // HINWEIS: Dies ist die robusteste Form der Verschachtelung, die die innere einfache Anführungszeichenkette
                     // an die SQLite-Engine weitergibt, indem die äußeren Doppel-Anführungszeichen escaped werden.
              
                     require('child_process').exec(command, function(error, stdout, stderr) {
                         if (error) {
                             console.error(`Fehler bei SSH-Verbindung zu ${server.host}: ${error.message}`);
                             console.error(`[${server.host}] Fehlerdetails: ${stderr}`);
                             return;
                         }
                         if (stderr) {
                             console.error(`Stderr von ${server.host}: ${stderr}`);
                         }
                         
                         const domainCount = parseInt(stdout.trim(), 10);
                         
                         if (!isNaN(domainCount)) {
                             setState(server.datapoint, domainCount, true);
                             console.log(`[${server.host}] Domainanzahl erfolgreich aktualisiert: ${domainCount}`);
                         } else {
                             console.error(`[${server.host}] Konvertierung der Domainanzahl fehlgeschlagen: ${stdout}`);
                         }
                     });
                 });
              }
              
              // 1. Datenpunkte beim Skriptstart erstellen/prüfen
              createDataPoints();
              
              // 2. Skript beim Start einmalig ausführen
              updatePiHoleData();
              
              // 3. Täglich um 01:25 Uhr morgens aktualisieren
              // Die Cron-Syntax ist: 'Minuten Stunden * * *'
              schedule('25 1 * * *', updatePiHoleData);
              

              Vielleicht hilft es ja anderen Nerds (Huch, die Emojis können noch nicht eingefügt werden ggg).

              Proxmox und HA

              OliverIOO 1 Antwort Letzte Antwort
              0
              • Meister MopperM Meister Mopper

                Da die API von Pi-hole v6 nicht den Abruf der insgesamt geblockten unique domains vorsieht, habe ich mich mal mit einer KI auf die Suche gemacht und eine Lösung vermittels Abfrage der sqlite3-Datenbank des Pi-hole gefunden.

                Diese wird mit einem exec-Befehl vermittels Skript initiiert. Das funktioniert natürlich nur, wenn der Systemuser iobroker auch einen passwortfreien ssh-Zugriff vermittels Schlüssel auf den Pi-hole Server hat und im Javascript-Adapter exec aktiviert wurde.

                736a0952-52af-46cd-ad76-d278c2bf5f91-image.png

                Zur Erläuterung:
                Ich habe zwei Pi-hole Server laufen, deshalb werden hier täglich zwei Datenpunkte befüllt (das muss dann nach eigenen Bedürfnissen angepasst werden).

                Hier das Skript:

                // Konfiguration der Pi-hole Server und Datenpunkte
                const piholeServers = [
                   // Struktur: 0_userdata.0.Pihole.piholeX.UniqueGravityDomains
                   { host: 'pihole', datapoint: '0_userdata.0.Pihole.pihole0.UniqueGravityDomains' },
                   { host: 'rpifr24', datapoint: '0_userdata.0.Pihole.pihole1.UniqueGravityDomains' }
                ];
                
                // Funktion zum Erstellen der Datenpunkte, falls diese noch nicht existieren
                function createDataPoints() {
                   piholeServers.forEach(server => {
                       createState(server.datapoint, 0, {
                           name: `Anzahl der einzigartigen Domains auf ${server.host}`,
                           type: 'number',
                           role: 'value',
                           unit: 'Domains'
                       });
                   });
                   console.log("Struktur der Pi-hole Datenpunkte erstellt oder geprüft.");
                }
                
                // Hauptfunktion zum Abrufen und Aktualisieren der Daten
                function updatePiHoleData() {
                   console.log("Starte tägliche Pi-hole Datenaktualisierung...");
                
                   // SQL-Befehl: Jetzt werden die inneren doppelten Anführungszeichen escaped,
                   // während die einfachen Anführungszeichen ('gravity_count') direkt stehen bleiben können,
                   // da sie vom äußeren Doppel-Anführungszeichen-Kontext geschützt werden.
                   const sqlQuery = "SELECT value FROM info WHERE property = 'gravity_count';"; 
                
                   piholeServers.forEach(server => {
                       // ENDGÜLTIGE LÖSUNG: Äußeres JS-Kommando in Backticks.
                       // Das SSH-Kommando wird von doppelten Anführungszeichen (`"`) umschlossen.
                       // Die innere Anführungszeichenstruktur muss von der Datenbank die einfachen Anführungszeichen erhalten.
                       const command = `ssh thomas@${server.host} "sudo pihole-FTL sqlite3 /etc/pihole/gravity.db \\"${sqlQuery}\\""`;
                       // HINWEIS: Dies ist die robusteste Form der Verschachtelung, die die innere einfache Anführungszeichenkette
                       // an die SQLite-Engine weitergibt, indem die äußeren Doppel-Anführungszeichen escaped werden.
                
                       require('child_process').exec(command, function(error, stdout, stderr) {
                           if (error) {
                               console.error(`Fehler bei SSH-Verbindung zu ${server.host}: ${error.message}`);
                               console.error(`[${server.host}] Fehlerdetails: ${stderr}`);
                               return;
                           }
                           if (stderr) {
                               console.error(`Stderr von ${server.host}: ${stderr}`);
                           }
                           
                           const domainCount = parseInt(stdout.trim(), 10);
                           
                           if (!isNaN(domainCount)) {
                               setState(server.datapoint, domainCount, true);
                               console.log(`[${server.host}] Domainanzahl erfolgreich aktualisiert: ${domainCount}`);
                           } else {
                               console.error(`[${server.host}] Konvertierung der Domainanzahl fehlgeschlagen: ${stdout}`);
                           }
                       });
                   });
                }
                
                // 1. Datenpunkte beim Skriptstart erstellen/prüfen
                createDataPoints();
                
                // 2. Skript beim Start einmalig ausführen
                updatePiHoleData();
                
                // 3. Täglich um 01:25 Uhr morgens aktualisieren
                // Die Cron-Syntax ist: 'Minuten Stunden * * *'
                schedule('25 1 * * *', updatePiHoleData);
                

                Vielleicht hilft es ja anderen Nerds (Huch, die Emojis können noch nicht eingefügt werden ggg).

                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von OliverIO
                #53

                @Meister-Mopper

                vergleiche bitte dein Ergebnis mal mit der folgenden Abfrage.
                top-domains hat eine count Eigenschaft. die standardmäßig auf 10 eingestellt ist, was dann auch auf dem pihole-dshboard angezeigt wird.
                wenn man die zahl dann hoch genug einstellt, dann kann man das zurückgegebene array zählen.
                das ist wahrscheinlich simpler wie per exec und ssh auf die Datenbank zuzugreifen.

                sendTo(
                    'pi-hole2.0',
                    'piholeapi',
                    {
                        method: 'GET',
                        endpoint: '/stats/top_domains?blocked=true&count=999999',
                    },
                    function (data) {
                        console.log(data.domains.length);
                    },
                );
                

                Meine Adapter und Widgets
                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                Links im Profil

                Meister MopperM 1 Antwort Letzte Antwort
                0
                • OliverIOO OliverIO

                  @Meister-Mopper

                  vergleiche bitte dein Ergebnis mal mit der folgenden Abfrage.
                  top-domains hat eine count Eigenschaft. die standardmäßig auf 10 eingestellt ist, was dann auch auf dem pihole-dshboard angezeigt wird.
                  wenn man die zahl dann hoch genug einstellt, dann kann man das zurückgegebene array zählen.
                  das ist wahrscheinlich simpler wie per exec und ssh auf die Datenbank zuzugreifen.

                  sendTo(
                      'pi-hole2.0',
                      'piholeapi',
                      {
                          method: 'GET',
                          endpoint: '/stats/top_domains?blocked=true&count=999999',
                      },
                      function (data) {
                          console.log(data.domains.length);
                      },
                  );
                  
                  Meister MopperM Online
                  Meister MopperM Online
                  Meister Mopper
                  schrieb am zuletzt editiert von
                  #54

                  @OliverIO

                  Da komme ich leider nicht weiter, weil ich in der Pi-hole GUI keinen Token angeboten bekomme.


                  da1448f0-fa7a-4c93-bdc0-678f5d1149b5-image.png

                  Auch mit dem ssh sudo grep -r 'WEBPASSWORD' /etc/pihole/ gefundenen Webpassword bekomme ich einen http 400 Fehler.

                  Proxmox und HA

                  OliverIOO 1 Antwort Letzte Antwort
                  0
                  • Meister MopperM Meister Mopper

                    @OliverIO

                    Da komme ich leider nicht weiter, weil ich in der Pi-hole GUI keinen Token angeboten bekomme.


                    da1448f0-fa7a-4c93-bdc0-678f5d1149b5-image.png

                    Auch mit dem ssh sudo grep -r 'WEBPASSWORD' /etc/pihole/ gefundenen Webpassword bekomme ich einen http 400 Fehler.

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von
                    #55

                    @Meister-Mopper

                    welches token?

                    die api gui, sowie der adapter funktioniert mit dem passwort.
                    das token wird automatisiert abgerufen.

                    adapter:
                    8fb84781-4baa-4cd5-9e0e-fda37b0f27e2-image.png

                    und die lokale api gui:

                    da ist manchmal eine kleine herausforderung die auswahl zu beginn richtig einzustellen

                    zunächst die folgende url anwählen
                    http://pihole/api/docs/#
                    bzw
                    http://<ip>/api/docs/#

                    dann wichtig, nicht https sondern http auswählen
                    und das passwort oben in das feld eintragen und login drücken.
                    wenn das erfolgreich grün wird, dann merkt sich die seite erst mal das passwort bis zum nächsten kompletten refresh der seite
                    wenn dann ein api zugriff nicht funktioniert, dann bei url noch die ip-adresse eintragen

                    032488e3-d315-4fcd-bd26-35b8d7cbf8ef-image.png

                    aber das beispiel war ja eigentlich direkt für ein skript im javascript adapter gedacht.
                    wenn der adapter richtig eingerichtet ist und daten vom pihle bekommt, dann musst du dich da auch nicht nochmal extra anmelden

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    1 Antwort Letzte Antwort
                    0
                    • patricknitschP Online
                      patricknitschP Online
                      patricknitsch
                      schrieb am zuletzt editiert von
                      #56

                      Hallo,

                      ich nutze aktuell zwei pihole2 Instanzen, die an sich sehr gut funktionieren. Mir ist aber aufgefallen, dass bei einem Verbindungsabruch die Verbindung nicht automatisch wieder aufgebaut wird. Die erste Instanz stand dann ein paar Tage auf gelb, bis ich sie neu gestartet hatte. Gerade auch, wenn der pihole-Container ein Update durchgeführt hat, war die Verbindung weg.

                      Ich habe dazu mal ein Issue zum Thema automatischer Wiederaufbau der Verbindung(oder zumindest Versuch) erstellt.

                      1 Antwort Letzte Antwort
                      1
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      579

                      Online

                      32.7k

                      Benutzer

                      82.5k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe