Tageswerte berechnen + Charts

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

noxx
Beiträge: 16
Registriert: 28. Dez 2017 13:08
Answers: 0

Tageswerte berechnen + Charts

Beitrag 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ß
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Tageswerte berechnen + Charts

Beitrag 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

noxx
Beiträge: 16
Registriert: 28. Dez 2017 13:08
Answers: 0

Re: Tageswerte berechnen + Charts

Beitrag 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

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Tageswerte berechnen + Charts

Beitrag 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

noxx
Beiträge: 16
Registriert: 28. Dez 2017 13:08
Answers: 0

Re: Tageswerte berechnen + Charts

Beitrag von noxx »

danke. ich probiere es nochmal

noxx
Beiträge: 16
Registriert: 28. Dez 2017 13:08
Answers: 0

Re: Tageswerte berechnen + Charts

Beitrag 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ß
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

noxx
Beiträge: 16
Registriert: 28. Dez 2017 13:08
Answers: 0

Re: Tageswerte berechnen + Charts

Beitrag 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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Tageswerte berechnen + Charts

Beitrag von Cyrelian »

Hi noxx,

zwei Dinge sind mir eben noch aufgefallen:

1.)

Code: Alles auswählen

[%.2f KWh]
muss

Code: Alles auswählen

[%.2f m³]
sein.

2.)

Code: Alles auswählen

/1000
bin mir nicht sicher was dein Gaszähler ausgibt. Von daher kann das geteilt durch 1000 falsch sein.

CU
Cyrelian

noxx
Beiträge: 16
Registriert: 28. Dez 2017 13:08
Answers: 0

Re: Tageswerte berechnen + Charts

Beitrag 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:

Code: Alles auswählen

{
"Wert":"28675.68"
}
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ß
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Tageswerte berechnen + Charts

Beitrag 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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten