本帖最后由 李丑男 于 2023-3-1 17:29 编辑
写在前面:前段时间使用SNMP的方式来监控了“我家云”上面的硬盘温度和Padavan上的硬盘温度。就想着怎么把笔记本电脑上的SSD也一起监控起来,最早也想着在windows上设置SNMP,但是研究了一下windows上的SNMP,要执行脚本配置起来比较麻烦。然后就用SCP配合Command line Sensor来做,也成功了,但是觉得还是不够好。最近搞定了使用邮件的方式来监控windows下面的硬盘SMART信息。分享给大家。
1.安装smartmontools软件,去官网下载这个小软件。安装一下就可以了。
https://www.smartmontools.org/
2.在windows的终端上测试smart信息,正常应该会输出你的硬盘信息,如果有多块,那就使用sdb、sdc切换。看看哪块是你想的。
> smartctl -A /dev/sda
复制代码
3.编写PowerShell脚本,实现自动获取SMART信息并用邮件发送出去,这个大家根据自己的邮箱信息进行配置。蛋疼的 ForEach-Object { $_ + "`r`n" } 信息,搞了我2天才搞定。要不在HomeAssistant下一直解析不正确。
$EmailFrom = "******@icloud.com"
$EmailTo = "******@hotmail.com"
$Subject = "OptaneSSD"
$Body = (smartctl -A -j /dev/sda) | ForEach-Object { $_ + "`r`n" }
$SMTPServer = "smtp.mail.me.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("mail-name", "password");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
复制代码
4.将上面的脚本保存为后缀名是.ps1的文件,然后在PowerShell终端里面测试一下看是否可以正常发送接收邮件。
Powershell.exe -executionpolicy remotesigned -File sendemail.ps1
复制代码
5.如果正常,就可以创建windows的定时任务了。
任务计划程序–>任务计划程序库–>windows–>创建任务
复制代码
程序或脚本位置(P):
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
复制代码
添加参数(可选)(A):
-windowstyle hidden -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Unrestricted -File "D:\sendmail.ps1"
复制代码
到这一步,windows上面的就都完成了, 大家根据自己的需要,调整自动发送邮件的频率和各种条件。
6.添加HomeAssistant的IMAP Email Content传感器
sensor:
- platform: imap_email_content
server: outlook.office365.com
name: OptaneSSD
port: 993
username: ******@hotmail.com
password: ******
folder: OptaneSSD
senders:
- ******@icloud.com
复制代码
template:
- sensor:
- name: "Optane temperature" #傲腾SSD温度
unit_of_measurement: "°C"
unique_id: 1200000000104
state: >
{% set temp=state_attr('sensor.OptaneSSD', 'body')|from_json %}{{temp.temperature.current}}
- sensor:
- name: "Optane life" #傲腾SSD使用寿命
unit_of_measurement: "%"
unique_id: 1200000000105
state: >
{% set temp=state_attr('sensor.OptaneSSD', 'body')|from_json %}{{temp.nvme_smart_health_information_log.percentage_used}}
- sensor:
- name: "Optane witten" #傲腾SSD写入量
unit_of_measurement: "GiB"
unique_id: 1200000000106
state: >
{% set temp=state_attr('sensor.OptaneSSD', 'body')|from_json %}{{((temp.nvme_smart_health_information_log.data_units_written | float) *512*1000/1024/1024/1024) | round(2)}}
复制代码
这个大家根据自己解析出来的JSON文件来选取里面的信息。还有就是邮箱里面到时会出现很多邮件,我是创建了一个规则,把这些邮件都归整到一个Optane的文件夹下,比较整洁和方便。
最后就是长这个样子。
更多可以参考官方的文档
https://www.home-assistant.io/integrations/imap_email_content/