Home assistant addon : Scrutiny (SMART dashboard)

You can disregard my question. I saw a comment about uninstall/reinstall and that solved the issues.

Hard to believe my HA has been running this long…. Maybe I should swap that ssd out?

Ssd are pretty resilient! But for sure having a regular backup of the data wouldn’t hurt :wink: I’ve set an add-on to automatically reboot and rsync the content from one disk to another to be sure to have regular external hdd backups

Anyway to see total written data to the SSD? similar to what Samsung Magician app provides

Hi, scrutiny gives the info of sectors written! You then need to convert it in terms of bytes based on the format type of your drive. I saw some formulas for that on internet… But there is no direct smart value for that I guess the Samsung app just does the calculation by itself!

TrueNAS Scale Smart HDD into Home Assistant

I’m running Proxmox to host TrueNAS Scale in a VM. I also have another Ubuntu VM under Proxmox, where I’m running Home Assistant in Docker.

In Home Assistant, the TrueNAS Scale integration is working, but it doesn’t capture the SMART data from the hard drives. Truenas is manging the HD’s via a HBA card. Does anyone know a good way to integrate that into Home Assistant and create a sensor for it?

Is this still the latest way to configure it if my ssd is not shown in the addon? I don’t have a /data/config folder in my home assistant. Is it just the /config folder which is meant?
And what should be the content of this scrutiny.yaml file? I also saw some comments with collector.yaml. Is it the same or different?

I’m running a rpi4 with scrutini full, but i’m not able to load smart data. I’m booting from a sata HDD with usb cable. (did try to select, sata, ata, auto, but no luck).

Log states: level=error msg=“Could not retrieve device information for sda: exit status 2” type=metrics

Hi, I’m running this with the standard (non full access) addon on my first home assistant system to monitor my drives, and it works perfectly.

I’ve recently installed a new second home assistant system, but only 1 of 2 disks is being found. For the internal .m2 sata, I’m getting the following error when starting up the addon:

time="2025-07-28T00:27:56+02:00" level=info msg="Executing command: smartctl --scan --json" type=metrics
time="2025-07-28T00:27:57+02:00" level=info msg="Executing command: smartctl --info --json /dev/sda" type=metrics
time="2025-07-28T00:27:57+02:00" level=error msg="Could not retrieve device information for sda: exit status 2" type=metrics

However, when I’m running it with the full access version of the addon (and protection disabled) it’s recognized.
Any idea why the full access version required on the second machine and not on the first one?
Could it be disk related, or access rights?
But both machines are running same haos 16.0 version.

Output when running the command directly in addon (via portainer):

root@db21ed7f-scrutiny:/opt/scrutiny# smartctl --info --json /dev/sda
{
  "json_format_version": [
    1,
    0
  ],
  "smartctl": {
    "version": [
      7,
      3
    ],
    "svn_revision": "5338",
    "platform_info": "x86_64-linux-6.12.35-haos",
    "build_info": "(local build)",
    "argv": [
      "smartctl",
      "--info",
      "--json",
      "/dev/sda"
    ],
    "messages": [
      {
        "string": "Smartctl open device: /dev/sda failed: Operation not permitted",
        "severity": "error"
      }
    ],
    "exit_status": 2
  },
  "local_time": {
    "time_t": 1753656172,
    "asctime": "Mon Jul 28 00:42:52 2025 CEST"
  }
}


Just installed and nothing is showing. HAOS in VM on proxmox. Any full guides on how to set this up?

When nothing showed up, I tried the “full access” add-on version and it worked.

Hi, I just reset my HA due to some issue and I restart from 0 all instalaltion, in this stage unfortunatelly I have and issue with scrutiny and I resolve it install the full access without the protection mode. Now the issue is to take the data from the SSD, because use the links:

I cannot reach the data and consequently I cannot use “rest” integration…somebody how the same issue???

Here below a screenshot of the “rest” code

Any help would be appreciated…

I must be missing something - i am running HA on a Pi4 with a USB-attached SSD drive which supports SMART. I installed the standard plugin but I am not seeing any data on the Scrutiny dashboard.

SSD drive: Amazon.com: Patriot P300 M.2 PCIe Gen 3 x4 256GB Low-Power Consumption SSD : Electronics
Enclosure: Amazon.com: SSK M.2 NVMe Enclosure, Tool-Free SSD Enclosure Adapter, USB C 3.2 Gen 2 10Gbps PCIe MKey External Solid State Drive Case, Support UASP Trim for 2230/2242/2260/2280 (SATA NOT Supported) : Electronics

I copied the REST config from the “info” page into my configuration.yaml, but I assume there is an error in my config for the add-on:

env_vars: []
Updates: Hourly
Mode: Collector+WebUI
SMARTCTL_COMMAND_DEVICE_TYPE: sat
expose_collector: false
TZ: America/Los_Angeles
SMARTCTL_MEGARAID_DISK_NUM: 1
COLLECTOR_API_ENDPOINT: http://localhost:8080
COLLECTOR_HOST_ID: homeassistant

I think the main error is:

time="2026-02-08T14:18:24-08:00" level=error msg="An error occurred while retrieving device details record not found" type=web

time="2026-02-08T14:18:24-08:00" level=error msg="172.30.32.1 - db21ed7f-scrutiny [08/Feb/2026:14:18:24 -0800] \"GET /api/device/0x57c35481f82a7a9c/details\" 500 17 \"\" \"HomeAssistant/2026.2.1 aiohttp/3.13.3 Python/3.13\" (3ms)" clientIP=172.30.32.1 hostname=db21ed7f-scrutiny latency=3 method=GET path=/api/device/0x57c35481f82a7a9c/details referer= respLength=17 statusCode=500 type=web userAgent="HomeAssistant/2026.2.1 aiohttp/3.13.3 Python/3.13”

Full log:
—————————————————————————————

Add-on: Scrutiny

Scrutiny webUI for smartd S.M.A.R.T monitoring

—————————————————————————————

Add-on version: v1.23.2-2

You are running the latest version.

System: Home Assistant OS 17.0

Architecture: aarch64 / raspberrypi4-64

Home Assistant Core: 2026.2.1

Home Assistant Supervisor: 2026.01.1

—————————————————————————————

Provided by: https://github.com/alexbelgium/hassio-addons

—————————————————————————————

/etc/cont-init.d/00-global_var.sh: executing

[14:05:36] NOTICE: Converting addon options to environment variables

[14:05:36] NOTICE: Supports custom env_vars

[14:05:36] NOTICE: https://github.com/alexbelgium/hassio-addons/wiki/Add-Environment-variables-to-your-Addon-2

Updates=Hourly

Mode=Collector+WebUI

SMARTCTL_COMMAND_DEVICE_TYPE=sat

expose_collector=false

TZ=america/los angeles

SMARTCTL_MEGARAID_DISK_NUM=1

COLLECTOR_API_ENDPOINT=http://localhost:8080

COLLECTOR_HOST_ID=homeassistant

/etc/cont-init.d/01-config_yaml.sh: executing

/etc/cont-init.d/01-configuration.sh: executing

Updating folders structure

[22:05:37] INFO: Timezone : america/los angeles

[22:05:37] INFO: Hourly updates as defined in the 'Updates’ option

/etc/cont-init.d/01-custom_script.sh: executing

[22:05:38] NOTICE: This script is used to run custom commands at start of the addon. Instructions here : https://github.com/alexbelgium/hassio-addons/wiki/Running-custom-scripts-in-Addons

Execute /addon_configs/db21ed7f_scrutiny/scrutiny.sh if existing

/etc/cont-init.d/01-timezone: executing

/etc/cont-init.d/32-nginx_ingress.sh: executing

/etc/cont-init.d/50-cron-config: executing

/etc/cont-init.d/90-run.sh: executing

Starting: /etc/services.d/collector-once/run

Starting: /etc/services.d/collector-zfs-once/run

Starting: /etc/services.d/cron/run

Starting: /etc/services.d/influxdb/run

Starting: /etc/services.d/nginx/run

Starting: /etc/services.d/scrutiny/run

waiting for scrutiny service to start

s6-svwait: fatal: unable to subscribe to events for /run/service/scrutiny: No such file or directory

/etc/services.d/collector-zfs-once/run: line 15: COLLECTOR_ZFS_CRON_SCHEDULE: unbound variable

Everything started!

starting cron

influxdb config file already exists. skipping.

starting influxdb

waiting for influxdb

influxdb not ready

ts=2026-02-08T22:05:39.657058Z lvl=info msg="Welcome to InfluxDB" log_id=10wpTXn0000 version=v2.2.0 commit=a2f8538837 build_date=2022-04-06T17:36:38Z

ts=2026-02-08T22:05:39.663837Z lvl=info msg="Resources opened" log_id=10wpTXn0000 service=bolt path=/opt/scrutiny/influxdb/influxd.bolt

ts=2026-02-08T22:05:39.667109Z lvl=info msg="Resources opened" log_id=10wpTXn0000 service=sqlite path=/opt/scrutiny/influxdb/influxd.sqlite

ts=2026-02-08T22:05:39.688415Z lvl=info msg="Checking InfluxDB metadata for prior version." log_id=10wpTXn0000 bolt_path=/opt/scrutiny/influxdb/influxd.bolt

ts=2026-02-08T22:05:39.689336Z lvl=info msg="Using data dir" log_id=10wpTXn0000 service=storage-engine service=store path=/opt/scrutiny/influxdb/engine/data

ts=2026-02-08T22:05:39.689500Z lvl=info msg="Compaction settings" log_id=10wpTXn0000 service=storage-engine service=store max_concurrent_compactions=2 throughput_bytes_per_second=50331648 throughput_bytes_per_second_burst=50331648

ts=2026-02-08T22:05:39.689556Z lvl=info msg="Open store (start)" log_id=10wpTXn0000 service=storage-engine service=store op_name=tsdb_open op_event=start

ts=2026-02-08T22:05:39.689899Z lvl=info msg="Open store (end)" log_id=10wpTXn0000 service=storage-engine service=store op_name=tsdb_open op_event=end op_elapsed=0.347ms

ts=2026-02-08T22:05:39.690054Z lvl=info msg="Starting retention policy enforcement service" log_id=10wpTXn0000 service=retention check_interval=30m

ts=2026-02-08T22:05:39.690110Z lvl=info msg="Starting precreation service" log_id=10wpTXn0000 service=shard-precreation check_interval=10m advance_period=30m

ts=2026-02-08T22:05:39.694816Z lvl=info msg="Starting query controller" log_id=10wpTXn0000 service=storage-reads concurrency_quota=1024 initial_memory_bytes_quota_per_query=9223372036854775807 memory_bytes_quota_per_query=9223372036854775807 max_memory_bytes=0 queue_size=1024

ts=2026-02-08T22:05:39.716131Z lvl=info msg="Configuring InfluxQL statement executor (zeros indicate unlimited)." log_id=10wpTXn0000 max_select_point=0 max_select_series=0 max_select_buckets=0

ts=2026-02-08T22:05:39.745560Z lvl=info msg=Listening log_id=10wpTXn0000 service=tcp-listener transport=http addr=:8086 port=8086

starting scrutiny

2026/02/08 22:05:44 maxprocs: Leaving GOMAXPROCS=4: CPU quota undefined

___ ___ ____ __ __ ____ ____ _ _ _ _

/ __) / __)( _ \( )( )(_ _)(_ _)( \( )( \/ )

\__ \( (__ ) / )(__)( )( _)(_ ) ( \ /

(___/ \___)(_)\_)(______) (__) (____)(_)\_) (__)

github.com/AnalogJ/scrutiny dev-1.23.2

time="2026-02-08T22:05:44Z" level=info msg="No configuration file found at /opt/scrutiny/config/scrutiny.yaml. Using Defaults." type=web

Start the scrutiny server

time="2026-02-08T22:05:44Z" level=info msg="Trying to connect to scrutiny sqlite db: /opt/scrutiny/config/scrutiny.db\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="Successfully connected to scrutiny sqlite db: /opt/scrutiny/config/scrutiny.db\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="InfluxDB certificate verification: true\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="Database migration starting. Please wait, this process may take a long time...." type=web

time="2026-02-08T22:05:44Z" level=info msg="Database migration completed successfully" type=web

time="2026-02-08T22:05:44Z" level=info msg="SQLite global configuration migrations starting. Please wait...." type=web

time="2026-02-08T22:05:44Z" level=info msg="SQLite global configuration migrations completed successfully" type=web

time="2026-02-08T22:05:44Z" level=info msg="Prometheus metrics endpoint enabled" type=web

time="2026-02-08T22:05:44Z" level=info msg="Missed ping monitor started" type=web

time="2026-02-08T22:05:44Z" level=info msg="Heartbeat monitor started" type=web

time="2026-02-08T22:05:44Z" level=info msg="HTTP server timeouts: read=10s, write=30s, idle=60s" type=web

time="2026-02-08T22:05:44Z" level=info msg="Trying to connect to scrutiny sqlite db: /opt/scrutiny/config/scrutiny.db\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="Trying to connect to scrutiny sqlite db: /opt/scrutiny/config/scrutiny.db\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="Trying to connect to scrutiny sqlite db: /opt/scrutiny/config/scrutiny.db\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="Starting server on 0.0.0.0:8080" type=web

time="2026-02-08T22:05:44Z" level=info msg="Successfully connected to scrutiny sqlite db: /opt/scrutiny/config/scrutiny.db\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="InfluxDB certificate verification: true\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="Successfully connected to scrutiny sqlite db: /opt/scrutiny/config/scrutiny.db\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="Successfully connected to scrutiny sqlite db: /opt/scrutiny/config/scrutiny.db\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="InfluxDB certificate verification: true\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="InfluxDB certificate verification: true\n" type=web

time="2026-02-08T22:05:44Z" level=info msg="Database migration starting. Please wait, this process may take a long time...." type=web

time="2026-02-08T22:05:44Z" level=info msg="Database migration starting. Please wait, this process may take a long time...." type=web

time="2026-02-08T22:05:44Z" level=info msg="Database migration completed successfully" type=web

time="2026-02-08T22:05:44Z" level=info msg="SQLite global configuration migrations starting. Please wait...." type=web

time="2026-02-08T22:05:44Z" level=info msg="SQLite global configuration migrations completed successfully" type=web

time="2026-02-08T22:05:44Z" level=info msg="Database migration completed successfully" type=web

time="2026-02-08T22:05:44Z" level=info msg="SQLite global configuration migrations starting. Please wait...." type=web

time="2026-02-08T22:05:44Z" level=info msg="Database migration starting. Please wait, this process may take a long time...." type=web

time="2026-02-08T22:05:44Z" level=info msg="Heartbeat monitor started with interval: 24h0m0s" type=web

time="2026-02-08T22:05:44Z" level=error msg="SQLite global configuration migrations failed with error.\nPlease open a github issue at https://github.com/Starosdev/scrutiny and attach a copy of your scrutiny.db file.\ninvalid transaction" type=web

time="2026-02-08T22:05:44Z" level=error msg="Failed to create repository for loading metrics: invalid transaction" type=web

time="2026-02-08T22:05:44Z" level=info msg="Database migration completed successfully" type=web

time="2026-02-08T22:05:44Z" level=info msg="SQLite global configuration migrations starting. Please wait...." type=web

time="2026-02-08T22:05:44Z" level=info msg="SQLite global configuration migrations completed successfully" type=web

time="2026-02-08T22:05:44Z" level=info msg="Missed ping monitor started with check interval: 5m0s" type=web

[22:05:44] INFO: Starting NGinx…

time="2026-02-08T22:05:44Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:05:44Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:05:44 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:05:50Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:05:50Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:05:50 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:05:55Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:05:55Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:05:55 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:00Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:00Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:00 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:05Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:05Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:05 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:10Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:10Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:10 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (3ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=3 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:15Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:15Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:15 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:21Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:21Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:21 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (6ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=6 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:24Z" level=error msg="An error occurred while retrieving device details record not found" type=web

time="2026-02-08T22:06:24Z" level=error msg="172.30.32.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:24 +0000] \"GET /api/device/0x57c35481f82a7a9c/details\" 500 17 \"\" \"HomeAssistant/2026.2.1 aiohttp/3.13.3 Python/3.13\" (3ms)" clientIP=172.30.32.1 hostname=db21ed7f-scrutiny latency=3 method=GET path=/api/device/0x57c35481f82a7a9c/details referer= respLength=17 statusCode=500 type=web userAgent="HomeAssistant/2026.2.1 aiohttp/3.13.3 Python/3.13”

time="2026-02-08T22:06:26Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:26Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:26 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (6ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=6 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:31Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:31Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:31 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (5ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=5 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:36Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:36Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:36 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (3ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=3 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:41Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:41Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:41 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (5ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=5 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:46Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:46Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:46 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:51Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:51Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:51 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (7ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=7 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:06:57Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:06:57Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:06:57 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (3ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=3 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:02Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:02Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:02 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:07Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:07Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:07 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (6ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=6 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:12Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:12Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:12 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (5ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=5 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:17Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:17Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:17 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:22Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:22Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:22 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:24Z" level=error msg="An error occurred while retrieving device details record not found" type=web

time="2026-02-08T22:07:24Z" level=error msg="172.30.32.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:24 +0000] \"GET /api/device/0x57c35481f82a7a9c/details\" 500 17 \"\" \"HomeAssistant/2026.2.1 aiohttp/3.13.3 Python/3.13\" (2ms)" clientIP=172.30.32.1 hostname=db21ed7f-scrutiny latency=2 method=GET path=/api/device/0x57c35481f82a7a9c/details referer= respLength=17 statusCode=500 type=web userAgent="HomeAssistant/2026.2.1 aiohttp/3.13.3 Python/3.13”

time="2026-02-08T22:07:28Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:28Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:28 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (3ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=3 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:33Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:33Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:33 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:38Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:38Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:38 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:43Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:43Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:43 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (9ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=9 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:48Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:48Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:48 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (4ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=4 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

time="2026-02-08T22:07:53Z" level=info msg="Checking Influxdb & Sqlite health" type=web

time="2026-02-08T22:07:53Z" level=info msg="127.0.0.1 - db21ed7f-scrutiny [08/Feb/2026:22:07:53 +0000] \"GET /api/health\" 200 170 \"\" \"HealthCheck: Docker/1.0\" (5ms)" clientIP=127.0.0.1 hostname=db21ed7f-scrutiny latency=5 method=GET path=/api/health referer= respLength=170 statusCode=200 type=web userAgent="HealthCheck: Docker/1.0”

Hi Alex,

Would you consider changing the fork of Scrutiny you use? The one that’s being updated actively is here.

Thanks!!

Different approach to the same problem — I built SMART Sniffer as a native HA integration rather than a separate dashboard.

Instead of running a standalone web UI, it creates actual HA devices and sensors for each drive — temperature, health, power-on hours, and an “Attention Needed” sensor that monitors early warning SMART attributes (reallocated sectors, uncorrectable errors, wear leveling). Persistent notifications fire automatically when something looks off.

The agent is a single Go binary that wraps smartctl — installs with a one-liner, auto-discovered via mDNS. For HAOS there’s also a dedicated add-on that reads the host drive directly.

Not a replacement for Scrutiny if you want the historical graphs and detailed UI — but if your main goal is “tell me when a drive needs attention” inside HA, it might be worth a look.