Thanks to this thread and the information provided by the community, I integrated the current Pi-Hole version in OpenHab using the latest HTTP Binding. Preconditions and requirements are:
- HTTP-Binding installed (Settings → Add-ons → Bindings)
- JSONPath-Transformation installed (Settings → Add-ons → Transformations)
I just wanted to give back and provide my “Things” configuration here for others to benefit from:
Thing http:url:pihole "PiHole" [baseURL="http://PI-HOLE_IP:PI-HOLE_PORT/admin/api.php", refresh=30, timeout=3000] {
Channels:
Type switch : enable_disable "PiHole Command (Enable/Disable)" [
mode = "WRITEONLY",
commandExtension = "?%2$s=0&auth=API_KEY_HERE",
onValue = "enable",
offValue = "disable"
]
Type switch : status "PiHole State (read-only)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.status",
onValue = "enabled",
offValue = "disabled"
]
Type number : dns_queries_today "Total Queries (Today)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.dns_queries_today"
]
Type number : ads_blocked_today "Queries Blocked (Today)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.ads_blocked_today"
]
Type number : ads_percentage_today "Percentage Blocked (Today)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.ads_percentage_today"
]
Type number : domains_being_blocked "Domains on Blocklist (Total)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.domains_being_blocked"
]
Type number : unique_domains "Domains on Blacklist (Unique)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.unique_domains"
]
Type number : queries_forwarded "Queries resolved via upstream DNS Server" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.queries_forwarded"
]
Type number : queries_cached "Queries resolved via local DNS Cache/Config" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.queries_cached"
]
Type number : clients_ever_seen "Clients seen (Total)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.clients_ever_seen"
]
Type number : unique_clients "Clients seen (Unique)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.unique_clients"
]
Type number : dns_queries_all_types "DNS Queries (All Types)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.dns_queries_all_types"
]
Type number : reply_NODATA "DNS Replies (NODATA)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.reply_NODATA"
]
Type number : reply_NXDOMAIN "DNS Replies (NXDOMAIN)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.reply_NXDOMAIN"
]
Type number : reply_CNAME "DNS Replies (CNAME)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.reply_CNAME"
]
Type number : reply_IP "DNS Replies (IP)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.reply_IP"
]
Type number : privacy_level "Statitics Privacy Level (0=Anonymize none,1=no domains,2=no domains/clients,3=Anonymize all)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.privacy_level"
]
Type string : file_exists "Gravity updated" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.gravity_last_updated.file_exists"
]
Type number : absolute "Gravity update duration" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.gravity_last_updated.absolute"
]
Type number : days "Gravity time since last update (days)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.gravity_last_updated.relative.days"
]
Type number : hours "Gravity time since last update (days)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.gravity_last_updated.relative.hours"
]
Type number : minutes "Gravity time since last update (days)" [
mode = "READONLY",
stateExtension = "?summary&auth=API_KEY_HERE",
stateTransformation = "JSONPATH:$.gravity_last_updated.relative.minutes"
]
}