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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    21
    1
    842

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.4k

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

Geplant Angeheftet Gesperrt Verschoben Tester
55 Beiträge 9 Kommentatoren 3.3k Aufrufe 13 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.
  • MartinPM MartinP

    Muss ich mir anschauen, die API habe ich noch nicht genutzt, habe die Basteleien bisher in der Web-Oberfläche von Pi-Hole gebaut ...

    Möglicherweise muss ich da auch noch einmal von vorne anfangen, und PiHole komplett neu aufsetzen..

    Läuft derzeit in einer sehr indirekten Installation Proxmox -> LXC-Container -> Docker ->PiHole

    Solle MACVLAN benutzen, sonst könne man gar keine Randscharfe Zuordnung zu Clients gewährleisten.

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

    @MartinP

    nicht du sollst dich mit der api beschäftigen.
    du sollst nur schauen wie du dein ziel mit der web oberfläche (=gui, graphical user interface) umsetzen kannst.

    wenn du das beschreiben kannst, kann man schauen was man damit im adapter machen kann.

    für macvlan musst du eigentlich nicht nneu installieren.
    das ist reine docker konfiguration.
    wie das mit Proxmox/LXC aussieht weiß ich allerdings nicht, da dann der Netzwerkverkehr nochmal durch eine weitere schicht durchgeführt wird.

    ich gehe mal davon aus, das man in pihole irgendwas mit client zu gruppen zuordnung machen muss und dann clients dynamisch zu gruppen zuordnet oder wieder rausnimmt um dann blocking ein/auszuschalten

    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
    • MartinPM MartinP

      Mein Sohn beschwert sich, dass er bei der Google Suche die Werbe-Links oben NICHT klicken kann.
      Wenn er nach Auto-Teilen sucht, ist die Werbung doch manchmal nützlich.

      Ansonsten findet er das Blocken durchaus nützlich.
      Gäbe es die Möglichkeit für feinere Abstufungen des Abschaltens des Blockings?

      • Blocking nur für ein/mehrere Client-Device (sein Notebook, sein Gaming-PC, sein Smartphone) temporär generell aufheben
      • Temporär ein Profil aktivieren, was die Google-Adlinks generell durchlässt

      Dann könnte ich ihm z. B. einen Vis2 View basteln, wo er das mit einem Fingertipp aktivieren kann ...

      BananaJoeB Offline
      BananaJoeB Offline
      BananaJoe
      Most Active
      schrieb am zuletzt editiert von
      #42

      @MartinP sagte in Neuer Adapter pi-hole2 für pihole>=V6:

      Blocking nur für ein/mehrere Client-Device (sein Notebook, sein Gaming-PC, sein Smartphone) temporär generell aufheben
      Temporär ein Profil aktivieren, was die Google-Adlinks generell durchlässt

      Naja, Die Möglichkeit temporär Pi-Hole zu deaktivieren (für x Minuten oder Stunden) ist in der GUI eingebaut. Ob das über die API geht ... vermutlich.

      Hier hat einer ein Bash-Skript gebaut welches Gruppen per API aktiviert oder deaktiviert:
      https://gist.github.com/Data-Monkey/d88199a51feb715f7d67a47900c846bb
      Ein Client kann ja in mehreren Gruppen sein, wenn der also zusätzlich in einer Gruppe ist bei der nicht gefiltert ist, könnte man das über diesen Weg ein- und ausschalten (vermutlich)

      ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 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 750W kaskadiert || Creality CR-10 SE 3D-Drucker

      OliverIOO 2 Antworten Letzte Antwort
      0
      • BananaJoeB BananaJoe

        @MartinP sagte in Neuer Adapter pi-hole2 für pihole>=V6:

        Blocking nur für ein/mehrere Client-Device (sein Notebook, sein Gaming-PC, sein Smartphone) temporär generell aufheben
        Temporär ein Profil aktivieren, was die Google-Adlinks generell durchlässt

        Naja, Die Möglichkeit temporär Pi-Hole zu deaktivieren (für x Minuten oder Stunden) ist in der GUI eingebaut. Ob das über die API geht ... vermutlich.

        Hier hat einer ein Bash-Skript gebaut welches Gruppen per API aktiviert oder deaktiviert:
        https://gist.github.com/Data-Monkey/d88199a51feb715f7d67a47900c846bb
        Ein Client kann ja in mehreren Gruppen sein, wenn der also zusätzlich in einer Gruppe ist bei der nicht gefiltert ist, könnte man das über diesen Weg ein- und ausschalten (vermutlich)

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

        @BananaJoe sagte in Neuer Adapter pi-hole2 für pihole>=V6:

        Naja, Die Möglichkeit temporär Pi-Hole zu deaktivieren (für x Minuten oder Stunden) ist in der GUI eingebaut. Ob das über die API geht ... vermutlich.

        ja das geht und ist im aktuellen pihole adapter per datenpunkt eingebaut.

        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 BananaJoe

          @MartinP sagte in Neuer Adapter pi-hole2 für pihole>=V6:

          Blocking nur für ein/mehrere Client-Device (sein Notebook, sein Gaming-PC, sein Smartphone) temporär generell aufheben
          Temporär ein Profil aktivieren, was die Google-Adlinks generell durchlässt

          Naja, Die Möglichkeit temporär Pi-Hole zu deaktivieren (für x Minuten oder Stunden) ist in der GUI eingebaut. Ob das über die API geht ... vermutlich.

          Hier hat einer ein Bash-Skript gebaut welches Gruppen per API aktiviert oder deaktiviert:
          https://gist.github.com/Data-Monkey/d88199a51feb715f7d67a47900c846bb
          Ein Client kann ja in mehreren Gruppen sein, wenn der also zusätzlich in einer Gruppe ist bei der nicht gefiltert ist, könnte man das über diesen Weg ein- und ausschalten (vermutlich)

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

          @BananaJoe sagte in Neuer Adapter pi-hole2 für pihole>=V6:

          Hier hat einer ein Bash-Skript gebaut welches Gruppen per API aktiviert oder deaktiviert:
          https://gist.github.com/Data-Monkey/d88199a51feb715f7d67a47900c846bb
          Ein Client kann ja in mehreren Gruppen sein, wenn der also zusätzlich in einer Gruppe ist bei der nicht gefiltert ist, könnte man das über diesen Weg ein- und ausschalten (vermutlich)

          woher weiß die gruppe dann was geblockt werden soll?
          oder geht da nur alles blocken oder nix?

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

          BananaJoeB 1 Antwort Letzte Antwort
          0
          • OliverIOO OliverIO

            @BananaJoe sagte in Neuer Adapter pi-hole2 für pihole>=V6:

            Hier hat einer ein Bash-Skript gebaut welches Gruppen per API aktiviert oder deaktiviert:
            https://gist.github.com/Data-Monkey/d88199a51feb715f7d67a47900c846bb
            Ein Client kann ja in mehreren Gruppen sein, wenn der also zusätzlich in einer Gruppe ist bei der nicht gefiltert ist, könnte man das über diesen Weg ein- und ausschalten (vermutlich)

            woher weiß die gruppe dann was geblockt werden soll?
            oder geht da nur alles blocken oder nix?

            BananaJoeB Offline
            BananaJoeB Offline
            BananaJoe
            Most Active
            schrieb am zuletzt editiert von
            #45

            @OliverIO sagte in Neuer Adapter pi-hole2 für pihole>=V6:

            woher weiß die gruppe dann was geblockt werden soll?
            oder geht da nur alles blocken oder nix?

            Naja, du setzt den Client in 2 Gruppen.
            In die Normale wo alles gefiltert wird,
            und die eine wo nichts gefiltert wird.

            Und die Gruppe bei der nichts gefiltert wird schaltet man an oder aus nach Bedarf.
            In der Hoffnung das das "Rechtemanagement" von pi-hole addierend arbeitet,
            Testen müsste man das.
            Da es aber auch bei Blockieren funktioniert, könnte auch der umgekehrte Weg möglich sein

            ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 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 750W kaskadiert || Creality CR-10 SE 3D-Drucker

            OliverIOO 1 Antwort Letzte Antwort
            0
            • BananaJoeB BananaJoe

              @OliverIO sagte in Neuer Adapter pi-hole2 für pihole>=V6:

              woher weiß die gruppe dann was geblockt werden soll?
              oder geht da nur alles blocken oder nix?

              Naja, du setzt den Client in 2 Gruppen.
              In die Normale wo alles gefiltert wird,
              und die eine wo nichts gefiltert wird.

              Und die Gruppe bei der nichts gefiltert wird schaltet man an oder aus nach Bedarf.
              In der Hoffnung das das "Rechtemanagement" von pi-hole addierend arbeitet,
              Testen müsste man das.
              Da es aber auch bei Blockieren funktioniert, könnte auch der umgekehrte Weg möglich sein

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

              @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.

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

              BananaJoeB 1 Antwort Letzte Antwort
              0
              • 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 Offline
                BananaJoeB Offline
                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, 9 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 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 Offline
                    BananaJoeB Offline
                    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, 9 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 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                    1 Antwort Letzte Antwort
                    0
                    • BananaJoeB Offline
                      BananaJoeB Offline
                      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, 9 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 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
                                Antworten
                                • In einem neuen Thema antworten
                                Anmelden zum Antworten
                                • Älteste zuerst
                                • Neuste zuerst
                                • Meiste Stimmen


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                360

                                Online

                                32.5k

                                Benutzer

                                81.6k

                                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