Fibaro Home Center 2 e termostato para aquecimento por piso radiante HeatIt. Como aumentar a temperatura

Fui confrontado com a tarefa de controlar um piso quente a partir da interface do Fibaro Home Center 2. Parece ser uma tarefa simples, mas não. A pedido do cliente, os termostatos devem ser baseados na temperatura do piso. Foi decidido usar termostatos HeatIt.

imagem

Eles eram mais adequados às necessidades do cliente:

  • design minimalista
  • a capacidade de extinguir, tanto quanto possível, o que está aceso no painel
  • a capacidade de trabalhar com base na temperatura do piso
  • a possibilidade de associação direta com relés externos (porque o piso radiante é água, é necessário controlar os relés localizados na sala da caldeira, que abrem e fecham as válvulas dos circuitos correspondentes)

Depois de estudar um pouco os materiais na rede, descobri que o Fibaro Home Center 2 “legal” não sabe como definir termostatos para temperaturas> 30 graus na interface da web e> 28 graus no aplicativo móvel. O que para a temperatura máxima do piso, é claro que não é suficiente.

imagem

Ao mesmo tempo, os termostatos HeatIt possibilitam configurar até 40 graus. A questão é por que o Fibaro não permite que o instalador defina a faixa de temperaturas possíveis. Bem, tudo bem, pensei, vamos pensar em algo. Havia até uma idéia de mudar as leituras do sensor NTC com um resistor adicional, mas o cliente teria que se acostumar com as leituras de temperatura nos "papagaios" condicionais, o que não é bom.

Havia uma ideia, mas e se pegarmos e enviarmos de alguma forma um valor maior?

A troca entre o cliente da web e o Home Center 2 é descrita na API REST Fibaro
Mas achei mais fácil interceptar todos os comandos no Wireshark.

Especificamente 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]}
Descrição do produto
setMode - seleção de modo (argumentos: 1 - no aquecimento, 11 - aquecimento econômico, 0 - desligado)
setSetpointMode - selecione em qual modo a temperatura de instalação é exibida (os argumentos são os mesmos)
setThermostatSetpoint - define a temperatura alvo para o modo (consequentemente, o primeiro argumento é mode, o segundo é temperatura)

Você também pode enviar solicitações como:
GET / api / callAction? DeviceID = ID & nome = setThermostatSetpoint & arg1 = MODO & arg2 = TEMP VALUE
etc.

Você também pode aprender todos os comandos e valores para todos os dispositivos instalados por uma solicitação REST:
GET / api / devices
Então, enviamos ao termostato uma temperatura de 35 graus e, e eis que o termostato o aceitou.

Agora, a tarefa é fornecer um substituto para o controle em tempo integral do termostato.

A primeira opção é um dispositivo virtual Fibaro.

Esbocei o formulário:



Começando a escrever scripts:

Primeiro, descobriremos o ID de todos os dispositivos nos quais estamos interessados. Para fazer isso, vá para as configurações de cada "dispositivo" relacionado ao nosso termostato e consulte o ID na página ou na barra de endereços do navegador.

No meu caso, o dispositivo para definir a temperatura alvo (setPoint) - ID: 7

Sensor de temperatura do piso - ID: 8

Seleção do modo de operação do termostato - ID: 9





Além disso, nosso dispositivo virtual também possui seu próprio ID, ele só pode ser visto na barra de endereços do navegador, eu tenho esse ID 12 . Além disso, cada elemento do dispositivo virtual também possui seu próprio ID, no meu caso:

"Ritmo atual." Eu tenho o ID " Label1 ", "Temperatura alvo" - ID " Label2 "
Botões “+” e “-” - ID “ Button1 ” e ID “ Button2 ”, respectivamente. “Mode” - ID “ Label1 ”.
Bem, os botões "OFF", "ECO" e "ON" - ID " Button3 ", ID " Button4 " e ID " Button5 ", respectivamente.

O loop 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 

Em seguida, escrevemos scripts para os botões:
Com os botões de seleção de modo, tudo é simples:
"OFF":

 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 o botão "+":

 --     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 o botão "-":

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

Em geral, tudo.

Funciona bem, o único problema é o atraso após pressionar o botão. Se você gerenciar de uma rede local, isso será de 1 a 2 segundos, mas se você gerenciar remotamente, o atraso poderá chegar a 10 segundos. I.e. se necessário, adicione ou diminua a temperatura em uma dúzia de graus remotamente, podendo levar alguns minutos.

Em geral, é claro que é uma muleta, mas não há outra saída. Em outros assuntos, olhando para o futuro, direi que todo o sistema ficará sob o controle do Iridium Mobile, portanto, essa é uma solução temporária.

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


All Articles