我面临着从Fibaro Home Center 2控制地板采暖的任务。 应客户要求,恒温器应基于地板温度。 决定使用HeatIt温控器。

它们最适合客户要求:
- 简约设计
- 尽可能熄灭面板上所有物品的能力
- 根据地板温度工作的能力
- 与外部继电器直接关联的可能性(由于地板采暖是水,您需要控制锅炉房中的继电器,这些继电器会打开相应回路的阀门)
在研究了网络上的一些资料之后,我发现“凉爽的” Fibaro Home Center 2无法将恒温器在Web界面中定期设置为温度> 30度,在移动应用程序中将温度设定为> 28度。 对于最高地板温度,当然还不够。

同时,使用HeatIt温控器可以将温度设置为40度。 问题是为什么Fibaro不允许安装程序设置可能的温度范围。 好吧,我想,我们会想出一些办法。 甚至有一个想法是用一个额外的电阻来改变NTC传感器的读数,但随后客户将不得不习惯条件“鹦鹉”中的温度读数,这不好。
有一个主意,但是如果我们以某种方式获得更大的价值,该怎么办?
Fibaro REST API中描述了Web客户端与Home Center 2之间的交换
但是我发现拦截Wireshark中的所有命令更加容易。
专门用于HeatIt:
POST / API /设备/ 9 /操作/ setMode {“ args”:[1]}
POST / API /设备/ 9 /操作/ setSetpointMode {“ args”:[1]}
POST / api /设备/ 9 /操作/ setThermostatSetpoint {“ args”:[1,27]}
内容描述setMode-模式选择(参数:1-加热,11-经济加热,0-关闭)
setSetpointMode-选择显示安装温度的模式(参数相同)
setThermostatSetpoint-设置模式的目标温度(相应地,第一个参数是mode,第二个参数是温度)
您还可以发送以下请求:
GET / api / callAction?DeviceID = ID和名称= setThermostatSetpoint&arg1 = MODE&arg2 =温度值
等
您还可以通过REST请求了解所有已安装设备的所有命令和值:
GET / API /设备
因此,我们向恒温器发送了35度的温度,并且可以看到,恒温器接受了它。
现在的任务是提出一个替代方案,以对恒温器进行全时控制。
第一个选项是Fibaro虚拟设备。
我草绘了表格:

开始编写脚本:
首先,我们将找到所有感兴趣的设备的ID。为此,请转到与恒温器相关的每个“设备”的设置,然后在页面或浏览器的地址栏中查看ID。
在我的情况下,用于设置目标温度的设备(setPoint)-ID:
7地板温度传感器-ID:
8温控器操作模式选择-ID:
9

另外,我们的虚拟设备也有自己的ID,只能在浏览器的地址栏中看到,我有ID
12 。 此外,在我的情况下,虚拟设备的每个元素也都有自己的ID:
“目前的速度。” 我有ID“
Label1 ”,“目标温度”-ID“
Label2 ”
按钮“ +”和“-”-ID“
Button1 ”和ID“
Button2 ”。 “模式”-ID“标签1”。
好吧,按钮“ OFF”,“ ECO”和“ ON”分别是ID“
Button3 ”,ID“
Button4 ”和ID“
Button5 ”。
主循环:
接下来,我们为按钮编写脚本:
使用模式选择按钮,一切都很简单:
“关”:
fibaro:call(9, 'setMode',0)
“ ECO”:
fibaro:call(9, 'setMode',11) fibaro:call(7, 'setSetpointMode',11)
“开”:
fibaro:call(9, 'setMode',1) fibaro:call(7, 'setSetpointMode',1)
对于“ +”按钮:
对于“-”按钮:
currentSetPoint = tonumber(fibaro:getValue(7, 'value')) if (currentSetPoint > 5) then setPoint = currentSetPoint - 1 else setPoint = 5 end fibaro:call(7, 'setThermostatSetpoint',11, setPoint)
总的来说,一切。
它工作正常,唯一的问题是按下按钮后的延迟。 如果您从本地网络进行管理,则为1-2秒,但是如果您是远程管理,则延迟可能长达10秒。 即 如有必要,远程将温度升高或降低12度可能需要几分钟。
通常,这当然是拐杖,但是没有其他出路。 在其他方面,展望未来,我将说整个系统最终将受到Iridium Mobile的控制,因此这是一个临时解决方案。