Sim precisas de criar um ficheiro vazio “ inputdatetime.yaml ”na pasta /config que vai ser usado para o card que gere o consumo de pallets.
Sim faz automático mas por alguma razão não está a encontrar o rest_command myceza_session_logout.
Verifica por favor esta parte:
rest_command:
myceza_session_logout:
url: https://myceza.it/en/logout
method: POST
headers:
Host: myceza.it
Connection: keep-alive
Cache-Control: max-age=0
Content-Length: 47
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Origin: https://myceza.it
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://myceza.it/en/logout
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: >
_token={{states.sensor.mycezacsrftoken.state}}
O sensor stove_fire_temperature realmente não coloquei, mas de resto pelo que vi assim muito por alto parece estar tudo bem, mas logo quando chegar a casa vou dar uma vista de olhos a sério.
Não te esqueças de mim João.
Tenho usado o interruptor para ligar/desligar, 5 estrelas. Contudo, para controlar a velocidade da ventoinha e o modo do recuperador, não funciona. No entanto se for aos Services e escrever “rest_command.myceza_stove_set_fan_speed” com o valor, funciona de imediato. Consegues me dizer alguma coisa?
Obrigado
Esta pergunta era para o Fernando….
No entanto ainda bem que colocaste. Se puderes partilhar o “sensor.mycezajson” através das developer tools podemos ver quais os sensores que estão disponíveis para o teu tipo de salamandra e adaptar. O meu é um recuperador modelo Wind mas sem dúvida que cada modelo irá ter os seus específicos sensores.
Fernando, a razão por que falha penso que é porque o teu aparelho não tem o “ambient_temperature”!
Basta comentares as seguintes 4 linhas no automations.yaml
# 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_number.stove_temp_sel
# value: '{{ states.sensor.stove_ambient_temperature.state }}'
# service: input_number.set_value
- 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
E volto a referir que no teu caso é preciso criar o sensor “fire_temperature” que já tinha colocado o código acima!
Depois é preciso criar um comando rest, e também um input number de 1 a 6 (vou tentar fazer isto logo) e modificar a automação que que está neste post para que aplique a “fire temperature”, “stove_mode” and “fan speed”. Achas que se percebe?
Obrigado por me aturar João.
Ok, então eu já tinha tentando acrescentar o “fire temperature” e o que fiz foi o seguinte:
1 – Tinhas (sensors.yaml):
stove_ambient_temperature:
unique_id: 'stove_ambient_temperature'
icon_template: mdi:home-thermometer-outline
friendly_name: "Recuperador Calor Temperatura Selecionada"
unit_of_measurement: "°C"
value_template: >
{% if is_state('sensor.mycezajson', 'Recuperador Sala') %}
{{ (state_attr('sensor.mycezajson','stoves'))['XX:XX:XX:XX:XX:XX']['statuses']['ambient_temperature'].value }}
{% else %}
{{'None'}}
{% endif %}
1 – Substitui por (sensors.yaml):
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 – Tinhas (configuration.yaml):
myceza_stove_set_temperature:
url: https://myceza.it/api/stove/command/en/XX:XX:XX:XX:XX:XX
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/XX:XX:XX:XX:XX:XX
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_number.stove_temp_sel.state | int}}","code":"E001"}
2 – Substitui por (configuration.yaml) e aqui inventei porque não sei bem qual é o payload:
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_number.stove_fire_temp_sel.state | replace ("Auto",6)}},"code":"E600"}
3 – Tinhas (inputselect.yaml):
# Recuperador de calor
stove_mode_sel:
name: Recuperador Modo
options:
- Manual
- Auto
initial: Auto
icon: mdi:autorenew
stove_fan_speed_sel:
name: Recuperador Velocidade Ventoinha
options:
- 1
- 2
- 3
- 4
- 5
- Auto
initial: Auto
icon: mdi:fan-plus
3 – Substitui por (inputselect.yaml) também inventei:
# Recuperador de calor
stove_mode_sel:
name: Recuperador Modo
options:
- Manual
- Auto
initial: Manual
icon: mdi:autorenew
stove_fan_speed_sel:
name: Recuperador Velocidade Ventoinha
options:
- 1
- 2
- 3
- 4
- 5
- 6
- Auto
initial: 1
icon: mdi:fan-plus
stove_fire_temperature_sel:
name: Recuperador Velocidade Chama
options:
- 1
- 2
- 3
- 4
- 5
- Auto
initial: 1
icon: mdi:fire
4 – Tinhas (inputnumber.yaml):
# 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
4 – Substitui por (inputnumber.yaml) também inventei:
# 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 – Tinhas (scripts.yaml):
myceza_set_stove_definitions:
alias: myceza_set_stove_definitions
sequence:
- service: rest_command.myceza_stove_set_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
5 – Substitui por (scripts.yaml) também inventei:
#Recuperador Sala
myceza_set_stove_definitions:
alias: myceza_set_stove_definitions
sequence:
- service: rest_command.myceza_stove_set_fire_temp
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 – Tinhas (automations.yaml):
- 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_number.stove_temp_sel
value: '{{ states.sensor.stove_ambient_temperature.state }}'
service: input_number.set_value
- 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
6 – Substitui por (automations.yaml) também inventei:
# 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_temp_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
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.