Fibaro Home Center 2 y termostato para calefacción por suelo radiante HeatIt. Cómo elevar la temperatura.

Me enfrenté a la tarea de controlar un piso cálido desde la interfaz de Fibaro Home Center 2. Parece ser una tarea simple, pero no. A solicitud del cliente, los termostatos deben basarse en la temperatura del piso. Se decidió utilizar termostatos HeatIt.

imagen

Se adaptaban mejor a los requisitos del cliente:

  • diseño minimalista
  • la capacidad de extinguir tanto como sea posible lo que está encendido en el panel
  • la capacidad de trabajar según la temperatura del piso
  • la posibilidad de asociación directa con relés externos (debido a que la calefacción por suelo radiante es agua, debe controlar los relés ubicados en la sala de calderas, que abren y cierran las válvulas de los circuitos correspondientes)

Después de estudiar algunos materiales en la red, descubrí que el "genial" Fibaro Home Center 2 no sabe cómo configurar los termostatos a temperaturas> 30 grados en la interfaz web y> 28 grados en la aplicación móvil. Lo que para la temperatura máxima del piso, por supuesto, no es suficiente.

imagen

Al mismo tiempo, los termostatos HeatIt permiten configurar hasta 40 grados. La pregunta es por qué Fibaro no permite que el instalador establezca el rango de temperaturas posibles. Bueno, de acuerdo, pensé, se nos ocurrirá algo. Incluso hubo una idea de cambiar las lecturas del sensor NTC con una resistencia adicional, pero luego el cliente tendría que acostumbrarse a las lecturas de temperatura en los "loros" condicionales, lo que no es bueno.

Hubo una idea, pero ¿qué pasa si tomamos y enviamos de alguna manera un valor mayor?

El intercambio entre el cliente web y Home Center 2 se describe en la API REST de Fibaro
Pero me resultó más fácil interceptar todos los comandos en Wireshark.

Específicamente para HeatIt:
POST / api / devices / 9 / action / setMode {"args": [1]}
POST / api / devices / 9 / action / setSetpointMode {"args": [1]}
POST / api / devices / 9 / action / setThermostatSetpoint {"args": [1,27]}
Descripción
setMode - selección de modo (argumentos: 1 - en calefacción, 11 - calefacción económica, 0 - apagado)
setSetpointMode: seleccione desde qué modo se muestra la temperatura de instalación (los argumentos son los mismos)
setThermostatSetpoint: establece la temperatura objetivo para el modo (en consecuencia, el primer argumento es el modo, el segundo es la temperatura)

También puede enviar solicitudes como:
GET / api / callAction? DeviceID = ID & name = setThermostatSetpoint & arg1 = MODE & arg2 = TEMP VALUE
etc.

También puede aprender todos los comandos y valores para todos los dispositivos instalados mediante una solicitud REST:
GET / api / devices
Por lo tanto, enviamos al termostato una temperatura de 35 grados y, he aquí, el termostato lo aceptó.

Ahora la tarea es encontrar un reemplazo para el control a tiempo completo del termostato.

La primera opción es un dispositivo virtual Fibaro.

Dibujé el formulario:



Comenzar a escribir guiones:

Primero, descubriremos la ID de todos los dispositivos que nos interesan. Para hacerlo, vaya a la configuración de cada "dispositivo" relacionado con nuestro termostato y mire la ID en la página o en la barra de direcciones del navegador.

En mi caso, el dispositivo para configurar la temperatura objetivo (setPoint) - ID: 7

Sensor de temperatura del suelo - ID: 8

Selección del modo de funcionamiento del termostato - ID: 9





Además, nuestro dispositivo virtual también tiene su propia ID, solo se puede ver en la barra de direcciones del navegador, tengo esta ID 12 . Además, cada elemento del dispositivo virtual también tiene su propia ID, en mi caso:

"Ritmo actual". Tengo ID " Label1 ", "Temperatura objetivo" - ID " Label2 "
Botones "+" y "-" - ID " Button1 " e ID " Button2 ", respectivamente. "Modo" - ID " Etiqueta1 ".
Bueno, los botones "OFF", "ECO" y "ON" - ID " Button3 ", ID " Button4 " e ID " Button5 ", respectivamente.

El bucle principal:

--       ,       : 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 

A continuación, escribimos scripts para los botones:
Con los botones de selección de modo, todo es simple:
"APAGADO":

 fibaro:call(9, 'setMode',0) 

"ECO":

 fibaro:call(9, 'setMode',11) fibaro:call(7, 'setSetpointMode',11) 

"ON":

 fibaro:call(9, 'setMode',1) fibaro:call(7, 'setSetpointMode',1) 

Para el botón "+":

 --     currentSetPoint = tonumber(fibaro:getValue(7, 'value')) --  ,        40  if (currentSetPoint < 40) then setPoint = currentSetPoint + 1 else setPoint = 40 end --      fibaro:call(7, 'setThermostatSetpoint',11, setPoint) 

Para el botón "-":

 currentSetPoint = tonumber(fibaro:getValue(7, 'value')) if (currentSetPoint > 5) then setPoint = currentSetPoint - 1 else setPoint = 5 end fibaro:call(7, 'setThermostatSetpoint',11, setPoint) 

En general, todo.

Funciona bien, el único problema es el retraso después de presionar el botón. Si administra desde una red local, esto es de 1 a 2 segundos, pero si administra de forma remota, el retraso puede alcanzar hasta 10 segundos. Es decir Si es necesario, agregar o bajar la temperatura en una docena de grados de forma remota puede tomar un par de minutos.

En general, esto es, por supuesto, una muleta, pero no hay otra salida. En otros asuntos, mirando hacia el futuro, diré que todo el sistema eventualmente estará bajo el control de Iridium Mobile, por lo que esta es una solución temporal.

Source: https://habr.com/ru/post/es436344/


All Articles