Ligação Solzaima

Acho que o problema está no “downgrade”. Tentei o 6.5 e o resultado foi o mesmo.
Fiz upgrade (versão que saiu estes últimos dias) …perde a “conexão “ mas ainda consigo algumas vezes ver dados.

Terei a integração bem feita, nomeadamente o conetor automático?!

@Joao_Sousa é este o acontecimento…dados…desconhecido…dados…desconhecido…

1 Curtiu

Ok.

  1. quando perde a conexão qual é o estado do sensor mycezajson? É unknown? E dos tokens?
  2. A automação “myceza_session_reconnect” está a executar quando perde a conexão?
  3. Quando inicias o HA os sensores de token estão a ser carregados com o que está no “page_response_headers” ?

Por agora deixa ficar a última versão do multiscrape.
Confesso que não estou a ver a razão dessa intermitência mas vamos lá chegar.

  1. Sim fica unknown.
  2. Ao analisar uma mensagem de erro penso que ha aqui algum tema (imagem anexa).
  3. Sim estão.

IMG_3109

(Tenho 2x no dia de hoje este erro)

Esta intermitência tem um ciclo certo:
10min a devolver dados, 5 minutos unknown.
Passou o dia assim.

Tenho boas e más notícias. As boas é que o teu setup em princípio está bem, as más é que o servidor da myceza não está estável e ora funciona ora não. Eu liguei o meu recuperador ontem e por vezes tem ligação outras vezes da mesma forma que há comandos que umas vezes funcionam outras não dependendo da disponibilidade do servidor. O @Rafael_Silva tem o mesmo problema e queria perceber se o @Fernmac também confirma.
O erro envias é “normal” visto que como não tens ligação os tokens estão em estado unknown e por isso tens esse erro. Isso é simples de corrigir basta incluir uma condição na automação para verificar isso antes de executar. Depois partilho essa alteração.
Entretanto vou abrir um ticket via email na myceza pois estes problemas acontecem no site e é isso que eles têm de corrigir e em paralelo também vou abrir uma incidência na Solzaima.

@Joao_Sousa Obrigado pela análise. Fico mais “aliviado”.
Ainda assim penso que existe aqui algum problema pois todas as minha automações estão a devolver o mesmo erro. Ex:
The automation “Myceza Session Reconnect” ( automation.myceza_session_reconnect ) has an unknown action: rest_command.myceza_session_logout.

Isto é, rest_command.myceza_session_logout tem qualquer coisa de errado.

@Pedro_Pereira2
coonfirma que é isto que tens no ‘rest_command.myceza_session_logout’

  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')}}

@Joao_Sousa
penso que esteja tudo bem feito mas tenho esses erros constantes e hoje então ainda não conectou.

rest_command:
  myceza_stove_set_temperature:
    url: https://myceza.it/api/stove/command/en/00:80:E1:BE:59:38
    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/00:80:E1:BE:59:38
      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/00:80:E1:BE:59:38
    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/00:80:E1:BE:59:38
      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/00:80:E1:BE:59:38
    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/00:80:E1:BE:59:38
      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/00:80:E1:BE:59:38
    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/00:80:E1:BE:59:38
      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"}
  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')}}

image

1 Curtiu

@Pedro_Pereira2 temos aqui bastantes coisas a fazer. Entretanto e enquanto o portal https://myceza.it/en/login continua instavel estou já fazer bastantes alterações na integração de forma a conseguir lidar com este comportamento.

No history seleciona os seguintes sensores, e nas ultimas horas verifica o estado dos todos os seguintes sensores. O objectivo é perceber se tebns tokens no estao unknown ou unavailabe.
Como podes ver tambem tenho desconexões mas passado un par de minutos volta a ligar

A seguir substitui estas três automações por este código ( ja coloquei o nome do teu equipamento que penso ser casa).

- id: myceza_session_reconnect
  alias: myceza_session_reconnect
  description: 'Restablece Ligacao a MyCeza'
  trigger:
    - platform: state
      entity_id: sensor.mycezajson
      from: 'Recuperador Sala Wind'
      to: 
        - 'unknown'
        - 'unavailable'
    - platform: state
      entity_id: sensor.mycezasession
      to: 
        - 'unknown'
        - 'unavailable'  
  action:
    - delay:
        seconds: 25
    - if:
        - "{{ states('sensor.mycezaxsrftoken') != 'unknown' and states('sensor.mycezaxsrftoken') != 'unavailable' and states('sensor.mycezasession') != 'unknown' and states('sensor.sensor.mycezasession') != 'unavailable' and states('sensor.mycezaxsrftoken') != 'unavailable' and states('sensor.mycezacsrftoken') != 'unknown' and states('sensor.sensor.mycezacsrftoken') != 'unavailable' }}"
      then:
        - service: rest_command.myceza_session_logout
          data: {}
        - delay:
            seconds: 5               
    - repeat:
        while:
          - condition: template
            value_template: >
              {{ states('sensor.mycezajson') != 'Casa' }}
        sequence: 
          - service: multiscrape.trigger_solzaima_ha_integration
            data: {}              
          - delay:
              seconds: 30
  mode: single

- id: myceza_session_refresh
  alias: myceza_session_refresh
  description: 'Renova Token MyCeza'
  trigger:
    - platform: time_pattern
      # You can also match on interval. This will match every 11 hours
      hours: '/11'
      minutes: 0
      seconds: 0
  action:
    - if:
        - "{{ states('sensor.mycezaxsrftoken') != 'unknown' and states('sensor.mycezaxsrftoken') != 'unavailable' and states('sensor.mycezasession') != 'unknown' and states('sensor.sensor.mycezasession') != 'unavailable' and states('sensor.mycezaxsrftoken') != 'unavailable' and states('sensor.mycezacsrftoken') != 'unknown' and states('sensor.sensor.mycezacsrftoken') != 'unavailable' }}"
      then:
        - service: rest_command.myceza_session_logout
          data: {}
        - delay:
            seconds: 5               
    - repeat:
        while:
          - condition: template
            value_template: >
              {{ states('sensor.mycezajson') != 'Casa' }}
        sequence: 
          - service: multiscrape.trigger_solzaima_ha_integration
            data: {}              
          - delay:
              seconds: 30
  mode: single

- id: myceza_session_ha_restart_delay
  alias: myceza_session_ha_restart_delay
  description: 'Estabelece Ligacao a MyCeza depois de Iniciar HA'
  initial_state: true
  trigger:
    - platform: homeassistant
      event: start
  action:
    - delay:
        seconds: 55
    - if:
        - "{{ states('sensor.mycezaxsrftoken') != 'unknown' and states('sensor.mycezaxsrftoken') != 'unavailable' and states('sensor.mycezasession') != 'unknown' and states('sensor.sensor.mycezasession') != 'unavailable' and states('sensor.mycezaxsrftoken') != 'unavailable' and states('sensor.mycezacsrftoken') != 'unknown' and states('sensor.sensor.mycezacsrftoken') != 'unavailable' }}"
      then:
        - service: rest_command.myceza_session_logout
          data: {}
    - delay:
        seconds: 5               
    - repeat:
        while:
          - condition: template
            value_template: >
              {{ states('sensor.mycezajson') != 'Casa' }}
        sequence: 
          - service: multiscrape.trigger_solzaima_ha_integration
            data: {}              
          - delay:
              seconds: 30
  mode: single

Os erros que referes deverão desaparecer com estas modificações pois a integração já não tenta fazer logout se não tiver todos os tokens disponiveis. É boa pratica fazr o logout para não deixar sessões abertas mas tambem não faz mal se ficarem porque acabam por fechar quando os tokens expiram.
Assim que puderes envia feedback.
Posso tambem partilhar que estou a testar um novo sensor que retem os tokens anteriores, caso a conexão caia sem necessitar fazer nova autenticação. Assim que estiver a funcionar como pretendo partilho.

@Joao_Sousa este é o antes…vou aguardar para partilhar o depois.

Entretanto substitui as 3 automações.

  entity_id: sensor.mycezajson
  from: 'Recuperador Sala Wind'

Penso que este from tambem deve ser “Casa”, certo?

Certo! Esse passou-me

@Joao_Sousa
image

com a alteração das automações o problema do logout penso estar resolvido. desde ontem de manha que não houve erro. Obrigado!

Penso que o que sobra possa ser então o problema do site pois os 10min de dados, 5 min unknow/unavailable mantem-se.

Ok, uma parte já esta.
Agora vamos para o proximos:

  1. Faz a atualização do multscrape para a ultima versão

  2. Modifica os seguinte sensor (estamos a aumentar o polling para 1 minuto e alterar o timeout para 30 segundos:

- platform: rest
  name: mycezajson
  unique_id: mycezajson
  resource_template: >
       https://myceza.it/api/user/en  
  json_attributes:
    - stoves
  value_template: '{{ value_json.stoves["00:80:E1:BE:59:38"].name}}' 
  scan_interval: 60
  timeout: 30
  headers:
    Host: myceza.it
    Connection: keep-alive
    Authorization: >
      Bearer {{ states('sensor.mycezadatatoken_actual_ks') }}
    Accept: application/json, */*  
    X-XSRF-TOKEN: >
      {{ states('sensor.mycezaxsrftoken') | replace("%3D","=") }}
    Referer: https://myceza.it/en
    Accept-Encoding: gzip, deflate, br
    Accept-Language: en-US,en;q=0.9
    Cookie: >
      XSRF-TOKEN={{ states('sensor.mycezaxsrftoken')}}; myceza_session={{ states('sensor.mycezasession') }}
  1. Altera tambem isto ( o scan_interval estava 5 e passa a 10)
- platform: template
  scan_interval: 10
  sensors:
  1. E altera esta automação:
- id: myceza_session_reconnect
  alias: myceza_session_reconnect
  description: 'Restablece Ligacao a MyCeza'
  trigger:
    - platform: state
      entity_id: sensor.mycezajson
      from: 'Casa'
      to: 
        - 'unknown'
        - 'unavailable'
      for:
        minutes: 10
    - platform: state
      entity_id: sensor.mycezasession
      to: 
        - 'unknown'
        - 'unavailable'  
  action:
    - if:
        - "{{ states('sensor.mycezaxsrftoken') != 'unknown' and states('sensor.mycezaxsrftoken') != 'unavailable' and states('sensor.mycezasession') != 'unknown' and states('sensor.sensor.mycezasession') != 'unavailable' and states('sensor.mycezaxsrftoken') != 'unavailable' and states('sensor.mycezacsrftoken') != 'unknown' and states('sensor.sensor.mycezacsrftoken') != 'unavailable' }}"
      then:
        - service: rest_command.myceza_session_logout
          data: {}
        - delay:
            seconds: 5               
    - repeat:
        while:
          - condition: template
            value_template: >
              {{ states('sensor.mycezajson') != 'Casa' }}
        sequence: 
          - service: multiscrape.trigger_solzaima_ha_integration
            data: {}              
          - delay:
              seconds: 30
  mode: single

Há mais coisas para alterarmos mas vamos por fases.

@Joao_Sousa alterações realizadas.
durante 2h trabalhou (ainda que com a mesma rotina 10/5) mas depois passou a Unknown.
image

Estranho não teres um valor no mycezaxsfrtoken…. Podes ver se tem um estado defenido?
Isso do 10 / 5 é algo do teu lado pois não há nada na configuração que faça isso. Manda por msg (não aqui) toda a tua configuração pois há algo aqui que só acontece contigo pois é um padrão demasiado regular.

Entretanto reiniciei o HA e voltou a ter dados.

Entretanto não estou a conseguir enviar por msg “cannot send to this user” :sweat_smile:

Podes tentar enviar para mim para ver se consigo responder :thinking:

Olá, sou francês e meu português não é muito bom, uso o Google Trad!
Fiz o passo 1-Instalação do Multiscrape na versão 7.0.0
Inserção do código em configuration.yaml.
Tenho os arquivos em /multiscrape/solzaima_ha_integration.
Agora clique no arquivo sensor.yaml
Mas é impossível encontrar as entradas do sensor, porém recupero mycezaxsrftoken e mycezasession

Pode me ajudar? Obrigado e boas festas!

Boa tarde , @Joao_Sousa podes ajudar
Tenho uma salamandra solzaima e tenho alguns dispositivos casa inteligente e queria juntalos todos no home assistant, como precebo pouco queria saber se me conseguia ajudar assim mais por miudos para integrar a salamandra

@CarlosMicael , @scharles_FR @Pedro_Pereira2 e restantes membros.
Boas, vou abrir um topico NOVO tambem com instruções detalhadas pois durante estes anos fui melhorando a integração e a MyCeza efectuou também algumas alterações, e não colocarei mais nenhum comentario aqui.

Integração de Recuperadores e Salamandras Solzaima Através da Cloud MyCeza

1 Curtiu

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


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