[脚本]博联RM Pro获取内置温度传感器数据

博联Broadlink RM Pro/Mini、RM Home、MP1、MP2、SP mini等
版面规则
博联Broadlink RM Pro/Mini、RM Home、MP1、MP2、SP mini等
头像
DT27
帖子: 345
注册时间: 周四 3月 30, 2017 08:54
Gender:

[脚本]博联RM Pro获取内置温度传感器数据

帖子 DT27 »

本帖以树莓派为例,默认路径为~(即用户主目录/home/pi/)。
本帖介绍手动编写脚本控制博联设备,仅供大家了解脚本及博联的控制方式。
实际使用建议用插件来控制博联设备,更加方便。
插件使用过程中遇到任何问题都可以在博联专区发帖讨论。

【Domoticz】基于v3.7974 Beta 博联专版
[Domoticz插件]Broadlink MP1/MP2 兼容 鸿雁8340J
[Domoticz插件]Broadlink SP mini


RMPro中内置的温度传感器数据通过一个sh脚本获取。

①首先在Domoticz中创建一个虚拟设备
屏幕快照 2017-05-24 11.31.38.jpg
屏幕快照 2017-05-24 11.31.38.jpg (32.88 KiB) 查看 52427 次
②然后增加虚拟传感器,传感器类型为温度。
屏幕快照 2017-05-24 11.32.23.jpg
屏幕快照 2017-05-24 11.32.23.jpg (24.09 KiB) 查看 52427 次
③切换到设备菜单(设置->设备),找到刚才添加的温度虚拟传感器的idx
屏幕快照 2017-05-24 11.33.21.jpg
屏幕快照 2017-05-24 11.33.21.jpg (22.61 KiB) 查看 52427 次
④ssh登录树莓派后执行以下代码创建sh脚本

代码: 全选

sudo nano /home/pi/domoticz/scripts/getRMProTemp.sh
脚本内容

代码: 全选

#!/bin/bash
# -*- coding: UTF-8 -*-

DOMO_IP="127.0.0.1" # DomoticzIP地址
DOMO_PORT="8080" # Domoticz端口号
TEMP_IDX="40" # 虚拟温度传感器的idx
 
cd /home/pi/python-broadlink # 这里是python-broadlink库的目录
 
function sensore() {
python - << EOF
import broadlink
import time
device = broadlink.rm(host=("RMPro的IP地址",80), mac=bytearray.fromhex("RMPro的IP地址mac地址"))
device.auth()
sensor = device.check_temperature()
print sensor
EOF
}
 
# 获取温度数据
SENSORE=$(sensore)
#echo Sensore: $SENSORE
temperature=$(echo $SENSORE | cut -d' ' -f8 - | tr -d ,)
#echo $temperature
#将温度数据发送到Domoticz
if [ $(echo "$temperature <= 100"|bc) = 1 ]; #实际运行中发现有时会收到异常数据,温度大于100,所以这里将异常数据过滤掉
    then curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TEMP_IDX&svalue=$temperature";
fi
请根据注释修改响应内容。
因为是在本机运行,所以DomoticzIP地址直接填写127.0.0.1,Domoticz如果设置了密码,别忘了在信任网络中添加127.0.0.1
RMPro的IP地址例子:"192.168.1.123"
RMPro的mac地址例子:"b4 43 0d c7 39 ec"

⑤测试脚本
修改sh脚本的权限以允许执行

代码: 全选

sudo chmod 777 /home/pi/domoticz/scripts/getRMProTemp.sh
运行

代码: 全选

sudo sh /home/pi/domoticz/scripts/getRMProTemp.sh
以上命令运行后,Domoticz中应该能够显示温度了。
屏幕快照 2017-05-24 11.52.55.jpg
屏幕快照 2017-05-24 11.52.55.jpg (49.52 KiB) 查看 52427 次
⑥设置定时自动运行更新温度
linux的计划任务使用crontab命令
运行

代码: 全选

sudo crontab -e
将以下代码加入最后一行:

代码: 全选

*/5 * * * * /home/pi/domoticz/scripts/getRMProTemp.py
屏幕快照 2017-05-24 12.40.58.jpg
屏幕快照 2017-05-24 12.40.58.jpg (112.2 KiB) 查看 52425 次
意思是每隔五分钟自动执行/home/pi/domoticz/scripts/getRMProTemp.py。

保存并退出后,会提示"crontab: installing new crontab",这时计划任务已经生效了,每隔5分钟,会自动向Domoticz发送RMPro的温度数据。
chinesesich
帖子: 26
注册时间: 周二 6月 06, 2017 13:50

Re: 博联RM Pro获取内置温度传感器数据

帖子 chinesesich »

按照您的脚本,执行的时候提示:
/home/pi/domoticz/scripts/getRMProTemp.sh: 10: /home/pi/domoticz/scripts/getRMProTemp.sh: function: not found
25.3
/home/pi/domoticz/scripts/getRMProTemp.sh: 19: /home/pi/domoticz/scripts/getRMProTemp.sh: Syntax error: "}" unexpected

温度是可以获取,但是提示这两个问题,不知道怎么回事。请教
头像
Admin
网站管理员
帖子: 122
注册时间: 周六 2月 25, 2017 12:47
Gender:

Re: 博联RM Pro获取内置温度传感器数据

帖子 Admin »

chinesesich 写了: 周二 6月 06, 2017 13:52 按照您的脚本,执行的时候提示:
/home/pi/domoticz/scripts/getRMProTemp.sh: 10: /home/pi/domoticz/scripts/getRMProTemp.sh: function: not found
25.3
/home/pi/domoticz/scripts/getRMProTemp.sh: 19: /home/pi/domoticz/scripts/getRMProTemp.sh: Syntax error: "}" unexpected

温度是可以获取,但是提示这两个问题,不知道怎么回事。请教
你可以试试把代码中的两个EOF改成END
chinesesich
帖子: 26
注册时间: 周二 6月 06, 2017 13:50

Re: 博联RM Pro获取内置温度传感器数据

帖子 chinesesich »

我试过了,还是不行,提示的还是这个错误。感觉提示是语法错误,不知道什么意思。要不就是脚本不全?
头像
DT27
帖子: 345
注册时间: 周四 3月 30, 2017 08:54
Gender:

Re: 博联RM Pro获取内置温度传感器数据

帖子 DT27 »

chinesesich 写了: 周二 6月 06, 2017 18:09 我试过了,还是不行,提示的还是这个错误。感觉提示是语法错误,不知道什么意思。要不就是脚本不全?
你把你的脚本文件发上来我看看。论坛附件可以发脚本了。
chinesesich
帖子: 26
注册时间: 周二 6月 06, 2017 13:50

Re: 博联RM Pro获取内置温度传感器数据

帖子 chinesesich »

附件已将上传了,请查收。多谢啦
附件
getRMProTemp.sh
(929 Bytes) 已下载 1125 次
头像
DT27
帖子: 345
注册时间: 周四 3月 30, 2017 08:54
Gender:

Re: 博联RM Pro获取内置温度传感器数据

帖子 DT27 »

chinesesich 写了: 周三 6月 07, 2017 11:17 附件已将上传了,请查收。多谢啦
发现是我的问题 :lol:
我有罪,漏了对小括号

代码: 全选

function sensore() {
chinesesich
帖子: 26
注册时间: 周二 6月 06, 2017 13:50

Re: 博联RM Pro获取内置温度传感器数据

帖子 chinesesich »

更新了代码,然后报新的错误:
/home/pi/domoticz/scripts/getRMProTemp.sh: 10: /home/pi/domoticz/scripts/getRMProTemp.sh: Syntax error: "(" unexpected
chinesesich
帖子: 26
注册时间: 周二 6月 06, 2017 13:50

Re: 博联RM Pro获取内置温度传感器数据

帖子 chinesesich »

chinesesich 写了: 周三 6月 07, 2017 13:44 更新了代码,然后报新的错误:
/home/pi/domoticz/scripts/getRMProTemp.sh: 10: /home/pi/domoticz/scripts/getRMProTemp.sh: Syntax error: "(" unexpected
百度了一下,执行bash之后,报错如下:
/home/pi/domoticz/scripts/getRMProTemp.sh: line 29: syntax error near unexpected token `fi'
/home/pi/domoticz/scripts/getRMProTemp.sh: line 29: `fi'
头像
DT27
帖子: 345
注册时间: 周四 3月 30, 2017 08:54
Gender:

Re: 博联RM Pro获取内置温度传感器数据

帖子 DT27 »

chinesesich 写了: 周三 6月 07, 2017 16:01
chinesesich 写了: 周三 6月 07, 2017 13:44 更新了代码,然后报新的错误:
/home/pi/domoticz/scripts/getRMProTemp.sh: 10: /home/pi/domoticz/scripts/getRMProTemp.sh: Syntax error: "(" unexpected
百度了一下,执行bash之后,报错如下:
/home/pi/domoticz/scripts/getRMProTemp.sh: line 29: syntax error near unexpected token `fi'
/home/pi/domoticz/scripts/getRMProTemp.sh: line 29: `fi'
:cry: 我都不想承认帖子是我发的了。。。

代码: 全选

    curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TEMP_IDX&svalue="$temperature""
改成:

代码: 全选

    then curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TEMP_IDX&svalue=$temperature";
chinesesich
帖子: 26
注册时间: 周二 6月 06, 2017 13:50

Re: 博联RM Pro获取内置温度传感器数据

帖子 chinesesich »

DT27 写了: 周三 6月 07, 2017 16:13
chinesesich 写了: 周三 6月 07, 2017 16:01
chinesesich 写了: 周三 6月 07, 2017 13:44 更新了代码,然后报新的错误:
/home/pi/domoticz/scripts/getRMProTemp.sh: 10: /home/pi/domoticz/scripts/getRMProTemp.sh: Syntax error: "(" unexpected
百度了一下,执行bash之后,报错如下:
/home/pi/domoticz/scripts/getRMProTemp.sh: line 29: syntax error near unexpected token `fi'
/home/pi/domoticz/scripts/getRMProTemp.sh: line 29: `fi'
:cry: 我都不想承认帖子是我发的了。。。

代码: 全选

    curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TEMP_IDX&svalue="$temperature""
改成:

代码: 全选

    then curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TEMP_IDX&svalue=$temperature";
还得麻烦您,按照您的更改,报错如下:
/home/pi/domoticz/scripts/getRMProTemp.sh: line 27: bc: command not found
/home/pi/domoticz/scripts/getRMProTemp.sh: line 27: [: missing `]'
然后我注释掉if——then——fi这几句,运行正常~~ :shock: :shock:
头像
DT27
帖子: 345
注册时间: 周四 3月 30, 2017 08:54
Gender:

Re: 博联RM Pro获取内置温度传感器数据

帖子 DT27 »

chinesesich 写了: 周三 6月 07, 2017 16:21
DT27 写了: 周三 6月 07, 2017 16:13
chinesesich 写了: 周三 6月 07, 2017 16:01

百度了一下,执行bash之后,报错如下:
/home/pi/domoticz/scripts/getRMProTemp.sh: line 29: syntax error near unexpected token `fi'
/home/pi/domoticz/scripts/getRMProTemp.sh: line 29: `fi'
:cry: 我都不想承认帖子是我发的了。。。

代码: 全选

    curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TEMP_IDX&svalue="$temperature""
改成:

代码: 全选

    then curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TEMP_IDX&svalue=$temperature";
还得麻烦您,按照您的更改,报错如下:
/home/pi/domoticz/scripts/getRMProTemp.sh: line 27: bc: command not found
/home/pi/domoticz/scripts/getRMProTemp.sh: line 27: [: missing `]'
然后我注释掉if——then——fi这几句,运行正常~~ :shock: :shock:
“bc: command not found” 意思是没找到bc命令,说明你系统里没装bc。
ssh里运行

代码: 全选

sudo apt-get install bc
然后再测试脚本
chinesesich
帖子: 26
注册时间: 周二 6月 06, 2017 13:50

Re: 博联RM Pro获取内置温度传感器数据

帖子 chinesesich »

DT27 写了: 周三 6月 07, 2017 16:33
chinesesich 写了: 周三 6月 07, 2017 16:21
DT27 写了: 周三 6月 07, 2017 16:13

:cry: 我都不想承认帖子是我发的了。。。

代码: 全选

    curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TEMP_IDX&svalue="$temperature""
改成:

代码: 全选

    then curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TEMP_IDX&svalue=$temperature";
还得麻烦您,按照您的更改,报错如下:
/home/pi/domoticz/scripts/getRMProTemp.sh: line 27: bc: command not found
/home/pi/domoticz/scripts/getRMProTemp.sh: line 27: [: missing `]'
然后我注释掉if——then——fi这几句,运行正常~~ :shock: :shock:
“bc: command not found” 意思是没找到bc命令,说明你系统里没装bc。
ssh里运行

代码: 全选

sudo apt-get install bc
然后再测试脚本
搞定了,大神的脚本还有个错误,如果改成then的哈,上面一句的if最后的;要删除,不然报错。
另外我这里执行需要bash,sh命令不行。
chinesesich
帖子: 26
注册时间: 周二 6月 06, 2017 13:50

Re: 博联RM Pro获取内置温度传感器数据

帖子 chinesesich »

那个自动更新温度的命令是不是也是错的了?
这么写:
*/5 * * * bash /home/pi/domoticz/scripts/getRMProTemp.sh
头像
DT27
帖子: 345
注册时间: 周四 3月 30, 2017 08:54
Gender:

Re: 博联RM Pro获取内置温度传感器数据

帖子 DT27 »

chinesesich 写了: 周三 6月 07, 2017 17:21 那个自动更新温度的命令是不是也是错的了?
这么写:
*/5 * * * bash /home/pi/domoticz/scripts/getRMProTemp.sh
sh一般linux环境里默认软链接到bash,手动建立软链接的命令:

代码: 全选

sudo ln -s bash /bin/sh -f
这么写也行,后面那串用不用都行。
另外,bash里if语法:

代码: 全选

if 条件; then
    语句
fi
sxren1
帖子: 51
注册时间: 周三 5月 24, 2017 10:04

Re: 博联RM Pro获取内置温度传感器数据

帖子 sxren1 »

pi@raspberrypi:~ $ sudo bash /home/pi/domoticz/scripts/getRMProTemp.sh
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
File "broadlink/__init__.py", line 203, in auth
response = self.send_packet(0x65, payload)
File "broadlink/__init__.py", line 279, in send_packet
response = self.cs.recvfrom(1024)
socket.timeout: timed out
(standard_in) 1: syntax error
/home/pi/domoticz/scripts/getRMProTemp.sh: line 27: [: =: unary operator expected
现在是这个错误了,大神怎么解
头像
DT27
帖子: 345
注册时间: 周四 3月 30, 2017 08:54
Gender:

Re: 博联RM Pro获取内置温度传感器数据

帖子 DT27 »

sxren1 写了: 周四 6月 08, 2017 20:51 pi@raspberrypi:~ $ sudo bash /home/pi/domoticz/scripts/getRMProTemp.sh
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
File "broadlink/__init__.py", line 203, in auth
response = self.send_packet(0x65, payload)
File "broadlink/__init__.py", line 279, in send_packet
response = self.cs.recvfrom(1024)
socket.timeout: timed out
(standard_in) 1: syntax error
/home/pi/domoticz/scripts/getRMProTemp.sh: line 27: [: =: unary operator expected
现在是这个错误了,大神怎么解
你先输入python回车,然后输入

代码: 全选

import broadlink
import time
device = broadlink.rm(host=("RMPro的IP地址",80), mac=bytearray.fromhex("RMPro的IP地址mac地址"))
device.auth()
sensor = device.check_temperature()
print sensor
看看能不能连上设备。
sxren1
帖子: 51
注册时间: 周三 5月 24, 2017 10:04

Re: 博联RM Pro获取内置温度传感器数据

帖子 sxren1 »

pi@raspberrypi:~ $ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import broadlink
>>> import time
>>> device = broadlink.rm(host=("192.168.0.2",80), mac=bytearray.fromhex("b4 43 0d ca c1 c9"))
>>> device.auth()

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/broadlink/__init__.py", line 203, in auth
response = self.send_packet(0x65, payload)
File "/usr/local/lib/python2.7/dist-packages/broadlink/__init__.py", line 274, in send_packet
response = self.cs.recvfrom(1024)
socket.timeout: timed out
>>> sensor = device.check_temperature()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/broadlink/__init__.py", line 487, in check_temperature
response = self.send_packet(0x6a, packet)
File "/usr/local/lib/python2.7/dist-packages/broadlink/__init__.py", line 274, in send_packet
response = self.cs.recvfrom(1024)
socket.timeout: timed out
>>> print sensor
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sensor' is not defined
>>> fi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'fi' is not defined
>>>
现在是这个报错了,请大神指教
头像
Admin
网站管理员
帖子: 122
注册时间: 周六 2月 25, 2017 12:47
Gender:

Re: 博联RM Pro获取内置温度传感器数据

帖子 Admin »

运行到device.auth()就出错误,错误提示是超时。
说明脚本本身没有问题,问题出在python-broadlink无法连接到设备。

然后python-broadlink本身应该不会有什么问题。那就是网络或者设备的问题了。
  • 确保所有设备都在一个网段里。
  • 确认你的IP跟Mac地址没错,建议在路由器里给设备分配静态IP,然后重启路由器与设备。
  • 然后确认RMPro运行正常。
chinesesich
帖子: 26
注册时间: 周二 6月 06, 2017 13:50

Re: 博联RM Pro获取内置温度传感器数据

帖子 chinesesich »

大神能写一个查询树莓派的CPU温度的脚本嘛? :D :D
回复