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

Por acaso já tinha feito esse comando no container e não deu erro nenhum:

podes postar o código ?

Este é o meu yaml de package.

shell_command:
  daily_insert_mysql: "python3 /config/python_scripts/daily_insert_mysql.py --host=core-mariadb --user=hass --password=xpto --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: "Custo carregamento do Leaf"
    initial_state: true
    trigger:
      - platform: state
        entity_id: sensor.leaf_custo_diario
    action:
      - service: shell_command.daily_insert_mysql
        data_template:
          table: leaf_custo_carregamento
          value: >
            {{ trigger.to_state.state }}
          column: >
            {% if trigger.entity_id == "sensor.leaf_custo_diario" %}
              leaf_custo_diario
            {% endif %}

Aqui no meu o que tenho diferente é a localização que é …/python_scripts/… mas bate certo pois é o nome da pasta onde tenho os meus scripts.

Sim, deveria dar. O que acho estranho é o erro estar relacionado com a dependência, será que não tens mais erros?

@ricreis394 segui o tutorial e tenho tudo a funcionar, mas agora estava a pensar em migrar a base de dados do Home Assistant para a MariaDB, mas como não percebo muito disto antes de fazer asneiras podias me tirar uma duvida? Como já tenho a app MariaDB configurada para utilizar nesta nesta aplicação se migrar a base de dados do Home Assistante não vai dar confusão? Caso não seja o topico correcto para a questão por favor avisa que apago. Obrigado

Podes migrar para MariaDB sem problemas. A DB utilizada pelo HA tem outro nome e não cria conflitos.

2 Curtiram

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.


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


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