[gelöst] Userreadings in DBLog schreiben um Plotanzeige zu ändern

Begonnen von Deekay2000, 13 Juni 2018, 17:17:34

Vorheriges Thema - Nächstes Thema

Deekay2000

Hallo zusammen,

ich habe vor zwei Wochen begonnen, mich in FHEM einzuarbeiten,  und habe schon einige Antworten im Forum gefunden. Jetzt habe ich aber eine blutige Anfängerfrage: Ich habe einen SMA-Wechselrichter, den ich über das Modul SMAinverter abfrage. Soweit so gut, allerdings werden die Werte für die Attribute Tagesertrag (SPOT_ETODAY) und Ertrag insgesamt (SPOT_ETOTAL) in Watt ausgelesen. Ich habe zu beiden Werten Plots erstellt, deren Skalen dann entsprechend groß sind -> das erste Megawatt ist erzeugt und schon ist die Skala im Plot bei 1000000 angekommen.

Daher wäre es natürlich "schöner", die Werte in kW anzeigen zu lassen. Ich habe dafür 2 Userreadings angelegt:

attr Wechselrichter userReadings SPOT_ETODAY_KW {ReadingsVal("Wechselrichter","SPOT_ETODAY",0) /1000}, \
SPOT_ETOTAL_KW {ReadingsVal("Wechselrichter","SPOT_ETOTAL",0) /1000}


Diese werden auch mit Werten gefüllt - aber wie bekomme ich die Werte in die DB? Ich habe eine MariaDB-Datenbank als DBLog-Device angelegt. Manuell kann ich einen Wert mittels

set addlog Wechselrichter:SPOT_ETOTAL_KW

in die Datenbank schießen, aber sinnvoll wäre es doch, wenn dies jede Minute automatisch erfolgen würde. Muss ich hierfür einen At-Job anlegen?

Oder ist der gewählte Weg zu umständlich und ich könnte die Umrechnung direkt im Plot durchführen?

Viele Grüße
Daniel


DS_Starter

#1
Hallo Daniel,

willkommen im Forum.

Ich benutze dafür den dritten Weg ... stelle im SMAInverter-Device das Attribut "SBFSpotComp = 1" ein. Dadurch wird alles gleich "richtig" formatiert wie man es von SBASpot kennt. Die Namen der Readings ändern sich auch.
Aber das ist kein Problem. Die in der Datenbank vorhandenen Readingnamen kann man umschießen. Wenn du dich mit SQL nicht so auskennst kannst du dir ein DbRep-Device anlegen und mit der Funktion "set ... readingRename" alles in der DB ändern. Die Werte zu ändern geht auch mit changeValue, aber das ist nicht ganz so trivial weil du ja schon Werte in der DB hast auf die man eine kleine Berechnung anwenden muss. Ist aber auch zu machen.

DbRep ist ohnehin sinnvoll, auch wenn du dir für deine PV-Anlage eine Auswertung anlegen willst wie im Wiki beschrieben: https://wiki.fhem.de/wiki/Datenbankgest%C3%BCtzte_Erstellung_der_Energiebilanz_einer_SMA_PV-Anlage_mit_%C3%9Cberschusseinspeisung

Zitat...in die Datenbank schießen, aber sinnvoll wäre es doch, wenn dies jede Minute automatisch erfolgen würde. Muss ich hierfür einen At-Job anlegen?
Nein, addlog ist nicht nötig in diesem Fall. Du musst nur darauf achten dass dieses Readings Events generieren und diese nicht durch das Regex im DbLog vom Logging ausgeschlossen werden. Mit dem obigen Weg brauchst aber keine Userreadings.

Grüße
Heiko



ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Deekay2000

Hallo Heiko,

vielen Dank für deine Antwort und deine Tipps, ich habe zum Test mal SBFSpotComp auf 1 gesetzt, allerdings scheinen damit sämtliche Werte durch 1000 geteilt zu werden. Ich habe beim Testen allerdings gestern den eigentlichen Fehler gefunden: um die Datenbank nicht zu schnell wachsn zu lassen hatte ich das Attribut "event-on-change-reading" für diverse Readings gesetzt. Als ich das Attribut rausgenommen hab, wurden sofort meine UserReadings in die Datenbank geschrieben. Ich habe jetzt mit SQL-Mitteln die fehlenden Werte für meine UserReadings errechnet und in die Datenbank geschrieben.

Macht es Sinn, das Attribut "event-on-change-reading" mit dem Wert ".*" zu setzen, oder ist das Blödsinn und ich sollte jedes Reading separat mitgeben?

Viele Grüße,
Daniel


DS_Starter

Hallo Daniel,

Zitatallerdings scheinen damit sämtliche Werte durch 1000 geteilt zu werden.
Ja richtig. Ich hatte dich so verstanden dass du genau das wolltest und deswegen userreading angelegt hast.

ZitatMacht es Sinn, das Attribut "event-on-change-reading" mit dem Wert ".*" zu setzen, oder ist das Blödsinn und ich sollte jedes Reading separat mitgeben?
Pauschal ist das nicht zu beantworten. Aber du willst i.A. nur eine Auswahl der Readings loggen. Deswegen teile dem Attr "event-on-change-reading" nur die Readings mit die du auch loggen willst bzw. für andere Steuerungszwecke brauchst.

VG
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter