梅林(Merlin)系统的路由器获取CPU温度并同步到Domoticz

回复
头像
DT27
帖子: 246
注册时间: 周四 3月 30, 2017 08:54
GitHub: https://github.com/DT27
联系:

梅林(Merlin)系统的路由器获取CPU温度并同步到Domoticz

帖子 DT27 » 周三 8月 23, 2017 16:53

屏幕快照 2017-08-23 16.52.43.jpg
屏幕快照 2017-08-23 16.52.43.jpg (17.06 KiB) 查看 2641 次
屏幕快照 2017-08-23 16.53.13.jpg
屏幕快照 2017-08-23 16.53.13.jpg (14.04 KiB) 查看 2641 次
很简单,ssh到路由,然后执行“cat /proc/dmu/temperature”就取到温度了。
这里基于树莓派,用python(Python2)来进行ssh,其它系统应该也差不多。
具体步骤:
0、Domoticz中新建虚拟设备,类型选择温度,然后到设备列表记住该设备的IDX,后面要用。
1、开启路由SSH。路由器管理界面,系统管理>系统设置,Enable SSH选择LAN only,仅允许局域网访问,其它默认。
屏幕快照 2017-08-23 16.41.17.jpg
屏幕快照 2017-08-23 16.41.17.jpg (27.86 KiB) 查看 2641 次
2、安装python的ssh模块paramiko(这一步需要安装的依赖项目挺多了,请耐心等待):

代码: 全选

sudo pip install paramiko
3、新建python脚本 router.py(我放在domoticz/scripts/python目录里)

代码: 全选

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import paramiko
import urllib2
import re

#Domoticz服务器
domoticzserver = "127.0.0.1:8080"
#设备IDX
idx = "44"

#此方法向Domoticz服务器发送请求
def domoticzrequest (url):
    request = urllib2.Request(url)
    response = urllib2.urlopen(request)
    return response.read()

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#路由IP格式:192.168.1.1
ssh.connect(hostname='路由IP地址', port=22, username='路由登录用户名', password='登录密码')
cmd = 'cat /proc/dmu/temperature'
stdin, stdout, stderr = ssh.exec_command(cmd)
result = stdout.read()
temp = re.findall(u'(\d+)',result)

domoticzrequest("http://"+domoticzserver+"/json.htm?type=command&param=udevice&idx="+idx+"&nvalue=0&svalue="+temp[0])
保存后,为文件添加执行权限(感谢 wangshizf 提醒):

代码: 全选

sudo chmod +x router.py
然后执行“python router.py”测试是否能正常更新到domoticz。

4、设置定期(例如每隔15分钟)执行脚本。执行:

代码: 全选

sudo crontab -e
在文件末尾新行加入:

代码: 全选

*/15 * * * * /home/pi/domoticz/scripts/python/router.py
完成!

vonzeng
帖子: 27
注册时间: 周二 6月 06, 2017 12:38

Re: 梅林(Merlin)系统的路由器获取CPU温度并同步到Domoticz

帖子 vonzeng » 周三 8月 23, 2017 22:41

点赞!
图片
附件
QQ20170823-1.png
QQ20170823-1.png (48.07 KiB) 查看 2621 次

blindlight
帖子: 93
注册时间: 周四 3月 30, 2017 00:03

Re: 梅林(Merlin)系统的路由器获取CPU温度并同步到Domoticz

帖子 blindlight » 周三 8月 23, 2017 23:29

lede的命令是sensors,获取字段根据实际情况调整,其他东西照旧类推

代码: 全选

sensor = os.popen('sensors')
temp = sensor.read().splitlines()
core0_temp = temp[2][15:19]

wangshizf
帖子: 3
注册时间: 周一 6月 19, 2017 09:49

Re: 梅林(Merlin)系统的路由器获取CPU温度并同步到Domoticz

帖子 wangshizf » 周四 8月 24, 2017 12:43

感谢分享,本人小白,基本只会照葫芦画瓢,今天画了一上午,两个坑,第一个是安装paramiko报错,搜了半天找到一个解决办法,sudo apt-get install -y build-essential libssl-dev libffi-dev。第二个是在PYTHON文件夹下执行router.py能正常读取温度,可是不能自动更新,后来发现是权限不够,chmod 777 /home/pi/domoticz/scripts/python/router.py 解决。
再次感谢

头像
DT27
帖子: 246
注册时间: 周四 3月 30, 2017 08:54
GitHub: https://github.com/DT27
联系:

Re: 梅林(Merlin)系统的路由器获取CPU温度并同步到Domoticz

帖子 DT27 » 周四 8月 24, 2017 12:51

wangshizf 写了:
周四 8月 24, 2017 12:43
感谢分享,本人小白,基本只会照葫芦画瓢,今天画了一上午,两个坑,第一个是安装paramiko报错,搜了半天找到一个解决办法,sudo apt-get install -y build-essential libssl-dev libffi-dev。第二个是在PYTHON文件夹下执行router.py能正常读取温度,可是不能自动更新,后来发现是权限不够,chmod 777 /home/pi/domoticz/scripts/python/router.py 解决。
再次感谢
感谢分享解决方案 :)

回复