请选择 进入手机版 | 继续访问电脑版

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

 找回密码
 立即注册
查看: 197866|回复: 813

[进阶教程] 梅林路由器CPU和无线芯片温度接入Home Assistant

  [复制链接]

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16399
金钱
11653
HASS币
45
发表于 2018-4-22 16:39:47 | 显示全部楼层 |阅读模式
先上效果:

1.png

2.png


背景:受群里@ABC大神启发,可以将K3(已刷梅林固件)的CPU温度等信息导入HASS,但他貌似遇到了困难(我何尝没有遇到啊!听我慢慢讲来)。

思路方面,本来是可以写一个自定义插件来接入,但今天我想换一种思路,在路由器的梅林(merlin)系统内,用shell脚本获取芯片温度,并通过curl post数据到hass的API上,以实现数据更新。

遇到的坑们:

坑1:命令行获取CPU温度后,有无法显示出来的字符(实际是摄氏度的标记),导致一直无法正确构成JSON,导致提交失败;
坑2:template sensor建立后,是可以通过API来更新数据,但是,前端并不体现。。。最后没办法,只能通过一个input_number来中转一下,显示到template sensor中;
坑3:梅林的crontab根本无法使用,数据无法自动更新!找半天才找到正确的cron任务设置方式!

不说了,说多了都是泪……开始教程吧。。。

游客,如果您要查看本帖隐藏内容请回复


Happy automating!







评分

参与人数 3金钱 +9 收起 理由
lengxiao7890 + 1 感谢楼主分享!
bilubin + 7 CPU那个确实是哥坑,哈哈
咸味土豆 + 1 多给一毛

查看全部评分

回复

使用道具 举报

26

主题

553

帖子

2728

积分

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2150
HASS币
100

教程狂人

发表于 2018-4-22 16:44:05 | 显示全部楼层
正好也在研究,先膜拜囧帅神贴。
回复

使用道具 举报

4

主题

531

帖子

3997

积分

论坛元老

Rank: 8Rank: 8

积分
3997
金钱
3456
HASS币
120
发表于 2018-4-22 16:46:51 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

26

主题

553

帖子

2728

积分

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2150
HASS币
100

教程狂人

发表于 2018-4-22 16:48:07 | 显示全部楼层
本帖最后由 Mirukuteii 于 2018-4-22 16:49 编辑

可惜snmp不能提供温度,而ASUSWRT的asp文件中是这样获取温度的:

curr_coreTmp_2_raw = "<% sysinfo("temperature.2"); %>";
curr_coreTmp_2 = (curr_coreTmp_2_raw.indexOf("disabled") > 0 ? 0 : curr_coreTmp_2_raw.replace("°C", ""));
curr_coreTmp_5_raw = "<% sysinfo("temperature.5"); %>";
curr_coreTmp_5 = (curr_coreTmp_5_raw.indexOf("disabled") > 0 ? 0 : curr_coreTmp_5_raw.replace("°C", ""));
curr_coreTmp_cpu = "<% get_cpu_temperature(); %>";

function update_temperatures(){
$.ajax({
url: '/ajax_coretmp.asp',
dataType: 'script',
error: function(xhr){
update_temperatures();
},
success: function(response){
code = "<b>2.4 GHz:</b><span> " + curr_coreTmp_2_raw + "</span>";
if (band5g_support)
code += "  -  <b>5 GHz:</b> <span>" + curr_coreTmp_5_raw + "</span>";
if (curr_coreTmp_cpu != "")
code +="  -  <b>CPU:</b> <span>" + curr_coreTmp_cpu +"°C</span>";
document.getElementById("temp_td").innerHTML = code;
setTimeout("update_temperatures();", 3000);
}
});
}

回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16399
金钱
11653
HASS币
45
 楼主| 发表于 2018-4-22 16:58:56 | 显示全部楼层
Mirukuteii 发表于 2018-4-22 16:48
可惜snmp不能提供温度,而ASUSWRT的asp文件中是这样获取温度的:[code]
curr_coreTmp_2_ ...

这个是可以通过模拟登录来实现,但http模拟登录是下下策,影响用户正常登录。
回复

使用道具 举报

0

主题

106

帖子

720

积分

论坛积极会员

积分
720
金钱
614
HASS币
0
发表于 2018-4-22 17:03:10 | 显示全部楼层
谢谢楼主分享!学习。
回复

使用道具 举报

14

主题

266

帖子

1639

积分

论坛技术达人

积分
1639
金钱
1352
HASS币
40

教程狂人

发表于 2018-4-22 17:07:43 | 显示全部楼层
Mirukuteii 发表于 2018-4-22 16:48
可惜snmp不能提供温度,而ASUSWRT的asp文件中是这样获取温度的:[code]
curr_coreTmp_2_ ...

SNMP是可以提供的,要知道snmp是可以自定义的,并且支持bash来传递
回复

使用道具 举报

26

主题

553

帖子

2728

积分

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2150
HASS币
100

教程狂人

发表于 2018-4-22 17:08:57 | 显示全部楼层
Jones 发表于 2018-4-22 16:58
这个是可以通过模拟登录来实现,但http模拟登录是下下策,影响用户正常登录。 ...

额?我的意思并不是通过http登陆,这必然不可取,我指的是固件前端获取温度值的方法sysinfo
回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16399
金钱
11653
HASS币
45
 楼主| 发表于 2018-4-22 17:09:36 | 显示全部楼层
Mirukuteii 发表于 2018-4-22 17:08
额?我的意思并不是通过http登陆,这必然不可取,我指的是固件前端获取温度值的方法sysinfo ...

不授权是访问不到的。。。
回复

使用道具 举报

26

主题

553

帖子

2728

积分

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2150
HASS币
100

教程狂人

发表于 2018-4-22 17:24:59 来自手机 | 显示全部楼层
Jones 发表于 2018-4-22 17:09
不授权是访问不到的。。。

可以ssh呀
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-10-12 10:18 , Processed in 0.131571 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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