I log my electricity meter reading with Tasmota. I can only read the total value. I would like to have the daily/weekly/monthly/yearly consumption displayed with grafana. Additionally the respective costs. Additionally I would like to display the current consumption. The current total value is transmitted every 10 seconds. Has anyone ever done something similar and can help me
Many thanks !
The best you do is first store the total value with persist.
Then make a rule fired by cron daily at 23:59 that stores an extra value for the total the past
day.
You can also fire cron at the last day of the month to store the month total.
I have two rules that control it all.
rule "Count daily total"
when
Time cron "0 59 23 1/1 * ? *"
then
logInfo("Dagtotaal tellen", "Stel vandaag naar gisteren "+ (VerbruikVandaag.state as Number))
TuindeurZon.postUpdate(0)
if (PrijsLeveringElektro.state === NULL || PrijsLeveringElektro.state === UNDEF) { PrijsLeveringElektro.postUpdate(0.1091) }
if (PrijsNetbeheerElektro.state === NULL || PrijsNetbeheerElektro.state === UNDEF) { PrijsNetbeheerElektro.postUpdate(0.6348) }
if (PrijsEnergieTax.state === NULL || PrijsEnergieTax.state === UNDEF) { PrijsEnergieTax.postUpdate(1.44) }
if (PrijsPerKwh.state === NULL || PrijsPerKwh.state === UNDEF ) { PrijsPerKwh.postUpdate(0.2099) }
var tGebruik = (Laagtarief.state as Number) + (Hoogtarief.state as Number)
var tKosten = ((VerbruikVandaag.state as Number) * (PrijsPerKwh.state as Number)) + ((PrijsLeveringElektro.state as Number) + (PrijsNetbeheerElektro.state as Number) - (PrijsEnergieTax.state as Number) / 2)
VerbruikGisteren.sendCommand(tGebruik) // is meterstand gisteren
ElektroKostenDag.sendCommand(tKosten)
val dagNum = new DateTime().getDayOfMonth()
val mnNum = new DateTime().getMonthOfYear()
if (dagNum == 31 && mnNum == 12) {
MeterstandJaarStart.postUpdate(0 - (Laagtarief.state as Number + Hoogtarief.state as Number))
}
end
rule "When the total is updated"
when
Item Laagtarief received update
or
Item Hoogtarief received update
then
if (PrijsLeveringElektro.state === NULL || PrijsLeveringElektro.state === UNDEF) { PrijsLeveringElektro.postUpdate(0.1091) }
if (PrijsNetbeheerElektro.state === NULL || PrijsNetbeheerElektro.state === UNDEF) { PrijsNetbeheerElektro.postUpdate(0.6348) }
if (PrijsEnergieTax.state === NULL || PrijsEnergieTax.state === UNDEF) { PrijsEnergieTax.postUpdate(1.44) }
if (PrijsPerKwh.state === NULL || PrijsPerKwh.state === UNDEF ) { PrijsPerKwh.postUpdate(0.2099) }
var tGebruik = (Laagtarief.state as Number) + (Hoogtarief.state as Number) - (VerbruikGisteren.state as Number)
var tKosten = (tGebruik * (PrijsPerKwh.state as Number)) + ((PrijsLeveringElektro.state as Number) + (PrijsNetbeheerElektro.state as Number) - (PrijsEnergieTax.state as Number) / 2)
VerbruikVandaag.sendCommand(tGebruik)
ElektroKostenVandaag.sendCommand(tKosten)
end
this are the item i am using
String P1Version "P1 Version output" {channel="dsmr:device_v5:mysmartmeter:dsmrV5Device:p1_version_output"}
Number Laagtarief "Meterstand dal [%.1f kWh]" <meter1> {channel="dsmr:electricity_v5_0:mysmartmeter:electricityV5:emeter_delivery_tariff1"}
Number Hoogtarief "Meterstand piek [%.1f kWh]" <meter2> {channel="dsmr:electricity_v5_0:mysmartmeter:electricityV5:emeter_delivery_tariff2"}
Number:Power HuidigVerbruik "Verbruik nu [%.3f kW]" <plug> {channel="dsmr:electricity_v5_0:mysmartmeter:electricityV5:emeter_actual_delivery"}
Number HuidigVerbruikNu "Verbruik nu [%.3f kW]" <energy> (gGebruikM) {channel="dsmr:electricity_v5_0:mysmartmeter:electricityV5:emeter_actual_delivery"}
Number:Power DitJaarVerbruik "Verbruik dit jaar [%.0f kWh]" <lightbulb_dollar>
Number VerbruikVandaag "Verbruik totaal vandaag [%.3f kWh]" <lightbulb_dollar>
Number ElektroBedrag "Elektrokosten dit jaar [%.2f €]" <euro_sign>