Auxiliar tipo tabela 3D (dados em X, Y, Z) para utilizar em automação de carregamento de veículos elétricos

@Tretabyte, costumo utilizar estes desafios para aprofundar o conhecimento do sistema HA. O objetivo é o que defendi, mas vai para além disso, vai para o conseguir fazê-lo e compreendê-lo por forma a aplicá-lo noutros contextos e projetos.

É um preciosismo, mas para mim a busca pela perfeição não acaba e é importante conseguir escrever um código que me permita carregar o carro da percentagem A à B sem falhas.

Objetivamente, como posso fazer o que refere de “passar a curva de carregamento” para o HA e controlar o carregamento por aí? É esse a ajuda que preciso.

Matematicamente já digitalizei os valores da curva criando uma tabela de valores discretos para cada valor de SoC em função da corrente (facilmente transformado em potência). Só preciso perceber como colocar essa tabela como uma variável acessível numa automatização do Home Assistant.

Alguma ideia?

Diria que o mais direto será criar um template sensor com as combinações que criou na tabela, idealmente isso deveria ser feito de forma dinâmica para que sempre que muda os valores na tabela o sensor faria update igualmente.
Pode sempre colocar os dados numa DB, mariaDB por exemplo e criar o template à base de queries a essa tabela, dessa forma pode igualmente criar um segundo processo que irá atualizar a informação nessa tabela sempre que detetar variações.

1 Curtiu

@Duarte_Santos, existem aqui dois temas distintos: programação HA (que efetivamente é o que me interessa) e carregamento de veículos elétrico.

O segundo tema, na realidade, acho ser o mais simples: o inversor de carregamento do carro funciona com corrente constante (mais ou menos), ou seja, na realidade os Amperes então sempre a entrar e “transformam-se em potência com uma tensão contínua do inversor”, ou seja, a ideia da variação de tensão é compensada pelo prórprio sistema (muito confuso… eu sei… sou Eng. Eletrotécnico… acredito que para colocar essa questão dessa forma e difereneciar a corrente da tensão, também deve ser - é como imaginar que o carregador do carro é uma fonte de corrente constante e dessa forma a tesão que está do lado AC, antes da conversão, não interessa).

Ultrapassado este ponto, o intuito da minha publicação e por isso é que a coloquei no fórum do HA, não é especificamente os veículos elétricos (podemos explorá-los noutros fóruns), mas sim a configuração de automatismos no HA.

Como podemos resolver isso?

O facto do carro não apresentar os valores corretos, a mim, não me espanta, uma vez que se os valores começassem a variar, como é normal, o comum dos utilizadores pensaria que era uma avaria e estaria sempre a “aborrecer” as oficinas… Como sei como funciona, sei que tem um “filtro passa baixo” muito grande e que está feito para agradar ao pessoal que não percebe nada disto… Por isso mostra os valores que mostra… Prefere mostrar que o carregamento demora 2 horas do que mostrar que demora 1 hora e depois afinal demorou 1h10 e o pessoal ir queixar-se para o concessionário que o carro fez mal as contas… Não se esqueça que temos de partilhar este mundo com todos os outros utilizadores que não percebem nada nem de eletricidade nem de informática.

Posto isto, queria partilhar que andei durante 1 ano a recolher os dados de carregamento do meu carro. Por isso é que consegui criar uma tabela com os tempos de carregamento do SoC x ao SoC Y em função da corrente (tanto no nosso 100% elétrico como no PHEV). Contudo a JLR fechou o acesso ao API (possivelmente por causa de pessoal como eu que estava constantemente a controlar o carro em termpo real apesar de só fazer o Health Update no periodo recomendado pela API)…

Neste momento, fechado o acesso API da marca, quero arranjar outros estratagemas e quero utilizar a informação que recolhi para meu benefício (e de outros que explorem este projeto).

Começo a perceber que isto parce um Facebook com outro aspeto, ou seja, eu pergunto sobre “alhos” e respondem-me sobre “bugalhos”. Só quero saber como criar uma variável tipo tabela, se possível tipo tabela 3D onde possa ir buscar dados durante a execução de uma automação… Não sei porque é o que o pessoal está mais focado na parte do carro elétrico… Só o expliquei para contextualizar o objetivo final…

Objetivamente, coo é que posso criar a tal “tabela” em template que referes na resposta? É isso que ainda não descobri… Para mim uma tabela 3D são apenas várias tabelas, pelo que posso criar várias tabelas template (como referes) para juntar tudo numa tabela 3D. Como se cria uma tabela em template acessível numa automação?

é como imaginar que o carregador do carro é uma fonte de corrente constante e dessa forma a tesão que está do lado AC, antes da conversão, não interessa).

acho que percebeste mal a coisa, quando disse que para teres uma melhor precisão de carregamento precisavas da voltagem e intensidade é do Lado DC e nunca do lado AC… lool a voltagem do lado AC é sempre 230V ou 400V a partir daqui nunca conseguirias ver o estado de carregamento da bateria, na questão da intensidade do lado AC poderias ver ou não, como carregas com uma potencia muito baixa 10kw para baixo a bateria consegue usar 32A com grande facilidade e manter esta potencia constante durante a carga toda(dependendo do carro)… dai que estes dados só interessavam se fosse do lado DC.

Objetivamente, coo é que posso criar a tal “tabela” em template que referes na resposta? É isso que ainda não descobri… Para mim uma tabela 3D são apenas várias tabelas, pelo que posso criar várias tabelas template (como referes) para juntar tudo numa tabela 3D. Como se cria uma tabela em template acessível numa automação?

usas o template sensor para criar o que queres, podes ver este artigo com algumas duvidas e respostas duvida. lê isto com atenção para poderes aprender a programar o sensor.

vou te dar um exemplo simples, vais criar os teus 3 inputs no configuration.yaml:

input_number:
  Soc_inicial:
    name: Soc Inicial
    unit_of_measurement: %
    initial: 30
    min: 0
    max: 100
    step: 1

  Soc_final:
    name: Soc final
    unit_of_measurement: %
    initial: 80
    min: 0
    max: 100
    step: 1

  Amp_charge:
    name:  Intensidade de Carga
    unit_of_measurement: A
    initial: 32
    min: 5
    max: 32
    step: 1 

estes 3 selectores vão ser os teus inputs com as 3 variáveis que lhes vais dar. depois no mesmo ficheiro crias um template sensor:

template:
  - sensors:
      charge_time:
        friendly_name: Tempo de carga
        unit_of_measurement: 'min'
        value_template: >
          {% A1= 20 %} #a tua tabela com as constantes de carga
          {% A2= 30 %}

#depois de preencheres a tabela toda podes começar com a lógica if, else, criar funções....teras de procurar e partir pedra mas a linguagem de programação não é muito complicada. 
#aqui tambem vais poder chamar os Soc_inicial, Soc_final, Amp_charge que criaste em cima para interagir com este sensor e modificar o valor final.

Começo a perceber que isto parce um Facebook com outro aspeto, ou seja, eu pergunto sobre “alhos” e respondem-me sobre “bugalhos”.

A malta está a tentar ajudar te porque não deves ser o único com carro eléctrico e que já passou por isto, e na automatização a palavra chave é facilitar, coisas muito complicadas normalmente dão problemas, neste caso se facilitares em vez de fazer este sensor “complexo” podes simplesmente criar uma automatização para o carro carregar sempre todos os dias a partir de determinada hora e para parar a outra hora. no final é isto que todos querem.

esta seria uma das maneiras que eu tentava fazer o que pretendes… terás de começar e partir um pouco de pedra e ver onde acabas encalhado, assumindo que já tens a tabela com os dados o mais difícil deve estar feito.

entretanto ao pesquisar encontrei esta integração com o google sheets…google sheets

parece ser uma integração para guardar dados do home assistant para a folha, não sei se é possível ler dados da folha… podes abordar esta solução mas como nunca usei não te posso ajudar muito.

Para algo mais complexo como o que relatas normalmente faço fora de homeassistant e publico apenas o que quero ver.

Para rust tens: https://github.com/danrusei/hass-rs

Pode ser aselhice minha mas como estou habituado a outras linguagens “programar” em yaml é uma dor demasiado grande :slight_smile:

Para carregamento de veículos eléctricos uso o EVCC .

Bom dia a todos.

Antes de mais, muito obrigado por todas as dicas. Já tenho bastante matéria para estudar entre mariaDB, template sensor, google sheets, rust, e EVCC.

Deixo umas notas extra para o caso de terem mais alguma ideia que me possa ajudar:

Atualmente eu já tenho um automatismo, simples a funcionar. Percebo quando dizem que devemos facilitar em vez de complicar, mas a parte simples já eu tenho e funciona, apenas não funciona com o preciosismo que eu quero. Por exemplo, programei o carro para carregar apenas até aos 70% e esta manhã tinha 73%… São erros insignificantes destes.

Contudo, o que procuro é otimizar esta situação procurando estar mais perto da perfeição. O objetivo nem é tanto conseguir carregar (que já o faço), mas com tudo isto, aprender muito mais sobre automação, programação e Home Assistant.

@Duarte_Santos, abordei o tema da tensão do lado AC (e pensava que era a isso que se referia) porque no meu caso tenho cerca de 30 a 40 metros entre o quadro do apartamento e o quadro da garagem e apesar de em casa ter sempre cerca de 240 V (estou ao lado de um PT público), na garagem, conforme estou a carregar ambos os carros e conforme a corrente de carga, chego a ter 220 V. Apenas quis referir que isso acaba por não ser importante porque o inversor compensa consumindo mais corrente e assim mantendo a potência.

Em termos do código que partilha (e muito agradeço), os input number eu já tenho criados e são exatamente mais ou menos como indica (utilizo na automatização que estou atualmente a utilizar). O meu problema com a tabela é que preciso de uma mais complexa do que a que apresenta e é isso que eu não consigo fazer.

A tabela que apresenta funcionaria como indicação do tempo de carga para cada variação de percentagem (por exemplo, 100 minutos para 10 % e 200 minutos para 20 %)… Isso é o que eu tenho neste momento… e é o que falha porque já percebi que o tempo para carregar 10% é diferente se for para carregar a bateria dos 10% aos 20% ou se for para carregar a bateria dos 60% aos 70%…

Por isso é que o que eu procuro é criar uma tabela que tenha duas entradas e me devolva o tempo de carregamento entre esses dois valores, ou seja, uma tabela que tenha em x os valores do SoC inicial e em y os valores do SoC final e o valor entre os dois é que é o tempo, ou seja, algo que eu possa pedir:

Tabela, diz-me lá o tempo de carregamento entre 10% e 20% e obtenho, por exemplo o valor 90…
Tabela, diz-me lá o tempo de carregamento entre 60% e 70% e obtenho, por exemplo, o valor 110…

Depois vou querer complicar isto com uma tabela destas para cada corrente/potência de carregamento (daí o conceito da tabela 3D), mas neste momento não estou a conseguir sequer criar esta tabela… ou melhor, consigo mas é impraticável: não posso criar um template sensor para o SoC inicial de 1% e então colocar todos os valores de tempo que demora a carregar de 1% até 100% (100 linhas). Depois outro template sensor para o SoC inicial de 2%… por aí a fora até ter 100 template_Sensor… escolhia, em função do SoC inicial qual o template Sensor a utilizar e aí conseguia obter o tempo de carregamento conforme o SoC final que quero…

Depois teria ainda de multiplicar estes 100 template sensor pelo número de variáveis de corrente… Se tivesse, por exemplo, 10 patamares de corrente, seriam ao todo 1.000 template sensor para fazer isto…

É impraticável e tenho a certeza absoluta que haverá alguma forma elegante e simples de o fazer, porque trata-se apenas de uma tabela mas com referências pesquisáveis tanto em x como em y para me dar o valor que cumpre ambos os requisitos.

Mas obrigado por tudo e vou continuar a pesquisar e explorar através das indicações que já me deram.

Muito obrigado.

Se conseguir chegar a algum lado, partilho as minhas descobertas por aqui. Acredito que quando o fizer muito pessoal vai dizer: ah… não tinha percebido que era isso… isso eu também sei fazer…

Notem: é algo teoricamente simples e que acho que o HA deve fazer de raíz… É uma tabela… vejam quue, de forma direta e até com as dicas do template sensor, na realidade não estou a fazer uma tabela, estou a ver uma lista e vou retirar um valor dessa lista, não de uma tabela que associa um valor x e um valor y para me dar o resultado… Uma espécie de batalha naval…

Como faço uma batalha naval no HA onde eu possa pesquisar por A1 ou C5 e ele respoda água ou tiro no porta-aviões?

Mais uma vez, um muito obrigado e votos de bom fim de semana a todos (@Duarte_Santos @tretabyte @wnn @pjpeartree)

Deverá ser a curva normal de uma bateria de litio.

O carro é que controla tudo.

O charger só manda o sinal da potência requerida.

A tabela são 3 arrays.

Num procuras o index do teu valor

Noutra usas o index para ir buscar o que pretendes

1 Curtiu

só um aparte com isto… cuidado que 220V implica um incremento de intensidade nos condutores…o simples facto de haver uma pequena queda de tensão entre um quadro e o outro já quer dizer que algo pode não estar bem (a queda de tensão nunca deverá ser superior a 3%), se tiveres uma instalação mal dimensionada podes ter problemas. confirma que está tudo ok antes dos “problemas” aparecerem, a começar nesse cabo de 40metros e a sua secção e a protecção usada…não facilitem, não consigo contar pelos dedos a quantidade de vezes que tive problemas em quadros eléctricos por mau dimensionamento e falta de manutenção… aquecimento e arrefecimento de condutores normalmente traduz se no desapertar dos mesmos nos quadros. confirma tudo com clareza para descargo de consciência para que possas dormir bem e em segurança.

@Duarte_Santos antes de mais, agradeço a atenção e preocupação.

Estou por dentro do tema até porque nos últimos 20 anos a minha profissão tem mesmo sido projeto de instalações elétricas em edifícios. Os 3% são válidos, regulamentarmente, para iluminação. O próprio Guia Técnico de carregamento de veículos elétricos prevê uma queda de tensão de até 5% entre a origem e o Veículo Elétrico.

Obviamente sei que quanto menor a queda de tensão melhor… e tenho a perfeita noção que, quando estou com 240 V no quadro elétrico e 220 V na garagem, estou a “perder” 20 V nesta ligação e isso acontece quando tenho um dos carros a carregar a 24 A e o outro a 10 A, ou seja, 34 A com uma queda de tensão de 20 A quer dizer que o meu cabo de casa à garagem é um “aquecedor” de 680 W… Estas são, no mínimo, as minhas perdas no cabo… Contudo é em cerca de 30 a 40 menos o que quer dizer (considerando 30 metros) que estamos a falar de cerca de 20 W de dissipação térmica por metro de cabo, o que é minimamente aceitável para os condutores de 6 mm2 que tenho (tinha originalmente 4 mm2… queria passar para 16 mm2… mas 6 mm2 foi o máximo que consegui colocar nos tubos que tenho na coluna até à box).

Tenho isso tudo monitorizado e controlado e faço vistorias periódicas às temperaturas do circuito e estado do mesmo. Eu não brinco com a eletricidade. Sei que a eletricidade mata (direta ou indiretamente).

Faço verificação e reapertos dos circuitos periodicamente (embora sinceramente não se tenham movido no último ano) e não facilito em nada. Na garagem tenho 2 Wallbox e até tomada alternativa para ligar um EVSE se as Wallbox avariarem e mesmo a tomada é específica para carregamento de veículos elétricos para cumprir todos os preceitos e regulamentos.

Mais uma razão porque querer garantir uma otimização máxima do que faço, pois assim minimizo o tempo de carregamento para além de poder otimizar as correntes, podendo reduzir as mesmas, de forma automática, se conseguir antecipar e automatizar as correntes necessárias para os carregamentos para cada uma das situações que pretendo.

Como disse ao princípio, o tema é complexo e simplesmes queria saber como criar uma tabela no HA.

O membro @nikito7 acabou de me “empurrar” num outro conceito e ideia que não me tinha lembrado e a qual me deixo bastnate interessado… Pensar no tema como um array e não como tabelas e simplesmente fazer uma associação de 3 arrays… Na realidade é isso mesmo que pretendo… Mais uma vez, pensando e imaginando em termos volumétricos e matemáticos, pode ter os arrays que quiser e depois só tenho de procurar a interceção da variável de cada array para obter o valor temporal de carregamento que preciso…

A questão seguinte agora é: como é que crio arrays no Home Assistant?

Templates na automação.

Partilhar o array sem duplicar, dificilmente.

1 Curtiu

Muito obrigado @nikito7. Cada vez sinto-me mais próximo da solução! Este tema dos arrays abriu-me completamente os horizontes… Já não ouvia falar de arrays desde a faculdade… já me tinha esquecido do conceito, mas sim, acho que com arrays consigo lá chegar…
Muito obrigado!

Só para confundir mais as coisas… E que tal usar o porta OBDII e um dispositivo DIY para fazer essa monitorização?

Eu tenho um ZOE e por enquanto os serviços conectados continuam a funcionar, mas caso falhem (fala-se nisso devido ao encerramento da rede 3G) será o caminho que vou seguir.
Um ESP32, um canbus transceiver e um step down para converter os 12v em 5v para alimentar o ESP e já esta tudo!
Para o software, deverá haver pela internet informação para o teu carro. No caso do ZOE há!

A conectividade, poderia ser feita conforme a necessidade. Se é só para carregamentos em casa, WIFI chega… Se for para funcionar sempre, há sempre a hipótese de adicionar GSM 4G, com GPS Tracker, …

Provavelmente será mais fácil utilzar um carregador com API. Como o openEVSE

@Peixeiro, aderi à mobilidade elétrica há 4 anos e tenho neste momento 100k km num dos carros (no BEV) e 25k km no outro (PHEV).

Uma das coisas que aprendi é que um dos problemas/dificuldades em vários (e nos dois que tenho) é a bateria de 12V. Anteriormente pensávamos que o que era agressivo para a bateria de 12 V era o start-stop… Agora já percebi que toda esta inteligência dos carros elétricos desgastar agressivamente a bateria.

Ambos os carros que tenho, apesar de até terem, cada um, duas baterias de 12 V já por causa das falhas, em 4 anos já tive de substituir ambas nos dois.

Por essa razão, pelo menos da minha parte, vou tentar evitar ao máximo a utilização de equipamentos ligados na porta OBDII para poupar consumos da bateria de 12 V. Para além disso não era assim tão simples, pois tinha de ter um qualquer software a correr algures que fosse buscar os valores depois de estacionar o carro e os estivesse a recolher durante o carregamento… por isso, não seria apenas o consumo do próprio OBDII como posteriormente do equipamento que estivesse a transmitir os dados.

Não me parece uma boa solução e fora do âmbito do tema desta publicação (continuo sem conseguir fazer uma tabela, ou array ou aldo do género no Home Assistant, seja em template sensor seja de outra forma).

@Helder, o carregador que utilizo (Wallbox) tem API e funciona muito bem no HA.

Coontudo, em protocolo de carregamento AC, o SoC do carro (o estado de carregamento da bateria) não é transmitido, por isso o carregador (e neste caso o HA) não sabe em que valor de SoC está a bateria.

Por essa razão é que tenho de fazer contas ao nível do tempo ou outras para estimar ao fim de quanto tempo a bateria passará de x % para y %.

O que tinha anteriormente era a ligação ao carro e isso era fácil de gerir. Quando chegava ao SoC pretendido, parava o carregamento… Sem saber agora o “SoC” atual, tenho de o calcular… É esse o objetivo desta publicação.

Certo. O meu openEVSE tem as api keys do carro e por isso consegue mostrar no ecrã e transmitir o SoC. Realmente não ajudaria de todo devido ao problema que explicou, desculpe.

Estava a acompanhar o topico e não quero de todo fazer de conta que percebo do assunto até porque claramente domina o tema.
Só me fez lembrar que muitos youtubers da altura que andei a pesquisar EVs chamavam ao indicador da bateria como o “guess o meter”.

Fui olhar para os dados do carregador e tenho grandes variações de energia para 1 incremento de % de SoC, principalmente depois de viagem com necessidade de carregamento rápido.
Principalmente perto dos 80%, que suponho ser um ponto de calibração do SoC da bateria.

Acho que o exercício que está a fazer é bastante válido, atenção, mas será que com esta variação vai conseguir chegar à exatidão que procura?

1 Curtiu

Ambos os carros que tenho, apesar de até terem, cada um, duas baterias de 12 V já por causa das falhas, em 4 anos já tive de substituir ambas nos dois.

foi por isto que a tesla trocou as baterias de 12V de acido para lítio nos carros deles, mais capacidade e mais ciclos de carga e descarga.

Acho que o exercício que está a fazer é bastante válido, atenção, mas será que com esta variação vai conseguir chegar à exatidão que procura?.

Possivelmente não @wnn… Chego a obter valores de energia maiores para carregamentos inferiores (por exemplo, na última vez, tive um consumo de energia maior dos 5% aos 100% do que dos 3% aos 100% (no carregamento do PHEV). Só uma diferença de 200 Wh, mas vem comprovar o que refere… Depende muito do balanceamento de células que o carro faz, principalmente em carregamentos até aos 100%.

Possivelmente, em termos de objetivo de controlo do SoC de carga, seria tempo perdido… mas assim sempre aprendo um pouco mais da programação YAML no HA.

Muito obrigado pela sua partilha.


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


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