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

 找回密码
 立即注册
查看: 1123|回复: 5

[进阶教程] windows下用powershell自动发送SMART信息邮件,监控硬盘/SSD信息

[复制链接]

57

主题

402

帖子

3013

积分

论坛元老

Rank: 8Rank: 8

积分
3013
金钱
2611
HASS币
0
发表于 2023-3-1 17:26:49 | 显示全部楼层 |阅读模式
本帖最后由 李丑男 于 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–>创建任务
触发器.png    powershell.png
程序或脚本位置(P):
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
添加参数(可选)(A):
-windowstyle hidden -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Unrestricted -File "D:\sendmail.ps1"
条件.png
到这一步,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的文件夹下,比较整洁和方便。
最后就是长这个样子。
屏幕截图 2023-03-01 172526.png
更多可以参考官方的文档
https://www.home-assistant.io/integrations/imap_email_content/

回复

使用道具 举报

7

主题

95

帖子

710

积分

高级会员

Rank: 4

积分
710
金钱
615
HASS币
0
发表于 2023-3-1 17:52:22 | 显示全部楼层
还能这么玩,学习了。谢谢。
回复

使用道具 举报

2

主题

135

帖子

2276

积分

金牌会员

Rank: 6Rank: 6

积分
2276
金钱
2141
HASS币
0
发表于 2023-3-1 21:17:07 | 显示全部楼层
回复

使用道具 举报

57

主题

402

帖子

3013

积分

论坛元老

Rank: 8Rank: 8

积分
3013
金钱
2611
HASS币
0
 楼主| 发表于 2023-3-2 08:32:08 | 显示全部楼层
zonglong 发表于 2023-3-1 21:17
推薦 https://github.com/richibrics/IoTuring/tree/main/IoTuring

不错,这个也挺好的。
回复

使用道具 举报

0

主题

562

帖子

2185

积分

金牌会员

Rank: 6Rank: 6

积分
2185
金钱
1623
HASS币
0
发表于 2023-3-2 11:07:41 | 显示全部楼层
能研究下exis的嘛
回复

使用道具 举报

57

主题

402

帖子

3013

积分

论坛元老

Rank: 8Rank: 8

积分
3013
金钱
2611
HASS币
0
 楼主| 发表于 2023-3-2 16:23:37 | 显示全部楼层
Ari 发表于 2023-3-2 11:07
能研究下exis的嘛

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-28 12:58 , Processed in 1.062439 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表