必须确认硬件支持ADC或电源管理芯片且内核启用对应驱动,否则无法监控;纯USB供电或无PMIC的小主机通常不提供DC_IN读数,强行尝试返回-ENODEV错误。

要在软路由系统中实时监控主板DC输入电压的波动,必须确认硬件支持ADC(模数转换)通道或通过电源管理芯片(如IT87xx、NCT677x、ADM1027等)暴露电压寄存器,且内核已启用对应驱动。纯USB供电或无PMIC的x86小主机(如J1900、N3150主板)通常不提供DC_IN读数,强行尝试会返回-ENODEV错误。
确认主板是否暴露DC输入电压传感器
在软路由终端执行:ls /sys/class/hwmon/,查看是否存在hwmon子目录;若存在,逐个进入(如cd /sys/class/hwmon/hwmon0),运行cat name 2>/dev/null和ls in*_*_input 2>/dev/null。出现类似in0_input且cat name返回it87或nct6775时,继续下一步;若所有hwmon下均无in*_input文件,说明硬件未连接DC_IN引脚或BIOS禁用了EC传感器——此时无法监控,跳过后续步骤。
执行sudo sensors-detect,全程按回车接受默认扫描,最后观察输出末尾是否列出dc_in、vin0或in0并标注“Adapter: ISA adapter”。若未识别,【不要手动加载it87模块】,因部分Jensen系列主板加载后会导致风扇失控停转。
启用内核传感器驱动并挂载接口
编辑/etc/modules,追加一行:nct6775(适用于华硕、技嘉多数ITX软路由主板)或it87(仅限老款Intel D525平台)。保存后执行sudo modprobe nct6775。
检查是否成功加载:lsmod | grep nct6775应有输出;再运行sensors,若看到类似in0: +12.03 V (min = +11.40 V, max = +12.60 V)且标注DC IN或VIN0,说明已捕获到DC输入电压通道。
若sensors报错“No sensors found”,执行echo 'options nct6775 force_id=0xd121' | sudo tee /etc/modprobe.d/nct6775.conf(0xd121为NCT6798D ID,具体值需查sudo dmidecode -t baseboard | grep ID与Nuvoton芯片手册匹配),然后sudo rmmod nct6775 && sudo modprobe nct6775重试。
配置实时波动记录与告警
方法一:用watch命令轮询查看
执行watch -n 1 'sensors | grep "in0:"',每秒刷新一次DC输入电压值。该方式适合调试阶段快速肉眼判断波动范围,但无法保存历史数据。
方法二:写入CSV日志并用Grafana可视化
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
第一步:创建日志脚本/root/log_dc.sh,内容为:
#!/bin/shecho "$(date +'%Y-%m-%d %H:%M:%S'),$(sensors | grep 'in0:' | awk '{print $2}' | tr -d '+V')" >> /var/log/dc_voltage.csv
第二步:赋予执行权限:chmod +x /root/log_dc.sh。
第三步:添加定时任务:echo '*/5 * * * * /root/log_dc.sh' | sudo crontab -,实现每5分钟记录一次采样点。
第四步:安装chrony同步时间,避免日志时间漂移导致Grafana图表错位。
方法三:触发式电压跌落告警
编写检测脚本/root/check_dc.sh,当电压低于11.8V持续3次(间隔2秒)即发邮件并触发LED闪烁(假设有GPIO控制的LED):
for i in {1..3}; do v=$(sensors | grep 'in0:' | awk '{print $2}' | tr -d '+V' | cut -d. -f1) [ "$v" -lt 118 ] || exit 0 sleep 2doneecho 1 > /sys/class/gpio/gpio23/value && mail -s "DC LOW ALERT: $(sensors | grep 'in0:')" admin@example.com
将该脚本加入systemd timer每10秒触发一次检测。


















