# Setup Guide - Smart Logger V3 This version uses a **PostgreSQL devices table** for metadata instead of the Scrutiny API. Much simpler! ## Quick Setup ### 1. Create the Database Schema ```bash # Run the new schema (includes devices table) psql -h -U -d smart_monitoring -f schema_v2.sql ``` ### 2. Get Your Device WWNs Run the helper script to see all devices in InfluxDB: ```bash python get_device_info.py ``` This will show: ``` Device 1: WWN: 0x5000c500744487c5 Protocol: ATA Temperature: 24°C Power-On Time: 1968 days (47232 hours) Device 2: ... ``` ### 3. Populate Device Metadata Now match each WWN with its actual device info from `snapraid smart`: ``` Temp Power Error FP Size C OnDays Count TB Serial Device Disk ----------------------------------------------------------------------- 24 1968 0 81% 12.0 ZLW0A3QJ /dev/sdc d1 25 637 0 22% 20.0 ZX22EJ3Y /dev/sdb d2 21 1014 0 51% 12.0 ZTN1BNEZ /dev/sdd d5 25 636 0 49% 20.0 ZX20AAMV /dev/sda parity 25 2540 0 30% 10.0 2TJ97M6D /dev/sdg 2-parity 28 2354 1 4% 10.0 7JJVJ65C /dev/sdh 2-parity 32 1983 0 4% 3.0 YVGGG6EC /dev/sde - 30 2072 0 84% 8.0 ZA1GX9F4 /dev/sdf - - - 0 - - 25243X801438 /dev/nvme0n1 - 32 2074 0 84% 8.0 ZA1GW0XM /dev/sdi - ``` Match the power-on days from `get_device_info.py` with the power-on days from `snapraid smart` to identify each WWN. For example: - **WWN 0x5000c500744487c5** has **1968 days** → matches **/dev/sdc** (ZLW0A3QJ, d1) ### 4. Edit populate_devices.sql Update `populate_devices.sql` with your actual device information: ```sql INSERT INTO devices (device_wwn, device_path, serial_number, model, manufacturer, capacity_bytes, size_tb, disk_role, notes) VALUES ( '0x5000c500744487c5', '/dev/sdc', 'ZLW0A3QJ', 'WDC WD120EFAX-68FB5N0', -- Get from smartctl -i /dev/sdc 'Western Digital', 12000000000000, 12.0, 'd1', 'Data drive 1' ); ``` Repeat for all 9 drives. ### 5. Load the Data ```bash psql -h -U -d smart_monitoring -f populate_devices.sql ``` ### 6. Run the Logger! ```bash python smart_logger_v3.py ``` ## Expected Output ``` Connecting to InfluxDB at http://cyrion.c0smere.net:8086... ✓ Connected to InfluxDB Connecting to PostgreSQL... ✓ Connected to PostgreSQL Loading device metadata from database... ✓ Loaded metadata for 9 device(s) Querying InfluxDB for SMART data... ✓ Found data for 9 device(s) /dev/sdc WWN: 0x5000c500744487c5 Serial: ZLW0A3QJ Model: WDC WD120EFAX Role: d1 Temp: 24°C Power-On: 1968 days Size: 12.0 TB SMART Attrs: [5, 187, 197, 198] Failure Probability: 81.00% ... ================================================================================ SnapRAID-style SMART Summary ================================================================================ Temp Power Error FP Size C OnDays Count TB Serial Device Disk -------------------------------------------------------------------------------- 24 1968 0 81% 12.0 ZLW0A3QJ /dev/sdc d1 25 637 0 22% 20.0 ZX22EJ3Y /dev/sdb d2 21 1014 0 51% 12.0 ZTN1BNEZ /dev/sdd d5 25 636 0 49% 20.0 ZX20AAMV /dev/sda parity 25 2540 0 30% 10.0 2TJ97M6D /dev/sdg 2-parity ``` ## Querying the Data ```sql -- Latest status for all drives SELECT * FROM smart_summary; -- Historical data for a specific drive SELECT timestamp, temperature_celsius, failure_probability_pct FROM smart_metrics sm JOIN devices d ON sm.device_wwn = d.device_wwn WHERE d.device_path = '/dev/sdc' ORDER BY timestamp DESC LIMIT 100; -- High-risk drives SELECT * FROM smart_high_risk; ``` ## Automation Add to cron to run hourly: ```cron 0 * * * * cd /home/wes/projects/snapraid_smart_logger && /home/wes/projects/snapraid_smart_logger/venv/bin/python smart_logger_v3.py >> /var/log/smart_logger.log 2>&1 ``` ## Updating Device Info If you add/remove drives, just update the `devices` table: ```sql -- Add a new drive INSERT INTO devices (device_wwn, device_path, serial_number, model, manufacturer, capacity_bytes, size_tb, disk_role) VALUES ('0xNEW_WWN', '/dev/sdj', 'NEWSERIAL', 'MODEL', 'MANUFACTURER', 12000000000000, 12.0, 'd6'); -- Remove a drive DELETE FROM devices WHERE device_wwn = '0xOLD_WWN'; -- Update drive role UPDATE devices SET disk_role = 'parity' WHERE device_path = '/dev/sda'; ```