Bom dia. Parece que a minha empresa vai mudar para isto. Afinal ainda funciona?
Eu, com o Coverflex, consegui automatizar tudo pelas notificações da APP, consigo manter registo ao cêntimo sem ter de abrir app nenhuma, seja entrada seja saída de valores, mas é claro que tenho de permitir ao Home Assistant Mobile ler as minhas notificações dessa app.
Caso a API já não funcione, será viável usar as notificações da Edenred da mesma forma? (Ainda não tenho conta, não tenho como testar, mas já a precaver)
Obrigado!
Tenho edenred e não tem notificações de saldo
Não sei o que acontece, mas mesmo colocando:
Repository: https://github.com/netsoft-ruidias/ha-custom-component-myedenred/
e definindo type: Integration
Ao clicar em Add nada acontece!
Seria algum problema somente no meu home Assistant, estou fazendo algo mal com esse repositório?
Sh#&, passo de mal para ainda pior…
Nem notificação de recebimentos / gastos? Na coverflex posso ligar e permitir notificações para todos os movimentos, é o que uso para ter tudo registado. Funciona bastante bem:
Código automação
alias: "Financas: Movimentos Pedro"
description: ""
triggers:
- entity_id:
- sensor.telemovel_pedro_last_notification
id: last_notification
trigger: state
to: null
conditions:
- condition: template
value_template: |-
{% set texto = states('sensor.telemovel_pedro_last_notification')|lower %}
{{
'pagamento' in texto or
'pag. servicos' in texto or
'recebeu' in texto or
'compra' in texto or
'carregamento' in texto or
'transferencia' in texto
}}
actions:
- variables:
texto: "{{ states('sensor.telemovel_pedro_last_notification')|lower }}"
app: "{{ state_attr('sensor.telemovel_pedro_last_notification','package')}}"
- choose:
- conditions:
- alias: Notificação BPI
condition: template
value_template: "{{ app in ['pt.bancobpi.mobile.fiabilizacao']}}"
sequence:
- action: input_number.set_value
metadata: {}
data:
value: >-
{% if 'efetuado um pagamento' in texto or 'pag. servicos' in
texto or 'levantamento' in texto %}
{{ 0 - (texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% elif 'recebeu' in texto %}
{{(texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% elif 'transferencia' in texto %}
{{ 0 - (texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% else %}
0
{% endif %}
target:
entity_id: input_number.financas_movimentos_pedro
- action: input_number.set_value
metadata: {}
data:
value: >-
{{ states('input_number.financas_bpi_saldo')|float(default=0) +
states('input_number.financas_movimentos_pedro')|float(default=0)
}}
target:
entity_id: input_number.financas_bpi_saldo
- data:
config_entry: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
worksheet: Financas_Pedro
data:
Valor: >-
{% if 'efetuado um pagamento' in texto or 'pag. servicos' in
texto or 'levantamento' in texto %}
{{ 0 - (texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% elif 'recebeu' in texto %}
{{(texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% elif 'transferencia' in texto %}
{{(texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% else %}
0
{% endif %}
Entidade: |-
{%- if 'efetuado um pagamento' in texto -%}
{{- texto | regex_findall_index('eur em (.+)') | default('Desconhecida') | upper -}}
{% elif 'pag. servicos' in texto %}
{{ 'ENTIDADE '}} {{- texto | regex_findall_index('entidade\s(\d{5})') | default('Desconhecida') | upper -}}
{%- elif 'recebeu' in texto -%}
PEDRO BPI Ordem
{%- elif 'transferencia' in texto -%}
{{ 'TRANSF. '}} {{- texto | upper | regex_findall_index('CONTA\s+([A-Za-z0-9]+)') -}}
{%- elif 'levantamento' in texto -%}
PEDRO Trocos
{% else %}
Desconhecida
{%- endif -%}
action: google_sheets.append_sheet
- conditions:
- alias: Notificação Mensagens BPI
condition: template
value_template: >-
{{ app in ['com.google.android.apps.messaging'] and 'bpi net' in
texto }}
sequence:
- action: input_number.set_value
metadata: {}
data:
value: |-
{% if 'pagamento ao estado' in texto %}
{{ 0 - (texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% elif 'transferencia' in texto %}
{{ 0 - (texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% else %}
0
{% endif %}
target:
entity_id: input_number.financas_movimentos_pedro
- action: input_number.set_value
metadata: {}
data:
value: >-
{{ states('input_number.financas_bpi_saldo')|float(default=0) +
states('input_number.financas_movimentos_pedro')|float(default=0)
}}
target:
entity_id: input_number.financas_bpi_saldo
- data:
config_entry: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
worksheet: Financas_Pedro
data:
Valor: |-
{% if 'pagamento ao estado' in texto %}
{{ 0 - (texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% elif 'transferencia' in texto %}
{{(texto |regex_findall_index('(\d+(?:\.\d+)?)\s+eur')|float(default=0))}}
{% else %}
0
{% endif %}
Entidade: |-
{%- if 'pagamento ao estado' in texto -%}
Pagamento Estado
{%- elif 'transferencia' in texto -%}
{{ 'TRANSF. '}} {{- texto | upper | regex_findall_index('CONTA\s+([A-Za-z0-9]+)') -}}
{% else %}
Desconhecida
{%- endif -%}
action: google_sheets.append_sheet
- conditions:
- alias: Notificação CoverFlex
condition: template
value_template: "{{ app in ['com.coverflex']}}"
sequence:
- action: input_number.set_value
metadata: {}
data:
value: |-
{% if 'compra' in texto %}
{{ 0 - (texto |regex_findall_index('€(\d+.\d{2})')|float(default=0)) }}
{% elif 'carregamento' in texto %}
{% if 'alimentação' in texto %}
{{ (texto |regex_findall_index('€(\d+.\d{2})')|float(default=0)) }}
{% elif 'benefícios' in texto %}
{{ (texto |regex_findall_index('€(\d+.\d{2})')|float(default=0)) }}
{% else %}
0
{% endif %}
{% else %}
0
{% endif %}
target:
entity_id: input_number.financas_movimentos_pedro
- if:
- condition: template
value_template: >-
{{ 0 -
states('input_number.financas_movimentos_pedro')|float(default=0)
>
states('input_number.financas_coverflex_beneficios_saldo')|float(default=0)
}}
then:
- action: input_number.set_value
metadata: {}
data:
value: >-
{{
states('input_number.financas_coverflex_alimentacao_saldo')|float(default=0)
+
states('input_number.financas_movimentos_pedro')|float(default=0)
}}
target:
entity_id: input_number.financas_coverflex_alimentacao_saldo
else:
- if:
- condition: template
value_template: >-
{{ 'farm' in texto or 'phar' in texto or 'well' in texto
or 'benefícios' in texto }}
then:
- action: input_number.set_value
metadata: {}
data:
value: >-
{{
states('input_number.financas_coverflex_beneficios_saldo')|float(default=0)
+
states('input_number.financas_movimentos_pedro')|float(default=0)
}}
target:
entity_id: input_number.financas_coverflex_beneficios_saldo
else:
- action: input_number.set_value
metadata: {}
data:
value: >-
{{
states('input_number.financas_coverflex_alimentacao_saldo')|float(default=0)
+
states('input_number.financas_movimentos_pedro')|float(default=0)
}}
target:
entity_id: input_number.financas_coverflex_alimentacao_saldo
- data:
config_entry: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
worksheet: Financas_Pedro
data:
Valor: |-
{% if 'compra' in texto %}
{{ 0 - (texto |regex_findall_index('€(\d+.\d{2})')|float(default=0)) }}
{% elif 'carregamento' in texto %}
{% if 'alimentação' in texto %}
{{ (texto |regex_findall_index('€(\d+.\d{2})')|float(default=0)) }}
{% elif 'benefícios' in texto %}
{{ (texto |regex_findall_index('€(\d+.\d{2})')|float(default=0)) }}
{% else %}
0
{% endif %}
{% else %}
0
{% endif %}
Entidade: |-
{%- if 'compra' in texto -%}
{{- texto | regex_findall_index('confirmada, (.+)') | default('Desconhecida') | upper -}}
{% elif 'carregamento' in texto %}
{% if 'alimentação' in texto %}
CoverFlex Alimentação
{% elif 'benefícios' in texto %}
CoverFlex Benefícios
{% else %}
Desconhecida
{% endif %}
{% else %}
Desconhecida
{%- endif -%}
action: google_sheets.append_sheet
mode: queued
max: 10
Neste caso utilizo também para apanhar coisas da app do meu banco (basicamente esta automação tem as coisas que quero capturar a nível financeiro por notificações).
Será que não dá para ter a mesma abordagem com a Edenred?
Mesmo não existindo notificações seria possivel implementar algo, de forma, a trazer essas “notificações”.
Como sugeres essa implementação? Vou precisar no início do próximo mês…
Sobre o home assistant não posso falar mas é possivel criar um script em python para fazer essas questão das notificações.
Podes dar uma orientação / ideia sobre isto? Home Assistant é python; não tenho muitos conhecimentos, mas se souber por onde ir talvez consiga “cavar” o suficiente… Obrigado!
Deixa ver se consigo criar aqui um exemplo simples
Há uma app da PlayStore (https://play.google.com/store/apps/details?id=pt.fstn.mymealcardfull), que permite consultar os saldos de vários cartões refeição. Deverá pois ser possível ter alguma abordagem semelhante à deste desenvolvedor para conseguir fazer isto no HA… Já tentei contactar o autor, ainda sem resposta. Esta app não dá à mesma notificações, que era o que pretendia, portanto fico na mesma. Da EdenRed já me responderam que não está previsto qualquer tipo de notificações push de saldo ou movimentos na app deles.
Está-me a fazer confusão não ter isto controlado…
Tenho de arranjar maneira de conseguir fazer isto, ando a explorar hipóteses com autenticação no site deles, mas as autorizações de cookies e os popups dão-me cabo da abordagem…
Bem, acho que já tenho progresso e já tenho algo que funciona, mas tenho de consolidar os passos. Estou a fazer 2 requests por CURL, o primeiro dá-me um token e o segundo, onde uso o token, dá o saldo que pretendo; têm de ser usados em sequência.
Faltam-me consolidar isto numa sequência, e obter um valor para o 2º CURL, que no meu caso sei (um id de cartão que consigo obter por análise dos meus dados), mas não sei como o obter automaticamente para adaptar a toda a gente.
Se alguém quiser ajudar… HELP!
Deixa ver se durante o dia de hoje consigo criar um script para te ajudar com isso.
Se quiseres podes partilhar o código que tens. Assim é mais rápido para dar “setup” aqui
Estava a testar e consegues usar este script.
Podes extrair apenas a função get_balance() para o que pretendes. Só tens que definir a lógica para teres as notificações.
Por exemplo uma variavel com o dia em que recebes e outra que vai guardando o saldo.
Se precisares de algum ajuda é só dizeres
Preciso realmente estar em controlo das minhas finanças, e sou teimoso. Os recursos hoje em dia facilitam estas coisas; depois de umas quantas cabeçadas, muito teste com CURLs para obter tudo o que queria, e com a ajuda de IA, aqui vai a minha primeira abordagem:

Dá para instalar como repositório custom no HACS.
Aceita-se ajuda / melhorias, mas não peçam demais que não sou expert. 
Abraços a todos!!!
Já agora, como já usas isto há mais tempo, qual aconselhas ser o mínimo tempo de refresh para não haver algum tipo de ban?
Acho que podes partir de 60 em 60min, para teres as notificações de saldo.
Podes ir mais a fundo e ter inclusivé o que foi gasto nesse ultimo periodo.
Não percebo muito de HA, mas se tiveres alguma questão com o código posso dar uma olhadela.
A minha cidade é pequena, e posso-me dar ao luxo de mapear os principais supermercados em zonas. Todos estão identificados com “Supermercado XXXXX”. Com isto consigo fazer algumas automações com o telemóvel, notificações e cartões condicionais, por exemplo para abrir automaticamente a lista de compras e mostrar-me o saldo que tenho em cada cartão, para saber qual utilizar. Agora já consigo ter isto. Além disso, posso também agora, coma minha integração, atualizar automaticamente o saldo Edenred 1 minuto depois de sair de um supermercado
.
description: "Edenred – Atualizar ao sair de qualquer supermercado"
mode: single
triggers:
- trigger: state
entity_id:
- person.pedro
for:
minutes: 1
conditions:
- condition: template
value_template: |
{{ trigger.from_state is not none
and trigger.from_state.state != trigger.to_state.state
and trigger.from_state.state != 'unknown'
and trigger.from_state.state != 'unavailable'
and trigger.from_state.name is not none
and 'supermercado' in trigger.from_state.name | lower }}
actions:
- action: edenred_pt.force_update
metadata: {}
data: {}
Maluqueiras, enquanto não há € para comprar mais um dispositivo qualquer que me dê mais para coçar… 
@RuiDias, já não tenho CoverFlex, mas provavelmente a abordagem acima deve dar caminho. A API não é oficial, mas andei a cavar na depuração do browser para achar os pedidos do site. Pode ser que para os outros cartões seja algo semelhante…
Adicionei uns quantos atributos aos sensores, para facilitar a utilização de custom:list-card para listar os movimentos.
type: custom:list-card
entity: sensor.edenred_XXXXXXXX_ultimo_movimento
feed_attribute: movements
title: Movimentos Edenred
row_limit: 10
columns:
- title: Data / Hora
field: date_time
style:
- text-align: center
- title: Entidade
field: description
- title: Cat.
field: cat
- title: M
field: t
- title: T
field: type
- title: Valor
field: amount
postfix: " €"
style:
- text-align: right
- white-space: nowrap
Adicionei ainda mais uns atributos para quem quiser usar (cada um opcional, e várias escolhas), e renomeei os atributos para EN para consistência. Movimentos a 0 filtrados.
Abraços!
Boa tarde a todos
Tenho (mais ou menos) acompanhado a thread pelas notificações no e-mail, apesar do trabalho que não deixa tempo para (quase) mais nada…
Infelizmente já não tenho Coverflex por isso não posso testar esta nova abordagem, mas estou disponível para ajustar o código no que seja necessário para reativar esta integração
Vou reservar os próximos sábados para isto, irei dando novidades, entretanto, continuem com o bom trabalho
Abraço


