Hinweis: Schöne Alternative für Charts/Plots mit Grafana und DBLog (MySQL)

Begonnen von Thyraz, 08 Oktober 2017, 15:02:38

Vorheriges Thema - Nächstes Thema

kadettilac89

Zitat von: ChrisW am 24 Januar 2019, 15:53:39
ja ich will ja auch die Lautzeit haben ;) Also Laufzeit soll in den Balken als Diagramm Monatsansicht.  Das simple würde mich schon reichen ;) Ich weiss nur noch nicht wie ich den wert als value bekomme da dort ja noch viel mehr drin steht.

z. B. so ... s. u.
- Reading on_off hat 0 oder 1 ... diese kannst du über Zeitaggregation auf Stunde, Tag ... verarbeiten
- Reading timecnt hat beim Wechsel von on-->off die Zeit die das Reading state auf "on" war. Auch das kannst du über Aggregation aufaddieren. Kein Hexenwerk


defmod dy_dummy dummy
attr dy_dummy event-on-change-reading on_off,timecnt
attr dy_dummy userReadings timecnt {((ReadingsVal($name,"state",0) eq 'off' ) ? ReadingsAge($name,"timecnt",121) : 0)},on_off {((ReadingsVal($name,"state",0) eq 'off' ) ? 0 : 1)}


Zitat von: ChrisW am 24 Januar 2019, 15:53:39
Kann ich den Code einfach von der Temperatur nehmen ? Dort dann per regex ? Geht das wie bei den fhem Plots mit stellen ??
Ist das eine Frage? Verstehe ich nicht, bzw. weiß nicht worauf du referenzierst.


Zitat von: ChrisW am 24 Januar 2019, 15:53:39
Und da gibt es doch nocht Probleme hab ein Beispiel vorne gesehe  da es ja um 23:59 gepostet wird ...
Möglich, müsste man sich ansehen


Zitat von: ChrisW am 24 Januar 2019, 15:53:39
Wie kann ich das den mal testen mit InfluxDB ? Aber ob das so viel einfacher für mich sein wird ? (könnte ja per iobroker in so eine DB loggen )

Loggen kann auch Fhem, muss nicht IOBroker sein. Gibt ein Modul für InfluxDB, siehe ... https://forum.fhem.de/index.php/topic,71551.0.html

InfluxDB ist halt sehr gut in Grafana integriert. Brauchst dann in Grafana keine SQL-Statements bearbeiten, geht viel über Menü und Dropdown. Du kannst dir mal das in Youtube ansehen, dauert nicht all zu lange aber dann kannst dir selbst ein Bild davon machen. https://www.youtube.com/playlist?list=PL5cpKC5uartgYqiwGNlJ94eqSonl2dk7e

Ich habe aktuell DBLog und InfluxDB in Fhem parallel laufen. Das funktioniert. Du hast von Docker auf Synology gesprochen. Kannst ja zum Test den InfluxDB Container einbinden.

Einfacher? Kann ich nicht sagen. Du musst in Fhem sauber loggen, wenn die Hürde überwunden ist geht es in Grafana dafür einfacher, zumindest mein Empfinden. Nachteil ist aktuell der Beta-Status von Influx da es noch nicht von vielen genutzt wird. Ich mache es weil ich es einfacher empfinde und mich das Thema auch beruflich reizt. Müsste Influx schneller sein.

kadettilac89

Zitat von: kadettilac89 am 24 Januar 2019, 12:47:00
Und genau darum geht es ... du verbrauchst eben nicht zu einem "Zeitpunkt", die Watt sind nicht einfach - flopp - weg. Watt ist Leistung. Du "verbrauchst" über einen Zeitraum, das ist aber dann Arbeit (Arbeit = Leistung durch Zeit). WAs bedeutet ein Wert 20 ... was soll der aussagen? 20 Watt/min? Arithmetisches Mittel über irgend was in der Stunde, Normalverteilung .. was auch immer. Ist die Kurve irgendwie geglättet ...

Solange du nicht definierst was du willst kann man nicht sagen wie du da hinkommst. Da musst du erstmal in deinem anderen Tool nachschaun oder aus deinen Zahlenreihen rausrechnen. Oder im Forum des Tools das  es "richtig" macht nachfragen.

weil meine Glaskugel mal Zeit hatte und ich zum Test mal mit mySql testen wollte ... select unten sollte watt/min ausgeben. Wenns das nicht ist bin ich raus bis brauchbarer input kommt.

channel_id = 16
tabellenname = data
name = Stromverbrauch

SELECT
  ((timestamp DIV 60000) * 60 ) + 60 as time_sec,
  sum(value) as value,
  "Stromverbrauch" as metric
FROM data
WHERE timestamp >= $__unixEpochFrom()*1000 AND timestamp <= $__unixEpochTo()*1000 AND channel_id = 16
GROUP BY time_sec
ORDER BY $__unixEpochGroup(time_sec,$__interval)



ChrisW

Okayy also ich werde mich auch mit der influxdb mal beschäftigen. Leider im Docker nicht ganz so einfach .. Brauche ja auch chronograph zur Verwaltung. Das Interne Admin von influxdb gibt es wohl nicht mehr in der neusten Docker .. bekomme nurnoch 404 ... Habs gefrickelt nun am laufen. Schauen das sich Testwese mal Daten rein bekomme...

Zu den Heizungszeiten okay passt nicht mehr so ganz hier hin aber ich habe dHeizung nun bei on ein 1 verpasst und bei off eine 0. Hat es per set dHeizung 1 / set dHeizung 0 ausprobiert aber es zählt nichts. Also auch nicht wenn ich 1-2 Minuten 1 lasse .. Hier das list:
Internals:
   CHANGED   
   FUUID      5c4746ac-f33f-678b-6af5-2a67bf9cbff77ea4
   NAME       dHeizung
   NR         979
   STATE      0
   TYPE       dummy
   .attraggr:
   .attreocr:
     on_off
     timecnt
   .attrminint:
   .userReadings:
     HASH(0x5456970)
     HASH(0x62c4fa8)
   Helper:
     DBLOG:
       on_off:
         myDbLog:
           TIME       1548397890.0526
           VALUE      1
       statStateDayLast:
         myDbLog:
           TIME       1548370795.52726
           VALUE      off: 16:31:47 off_Count: 32 on: 07:28:13 on_Count: 31
       state:
         myDbLog:
           TIME       1548397046.32765
           VALUE      off
       timecnt:
         myDbLog:
           TIME       1548397890.0526
           VALUE      0
   READINGS:
     2019-01-25 07:35:13   on_off          1
     2019-01-25 07:31:30   statStateDay    2_Count: 1 off: 05:44:23 off_Count: 4 on: 01:47:12 on_Count: 3
     2019-01-24 23:59:55   statStateDayLast off: 16:31:47 off_Count: 32 on: 07:28:13 on_Count: 31
     2019-01-25 07:31:30   statStateMonth  2_Count: 1 off: 1d 19:53:28 off_Count: 73 on: 17:55:35 on_Count: 72 (since: 2019-01-22_17:42:27)
     2019-01-25 07:31:30   statStateYear   2_Count: 1 off: 1d 19:53:28 off_Count: 73 on: 17:55:35 on_Count: 72 (since: 2019-01-22_17:42:27)
     2019-01-25 07:35:13   state           0
     2019-01-25 07:35:13   timecnt         0
   helper:
     _98_statistics myStatDevice
Attributes:
   DbLogInclude .*
   event-on-change-reading on_off,timecnt
   room       Heizung
   userReadings timecnt {((ReadingsVal($name,"state",0) eq 'off' ) ? ReadingsAge($name,"timecnt",121) : 0)},on_off {((ReadingsVal($name,"state",0) eq 'off' ) ? 0 : 1)}
Raspberry PI3 mit allem möglichen.

kadettilac89

Chronograf brauchst nicht, geht auch über console oder 3rd party tools. darum auch die Referenz auf die cli im anderen Thread.

Heizzeiten ... du hast state 0 oder 1, mein Beispiel fragt auf on/off (default bei dummy) ab. Ersetze bei den userReadings     "eq 'off'"   durch " = 0".  Das Reading on_off bräuchtest dann eigentlich nicht mehr, wäre dann identisch zu deinem aktuellen state. Würde es aber dennoch erstmal lassen damit du mit event-on-change-** experimentieren kannst.

ChrisW

Okay Danke
Hab nun influxdb laufen. Per Chronograf kann ich auf die FHEM Tabelle gehen AC.Power und recht value und da sehe ich sogar DIREKT eine Grafik mit den Zeiten ..

So Grafana Source hinzugefügt. Neues Dashboard ( wegen dem UTC Problemen ) Wähle die Source aus dann sehe ich auch unten Add Query da tauchen auch die ganzen Geräte aus. Wähle AC.Power nichts ..
Oben steht nur
Could not find query part column

Laut google liegt es am Dashboard ich muss das Trennen .. habe ich ja .. ganz neues Dashboard auch andere Zeit

Ich habe ein Youtube VIdeo gesehen da ist dann auch sofort eine Grafik gekommen ... frage mich wieso es bei mir wieder nicht klappt


EDIT: Es lag daran das die mysql Source Default gesetzt war. Das hat den Grafen dann direkt kaputt gemacht. Also influxdb als default und klappt
Raspberry PI3 mit allem möglichen.

kadettilac89

ich empfehle dir, direkt in der datasource das flag "default" in der influx zu setzen. dann ist bei jedem neuen dashboard vorausgewählt. du siehts jetzt was ich meinte ... kurz datenquelle, zeitreihe auswählen und du siehts den plot ohne ewig mit irgend welchen mysql aggregationen oder besonderheiten rumspielen zu müssen.

ChrisW

ja gefällt mir wirklich sehr gut ;) Leider Bremst das influxdb Modul mein FHem .. OKAY ich packe gerade ALLES da rein pro Sekkunfe 2-3 Werte...
Ich denke ich werde mit dem Script arbeiten was mir alle X Minuten das sql in influxdb umwandelt..

Bezüglich der Heizungszeiten.
Ich habe es wieder so geändert das on / off gesetzt werden. Somit geht dein reading wunderbar. Das timecnt aber nicht das bleibt immer bei 0.
Aber grafana kann doch das schon errechnen oder ?
Raspberry PI3 mit allem möglichen.

kadettilac89

Zitat von: ChrisW am 25 Januar 2019, 09:35:22
Bezüglich der Heizungszeiten.
Ich habe es wieder so geändert das on / off gesetzt werden. Somit geht dein reading wunderbar. Das timecnt aber nicht das bleibt immer bei 0.
Aber grafana kann doch das schon errechnen oder ?

ich weiß nicht was du mit errechnen meinst. on-off zähler sollte gehen. timecnt ist die zeit, die deine heizung on war in sec. wie grafana das aus den on-off status errechnen soll weiß ich nicht. teste das mit dem dummy-beispiel das ich dir gepostet hab (unverändert anlegen). das hat funktioniert. dann baust um und schaust warum es mit 0/1 nicht mehr geht.

ChrisW

Ja das habe ich gemacht damit klappt es auch das er das hochzählt. Also erst on dann off und dann Zeigt er die Zeit da an.
Bei dem aktuellen Dummy aber nicht. Hab es ganz genau so gemacht mit attr hier ein List


Internals:
   FUUID      5c4746ac-f33f-678b-6af5-2a67bf9cbff77ea4
   NAME       dHeizung
   NR         977
   STATE      off
   TYPE       dummy
   .attraggr:
   .attreocr:
     on_off
     timecnt
   .attrminint:
   .userReadings:
     HASH(0x51801b8)
     HASH(0x510a558)
   Helper:
     DBLOG:
       on_off:
         myDbLog:
           TIME       1548412188.04514
           VALUE      0
       timecnt:
         myDbLog:
           TIME       1548412188.04514
           VALUE      0
   READINGS:
     2019-01-25 11:29:48   on_off          0
     2019-01-25 11:29:48   statStateDay    off: 01:12:48 off_Count: 5 on: 00:47:13 on_Count: 4 (since: 2019-01-25_09:29:47)
     2019-01-24 23:59:55   statStateDayLast off: 16:31:47 off_Count: 32 on: 07:28:13 on_Count: 31
     2019-01-25 11:29:48   statStateMonth  off: 01:12:48 off_Count: 5 on: 00:47:13 on_Count: 4 (since: 2019-01-25_09:29:47)
     2019-01-25 11:29:48   statStateYear   off: 01:12:48 off_Count: 5 on: 00:47:13 on_Count: 4 (since: 2019-01-25_09:29:47)
     2019-01-25 11:29:48   state           off
     2019-01-25 11:29:48   timecnt         0
   helper:
     _98_statistics myStatDevice
Attributes:
   DbLogInclude .*
   event-on-change-reading on_off,timecnt
   room       Heizung
   userReadings timecnt {((ReadingsVal($name,"state",0) eq 'off' ) ? ReadingsAge($name,"timecnt",121) : 0)},on_off {((ReadingsVal($name,"state",0) eq 'off' ) ? 0 : 1)}
Raspberry PI3 mit allem möglichen.

kadettilac89


ChrisW

tzz es geht einfach nicht .. Dann muss es ja am myStatDevice liegen würde ich sagen..
Ist es nicht möglich diesen langen wert in die Datenbank zu bekommen und daraus die Zeiten zu nehmen ?
Oder man müsste es so umbauen das die on Zeit als eigenes Reading um 23:59 gesetzt wird...

Es schaut s aus das sich das timecnt mit 0 füllt da es Orange wird und wieder ne 0 steht ..


Aber aktuell hab ich ja noch ein ganz anderes Problem mit dem script was mysql zu influxdb wandelt .. steht ja im anderen Post .. Irgendwie geht nun nichts mehr :(
Raspberry PI3 mit allem möglichen.

ChrisW

Also ich hab einen neuen Dummy angelegt ohne das Statistik Zeugs.
Ist das gewollt das das timecnt jedesmal wieder auf 0 zurück geht ?
Ich hab da natürlich dann so 30-40 verschiedene timecnt werte pro Tag.
Aber kein day wert.

Hintergrund ich will eine Statistik mit Balken
vom 1.1.2019 bis zum 31.1.2019. Dort will ich dann per Balken den kompletten Tageswert wie lange ( Minuten ) die Heizung an war.

Mit diesem Statistik Modul habe ich halt das Problem da sist ein Gesamtes Reading .. das ist nun auch nicht in der influxdb drin weil es ja nicht nur Zahlen sind ;/
Kann man mit grafana nicht dieses lange Reading also:  off: 03:58:52 off_Count: 13 on: 02:36:41 on_Count: 13 (since: 2019-01-25_09:29:47) auswerten = Da habe ich ja den Tageswert für die Bar:  02:36:41

Notfalls das per fhem irgendwie in eizelne Readigs zu Splitten ?

Per Influxdb kann man jetzt wirklich sucher schön die sachen bauen ohne zu suchen. Danke :)
Raspberry PI3 mit allem möglichen.

kadettilac89

Zurücksetzen ist gewollt da du dann aggregieren kannst wie du willst. Stunde. Täglich. Ist dein System du kannst loggen was du willst. War nur ein Vorschlag wie ich es machen würde.

ChrisW

Okay nur wie bekomme ich das nun schön dargestellt als Monatsansicht mit der Täglichen Laufzeit ?
Raspberry PI3 mit allem möglichen.

kadettilac89

Zitat von: ChrisW am 25 Januar 2019, 20:06:56
Okay nur wie bekomme ich das nun schön dargestellt als Monatsansicht mit der Täglichen Laufzeit ?

du legst es als plot an und wählst bei metrics rechts in options "min time intervall 1d" aus