🌀 What is FanBridge? FanBridge is a lightweight Docker service that connects your Unraid server’s drive temperatures to an external microcontroller (Arduino / RP2040). The microcontroller generates Intel-spec PWM signals to control 4-pin fans, while FanBridge handles all the logic, UI, and integration. Designed to run unprivileged on Unraid with simple device mappings — no need for --privileged. ✨ FeaturesDrive → PWM mapping with custom fan curves, overrides, and exclusions Web UI with tabs for Drives, Config, Serial Tools, and Logs USB serial integration (auto-detects /dev/serial/by-id) Commands supported: PING, STATUS, VERSION, TEST, PWM set (0–100%) Secure UI with login/password, CSRF protection, and rate limiting Logging system with filters, in-UI view, and download option Prometheus metrics available at /metrics Unraid aware: parses disks.ini for temperature data 📦 Installation (Unraid)Install via Community Applications or add manually: Repository: ghcr.io/robro92/fanbridge:latest Map your device(s): Preferred: /dev/serial/by-id/usb-... Alternative: /dev/ttyACM0 or /dev/ttyUSB0 Add via template: Device → Add Device → pick your microcontroller Map Unraid’s disks.ini: Host: /var/local/emhttp/disks.ini Container: /unraid/disks.ini (Read-only) Optional environment variables: FANBRIDGE_SERIAL_PORT=/dev/serial/by-id/usb-... FANBRIDGE_SERIAL_BAUD=115200 FANBRIDGE_SECURE_COOKIES=1 (enable if reverse proxy w/ HTTPS) Apply and start the container. Access WebUI → http://[Unraid-IP]:8080/ First run will prompt you to create an admin user. 🔧 Configuration Drives Tab → view temperatures, spin status, toggle exclusions Config Tab → set fan curves, apply thresholds, enable auto-apply Serial Tab → PING / STATUS / VERSION tools + PWM slider Logs Tab → live logs, filters, clear + download 🔐 SecurityPassword-protected UI CSRF protection on POST endpoints Security headers + Content Security Policy Runs unprivileged (no need for --privileged) 📈 MetricsBasic Prometheus endpoint at /metrics includes: fanbridge_http_requests_total{method,code} fanbridge_serial_commands_total{kind,status} fanbridge_serial_open_failures_total 🛠 Troubleshooting“Operation not permitted” on /dev/ttyACM0 → Make sure you added the device, not bind-mounted the path. Serial not found → Map /dev/serial/by-id read-only and use that path. Logs empty → Use download function (live buffer only stores recent entries). 💬 Support & Feedback Use this thread for support, questions, and feature requests. Please include logs (/api/logs/download) and container config if reporting an issue.