Fibaro Home Center 2和恒温器,用于地板采暖HeatIt。 如何提高温度

我面临着从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 ”。

主循环:

--       ,       : floor_temp = fibaro:getValue(8, 'value') currentSetPoint = tonumber(fibaro:getValue(7, 'value')) mode = fibaro:getValue(9, 'mode') --     fibaro:call(12, "setProperty", "ui.Label1.value", floor_temp) --               if (mode == '1') then fibaro:call(12, "setProperty", "ui.Label3.value", "ON") fibaro:call(12, "setProperty", "ui.Label2.value", currentSetPoint) elseif (mode == '11') then fibaro:call(12, "setProperty", "ui.Label3.value", "ECO") fibaro:call(12, "setProperty", "ui.Label2.value", currentSetPoint) elseif (mode == '0') then fibaro:call(12, "setProperty", "ui.Label3.value", "OFF") fibaro:call(12, "setProperty", "ui.Label2.value", "OFF") end 

接下来,我们为按钮编写脚本:
使用模式选择按钮,一切都很简单:
“关”:

 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')) --  ,        40  if (currentSetPoint < 40) then setPoint = currentSetPoint + 1 else setPoint = 40 end --      fibaro:call(7, 'setThermostatSetpoint',11, setPoint) 

对于“-”按钮:

 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的控制,因此这是一个临时解决方案。

Source: https://habr.com/ru/post/zh-CN436344/


All Articles