Ligação Solzaima

MUITO OBRIGADO JOÃO!!
Já conclui esta parte, já tenho os dados a cair no HA. Aguardo ansiosamente a Parte 3 para ter acesso aos controles do recuperador.

1 Curtiu

Boa! Olha que de vez em quando e apensa ao re-iniciar o HA nem sempre a autenticação funciona à primeira , ainda vou fazer uma automação para tratar disso mas por agora tenho um botão no Lovelace que faz o refresh dos tokesn sempre que é necessario. É simples crias um Button Card e codigo a inserir é este:

show_name: true
show_icon: true
type: button
tap_action:
  action: call-service
  service: multiscrape.trigger_solzaima_ha_integration
  service_data: {}
  target: {}
icon: mdi:stove
name: Refresh Solzaima Integration

Outra coisa no sensor temperatura selecionada tens 0º… issp não é normal: Vai a “Developer Tools” → States e escolhe o sensor ‘sensor.mycezajson’ que tem o dict de tudo que é recolhido do endpoint json.

A temperatura selecionada é o ambient_temperature e teras que deverias ter algo como isto a menos que o teu modelo não suporte. por outro lado caso tenhas outros sensores podem ser facilmente adicionados tipo por exemplo a temperatura da agua caso o equipamento disponha dessa funcionalidade.

      ambient_temperature:
        code: E001
        value: '23'
        label: TEMP
        imageRelativePath: images/status/red.png
        min: '5'
        max: '40'
        security: '1000'

Se quiseres partilha tudo o que estás a receber neste sensor (não te esqueças de anonimizar o mac address) que eu posso dar uma olhada para verificar.

Mais uma vez obrigado. Em relação à autenticação, achas que funciona fazer uma automação para executar o serviço passados 30 segundos de reiniciar o HA por exemplo?
Em relação ao que recebo do sensor, é isto:

stoves: 
00:80:E1:B8:4C:77:
  macaddress: *************
  name: ********
  lastSelected: true
  online: true
  localIP: 192.168.1.**
  statuses:
    status:
      code: D009
      value: '1'
      label: Stove off
      imageRelativePath: images/status/red.png
      min: ''
      max: ''
      security: '1000'
    model: INS 9
    fumes_temperature:
      code: D507
      value: '18'
      label: Fumes Temperature
      imageRelativePath: images/status/red.png
      min: ''
      max: ''
      security: '1000'
    room_temperature:
      code: D508
      value: '19.5'
      label: Room Temperature
      imageRelativePath: images/status/red.png
      min: ''
      max: ''
      security: '1000'
    water_temperature: null
    power:
      code: F000
      value: '0'
      label: 'ON'
      imageRelativePath: images/status/red.png
      min: ''
      max: ''
      security: '1000'
    mode:
      code: F001
      value: '0'
      label: MODE
      imageRelativePath: images/status/red.png
      min: ''
      max: ''
      security: '1000'
    fire_temperature:
      code: E600
      value: '1'
      label: FIRE
      imageRelativePath: images/status/red.png
      min: '1'
      max: '5'
      security: '1000'
    ambient_temperature: null
    fan_one:
      code: E601
      value: '1'
      label: FAN1
      imageRelativePath: images/status/red.png
      min: '1'
      max: '6'
      security: '1000'
    fan_two: null
    heating_temperature: null
    builder: a99
  users:
    - username: ************
      isOwner: true

friendly_name: mycezajson

Já agora, tenho 2 erros no meu log, o 1º tem a ver com o scrape, e acontece quando faço o refresh dos token:

This error originated from a custom integration.

Logger: custom_components.multiscrape.scraper
Source: custom_components/multiscrape/scraper.py:174 
Integration: Multiscrape scraping component (documentation, issues) 
First occurred: 9:52:57 AM (4 occurrences) 
Last logged: 10:09:07 AM

solzaima ha integration # Exception in form-submit feature. Will continue trying to scrape target page

E outro erro que tem a ver com o “ambient temperature” que, pelo que percebi, não tenho essa informação pois no output tem ambient_temperature: null

Logger: homeassistant.helpers.template
Source: helpers/template.py:1822 
First occurred: 9:46:31 AM (1 occurrences) 
Last logged: 9:46:31 AM

Template variable warning: 'None' has no attribute 'value' when rendering '{% if is_state('sensor.mycezajson', 'SolzFM') %} {{ (state_attr('sensor.mycezajson','stoves'))['***************']['statuses']['ambient_temperature'].value }} {% else %} {{'None'}} {% endif %}'

achas que funciona fazer uma automação para executar o serviço passados 30 segundos de reiniciar o HA por exemplo?
Sim é uma das alternativas!, a outra é uma automation While Loop mas ainda não olhei para isso pois tambem não reinicio o HA tantas vezes como isso. Mas mais tarde vou provalmente fazer.

Sobre os erros, o 1º é devido à forma como o custom component funciona quando submite o form depois da 1ª vez devido à uma redirecçao na resposta http. Ignora pois apesar de informar essa excepção a resposta é gerada e o token de 12 horas é extraido correctamente. Acho que há issue aberto no Github para corrigir isso mas não nos afecta.

o 2º erro é por não teres o ambient temperature e resultado null porvoca esse erro. Por isso a minha sugestão é que modifiques para um sensor que o teu recuperador tem que é o fire_temperature, basta fazeres o seguinte:

      stove_fire_temperature:
        unique_id: 'stove_fire_temperature'
        icon_template: mdi:fire
        friendly_name: "Recuperador Calor Chama"
        value_template: >
          {% if is_state('sensor.mycezajson', 'Recuperador Sala') %}
            {{ (state_attr('sensor.mycezajson','stoves'))['XX:XX:XX:XX:XX:XX']['statuses']['fire_temperature'].value }}
          {% else %}
            {{'None'}}
          {% endif %}

Depois adaptamos para poderes teres o controlo deste sensor no HA.
Finalmente e assim que puderes edita os teus posts pois tens o MAC não anonimizado em alguns sitios.

Parte 3 Controlos do recuperador.

No “configuration.yaml” vamos inserir os comandos rest para poder controlar o receperador da mesma forma que o portal da myceza o faz:
(@Fernmac Atenção que o comando set _temperature não vai funcionar para ti e vamos ter que adaptar para um comando chamado “set_fire” . É necessario criar o payload respectivo que teremos que descobrir qual é)

rest_command:
  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"}
  myceza_stove_set_mode:
    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_select.stove_mode_sel.state | replace("Manual",0) | replace ("Auto",1)}},"code":"F001"}
  myceza_stove_set_fan_speed:
    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_select.stove_fan_speed_sel.state | replace ("Auto",6)}},"code":"E601"}
  myceza_stove_power:
    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":{{powercommand}},"code":"F000"}	

Caso nao tenham isto configuration.yaml é melhor inserir embora possa senão fica tudo mais confuso:

# Input Files
input_number: !include inputnumber.yaml
input_datetime: !include inputdatetime.yaml
input_boolean: !include inputboolean.yaml
input_select: !include inputselect.yaml

No “inputboolean.yaml” inserir para termos os settings carregados no Lovelace card:

# Recuperador Sala
stove_control_settings:
  name: Recuperador Calor Definicoes
  icon: mdi:stove

No “inputselect.yaml” inserir, aqui estamos a criar os inputs necessarios para os controles:

# 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

No inputnumber.yaml inserir, caso recuperador suporte defenir a temperatura:

# 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

No “scripts.yaml” inserir, necessario para aplicar os inputs selecionados:

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

No “switch.yaml” inserir, este é o botão do On-Off ( dependendo do tempo de refrescamento do sensor rest - eu coloque 30 segundos vai haver aqui um delay e o bptão depois de ir a ON volta a Off e passado um pouco atualiza a On. Há um forma de eliminar isto com um sensor binarion pelo meio mas ainda não tive tempo para implementar) :

- platform: template
  switches:
    # Recuperador Calor Interruptor
    stove_power:
      friendly_name: "Interruptor Recuperador Calor"
      icon_template: mdi:power-settings
      value_template: "{{ is_state('sensor.stove_active_all_on_states','1')}}"
      turn_on: 
        - service: rest_command.myceza_stove_power
          data: >
            {"powercommand": "1"}
        - service: homeassistant.update_entity
          target:
            entity_id: sensor.mycezajson
      turn_off:
        - service: rest_command.myceza_stove_power
          data: >
            {"powercommand": "0"}
        - service: homeassistant.update_entity
          entity_id: sensor.mycezajson  

No “automation.yaml” inserir o seguinte que atualizará os todos o sinputs sempre que o botão de Definições for usado Lovelace Card:

# 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 finalmente no “sensors.yaml” inserir enste sensor que os vai acumular as horas de funcionamento do recuperador:

- platform: history_stats
  name: Recuperador Calor On Time
  entity_id: sensor.stove_active_all_on_states
  state: '1'
  type: time
  start: '{{ now().replace(hour=0, minute=0, second=0) }}'
  end: '{{ now() }}'

Depois criar um manual card no Lovelace com o seguinte (é preciso antes adicionar o componente “stack-in-card” qu esta como requisito no 1º post):

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_ambient_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_number.stove_temp_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 disfrutar!

Mais uma vez, obrigado João! Fantástico!!
Junto um printscreen, com os meus erros.

Tens os input selects em ficheiros separados ou no configuration.yaml?

Se estão em ficheiros separados tens que incluir isto no configuration.yaml, é assim que tenho o meu:

default_config:
group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensors.yaml
switch: !include switch.yaml

# Input Files
input_number: !include inputnumber.yaml
input_datetime: !include inputdatetime.yaml
input_boolean: !include inputboolean.yaml
input_select: !include inputselect.yaml

E depois criar cada ficheiro tipo input na pasta /config pois nitidamente as entidades do tipo “input” não estão a ser criadas no HA.

De resto parece bem.

Ok João, apenas me falta esta parte. Não sei bem como fazer isto, se me orientares o caminho, posso investigar.
Muito obrigado.

Boas @Joao_Sousa Joao_Sousa

Desde já os meus parabéns por este Topico, eu tenho uma caldeira da Solzaima à pouco mais de um ano e sempre tive vontade, mas pouco conhecimento, de a colocar no HA. So agora é que vi o teu post e finalmente consegui integrar no HA.
Agora vêm as duvidas.
Mas tenho uma duvida na Parte 3 Controlos do recuperador.
Quando tu dizes para colocar os seguintes Input files existe um que não falas mais, que é o input_datetime.
Eu quando faço a verificação da configuração no HA dá este erro.

image

Isto porque o ficheiro não existe, basta cria o ficheiro mesmo que esteja vazio?

Quando vou fazer o Card, sigo os passo todos mas o meu card fica assim


O que estou a fazer mal?

Outra Coisa, Quando é que partilhas o lovelace card para o consumo das Pallets, dava mesmo jeito, eu ando a fazer numa folha de Excel o consumo. Eu tenho um deposito de 200kg e assim se tiver a informação toda no HA era 5*

Abraços

Olá Rafael, parece que os dados não estão a chegar, de certeza que não tens nenhum erro na extração dos tokens? Pelo menos os sensores devem dar informação logo à partida, se o scrap for bem feito…

Olá @Fernmac,
Ontem quando cheguei a casa voltei a fazer tudo de novo e já consegui por a funcionar.
A unica coisa que não me dá valor é o Recuperador Calor Ventoinha, mas de resto já está funcionar.

Agora a unica coisa que me aconteceu, foi perder a ligação, mas depois de clicar no botão do refresh ele voltou ao normal.
Não devia fazer automático?
Está aparecer este erro.

Chegaste a criar o sensor stove_fire_temperature?
Mais logo já te coloco as alterações que precisas de fazer.

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. :frowning:
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…. :grinning:
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  

Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade