NEWS
Skript zum PiHole Version 6 an- und ausschalten
-
Ich nutze einen PiHole-Werbeblocker, der auch sehr zuverlässig funktioniert. Manchmal werden allerdings nützliche Seiten blockiert, und ich möchte ihn schnell abschalten können. Ich habe das bisher über den PiHole-Adapter gemacht, der aber ab der neuen Version 6 nicht mehr funktioniert, da die Authentifizierung geändert wurde. Ich habe mir daher ein Javaskript erstellt, das den Werbeblocker für eine festgelegte Zeit ausschaltet oder wieder einschaltet. Gesteuert wird das über zwei angelegte States:
'0_userdata.0.PiHole' true|false
- schaltet den Werbeblocker ein oder aus
'0_userdata.0.PiHoleOffTime' time
- Ausschaltzeit time Minuten
Dem State'0_userdata.0.PiHole'
habe ich über den iot-Adapter den Alexabefehl "Werbeblocker" zugewiesen und kann nun mit "Alexa - schalt den Werbeblocker an/aus" den PiHole steuern. Über das angesprochene Echo-Gerät kommt dann eine Bestätigung über den Alexa-Adapter; diese läßt sich im Skript mit der EinstellunguseAlexa
ein- oder ausschalten.
Für die Funktion müssen im Skript die IP-Adresse des PiHole-Servers unterpiHoleIP
sowie das PiHiole-API-Token unterapiToken
eingetragen werden. Das API-Token erhält man über die Weboberfläche des PiHole unter "Settings - Web interface / API - Advanced Settings - Configure app password".Hier ist das Skript versteckt:
-
Danke dafür!
Ich habe deinen Input genommen und als Node Red Flow umgesetzt.
Der Eingang ist der Datenpunkt "0_userdata.0.Pihole.block". Setzt man diesen auf einen Wert größer 0, so wird diese Dauer (in Sekunden) das Blockieren ausgesetzt. Wird "0" übergeben, so wird das Blockieren sofort wieder aktiviert.
Der Token steckt in einer Umgebungsvariablen der Gruppe.
[ { "id": "c41d478141b3cc65", "type": "group", "z": "82142b07174514f4", "name": "pihole Block", "style": { "label": true, "fill": "#d1d1d1", "fill-opacity": "0.46", "color": "#000000" }, "nodes": [ "202493c6e72a7aee", "550c71b80775b3b3", "0ad3f04cf36bfa33", "e8cfad6116fde136", "47f00106a239a89a", "97ec5dde765c16b3" ], "env": [ { "name": "token", "value": "G667sdjpetE7WSBnsrJN0c35lMTkM2seO8Uil8V5Btg=", "type": "str" } ], "x": 34, "y": 59, "w": 792, "h": 82 }, { "id": "202493c6e72a7aee", "type": "http request", "z": "82142b07174514f4", "g": "c41d478141b3cc65", "name": "SID", "method": "POST", "ret": "obj", "paytoqs": "ignore", "url": "http://pihole/api/auth", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [ { "keyType": "other", "keyValue": "Content-Type", "valueType": "other", "valueValue": "application/json" } ], "x": 370, "y": 100, "wires": [ [ "0ad3f04cf36bfa33" ] ] }, { "id": "550c71b80775b3b3", "type": "change", "z": "82142b07174514f4", "g": "c41d478141b3cc65", "name": "Token", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "{ \"password\": $env(\"token\") }", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 250, "y": 100, "wires": [ [ "202493c6e72a7aee" ] ] }, { "id": "0ad3f04cf36bfa33", "type": "change", "z": "82142b07174514f4", "g": "c41d478141b3cc65", "name": "change", "rules": [ { "t": "set", "p": "SID", "pt": "msg", "to": "payload.session.sid", "tot": "jsonata" }, { "t": "set", "p": "payload", "pt": "msg", "to": "blocktime=0 ? {\"blocking\": true, \"timer\": blocktime} : {\"blocking\": false, \"timer\": blocktime}", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 500, "y": 100, "wires": [ [ "e8cfad6116fde136" ] ] }, { "id": "e8cfad6116fde136", "type": "http request", "z": "82142b07174514f4", "g": "c41d478141b3cc65", "name": "block", "method": "POST", "ret": "obj", "paytoqs": "ignore", "url": "http://pihole/api/dns/blocking", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [ { "keyType": "other", "keyValue": "Content-Type", "valueType": "other", "valueValue": "application/json" }, { "keyType": "other", "keyValue": "X-FTL-SID", "valueType": "msg", "valueValue": "SID" } ], "x": 630, "y": 100, "wires": [ [ "47f00106a239a89a" ] ] }, { "id": "47f00106a239a89a", "type": "http request", "z": "82142b07174514f4", "g": "c41d478141b3cc65", "name": "delete", "method": "DELETE", "ret": "obj", "paytoqs": "ignore", "url": "http://pihole/api/auth", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [ { "keyType": "other", "keyValue": "Content-Type", "valueType": "other", "valueValue": "application/json" }, { "keyType": "other", "keyValue": "X-FTL-SID", "valueType": "msg", "valueValue": "SID" } ], "x": 750, "y": 100, "wires": [ [] ] }, { "id": "97ec5dde765c16b3", "type": "ioBroker in", "z": "82142b07174514f4", "g": "c41d478141b3cc65", "name": "blocktime", "attrname": "blocktime", "topic": "0_userdata.0.Pihole.block", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "outFormat": "MQTT", "x": 120, "y": 100, "wires": [ [ "550c71b80775b3b3" ] ] } ]
Zusätzlich wird zum Schluss noch die Session zerstört.
-
Nur so aus Interesse.
Kann man das nicht auch mit dem PiHole Adapter machen?Ich nutze Adguard und steuer diesen über den entsprechenden Adapter.
-
@david-g sagte in Skript zum PiHole Version 6 an- und ausschalten:
Nur so aus Interesse.
Kann man das nicht auch mit dem PiHole Adapter machen?Ich nutze Adguard und steuer diesen über den entsprechenden Adapter.
Der Pihole-Adapter läuft in der jetzigen Form nicht mit der v6.x.
Die v6.x arbeitet offenbar mit SessionID, mit denen der Adapter (noch) nichts anfangen kann.
Aus diesem Grund bin ich noch auf v5.x und hoffe, dass der Adapter bald eine Frischkur erfährt. -
Zum Test steht nun der neue pi-hole2 Adapter zur Verfügung
https://forum.iobroker.net/topic/81472/neuer-adapter-pi-hole2-für-pihole-v6?_=1750927226913