O ficheiro /config/py_scripts/daily_insert_mysql.py é executado todas as vezes que o HA é reiniciado??
Não, é executado apenas quando o valor muda.
O que é executado sempre é o shell_command.python_install_pymysql_dependency
Bom dia,
Precisava de uma ajuda , é o seguinte, gostaria que no gráfico a apresenta apenas apresenta-se o ultimo valor disponível do mês e não some-se os dias todos do mês.
Obrigado…
Boas.
Queria passar todas as automações para node-red e o @bbaixo deu-me um grande empurrão, só há uma coisa que me falta para o conseguir fazer como quero:
Queria que o seguinte function node me actauliza-se só a a linha (row) de cada dia , e não acrescenta-se uma linha nova por cada vez que o valor é actualizado, tal como faz o projecto original.
No function node tenho o seguinte:
var geral_euros = Number(msg.payload[0].state)
msg.topic = "INSERT INTO tbl_custos_energia_mensais (`geral_euros_mes`) " +
"VALUES ('" + geral_euros + "')";
return msg;
Obrigado.
dá uma vista de olhos aqui, no meu caso, eu meti chave primária sendo cada dia, então no meu código eu Insiro os valores, mas se o dia for o mesmo vai fazer UPDATE em vez de INSERT
Boas.
Por acaso hoje de manhã fui ao python script e realmente pareceu-me que era mesmo isso, tentei ( um pouco à pressa) adaptar e não consegui. Agora com mais calma e com a confirmação de que é por aí vou voltar a testar.
Viva,
Para complementar o meu post anterior, e se a moderação assim considerar útil, partilho dois gráficos que mostram a mesma informação mas com aspeto diferente:
Eu prefiro a segunda versão.
Por fim e a título de curiosidade, os dados estão em mariaDB e uso o Node Red para preencher a base de dados e para fazer as consultas que resultam nos gráficos.
Isso era um bom tema para criares um tópico complementar a este, em que explicasses como fazer a inserção de dados e as consultas em Node Red.
Sugeria algo diferente, para não cairmos no erro novamente, de ter vários tópico a falar do mesmo.
A sugestão passaria pelo @bbaixo me enviar uma PM com o tutorial, e eu depois edito e coloco aqui. Por baixo do primeiro post inicial editando-o.
Só para dar feedback, consegui com o seguinte código no function node:
var bcalor = Number(msg.payload)
msg.topic = "INSERT INTO consumo_energias (`consumo_energia_dia_bcalor`) " +
"VALUES ('" + bcalor + "')" +
"ON DUPLICATE KEY UPDATE `consumo_energia_dia_bcalor`=" + bcalor + "";
return msg;
Realmente não tinha também o campo ´date´como primary key e por isso a bd “deixava” acrescentar linhas com a mesma data. Essa parte fiz manualmente na BD com o phpmyadmin.
E porque não usas o meu script em vez de manualmente fazeres isso? Aparentemente o objetivo é o mesmo
Sim o objectivo é o mesmo.
Primeiro gostava de passar isto para node red o máximo possível, depois já andava com erros do shell comand há algum tempo apesar de tudo funcionar, mas na última actualização deixou mesmo de funcionar( fiz roll back e não funcionava na mesma) . E como já tinha algo em node red a funcionar só me faltava mesmo a questão do update, para mim era mais fácil resolver essa situação.
O ideal era ter o teu script no function node, mas não sei como adaptar tudo ( só para este pormenor já foi uma dor de cabeça ) e também teria de adaptar o payload.
Este node parece ser uma boa solução
O problema do meu script no HA é que quando existem erros, eles são muito vagos. Possivelmente existe forma de aparecer os erros detalhadamente mas nunca perdi muito tempo com isso.
Já ando às voltas com uma tomada com medidor de consumo, mas não consigo meter isto a trabalhar corretamente.
Os consumos apresentados não fazem sentido.
Alguém pode dar uma ajuda?
O sensor que mostra o consumo em kwh tem o nome sensor.consumption_13.
O sensor que mostra o consumo em Wh tem o nome sensor.power_14.
base_de_dados.yaml
shell_command:
daily_insert_mysql: "python3 /config/py_scripts/daily_insert_mysql.py --host=core-mariadb --user=XXX --password=XXXX --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 consumo diário de energia"
initial_state: true
trigger:
- platform: state
entity_id: sensor.energy
action:
- service: shell_command.daily_insert_mysql
data_template:
table: consumo_energia
value: >
{{ trigger.to_state.state }}
column: >
{% if trigger.entity_id == "sensor.energy" %}
consumo_energia_diario
{% endif %}
- alias: "Insere na tabela o número de Horas que termoacumulador está ligado"
initial_state: true
trigger:
- platform: state
entity_id: sensor.power_14
condition:
- condition: template
value_template: >
{{ (trigger.to_state.state | float) != 0.0 }}
action:
- service: shell_command.daily_insert_mysql
data_template:
table: horas_termoacumulador
value: >
{{ trigger.to_state.state }}
column: termoacumulador
sensor:
- platform: history_stats
entity_id: sensor.power_14
state: 'on'
name: Horas termoacumulador
start: '{{ now().replace(hour=0, minute=0, second=0) }}'
end: '{{ now() }}'
- platform: sql
db_url: mysql://XXX: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.161818 + 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"
utility_meter:
energy:
source: sensor.power_14
cycle: monthly
input_select:
energy_daily_graph_select:
name: Qual o mês para consulta
options:
- Últimos 30 dias
- Janeiro
- Fevereiro
- Março
- Abril
- Maio
- Junho
- Julho
- Agosto
- Setembro
- Outubro
- Novembro
- Dezembro
No Card Configuration tenho o seguinte:
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'
Boas, não me parece que o problema esteja na apresentação do gráfico nem o registo na tabela, o problema deve estar no teu sensor.
Estás a usar o sensor Wh no utility_meter, deverias estar a usar o Kwh, com Wh claro que tens valores muito altos…
E o sensor tem de ser incremental, fazendo reset ao final do dia, verifica se é assim, ou se durante o dia varia para baixo e para cima.
Bom dia,
Para além desta alteração recomendas mais alguma?
utility_meter:
energy:
source: sensor.consumption_13
cycle: monthly
Se o sensor estiver incremental fazendo reset ao final do dia está bom, verificaste?
O sensor de kWh não está a fazer reset.
Continuo com 0.13kWh.
Para registar os consumos de vários equipamentos, tens uma tabela por cada equipamento com esta lógica ou tens uma tabela para tudo, em que cada equipamento é uma coluna?
Estava a pensar registar vários consumos (geral + alguns equipamentos específicos) mas queria saber a melhor maneira para fazer isto. Obrigado
Acabei de ver como fazer isto no teu github. Basta 1 tabela
O entity_id: sensor.energy_daily_fridge indica o valor atual que o frigorífico está a consumir ao dia?