Seite 1 von 2
Tageswerte berechnen + Charts
Verfasst: 13. Jan 2018 14:20
von noxx
Hallo
mit einem Arduino lese ich die Werte von meinem Gaszähler ab (liefert mir
in Form von JSON die Werte)
Nun würde ich das ganze irgendwie besser darstellen, so das ich jeden
Tag sehen kann, wie hoch der Tagesverbrauch war. Evtl als Balkendiagramm
und/oder Tabelle.
Stehe aber auf dem Schlauch, wie ich das umsetzen kann.
Item:
Code: Alles auswählen
Number Gaszaehler "Zählerstand [%.1f m³]" <gasuhr> { http="<[http://192.168.1.15:60000:JSONPATH($.Wert)]"}
Sitemap:
Code: Alles auswählen
Text item=Gaszaehler
Chart item=Gaszaehler label="Zählerstand [%.1f]" icon="gasuhr" period=8h
LOG:
Code: Alles auswählen
2018-01-13 14:30:09.949 [vent.ItemStateChangedEvent] - Gaszaehler changed from 28540.30 to 28540.32
Gruß
Re: Tageswerte berechnen + Charts
Verfasst: 13. Jan 2018 14:32
von Cyrelian
Hi noxx,
ist zwar Stromverbrauch, aber was verbraucht wird sollte egal sein

..
Code: Alles auswählen
rule "Letzter täglicher Stromverbrauch"
when
Time cron "0 59 23 * * ?"
then
var Number letzterTagesverbrauch = (OGStrom_Zaehler.state as Number) - (OGStrom_Zaehler.historicState(now.withTimeAtStartOfDay).state as Number)
if(OGStrom_Letzter_Tagesverbrauch.state != letzterTagesverbrauch)
{
OGStrom_Letzter_Tagesverbrauch.postUpdate(letzterTagesverbrauch /1000)
}
end
Damit das
Code: Alles auswählen
OGStrom_Zaehler.historicState(now.withTimeAtStartOfDay).state
klappt, brauchst Du eine persistance. Ich habe hier die influxDB und die Diagramme erstelle ich mit Grafana.
CU
Cyrelian
Re: Tageswerte berechnen + Charts
Verfasst: 13. Jan 2018 15:58
von noxx
danke.
Meine Zählerstand läuft über
rrd4j.persist
Code: Alles auswählen
Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
}
Items {
Gaszaehler : strategy = everyMinute, restoreOnStartup
}
mit dieser Zeile kann ich nichts anfangen, wo muss das hin?
Code: Alles auswählen
OGStrom_Zaehler.historicState(now.withTimeAtStartOfDay).state
Deinen Code habe ich mit meinen Item ergänzt:
Code: Alles auswählen
rule "Letzter täglicher Gasverbrauch"
when
Time cron "0 59 23 * * ?"
then
var Number letzterTagesverbrauch = (Gaszaehler.state as Number) - (Gaszaehler.historicState(now.withTimeAtStartOfDay).state as Number)
if(Gaszaehler_Letzter_Tagesverbrauch.state != letzterTagesverbrauch)
{
Gaszaehler_Letzter_Tagesverbrauch.postUpdate(letzterTagesverbrauch /1000)
}
end
Dumme Fragen, aber bin mit OH noch recht am Anfang...
Gruß
EDIT:
Fehlermeldung vergessen
Code: Alles auswählen
2018-01-13 17:13:57.568 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item for widget org.eclipse.smarthome.model.sitemap.Text
2018-01-13 17:13:57.576 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'Gaszaehler_Letzter_Tagesverbrauch' for widget org.eclipse.smarthome.model.sitemap.Text
2018-01-13 17:13:57.581 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'Gaszaehler_Letzter_Tagesverbrauch' for widget org.eclipse.smarthome.model.sitemap.Text
2018-01-13 17:13:57.586 [ERROR] [ui.internal.items.ItemUIRegistryImpl] - Cannot retrieve item 'Gaszaehler_Letzter_Tagesverbrauch' for widget org.eclipse.smarthome.model.sitemap.Text
Re: Tageswerte berechnen + Charts
Verfasst: 13. Jan 2018 18:09
von Cyrelian
HI,
die Zeile:
Code: Alles auswählen
OGStrom_Zaehler.historicState(now.withTimeAtStartOfDay).state
hast Du schon in der Rule. Wollte sie nur hervorheben wegen der persistance.
Es fehlen dir noch ein paar Items. Hier mal meine Items:
Code: Alles auswählen
Group gOGStrom_Zaehler "Stromzähler Obergeschoss" (gUntergeschoss)
Number OGStrom_Zaehler "Zählerstand [%.2f Wh]" <energy> (gOGStrom_Zaehler) {channel="XXXXXXX:1#ENERGY_COUNTER"}
Number OGStrom_Aktueller_Verbrauch_W "Aktuelle Leistungsaufnahme in W [%.2f W]" <energy> (gOGStrom_Zaehler) {channel="XXXXXXX:1#POWER"}
Number OGStrom_Zaehler_RSSI "Stromzähler Obergeschoss RSSI [%d dbm]" <qualityofservice> (gOGStrom_Zaehler,gSysRSSI) {channel="XXXXXXX:0#RSSI_DEVICE"}
Switch OGStrom_Zaehler_Battery "Stromzähler (OG) [MAP(battery.map):%s]" <batterie> (gOGStrom_Zaehler,gSysBattery_Binary) {channel="XXXXXXX:0#LOWBAT"}
Switch OGStrom_Zaehler_Unreach "Stromzähler OG unreachable" <siren> (gOGStrom_Zaehler,gSysUnreach) {channel="XXXXXXX:0#UNREACH"}
Switch OGStrom_Zaehler_Pendin "Stromzähler OG config pending" <siren> (gOGStrom_Zaehler,gSysPending) {channel="XXXXXXX:0#CONFIG_PENDING"}
Number OGStrom_Energy_Counter (gInitializeZero)
Number OGStrom_Zaehlerspeicher (gInitializeZero)
Number OGStrom_Referenz_Zaehlerstand (gInitializeZero)
Number OGStrom_Zaehlerstand "Gesamt Zählerstand HT/NT [%.2f KWh]" <energy> (gInitializeZero)
Number OGstrom_Aktueller_Verbrauch_Kw "Aktuelle Leistungsaufnahme in KWh [%.2f KWh]" <energy> (gOGStrom_Zaehler)
Number OGStrom_Letzter_Tagesverbrauch "Letzter Tagesverbrauch [%.2f KWh]" <energy> (gOGStrom_Zaehler)
Number OGStrom_Aktueller_Tagesverbrauch "Aktueller Tagesverbrauch [%.2f KWh]" <energy> (gOGStrom_Zaehler)
Number OGStrom_Jahresverbrauch "Aktueller Jahresverbrauch [%.2f KWh]" <energy> (gOGStrom_Zaehler)
Number OGStrom_Zaehler_Gesamt "Gesamt Zählerstand HT/NT [%.2f KWh]" <energy>
Number OGStrom_Verbrauch_Seit_Letzter_Ablesung "Verbrauch seit letzter Ablesung [%.2f KWh]" <energy>
Number OGStrom_Verbrauch_Laufendes_Kalenderjahr "Verbrauch im laufendem Kalenderjahr [%.2f KWh]" <energy>
Number OGStrom_Verbrauch_Laufender_Monat "Verbrauch aktueller Monat [%.2f KWh]" <energy>
Number OGStrom_Verbrauch_Laufend_Woche "Verbrauch aktuelle Woche [%.2f KWh]" <energy>
CU
Cyrelian
Re: Tageswerte berechnen + Charts
Verfasst: 13. Jan 2018 19:52
von noxx
danke. ich probiere es nochmal
Re: Tageswerte berechnen + Charts
Verfasst: 14. Jan 2018 10:00
von noxx
scheint irgendwie nicht geklappt zu haben, dachte um Mitternacht wird ein Wert gefüllt. Ist aber leer.
ITEM:
Code: Alles auswählen
// Gasuhr
Group Gaszaehler_Chart
Number Gaszaehler "Zählerstand [%.1f m³]" <gasuhr> { http="<[http://192.168.1.15:60000:JSONPATH($.Wert)]"}
Number Gaszaehler_Chart_Period "Chart Period"
Number Gaszaehler_Letzter_Tagesverbrauch "Letzter Tagesverbrauch [%.2f KWh]" <energy>
Rule:
Code: Alles auswählen
rule "Letzter täglicher Gasverbrauch"
when
Time cron "0 59 23 * * ?"
then
var Number letzterTagesverbrauch = (Gaszaehler.state as Number) - (Gaszaehler.historicState(now.withTimeAtStartOfDay).state as Number)
if(Gaszaehler_Letzter_Tagesverbrauch.state != letzterTagesverbrauch)
{
Gaszaehler_Letzter_Tagesverbrauch.postUpdate(letzterTagesverbrauch /1000)
}
end
rrd4j:
Code: Alles auswählen
Items {
Gaszaehler : strategy = everyMinute, restoreOnStartup
Gaszaehler_Letzter_Tagesverbrauch : strategy = everyDay, restoreOnStartup
}
Hatte erwartet, das "Gaszaehler_Letzter_Tagesverbrauch" einen Wert liefert.
Gruß
Re: Tageswerte berechnen + Charts
Verfasst: 16. Jan 2018 19:40
von noxx
Hallo,
irgendwas kommt da an, aber richtig zufrieden bin ich mit der Tagesauswertung nicht.
Am liebsten hätte ich für den Tagesverbrauch einen Balken.
Der Balken soll dann den ganzen Tag "wachsen" und am nächsten Tag soll dann ein
neuer beginnen.
Im Moment sehe ich nur einen Wert (oben Rechts), aber das Diagramm ist leer.
sitemaps:
Code: Alles auswählen
Frame label="Zählerstände"
{
Text item=Gaszaehler
{
Frame
{
Text item=Gaszaehler
Text item=Gaszaehler_Letzter_Tagesverbrauch //valuecolor=[>25="orange",>15="green",>5="orange",<=5="blue"]
}
Frame
{
Switch item=Gaszaehler_Chart_Period label="Gaszählerstand" icon="chart" mappings=[0="Stunde", 1="Tag", 2="Woche", 3="Monat", 4="Jahr"]
Chart item=Gaszaehler period=H refresh=600000 visibility=[Gaszaehler_Chart_Period==0, Gaszaehler_Chart_Period=="NULL"]
Chart item=Gaszaehler period=D refresh=3600000 visibility=[Gaszaehler_Chart_Period==1]
Chart item=Gaszaehler period=W refresh=3600000 visibility=[Gaszaehler_Chart_Period==2]
Chart item=Gaszaehler period=W refresh=3600000 visibility=[Gaszaehler_Chart_Period==3]
Chart item=Gaszaehler period=W refresh=3600000 visibility=[Gaszaehler_Chart_Period==4]
}
Frame
{
Switch item=Gaszaehler_Letzter_Tagesverbrauch_Chart_Period label="Gaszähler Tagesverbrauch" icon="chart" mappings=[0="Stunde", 1="Tag", 2="Woche", 3="Monat", 4="Jahr"]
Chart item=Gaszaehler_Letzter_Tagesverbrauch period=H refresh=600000 visibility=[Gaszaehler_Letzter_Tagesverbrauch_Chart_Period==0, Gaszaehler_Letzter_Tagesverbrauch_Chart_Period=="NULL"]
Chart item=Gaszaehler_Letzter_Tagesverbrauch period=D refresh=3600000 visibility=[Gaszaehler_Letzter_Tagesverbrauch_Chart_Period==1]
Chart item=Gaszaehler_Letzter_Tagesverbrauch period=W refresh=3600000 visibility=[Gaszaehler_Letzter_Tagesverbrauch_Chart_Period==2]
Chart item=Gaszaehler_Letzter_Tagesverbrauch period=W refresh=3600000 visibility=[Gaszaehler_Letzter_Tagesverbrauch_Chart_Period==3]
Chart item=Gaszaehler_Letzter_Tagesverbrauch period=W refresh=3600000 visibility=[Gaszaehler_Letzter_Tagesverbrauch_Chart_Period==4]
}
}
}
item:
Code: Alles auswählen
// Gasuhr
Group Gaszaehler_Chart
Number Gaszaehler "Zählerstand [%.1f m³]" <gasuhr> { http="<[http://192.168.1.15:60000:JSONPATH($.Wert)]"}
Number Gaszaehler_Chart_Period "Chart Period"
Number Gaszaehler_Letzter_Tagesverbrauch_Chart_Period "Chart Period Tag"
Number Gaszaehler_Letzter_Tagesverbrauch "Letzter Tagesverbrauch [%.2f KWh]" <energy>
rule:
Code: Alles auswählen
rule "Letzter täglicher Gasverbrauch"
when
Time cron "0 59 23 * * ?"
then
var Number letzterTagesverbrauch = (Gaszaehler.state as Number) - (Gaszaehler.historicState(now.withTimeAtStartOfDay).state as Number)
if(Gaszaehler_Letzter_Tagesverbrauch.state != letzterTagesverbrauch)
{
Gaszaehler_Letzter_Tagesverbrauch.postUpdate(letzterTagesverbrauch /1000)
}
end
Re: Tageswerte berechnen + Charts
Verfasst: 17. Jan 2018 18:58
von Cyrelian
Hi noxx,
zwei Dinge sind mir eben noch aufgefallen:
1.)
muss
sein.
2.)
bin mir nicht sicher was dein Gaszähler ausgibt. Von daher kann das geteilt durch 1000 falsch sein.
CU
Cyrelian
Re: Tageswerte berechnen + Charts
Verfasst: 17. Jan 2018 21:40
von noxx
ich gucke mal
habs mal in Excel gemalt, wie ich es gerne hätte, keine Ahnung ob was möglich ist
01.png
Mein Zählerstand lese ich per Reed-Schalter aus, der an einem Arduino hängt.
Den Wert bekomme ich per Webseite im JSON
Ausgabe aktuell:
Den Wert hole ich mir dann wie folgt in OH2 rein:
Code: Alles auswählen
Number Gaszaehler "Zählerstand [%.1f m³]" <gasuhr> { http="<[http://192.168.1.15:60000:JSONPATH($.Wert)]"}
02.png
Gruß
Re: Tageswerte berechnen + Charts
Verfasst: 21. Jan 2018 11:00
von Cyrelian
Hi noxx,
bist du schon weitergekommen? Ich hab mir das nochmal in Grafana angeschaut. Da kannst Du sowas bauen:
18a6009a5488ff49795066fc0daee7f94b34c563.jpg
Das wäre meiner Meinung nach ein "
continuous queries"
https://docs.influxdata.com/influxdb/v1 ... s_queries/
Hier mal zwei links, bei denen ich ab und zu mal schaue, was es so für neu Charts gibt:
https://grafana.com/dashboards?dataSource=influxdb
und
https://denlab.io/setup-a-wicked-grafan ... -anything/
CU
Cyrelian