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

Boas,
Fiz o update da versão 2021.9.7 para a 2021.11.3. Passei a ter este erro ao registar na BD MariaDB
021-11-15 21:59:24 ERROR (MainThread) [homeassistant.components.shell_command] Error running command: python3 /config/py_scripts/daily_insert_mysql.py --host=core-mariadb --user=****** --password=****** --db=custom_data --table={{ table }} --value={{ value }} {{ '--col='+column if column is defined }}, return code: 1

Alguém já passou pelo mesmo problema ?

Boas, ainda estou na versão de Outubro, não te sei confirmar se está tudo a funcionar direito ou não.
No entanto, podes seguir o que disse num post acima para tentar ver onde está o erro mais concretamente

Não estou a usar no recorder. Até ao update tenho registos na Base de dados. Após o update passou a dar erros.
2021-11-15 22:25:34 ERROR (MainThread) [homeassistant.components.shell_command] Timed out running command: pip install pymysql, after: 60s
Traceback (most recent call last):
File “/usr/local/lib/python3.9/asyncio/streams.py”, line 517, in _wait_for_data
await self._waiter
asyncio.exceptions.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/local/lib/python3.9/asyncio/subprocess.py”, line 196, in communicate
stdin, stdout, stderr = await tasks.gather(stdin, stdout, stderr,
asyncio.exceptions.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/local/lib/python3.9/asyncio/tasks.py”, line 492, in wait_for
fut.result()
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/components/shell_command/init.py”, line 83, in async_service_handler
stdout_data, stderr_data = await asyncio.wait_for(
File “/usr/local/lib/python3.9/asyncio/tasks.py”, line 494, in wait_for
raise exceptions.TimeoutError() from exc
asyncio.exceptions.TimeoutError
2021-11-15 22:30:11 ERROR (MainThread) [homeassistant.components.automation.registar_temperatura_quarto_suite] Registar Temperatura Quarto Suite: Error executing script. Error for call_service at pos 1: Error rendering data template: UndefinedError: ‘dict object’ has no attribute ‘to_state’
2021-11-15 22:30:11 ERROR (MainThread) [homeassistant.components.automation.registar_temperatura_quarto_suite] Error while executing automation automation.registar_temperatura_quarto_suite: Error rendering data template: UndefinedError: ‘dict object’ has no attribute ‘to_state’

O gráfico que apresentas está muito bom para o que queria.
No entanto estou a ter dificuldades na leitura da minha fatura para alterar os valores do “function” no Node-RED.
Queria:

  • 1x sensor com o custo da eletricidade em si ( €/dia (do dia 9 ao 9) + €/kWh)

Alguém me consegue ajudar a inserir os valores e quais?
Segue duas fotos da minha fatura com a Galp (electricidade e gas).


Seria assim algo do genero?:

  ROUND(SUM(\`consumo_energia_diario\`), 3) AS total,
  FORMAT(round(((sum(\`consumo_energia_diario\`) * 0.1547 )), 2), 2) AS 'total_eur',
  CONCAT(

Mas falta me os dias x 0,2143€…
Estarei a interpretar mal?

Obrigado

também me esta a dar o mesmo erro ?
conseguiste solucionar ?

Esta a dar-me este erro ao registar na BD MariaDB
ERROR (MainThread) [homeassistant.components.shell_command] Error running command: python3 /config/py_scripts/daily_insert_mysql.py --host=core-mariadb --user=****** --password=****** --db=custom_data --table={{ table }} --value={{ value }} {{ '--col='+column if column is defined }} , return code: 1

Alguém já passou pelo mesmo problema ?

e nao regista nada na base de dados…

Desculpem a minha ignorância, mas não é suposto o HA gravar os dados na base de dados MariaDB automaticamente?

É que eu tenho BD MariaDB instalada no HA e os dados estão a ser lá gravados, sem ter que instalar qualquer ficheiro py (a não ser que esse ficheiro seja necessário para gravar os dados noutra tabela).

Correto, é uma tabela à parte com o único fundamento de gravar dados para longo prazo sem que o HA os elimine.

1 Curtiu

Mas supostamente o HA só elimina os dados da MariaDB se tu deres ordem/programares para os apagar.

Correto mas mesmo assim ocupa mais espaço. Na minha tabela externa do HA tenho dados desde 2020 e apenas me ocupa menos de 1MB porque para certos casos apenas me interessa 1 valor por dia, e é nisto que esta implementação é útil.

1 Curtiu

Bom dia,
Estou de novo a tentar colocar datalabel no gráfico tendo como guia o link partilhado, mas infelizmente não tenho conhecimentos de js para ultrapassar a parte do scripting. O último post do link (*) partilhado inclui o codigo para o chartjs 3.7 (versão actual do card).
Abaixo código de um gráfico simples que estou a usar para testes, onde inclui o scripting, mas não está a funcionar.
Alguma sugestão do que poderei estar a fazer mal?
Obrigado desde já.

(*) link: https://stackoverflow.com/questions/31631354/how-to-display-data-values-on-chart-js

type: custom:chartjs-card
chart: bar
data:
  datasets:
    - backgroundColor: >-
        ${ c => {var bg = c.chart.ctx.createLinearGradient(0,0,0,600);
        bg.addColorStop(0, "lightgreen"); bg.addColorStop(1, "blue"); return
        bg;} }
      borderColor: >-
        ${ c => {var bg = c.chart.ctx.createLinearGradient(0,0,0,600);
        bg.addColorStop(0, "lightgreen"); bg.addColorStop(1, "blue"); return
        bg;} }
      borderWidth: 2
      borderRadius: 7
      data: ${'[20,10,5,15]'}
      label: TV
  labels: ${'[1,2,3,4]'}
options:
  scales:
    'y':
      position: left
  plugins:
    title:
      display: true
      text: example
  animation:
    duration: 0
    onComplete: |
      ${' function() {
        ctx = this.ctx;
        ctx.font = Chart.helpers.fontString(Chart.defaults.font.size, Chart.defaults.font.style, Chart.defaults.font.family);
        ctx.textAlign = 'center';
        ctx.textBaseline = 'bottom';
        chartinst = this;
        this.data.datasets.forEach(function(dataset, i) {
            if(chartinst.isDatasetVisible(i)){
                var meta = chartinst.getDatasetMeta(i);
                meta.data.forEach(function(bar, index) {
                    var data = dataset.data[index];
                    ctx.fillText(data, bar.x, bar.y - 5);
                 });
              }
           });
        }'}

Ainda sobre o post acima, incluir o plugin “datalabel”(*) também permitia utilizar datalabels e seria mais “user friendly” para desenhar gráficos. Não sei se será muito dificil ou não incluir este plugin no card (Eu sei que pedir é fácil :slight_smile: ).
Se fosse possível era excelente e penso que seria um grande complemento ao card. Fica a sugestão.

(*) https://github.com/chartjs/chartjs-plugin-datalabels

Termino o post agradecendo o trabalho do developer deste card. Este card combinado com sensores SQL permite uma grande flexibilidade na elaboração de gráficos para o nosso HA!!

Exemplos de como estou a utilizar
Consumo de energia por semana:
image

Horas de utilização e numero de utilizações por semana (ainda em desenvolvimento):
image

@RodolfoVieira no function node, é possivel fazer o €/kWh + (sensor dias corridos x €/dia) ? Identico ao template abaixo:

    custo_energia_mes_casa:
        friendly_name: "Fatura Energia Mensal"
        icon_template: "mdi:currency-eur"
        value_template: >
          {{ ( states('sensor.energy_shelly_em_casa_monthly_total')|float(0) * 0.1927 + states('sensor.monthly_energy_cicle_days_shelly_em_casa')|float(0) * 0.1459 ) | round(2) }}

Obrigado

No meu caso, hoje mudou de mês (1 outubro 2022), mas não foi criada a coluna referente a Outubro, mantem-se a de Setembro. Nota: comecei a recolher dados desde o dia 22 de Setembro. Na tabela estão registados todos os dias de setembro e o dia 1 de outubro. O que faltará? Obrigado.

Viva,

É possivel colocar os valores do kWh nas barras verticais? Já tentei ver atraves da documentação mas nao consegui de maneira nenhuma.

type: entities
title: Consumo energético (últimos 12 meses)
entities:
  - type: custom:chartjs-card
    chart: bar
    entity_row: true
    data:
      datasets:
        - backgroundColor: >-
            ${ c => {var bg = c.chart.ctx.createLinearGradient(0,0,0,600);
            bg.addColorStop(0, "lightgreen"); bg.addColorStop(1, "blue"); return
            bg;} }
          borderColor: >-
            ${ c => {var bg = c.chart.ctx.createLinearGradient(0,0,0,600);
            bg.addColorStop(0, "lightgreen"); bg.addColorStop(1, "blue"); return
            bg;} }
          borderWidth: 1
          borderRadius: 2
          data: ${states["sensor.energy_last_12_months"].attributes.data}
          strokeColor: '#79D1CF'
          fillColor: '#79D1CF'
          label: Eletricidade
      labels:
        - Janeiro 2022
        - Fevereiro 2022
        - Março 2022
        - Abril 2022
        - Maio 2022
        - Junho 2022
        - Julho 2022
        - Agosto 2022
        - Setembro 2022
        - Outubro 2022
        - Novembro 2022
        - Dezembro 2022
    options:
      scales:
        yAxes:
          - ticks:
              beginAtZero: true
      plugins:
        title:
          display: true
          text: >-
            ${"📅 Mês Corrente: " +
            states["sensor.energy_shelly_em_casa_monthly_total"].state + "
            kWh         |       📅 Hoje " +
            states["sensor.energy_shelly_em_casa_today"].state + " kWh" }
    custom_options:
      showLegend: false

Algo identico a isto:

image

Vê se isto ajuda.

https://jsfiddle.net/xys1tqfn/1/

`olá estou tentando registar os dados do meu sensor de exportação mas algo está a falhar. podem ajudar?
a base de dados está criada.


o meu ficheiro base_dados.yaml está na pasta config e tem a seguinte configuração:

shell_command:
  daily_insert_mysql: "python3 /config/py_scripts/daily_insert_mysql.py --host=core-mariadb --user=meu_user --password=minha_password --db=custom_data --table={{ table }} --value={{ value }} {{ '--col='+column if column is defined }}"
  python_install_pymysql_dependency: "pip install pymysql"

automation:

  - alias: "Instala a dependencia no arranque do ha"
    initial_state: true
    trigger:
      - platform: homeassistant
        event: start
    action:
      - service: shell_command.python_install_pymysql_dependency

- alias: "Registar o exedente diário de energia"
    initial_state: true
    trigger:
      - platform: state
        entity_id: sensor.shellyem_34945473ea19_channel_1_energy_returned
    action:
      - service: shell_command.daily_insert_mysql
        data_template:
          table: exedente_energia
          value: >
            {{ trigger.to_state.state }}
          column: >
            {% if trigger.entity_id == "sensor.shellyem_34945473ea19_channel_1_energy_returned" %}
              exedente_energia_diario
            {% endif %}

tenho a pasta py_scripts em config e com o ficheiro daily_insert_mysql.py lá dentro.
Não tenho erros no log do home assistant.
o sensor atualiza o estado frequentemente, mas na base de dados continua vazia.
O user da base de dados tem direitos correctos

Alguma ideia?

Boas,

Alguém sabe como posso ter aqui só disponivel 30 dias de vizualização?
Aparece-me 60 dias, o que torna as colunas muito pequenas vistas no smartphone…

type: entities
title: Consumo energético (últimos 30 dias)
entities:
  - chart: bar
    custom_options:
      showLegend: false
    data:
      datasets:
        - backgroundColor: >-
            ${ c => {var bg = c.chart.ctx.createLinearGradient(0,0,0,600);
            bg.addColorStop(0, "lightgreen"); bg.addColorStop(1, "blue"); return
            bg;} }
          borderColor: >-
            ${ c => {var bg = c.chart.ctx.createLinearGradient(0,0,0,600);
            bg.addColorStop(0, "lightgreen"); bg.addColorStop(1, "blue"); return
            bg;} }
          borderWidth: 1
          borderRadius: 2
          data: ${states["sensor.kwh_diarios"].attributes.data}
          label: Eletricidade
      labels: ${states["sensor.kwh_diarios"].attributes.labels}
    entity_row: false
    options:
      scales:
        yAxes:
          - ticks:
              beginAtZero: true
      plugins:
        legend:
          position: bottom
        title:
          display: true
          text: >-
            ${"📅 Ontem: " + states["sensor.kwh_diarios"].attributes.total_eur +
            " kWh"}
    type: custom:chartjs-card

image

Obrigado

Olá bom dia a todos,

Tenho um dúvida em relação ao registo de dados obtidos via shelly PRO 3EM.

Tenho uma instância homeassistant e queria fazer registo dos valores de Corrente Instantânea (A) e Tensão instantânea (V), praticamente a cada 1-5s, a fim de analizar uma instalação elétrica privada.

Em tempos cheguei a utilizar serviços como influxDB e grafana mas já não me lembro sequer como configurar estes.

Neste sentido preciso de ajuda para esta situação e também pedir-vos feedback para saber se é possivel ou não.

Obrigado

E possível com o influx e grafana .
Há vários vídeos no YouTube a explicar.
No fórum tambem há alguns tutoriais sobre , podem estar se calhar desactualizados mas a base está lá.


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


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