Como criar uma base de dados leve no HA com histórico e apresentação gráfica

Já estava e ainda estou a alterar:

1º base de dados - criação de mais campos
2º alteração da automação

Mais daqui a pouco testo e darei feedback

thanks :slight_smile:

Viva,

Estou aqui com um dúvida/oportunidade:

Fiz a seguinte automação p/ carregar o valor de 3 entidades p/ a base de dados ao mesmo tempo:

- alias: Actualizar dados energia a cada min
  trigger:
  - platform: time_pattern
    minutes: "/1"
  action:

    - service: shell_command.daily_insert_mysql
      data_template:
        table: tbl_contador_energia
        value: >
          {{ (now().strftime("%s") | int ) | timestamp_custom("%Y-%m-%d %H:%M:%S", false) }}
        column: date

    - service: shell_command.daily_insert_mysql
      data_template:
        table: tbl_contador_energia
        value: >
          {{ states.sensor.qe_fase_ct_power.state | float | round (2) }}
        column: qe_fase_ct_power

    - service: shell_command.daily_insert_mysql
      data_template:
        table: tbl_contador_energia
        value: >
          {{ states.sensor.qe_fase_ct_voltage.state | float | round (2) }}
        column: qe_fase_ct_voltage

    - service: shell_command.daily_insert_mysql
      data_template:
        table: tbl_contador_energia
        value: >
          {{ states.sensor.qe_fase_ct_current.state | float | round (2) }}
        column: qe_fase_ct_current

Os dados são carregados na mariaDB e ficam com a seguinte estrutura:

image

Identifico dois problemas:

  • o campo data não assume a hora corretamente:
    qd testo (no Developer Tools):
{{ (now().strftime("%s") | int ) | timestamp_custom("%Y-%m-%d %H:%M:%S", false) }}

obtenho isto (o que está correto):

image
mas não é o que passa para a base de dados

  • são criados 3 registos, um por cada valor, em vez de ficar tudo no mesmo registo (este tema deve estar relacionado com o anterior)

Estrutura da tabela:

Se acharem por bem, posso abrir um tópico para este tema

Obg :slight_smile:

O script criado foi feito para funcionar com uma estrutura de tabela especifica. A estrutura que publicas não está correta, foste tu que a criaste manualmente ou deixaste o script criá-la?

  • a coluna date deveria ter o tipo de DATE (não suporta horas) e deveria ser Chave primária

Assim para cada dia só tens 1 linha em vez de várias como está no teu exemplo.


Quanto à automação, porque é que fazes o trigger por cada minuto em vez de fazeres o trigger cada vez que o estado altera de valor?

Viva Ricardo,

Estou em fase de testes, aproveitando o vosso excelente trabalho. :slight_smile:

Entretanto e após a minha publicação anterior consegui resolver o tema das seguinte forma:

  • Alterei o scritp em dois pontos:
onde estava:
`date` DATE NOT NULL
ficou:
`date` DATETIME NOT NULL,
onde estava:
(dt.strftime("%Y-%m-%d"), args.value, args.value),
ficou:
(dt.strftime("%Y-%m-%d %H:%M"), args.value, args.value)

A automação está a correr min a min pq eu quero guardar os dados a cada 5 min (como estou em testes, é para poder avaliar a evolução do tema de uma forma mais rápida).

O meu objetivo final, é guardar os dados das leituras do meu contador 3EM, de 5 de 5 min numa base de dados que será o meu histórico com todas as variáveis que o meu contador permite.

A estrutura da tabela que eu apresentei foi criada automaticamente pelo binómio automação que apresento e pelo scrip disponibilizado.

Entretanto, já tenho tudo operacional:

- alias: Actualizar dados energia a cada 5 mins
  trigger:
  - platform: time_pattern
    minutes: "/5"
  action:
    - service: shell_command.daily_insert_mysql
      data_template:
        table: tbl_contador_energia
        value: >
          {{ (now().strftime("%s") | int ) | timestamp_custom("%Y-%m-%d %H:%M", false) }}
        column: date

    - service: shell_command.daily_insert_mysql
      data_template:
        table: tbl_contador_energia
        value: >
          {{ states.sensor.qe_fase_ct_power.state | float | round (2) }}
        column: qe_fase_ct_power

    - service: shell_command.daily_insert_mysql
      data_template:
        table: tbl_contador_energia
        value: >
          {{ states.sensor.qe_fase_ct_voltage.state | float | round (2) }}
        column: qe_fase_ct_voltage

    - service: shell_command.daily_insert_mysql
      data_template:
        table: tbl_contador_energia
        value: >
          {{ states.sensor.qe_fase_ct_current.state | float | round (2) }}
        column: qe_fase_ct_current

Agradeço a disponibilidade :slight_smile:

Este conceito foi para evitar ter uma base de dados enorme quando apenas é preciso apenas 1 valor para o dia inteiro. A alteração que fizeste, acaba por sobrecarregar mais a base de dados, para isso tens outras alternativas como por exemplo o InfluxDB que tem boa integração com o HA

Vou espreitar o InfluxDB.

Obg pela dica.

Bom dia,

Uma questão simples (ou não).

É possível aceder à BD mariaDB a partir de um pc que esteja na mesma rede do HA?

Sim, e isso é explicado no tópico através do HeidiSQL

ups… meti água… obg Ricardo.

e é possível aceder a partir do exterior (via duckdns)?

Tudo é possível desde que abras as portas do teu router. Mas isso pode conprometer a segurança.
O melhor será mesmo teres vpn para a tua rede

1 Curtiu

https://gyazo.com/d200b71cee11098e5b479ed1a0db7971
Este comando deveria ser possivel executar pelo terminal do HA?

python3 /config/py_scripts/daily_insert_mysql.py --host=core-mariadb --user=xxx --password=xxx --db=custom_data --table=horas_luzes --value=2 --col=luzhyperion

Tendo alterado o user e password claro.
É que no sensor das horas como o do exemplo, no HeidiSQL tenha varios valores oa longo dos dias, mas no HA o sensor aparece em estado “unknown”.

Sim, deveria funcionar desde que estejas dentro do container do HA. Como estás a aceder à linha de comandos?
Podes fazer hostname para teres a certeza qual container estás dentro. Se entrares via addon ssh, não entras dentro do container do HA diretamente, mas sim do container do SSH
Confirma com o comando acima

Estou dentro do addon ssh. Ao fazer hostname dá-me core-ssh…
Também fiz um script para testar e correr este shell_command e dá-me:
https://gyazo.com/987ef9d99d04fecc1103bd5a31e4660b

na linha de comandos, a tal do ssh deves conseguir entrar dentro do container do HA, experimenta docker exec -it homeassistant bash

Dá-me: docker: command not found.
Mas este shell command, deveria correr sem problemas e sem faze-lo por aqui? Ou se não conseguir fazer por aqui nunca na vida vai dar?

Pois, não dá para aceder então, pelo menos dessa forma
O shell_command está a correr, pode estar a dar um erro não sei porquê, o erro que dá não é passado para os logs do HA por isso não dá para ver assim. Tem mesmo de ser pelo container…

Então como é que posso contornar isto para ficar com acesso às horas das luzes ligadas?

Qual é o método de instalação que usaste para o HA? Docker ou sistema operativo home assistant?

Segui o tutorial aqui do forum para instalar em nuc com proxmox e Ubunto server

Podes passar pelo discord para falarmos melhor?


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


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