『瀚思彼岸』» 智能家居技术论坛

标题: windows下用powershell自动发送SMART信息邮件,监控硬盘/SSD信息 [打印本页]

作者: 李丑男    时间: 2023-3-1 17:26
标题: windows下用powershell自动发送SMART信息邮件,监控硬盘/SSD信息
本帖最后由 李丑男 于 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切换。看看哪块是你想的。
  1. > smartctl -A /dev/sda
复制代码
3.编写PowerShell脚本,实现自动获取SMART信息并用邮件发送出去,这个大家根据自己的邮箱信息进行配置。蛋疼的 ForEach-Object { $_ + "`r`n" } 信息,搞了我2天才搞定。要不在HomeAssistant下一直解析不正确。
  1. $EmailFrom = "******@icloud.com"
  2. $EmailTo = "******@hotmail.com"
  3. $Subject = "OptaneSSD"
  4. $Body = (smartctl -A -j /dev/sda) | ForEach-Object { $_ + "`r`n" }
  5. $SMTPServer = "smtp.mail.me.com"
  6. $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
  7. $SMTPClient.EnableSsl = $true
  8. $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("mail-name", "password");
  9. $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
复制代码
4.将上面的脚本保存为后缀名是.ps1的文件,然后在PowerShell终端里面测试一下看是否可以正常发送接收邮件。
  1. Powershell.exe -executionpolicy remotesigned -File sendemail.ps1
复制代码
5.如果正常,就可以创建windows的定时任务了。
  1. 任务计划程序–>任务计划程序库–>windows–>创建任务
复制代码
[attach]45799[/attach]  [attach]45798[/attach]
程序或脚本位置(P):
  1. C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
复制代码
添加参数(可选)(A):
  1. -windowstyle hidden -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Unrestricted -File "D:\sendmail.ps1"
复制代码
[attach]45800[/attach]
到这一步,windows上面的就都完成了, 大家根据自己的需要,调整自动发送邮件的频率和各种条件。
6.添加HomeAssistant的IMAP Email Content传感器
  1. sensor:
  2.   - platform: imap_email_content
  3.     server: outlook.office365.com
  4.     name: OptaneSSD
  5.     port: 993
  6.     username: ******@hotmail.com
  7.     password: ******
  8.     folder: OptaneSSD
  9.     senders:
  10.     - ******@icloud.com
复制代码
  1. template:
  2.   - sensor:
  3.     - name: "Optane temperature" #傲腾SSD温度
  4.       unit_of_measurement: "°C"
  5.       unique_id: 1200000000104
  6.       state: >
  7.       {% set temp=state_attr('sensor.OptaneSSD', 'body')|from_json %}{{temp.temperature.current}}
  8.   - sensor:
  9.     - name: "Optane life"  #傲腾SSD使用寿命
  10.       unit_of_measurement: "%"
  11.       unique_id: 1200000000105
  12.       state: >
  13.       {% set temp=state_attr('sensor.OptaneSSD', 'body')|from_json %}{{temp.nvme_smart_health_information_log.percentage_used}}
  14.   - sensor:
  15.     - name: "Optane witten"  #傲腾SSD写入量
  16.       unit_of_measurement: "GiB"
  17.       unique_id: 1200000000106
  18.       state: >
  19.       {% 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的文件夹下,比较整洁和方便。
最后就是长这个样子。
[attach]45801[/attach]
更多可以参考官方的文档
https://www.home-assistant.io/integrations/imap_email_content/


作者: qqkj    时间: 2023-3-1 17:52
还能这么玩,学习了。谢谢。
作者: zonglong    时间: 2023-3-1 21:17
推薦 https://github.com/richibrics/IoTuring/tree/main/IoTuring
作者: 李丑男    时间: 2023-3-2 08:32
zonglong 发表于 2023-3-1 21:17
推薦 https://github.com/richibrics/IoTuring/tree/main/IoTuring

不错,这个也挺好的。
作者: Ari    时间: 2023-3-2 11:07
能研究下exis的嘛
作者: 李丑男    时间: 2023-3-2 16:23
Ari 发表于 2023-3-2 11:07
能研究下exis的嘛

我都没有合适的设备玩这个,要不要贡献一个硬件




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5