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

Perfeito!
Não estava a conseguir passar essa parte da documentação correctamente para dentro do background-color…
Já ia tentar com o card-mod.

Muito Obrigado!
Abraço!

1 Curtiu

Com o card mod não ia dar, porque o card mod só mexe no Css.
Ainda assim, a solução que dei não é a ideal, porque não se ajusta mediante o tamanho da barra.
Experimenta reduzir o valor de 600 para por exemplo 300 para ver se gostas mais. O gradient fica mais apertado

Já me dou por satisfeito com este resultado mas se conseguires saber a parte das linhas brancas melhor ainda. Fica mais apelativo.

Passar para os mensais quando houver tempo.
Obrigado mais uma vez!

1 Curtiu

Isso está com muito bom aspecto :+1:


Atualmente o chartjs está na versão 3.2.1, o card está a atualizar a 2.9.x
Não tinha conhecimento que tinham alterado a estrutura, por isso é que não estás a conseguir.

Podes aceder à documentação da versão antiga aqui:
https://www.chartjs.org/docs/2.9.4/

No entanto se quiseres alterar a cor é assim

...
    options:
      scales:
        xAxes:
          - gridLines:
              color: 'orange'
        yAxes:
          - gridLines:
              color: 'orange'
1 Curtiu

You made it… Again!

Thank you!

1 Curtiu

Assim sim! :+1:
Alguma dúvida diz

Também tenho planeado fazer uns ajustes ao card em breve, atualizar o chartjs e adicionar novas funcionalidades, vamos a ver como corre de tempo disponível :wink:

3 Curtiram

Boa tarde
Podes Por favor partilhar o teu codigo, para eu poder adaptar a minha casa ?

Boa tarde Ricardo, pode por favor ajudar-me

Segui o tutorial acima, mas no então parece que nada é escrito na base de dados

a baixo o meu codigo base_de_dados.yaml



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

sensor:
  - platform: history_stats
    entity_id: switch.luz_traseiras
    state: 'on'
    name: Horas Luz Cozinha
    start: '{{ now().replace(hour=0, minute=0, second=0) }}'
    end: '{{ now() }}'     

  - platform: sql
    db_url: mysql://XXXXXXXXX:XXXXXXXXXXX@core-mariadb/custom_data?charset=utf8
    queries:
      - name: consumo_electricidade
        query: >-
          SELECT
              CONCAT(
                  '[',
                  GROUP_CONCAT(DAY(date) SEPARATOR ','),
                  ']'
              ) AS labels,
              CONCAT(
                  '[',
                  GROUP_CONCAT(consumo_energia_diario SEPARATOR ','),
                  ']'
              ) AS data,
              CONCAT(
                  '["',
                  GROUP_CONCAT(IF(`consumo_energia_diario` >= 10, 'red', IF(`consumo_energia_diario` >= 5, 'orange', 'green')) SEPARATOR '","'),
                  '"]'
              ) AS colors,
              ROUND(SUM(consumo_energia_diario), 2) AS total,
              FORMAT(round(((sum(consumo_energia_diario) * 0.15184 + 0.1183 + 0.041 + 0.107)*1.23), 2), 2) AS 'total_eur',
              'info in attributes' AS value
          FROM consumo_energia
          WHERE MONTH(date) = MONTH(CURRENT_DATE);
        column: "value"

  
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 consumo diário de energia"
    initial_state: true
    trigger:
      - platform: state
        entity_id: sensor.daily_energy
    action:
      - service: shell_command.daily_insert_mysql
        data_template:
          table: consumo_energia
          value: >
            {{ trigger.to_state.state }}
          column: >
            {% if trigger.entity_id == "sensor.daily_energy" %}
              consumo_energia_diario
            {% endif %}
            
  - alias: "Insere na tabela o número de Horas que a luz da cozinha esta ligada"
    initial_state: true
    trigger:
      - platform: state
        entity_id: sensor.horas_luz_cozinha
    condition:
      - condition: template
        value_template: >
          {{ (trigger.to_state.state | float) != 0.0 }}
    action:
      - service: shell_command.daily_insert_mysql
        data_template:
          table: horas_luzes
          value: >
            {{ trigger.to_state.state }}
          column: luzcozinha     
                    

Como configuraste o addon do mariadb? Criou a base de dados? O utilizador criado tem permissão para ler e escrever para a base de dados criada?

Podes colocar isto no configuration.yaml para que o erro seja mais especifico

logger:
  default: warning
  logs:
    homeassistant.components.shell_command: debug

o addon do mariaDB configurei de acordo o tutorialo utilizador tem permissão

databases:
  - custom_data
logins:
  - username: fabio.martins
    host: '%'
    password: XXXXXXX
rights:
  - username: fabio.martins
    host: '%'
    database: custom_data
    grant: ALL PRIVILEGES ON

parece-me tudo bem,
Coloca então o logger a funcionar como te disse acima para ver o erro que dá com mais detalhe

Boas.
Antes de mais parabéns pelo topico visto ser aqui uma possibilidade de diminuir o tamando da base de dados do HA.
Ainda estou muito confuso com este metodo e segue já a minha primeira duvida.
Não deveria estar aparecer qq coisa no gráfico?

  - alias: "Registar o consumo diário de energia - Casa"
    initial_state: true
    trigger:
      - platform: state
        entity_id: 
          - sensor.energy_shelly_em_casa_today
          - sensor.energy_shelly_em_forno_today
          - sensor.energy_tomada_tv_sala_today
    action:
      - service: shell_command.daily_insert_mysql
        data_template:
          table: consumo_casa
          value: >
            {{ trigger.to_state.state }}
          column: >
            {% if trigger.entity_id == "sensor.energy_shelly_em_casa_today" %}
              consumo_energia_diario
            {% endif %}
            {% if trigger.entity_id == "sensor.energy_shelly_em_forno_today" %}
              consumo_forno_diario
            {% endif %}
            {% if trigger.entity_id == "sensor.energy_tomada_tv_sala_today" %}
              consumo_sala_diario
            {% endif %}
  - platform: sql
    db_url: !secret db_url_custom_data
    queries:
      - name: consumo_electricidade
        query: >-
          SELECT
              CONCAT(
                  '[',
                  GROUP_CONCAT(DAY(date) SEPARATOR ','),
                  ']'
              ) AS labels,
              CONCAT(
                  '[',
                  GROUP_CONCAT(consumo_energia_diario SEPARATOR ','),
                  ']'
              ) AS data,
              CONCAT(
                  '["',
                  GROUP_CONCAT(IF(`consumo_energia_diario` >= 10, 'red', IF(`consumo_energia_diario` >= 5, 'orange', 'green')) SEPARATOR '","'),
                  '"]'
              ) AS colors,
              ROUND(SUM(consumo_energia_diario), 2) AS total,
              FORMAT(round(((sum(consumo_energia_diario) * 0.1587 + 0.1183 + 0.041 + 0.107)*1.23), 2), 2) AS 'total_eur',
              'info in attributes' AS value
          FROM consumo_energia
          WHERE MONTH(date) = MONTH(CURRENT_DATE);
        column: "value"
chart: bar
custom_options:
  showLegend: false
data:
  datasets:
    - backgroundColor: '${states["sensor.consumo_electricidade"].attributes.colors}'
      borderWidth: 1
      data: '${states["sensor.consumo_electricidade"].attributes.data}'
      label: Eletricidade
  labels: '${states["sensor.consumo_electricidade"].attributes.labels}'
entity_row: false
options:
  scales:
    yAxes:
      - ticks:
          beginAtZero: true
  title:
    display: true
    text: >
      ${"Consumo energético Mês Corrente -> " +
      states["sensor.consumo_electricidade"].attributes.total_eur + "€"}
type: 'custom:chartjs-card'

Obrigado desde já

Boas, Obrigado!

Antes de mais confirma o teu sensor SQL se está a receber os dados pretendidos.

De facto este sensor “consumo electricidade” estava-me a dar erro.
Tinha alterado o nome do “table” na automation e no sensor não :man_facepalming:

1 Curtiu

Tenho o sensor “consumo_casa” a mostrar corretamente no HA (como demonstro em foto) e ao tentar adicionar o exemplo mais acima do sensor “energy_last_12_months” dá-me um erro:

      - name: energy_last_12_months
        column: "attributes"
        query: >-
          SELECT
             CONCAT('[', GROUP_CONCAT(`month` ORDER BY `order` SEPARATOR ','), ']') AS labels,
             CONCAT('[', GROUP_CONCAT(`total` ORDER BY `order` SEPARATOR ','), ']') AS data,
             'info in attributes' AS 'attributes'
           FROM
           (
          	SELECT
          	  ROUND(SUM(`total`), 2) AS 'total',
          	  CONCAT('"',MONTHNAME(date), ' ', YEAR(date),'"') AS 'month',
          	  DATE(`date`) AS 'order'
          	FROM `consumo_energia_diario`
          	GROUP BY MONTH(`date`), YEAR(`date`)
          	ORDER BY `date` DESC
          	LIMIT 12
          ) AS `something`;

Este erro, diz que o “cosum_energia_diario” não existe, mas existe.
É por eu ainda não ter dados suficientes para os 12meses?

Obrigado

Tens que colocar o db_url a apontar para a tua base de dados

O que puderá estar mal?
Mesmo inserindo continua a dar o erro:

sensor:

### Consumo Eletricidade
  - platform: sql
    db_url: !secret db_url_custom_data
    queries:
      - name: consumo_electricidade
        query: >-
          SELECT
              CONCAT(
                  '[',
                  GROUP_CONCAT(DAY(date) SEPARATOR ','),
                  ']'
              ) AS labels,
              CONCAT(
                  '[',
                  GROUP_CONCAT(consumo_energia_diario SEPARATOR ','),
                  ']'
              ) AS data,
              CONCAT(
                  '["',
                  GROUP_CONCAT(IF(`consumo_energia_diario` >= 10, 'red', IF(`consumo_energia_diario` >= 5, 'orange', 'green')) SEPARATOR '","'),
                  '"]'
              ) AS colors,
              ROUND(SUM(consumo_energia_diario), 2) AS total,
              FORMAT(round(((sum(consumo_energia_diario) * 0.1587 + 0.1183 + 0.041 + 0.107)*1.23), 2), 2) AS 'total_eur',
              'info in attributes' AS value
          FROM consumo_casa
          WHERE MONTH(date) = MONTH(CURRENT_DATE);
        column: "value"

  - platform: sql
    db_url: !secret db_url_custom_data
    queries:
      - name: energy_last_12_months
        column: "attributes"
        query: >-
          SELECT
             CONCAT('[', GROUP_CONCAT(`month` ORDER BY `order` SEPARATOR ','), ']') AS labels,
             CONCAT('[', GROUP_CONCAT(`total` ORDER BY `order` SEPARATOR ','), ']') AS data,
             'info in attributes' AS 'attributes'
           FROM
           (
          	SELECT
          	  ROUND(SUM(`total`), 2) AS 'total',
          	  CONCAT('"',MONTHNAME(date), ' ', YEAR(date),'"') AS 'month',
          	  DATE(`date`) AS 'order'
          	FROM `consumo_energia_diario`
          	GROUP BY MONTH(`date`), YEAR(`date`)
          	ORDER BY `date` DESC
          	LIMIT 12
          ) AS `something`;
2021-06-12 21:16:58 ERROR (SyncWorker_4) [homeassistant.components.sql.sensor] Error executing query SELECT
CONCAT('[', GROUP_CONCAT(`month` ORDER BY `order` SEPARATOR ','), ']') AS labels,
CONCAT('[', GROUP_CONCAT(`total` ORDER BY `order` SEPARATOR ','), ']') AS data,
'info in attributes' AS 'attributes'
FROM
(
SELECT
ROUND(SUM(`total`), 2) AS 'total',
CONCAT('"',MONTHNAME(date), ' ', YEAR(date),'"') AS 'month',
DATE(`date`) AS 'order'
FROM `consumo_energia_diario`
GROUP BY MONTH(`date`), YEAR(`date`)
ORDER BY `date` DESC
LIMIT 12
) AS `something`;: (MySQLdb._exceptions.ProgrammingError) (1146, "Table 'custom_data.consumo_energia_diario' doesn't exist")
[SQL: SELECT
CONCAT('[', GROUP_CONCAT(`month` ORDER BY `order` SEPARATOR ','), ']') AS labels,
CONCAT('[', GROUP_CONCAT(`total` ORDER BY `order` SEPARATOR ','), ']') AS data,
'info in attributes' AS 'attributes'
FROM
(
SELECT
ROUND(SUM(`total`), 2) AS 'total',
CONCAT('"',MONTHNAME(date), ' ', YEAR(date),'"') AS 'month',
DATE(`date`) AS 'order'
FROM `consumo_energia_diario`
GROUP BY MONTH(`date`), YEAR(`date`)
ORDER BY `date` DESC
LIMIT 12
) AS `something`;]
(Background on this error at: http://sqlalche.me/e/14/f405)
2021-06-12 21:16:59 ERROR (MainThread) [pyipma.location] Station has no observations!

A tabela não está criada.
Já tens a automação a escrever os valores na base de dados?
Se sim, podes ter que dar algum tempo para a automação atuar e fazer a criação. Depende do período de tempo que o sensor altera

Tenho.
É esta aqui, tanto é que aparece no HeidiSQL:

### Consumo Diário
  - alias: "Registar o consumo diário em casa"
    initial_state: true
    trigger:
      - platform: state
        entity_id: 
          - sensor.energy_shelly_em_casa_today
          - sensor.energy_shelly_em_forno_today
          - sensor.energy_tomada_tv_sala_today
    action:
      - service: shell_command.daily_insert_mysql
        data_template:
          table: consumo_casa
          value: >
            {{ trigger.to_state.state }}
          column: >
            {% if trigger.entity_id == "sensor.energy_shelly_em_casa_today" %}
              consumo_energia_diario
            {% endif %}
            {% if trigger.entity_id == "sensor.energy_shelly_em_forno_today" %}
              consumo_forno_diario
            {% endif %}
            {% if trigger.entity_id == "sensor.energy_tomada_tv_sala_today" %}
              consumo_sala_diario
            {% endif %}

Ou a automação deveria ser só com um sensor? e não com 3?

Repara que a tabela chama-se consumo_casa e não consumo_energia_diario
Retifica a tua query sql


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


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