O propósito deste tópico é te ensinar como podes criar uma base de dados leve no teu HA para que registes valores do que quiseres nessa mesmo base e mantenhas um histórico de longa data em uma base super leve.
Para fazeres esta configuração precisas de:
Home Assistant SO ( possibilidade de instalares addons)
Programa Heidisql
Addon Maria DB
Hacs
Card Chartjs Card
Para começares precisas de um ficheiro.py
Onde ir buscar? AQUI
Fazes download do zip como te mostrei na imagem acima.
Descompactas a pasta e copias o ficheiro daily_insert_mysql.py para uma pasta chamada py_scripts caso não tenhas essa pasta cria uma dentro da tua pasta config.
Ou seja o caminho final será /config/py_scripts/daily_insert_mysql.py
De seguida vais instalar o addon MariaDb que podes encontrar na Add-on Store nos addons oficiais:
Após instalares o addon vais ao separados config e colas o que esta abaixo, colocando os teus dados:
databases:
- custom_data
logins:
- username: Escolhe um username
host: '%'
password: Escolhe uma password
rights:
- username: O mesmo username que escolheste acima
host: '%'
database: custom_data
grant: ALL PRIVILEGES ON
Faz SAVE voltas ao separador info e clicas em START
Ok no addon MariaDB já não precisas fazer mais nada… instalaste e já não precisas mais dele
Ok agora vamos elaborar o ficheiro yaml para começar a construir a base de dados.
Usas ficheiros em modo package? Não? Não sabes o que é? Caso não uses pára aqui e vê isto depois quando já tiveres essa parte configurada volta aqui.
Continuando…
Cria um ficheiro chamado exemplo: base_dados.yaml
E vais começar por colar lá o código que vou agora começar a colar abaixo
A T E N C A O tudo as linhas que tu vires que tenham XXXX são campos que TU TENS que alterar para os teus dados. Todo o código abaixo é para ir colando sempre por baixo no mesmo ficheiro.
shell_command:
daily_insert_mysql: "python3 /config/py_scripts/daily_insert_mysql.py --host=core-mariadb --user=XXXX --password=XXXX --db=custom_data --table={{ table }} --value={{ value }} {{ '--col='+column if column is defined }}"
python_install_pymysql_dependency: "pip install pymysql"
Estes dois shell comando acima um deles é responsável para te escrever na tua base de dados, e o segundo para instalar a dependência automática sempre que reinicias o HA.
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
Esta automação acima sempre que reinicias o HA ela instala a dependência.
AGORA pára um bocado, pensa queres registar o que nesta tabela? Que dados? Queres registar?
Imagina que pensaste que querias registar o consumo geral de electricidade da tua casa.
Então vais agora criar essa tabela.
Lembra-te é um exemplo podia ser outro dado qualquer, temperatura,humidade, etc…
- alias: "Registar o consumo diário de energia"
initial_state: true
trigger:
- platform: state
entity_id: sensor.XXXX
action:
- service: shell_command.daily_insert_mysql
data_template:
table: consumo_energia
value: >
{{ trigger.to_state.state }}
column: >
{% if trigger.entity_id == "sensor.XXXX_O_MESMO_DE_CIMA" %}
consumo_energia_diario
{% endif %}
Então que isto acima faz para que entendas a lógica.
No trigger vais escolher o sensor que tem o valor que queres registar.
Na Action onde diz TABLE é o nome da tabela que queres dar onde vai registar os teus dados.
ainda dentro da action tens column aqui é o nome da coluna que vais dar a tabela que criaste anteriormente.
ok e como são registados esses dados?
Os dados são automaticamente registados assim que o sensor que tu definiste no trigger o valor seja alterado.
Ou seja imagina que o valor está 1.25 assim que passar para 1.26 o shell_command que viste lá em cima vai se encarregar de escrever o novo valor na base.
ok e posso verificar e ter a certeza que isso está mesmo a escrever na base de dados?
Podes… lembras-te do programa que te disse para instalares mais acima? O heidisql?
Ok Abre o programa…
Quando abres o programa vai te aparecer isto:
Clica onde diz NOVA no canto inferior esquerdo.
Ok agora
Onde tens nome de anfitrão colocas o ip da tua máquina onde tens Username e password vais por os dados que usaste no addon mariadb.
E por fim clicas em ABRIR
Vai te aparecer uma nova janela igual a que estás a ver abaixo e clicas no + custom data do lado esquerdo
Depois irá aparecer isto:
e clicas em CIMA de consumo_energia
Vai se extender a janela onde vais clicar mais a direita onde diz DADOS e mais abaixo como podes verificar no exemplo tens a column consumo_energia_diario que tinhamos falado mais acima, e dentro dessa coluna por baixo está o ANO/MES/DIA com o valor do teu sensor que se vai actualizando automaticamente sempre que o mesmo altera.
Quando passamos para um novo dia às 24horas 00:00 um novo dia é registado na coluna que por sua vez inicia a nova contagem do sensor, assim acabaste de criar uma base de dados onde nela criaste uma tabela… e nessa tabela criaste uma coluna onde regista os teus valores.
Fixe posso registar mais valores?
Posso registar quantas horas a luz da minha cozinha está acesa?
Claro …
No mesmo ficheiro yaml colocas:
- 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
Ok aqui em cima explicando mais uma vez no trigger tens um sensor… esse sensor chamasse sensor.horas_luz_cozinha esse nome tem que ser igual ao sensor que vais ver mais abaixo.
Ok depois tens novamente uma tabela que diz horas_luzes como podes estar a perceber estamos a criar uma nova tabela… e depois tens uma column com o nome luzcozinha.
Resumindo na tua base de dados vais então criar mais uma tabela e uma coluna onde nessa coluna vai estar registado o número de horas diárias que a tua luz da cozinha esteve acessa.
sensor:
- platform: history_stats
entity_id: light.XXXX
state: 'on'
name: Horas Luz Cozinha
start: '{{ now().replace(hour=0, minute=0, second=0) }}'
end: '{{ now() }}'
Aqui acima está o sensor “manual” que criamos que neste caso se chama horas luz cozinha lembras-te mais acima onde te disse que ias ver o nome do sensor que deste no trigger aqui está é este.
E tens também aqui definido no sensor o light.XXXX que é a tua luz da cozinha , atenção que pode a tua luz ser light ou swich.
Então e como faço para testar? Simples. Salvas o ficheiro… Ligas a luz da cozinha e reinicias o HA…a tabela vai ser criada e a coluna também e vai começar na base o registo da horas em que a luz está acesa.
Para confirmar vais novamente ao programa heidisq e vais ver que tens uma nova tabela:
E se clicares onde na tabela horas_luzes verificas que tens uma nova coluna criada:
Ok fixe se está tudo correcto até agora, estás no bom caminho.
Agora presumindo que já tens o HACS instalado vais instalar o card Chartjs Card.
Como instalar??
Simples, copias este endereço : https://github.com/ricreis394/chartjs-card
Depois vais ao HACS no teu UI
Para acederes clicas onde diz HACS e depois onde diz FRONTEND
Irá te aparecer uma nova janela semelhante à que ves abaixo e clicas nos três pontos do lado superior direito.
Clicas em Custom Repositories
Vai aparecer nova janela colas o repositorio que copiaste uns passos mais acima e na categoria escolhes LOVELACE e clicas em ADD
O cartão irá aparecer mais abaixo em qualquer sitio, procura-o e clicas em INSTALL
Ok fixe, se correu tudo bem também até aqui tens o teu cartão Instalado.
Bora lá por então o teu primeiro com os teus registos da base no HA.
O cartão para veres o teu consumo de electricidade com dinheiro total gasto.
Lembras-te que tens um ficheiro criado com o nome base_dados.yaml certo?
Ok dentro do teu sensor: por baixo do que já lá tens vais colocar
- platform: sql
db_url: mysql://XXXX:XXXX@core-mariadb/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.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"
aqui em cima os unicos dados que tens que alterar é a 2ª linha
db_url
onde estão os 4 XXXX troca pelo username e password da tua mariadb.
Ok Salva o ficheiro e faz uma verificação para ver se tens erros. Se tiveres comenta este post para chegarmos a uma possível solução.
Ok verificaste não deu erros ? fixe , podes reiniciar o HA mais uma vez.
Porreiro visto que já reiniciaste vamos então finalmente por o cartão.
Já deves saber colocar cartões no Lovelace mas se não souberes , sem problema eu ensino.te.
Lado superior direito clicas nos 3 pontos
De seguida configurar UI
Clicas no +
Andas com a barra para baixo e clicas em MANUAL
Apagas o que está dentro do “circulo a vermelho”
E colas isto
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'
E clicas em SAVE
Irá te aparecer:
PARABÉNS tens o teu primeiro gráfico a mostrar valores da base de dados que tu criaste.
Podes agora criar muitos mais cartões para que visualizes no HA os dados que estão na tua base.
Diverte-te e partilha conosco as tuas dúvidas e os teus cartões.
TODOS OS CRÉDITOS PARA ricreis394