Não tinha reparado que era para o Fernando
A minha é uma caldeira de aquecimento central, mas a base deve ser igual para quase todas.
Penso que é isto que queres
Não tinha reparado que era para o Fernando
A minha é uma caldeira de aquecimento central, mas a base deve ser igual para quase todas.
Penso que é isto que queres
Não estás muito longe! Tens umas invenções que estão bem e outras nem por isso! Podes por um print screen com as opções que te aparecem no myceza.it para o fire_temperature? Coloco aqui o exemplo da velocidade da ventoinha para que seja mais fácil perceber o que é preciso:
E com isso acho que consigo adivinhar o payload. Caso contrário explico o que é preciso pois é necessário usar as ferramentas de inspeção do chrome (ou do Firefox).
Pois é que são todas diferentes! Exemplo, a tua tem a opção de selecionar o heating_temperature (que vai de 60 a 80) e que me parece que esteja relacionado com a temperatura da água pois também tem o water_temperature e será necessário criar um sensor para este último, e também um “input” para o anterior que depois necessitará de um rest command para que possas controlar isto também como fazes na app. Podes por favor por um print screen semelhante ao que coloquei do myceza.it com as opções possíveis do heating_temperature? Acho que as restantes são semelhantes.
O que tenho é isto:
Não sei bem onde procurar…
No sensor.mycezajson, relativamente ao FIRE tenho:
fire_temperature:
code: E600
value: ‘1’
label: FIRE
imageRelativePath: images/status/red.png
min: ‘1’
max: ‘5’
security: ‘1000’
João mas olha que para mim penso que não seja necessário acrescentar mais nada, a caldeira tem um termostato exterior que está logado ao termosifao e é isso que faz ligar e desligar a caldeira.
Eu nunca mexi no valor da água nem dá temperatura.
Eu agora já consigo ligar e desligar com o valor da água do termosifao, que era o que pretendia.
Mais uma vez o parabéns pelo post e ainda bem que alguém conseguiu dar a volta ao site.
Ainda tenho que ver porque é que não funciona o refresh automático. Neste momento e ponto crítico.
E depois precisava de mais uma coisa de ti, era o consumo das pellets
Rafael, para o refresh, fiz um flow em Node Red, não sei se usas (recomendo) e funciona bem.
Sim uso e neste momento estou a fazer umas configurações para a caldeira
se poderes partilhar…
Acho que ja temos o que é preciso! sobre o que já fizeste eis o que acho que deve ser alterado e não tenho maneira testar mas deve estar miuto perto:
1 - sensors.yaml - Acho que está bem e podes acrescentar este sensor ao Lovelace Card em vez do ambient_temperature
stove_fire_temperature:
unique_id: 'stove_fire_temperature'
icon_template: mdi:fire
friendly_name: "Recuperador Calor Chama"
value_template: >
{% if is_state('sensor.mycezajson', XXXXX) %}
{{ (state_attr('sensor.mycezajson','stoves'))[XXXXXXXXXXXXXX']['statuses']['fire_temperature'].value }}
{% else %}
{{'None'}}
{% endif %}
2 – configuration.yaml - Aqui o payload não está certo… substituiste bem o “code” para bater certo com o recebido do endpoint json. Mas que de acordo com o snaphot que partilhaste aparentemente não tens a opção “Auto” para o fire_temperature (eu não queria ver as opções da ventoinha pois essas ja sei ). Experimenta o seguinte:
myceza_stove_set_fire_temperature:
url: https://myceza.it/api/stove/command/en/xxxxxxxxxxxxxxx
method: POST
headers:
Host: myceza.it
Connection: keep-alive
X-XSRF-TOKEN: >
{{ states('sensor.mycezaxsrftoken') | replace("%3D","=") }}
Authorization: >
Bearer {{ states('sensor.mycezadatatoken_actual_ks') }}
Content-Type: application/json;charset=UTF-8
Accept: application/json, */*
Origin: https://myceza.it
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://myceza.it/en/stove/xxxxxxxxxxxxxxx
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: >
XSRF-TOKEN={{ states('sensor.mycezaxsrftoken')}}; myceza_session={{ states('sensor.mycezasession') }}
payload: >
{"value":"{{states.input_select.stove_fire_temperature_sel.state }}","code":"E600"}
3 – inputselect.yaml - Aqui acrescentas apenas o seguinte (Nota: tambem dá para fazer com um input number pois as opções de 1 a 5 são todas numericas) mas assim fica fixe:
stove_fire_temperature_sel:
name: Recuperador Velocidade Chama
options:
- 1
- 2
- 3
- 4
- 5
initial: 1
icon: mdi:fire
4 – inputnumber.yaml - Aqui apagas esta parte pois não precisas
# Stove Temperature Selection
stove_temp_sel:
name: Temperatura Selecionada
icon: mdi:home-thermometer-outline
min: 5
max: 40
step: 1
initial: 22
mode: box
unit_of_measurement: graus
5 – scripts.yaml - Aqui só te enganaste no serviço a chamar que tinhas defenido no configuration.yaml acima que é myceza_stove_set_fire_temperature e não myceza_stove_set_fire_temp. Basta alterar assim:
#Recuperador Sala
myceza_set_stove_definitions:
alias: myceza_set_stove_definitions
sequence:
- service: rest_command.myceza_stove_set_fire_temperature
data: {}
- service: rest_command.myceza_stove_set_mode
data: {}
- service: rest_command.myceza_stove_set_fan_speed
data: {}
- delay:
seconds: 10
- service: homeassistant.update_entity
entity_id: sensor.mycezajson
mode: single
6 – automations.yaml - Aqui tinha mais um pequeno erro o teu input selct novo é stove_fire_temperature_sel e não stove_fire_temp_sel
# Recuperador stove_mode_sel
- id: stove_load_myceza_settings
alias: stove_load_myceza_settings
trigger:
- entity_id: input_boolean.stove_control_settings
platform: state
condition:
action:
- data_template:
entity_id: input_select.stove_fire_temperature_sel
value: '{{ states.sensor.stove_fire_temperature.state }}'
service: input_select.select_option
- data_template:
entity_id: input_select.stove_mode_sel
option: '{{ states.sensor.stove_mode_desc.state }}'
service: input_select.select_option
- data_template:
entity_id: input_select.stove_fan_speed_sel
option: '{{ states.sensor.stove_fan_one_desc.state }}'
service: input_select.select_option
7 - Finalmente no lovelace card alteras para:
type: custom:stack-in-card
mode: vertical
cards:
- type: entities
entities:
- entity: switch.stove_power
- entity: sensor.stove_status_desc
secondary_info: last-changed
- entity: sensor.stove_room_temperature
- entity: sensor.stove_fumes_temperature
- entity: sensor.stove_fire_temperature
- entity: sensor.recuperador_calor_on_time
- entity: sensor.stove_fan_one_desc
- entity: sensor.stove_mode_desc
- type: entities
entities:
- entity: input_boolean.stove_control_settings
- type: conditional
conditions:
- entity: input_boolean.stove_control_settings
state: 'on'
card:
type: vertical-stack
cards:
- type: entities
entities:
- entity: input_select.stove_fire_temperature_sel
- entity: input_select.stove_mode_sel
- entity: input_select.stove_fan_speed_sel
- type: custom:button-card
layout: icon_name
name: Programar Recuperador de Calor
show_name: true
icon: mdi:backup-restore
label: Programar Recuperador de Calor
show_label: false
show_state: false
styles:
card:
- border-radius: 10px
- height: 60px
- background-color: '#268bd2'
name:
- color: white
- font-weight: bold
icon:
- color: white
tap_action:
action: call-service
service: script.myceza_set_stove_definitions
service_data: {}
target: {}
E está tudo!
Criei um input bolean para executar manualmente e um event para quando o HA inicia:
[{"id":"f2d0e2714221f288","type":"api-call-service","z":"ec736664.32741","name":"Trigger Solzaima","server":"9d094a0b.dff7f8","version":5,"debugenabled":false,"domain":"multiscrape","service":"trigger_solzaima_ha_integration","areaId":[],"deviceId":[],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":610,"y":200,"wires":[["86f54df8811c5a1f"]]},{"id":"e7e06dcb5239fad9","type":"server-state-changed","z":"ec736664.32741","name":"","server":"9d094a0b.dff7f8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_boolean.refresh_solzaima_integration","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"on","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":240,"y":220,"wires":[["f2d0e2714221f288"],[]]},{"id":"86f54df8811c5a1f","type":"api-call-service","z":"ec736664.32741","name":"","server":"9d094a0b.dff7f8","version":5,"debugenabled":false,"domain":"input_boolean","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.refresh_solzaima_integration"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":900,"y":260,"wires":[[]]},{"id":"b66320a5.f8586","type":"server-events","z":"ec736664.32741","name":"","server":"9d094a0b.dff7f8","version":1,"event_type":"home_assistant_client","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"},{"property":"event_type","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":140,"y":320,"wires":[["b46e7e0a.fef1f"]]},{"id":"b46e7e0a.fef1f","type":"switch","z":"ec736664.32741","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"running","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":370,"y":320,"wires":[["f2d0e2714221f288"]]},{"id":"9d094a0b.dff7f8","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]
Rafael, É como quiseres, se pretenderes ter esses comandos especialmente o da temperatura no HA a aproximação é a mesma. O sensor mycezajson já traz tudo e podes ter apenas para visualização sem criar os inputs e os rest commands caso não pretendas o control.
O que referes do refresh é quando inicias o HA. A solução do Fernando em node-red é uma boa alternativa embora eu nunca tenha usado. Em breve vou fazer uma automação para verficar o estado depois do arranque do HA e forçar o refresh caso não tenha funcionado.
Sobre o consumo de pellets tenho que abrir um topico novo pois senão vai ficar aqui uma confusão ainda maior.
Farei isso para a semana depois da pascoa.
Muito Obrigado Fernando
Fernando, tinha um erro no ponto 2 pois faltavam umas aspas no payload mas já corriji. Eu presumo que seja assim mas caso não funcione eu digo-te como fazes o recording no chrome para captarmos o payload.
malta eu sou um lammer nisto, mas pretendia integrar no HA o meu recuperador de calor da marca l´artistico, que tenho acesso pelo app e pela pagina da https://cloudwinet.it/.
ao entrar na pagina, e apos fazer o login aparece isto:
João, muito obrigado pela ajuda mas infelizmente ainda não funciona, não consigo controlar nem a chama nem a ventoinha. Podes me ensinar como fazer o recording no chrome para captar o payload por favor?
Olha que eu tinha um erro no presumivel payload pois faltava umas aspas e agora descobri outro…
por favor modifica para isto,
{"value":"{{states.input_number.stove_fire_temperature_sel.state | int }}","code":"E600"}
e experimenta os serviços individualmente.
(entretanto já modifiquei o post anterior):
Ola Tiago. Não parece nada dificil.
Tu dizes que sabes qual a api key logo a primeira coisa que tens de testar é o que está no ponto 3)
Para começares abres o chrome e na barra de endereços escreves a URL que está no manual juntando a tua api key e confirma que obtens uma resposta em formato json semelhante ao que está aqui:
Se sim então isso é um GET htpp que é facil de implementar usando os conectores nativos do HA. Para depois criares os comandos vais precisar de fazer uns POST com a mesma logica.
Sim, recebo a informação certa do estado do recuperador.
E como faço isso que dizes no HA?
Há algum tutorial?
Tiago, é hora da leitura: Para teres os sensores, como por exemplo o que acabaste de testar (ou então o da temperatura descrito no ponto 9) vais precisar varios rest sensors em função da URL a utilizar:
O rest full sensor vai retornar extamente o que ves no chrome e prescisaras de um sensor template para extrair o estado (nesta caso será “0” ou"1" caso uses “Status” ou “On” e “Off” caso uses o “StatusDescription”
Para os comandos usas o rest_command descrito aqui:
A logica é a mesma so que no URL alem da api key precisas de passar o parametro. Exemplo no ponto 8) onde será na URL …/a_tua_api_key:23 se quiseres 23 graus.
os rest commands ficam como um serviço que podes invocar diretamente num card ou então num script.
Como não tenho node red como o @Fernmac partilho aqui a automação que após o restart do HA verifica passado 60 segundos se os tokens foram extraidos e senão vai insistir de 15 em 15 segundos até conseguir:
- id: myceza_session_ha_restart_delay
alias: Myceza Session HA Restart Delay
initial_state: true
trigger:
- platform: homeassistant
event: start
action:
- delay:
seconds: 60
- repeat:
while:
- condition: template
value_template: >
{{ states.sensor.mycezajson.state != 'Recuperador Sala' }}
sequence:
- service: rest_command.myceza_session_logout
data: {}
- service: multiscrape.trigger_solzaima_ha_integration
data: {}
- delay:
seconds: 15
mode: single
Caso queiram usar só tem que alterar o nome ‘Recuperador Sala’ para o nome do vosso aparelho que definiram na myceza app e eventualmente adaptarem os delays conforme pretendido.
Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt