Keine Darstellung im Plot

Begonnen von stgeran, 26 Juni 2013, 23:10:48

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

No ja,

ich würde es zwar nicht ganz so formulieren, aber bei mir gibt es auch ein Problem, das Du offenbar ebenfalls nicht nachvollziehen kannst. Das ist doch immerhin schon eine Spur...

Also nochmal, in Reihenfolge und Kürze:

1. Seit Jahr und Tag erzeugt das Modul, mit dem ich meine Solaranlage steuere, unter Anderem Logfiles für den Monat und das Jahr.

Inhalt des aktuellen Monatslogs (heute morgen frisch vom Wechselrichter geholt)

monthly data:              Day   Wd     Wm    Wex
2013-07-01_23:59:59 nt5000 W_D01 29.569  29.6   4.5
2013-07-02_23:59:59 nt5000 W_D02 28.222  57.8   8.8
2013-07-03_23:59:59 nt5000 W_D03  9.120  66.9  10.2
2013-07-04_23:59:59 nt5000 W_D04 12.502  79.4  12.2
2013-07-05_09:58:22 nt5000 W_D05  4.284  83.7  12.8


2. Die erste Zeile ist eine Kopfzeile mit Spaltenüberschriften. Sie sollte ignoriert werden, denn das zugehörige Plotfile

################################################
# Display the monthly data from an NT5000 solar inverter
#
# Prof. Dr. Peter A. Henning, April 2011
#
# Corresponding FileLog definition:
# define <filelogname> FileLog <filename>
#

set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set ytics
set y2tics nomirror
set title '<L1>'
set grid xtics y2tics

set ylabel "Wd [kWh]"
set y2label "Wm [%]"
set y3label "Wm [kWh]"

set yrange [0:35]
set y2range [0:190]
set y3range [0:750]

## These are passed to the FileLog module to sort out data
## column_spec is <col>:<regexp>:<default>:<fn>
## The following functions are implemented:
## - int (to cut off % from a number, as for the actuator)
## - delta-h / delta-d to get rain/h and rain/d values from continuous data.
#
#FileLog 4:.*nt5000.*:0:
#FileLog 6:.*nt5000.*:0:
#FileLog 5:.*nt5000.*:0:

## These are either passed to the gnuplot program
## or to the SVG module
plot \
  "< egrep 'W_D' <IN>" using 1:2 axes x1y1 title 'Wd [kWh]' with bars ls l2fill,\
  "< egrep 'W_D' <IN>" using 1:2 axes x1y2 title 'Wm [%]' with lines ls l4,\
  "< egrep 'W_D' <IN>" using 1:2 axes x1y3 title 'Wm [kWh]' with histeps ls l3


matcht nur auf Zeilen mit dem String nt5000 drin

3. Aber: Das erzeugte SVG-File enthält außer Rahmen, Achsen, Beschriftung eben keine drawables, mit anderen Worten: Die Datenpunkte fehlen

Stattdessen steht dort


<!-- Warning: No data item 2 defined -->
<!-- Warning: No data item 1 defined -->


4. Damit ist klar: Das Problem liegt hier nicht im Browser - denn der bekommt ja bereits den falschen SVG-Code geliefert. Es liegt auch nicht im Logging - das Logfile sieht genauso aus, wie es soll. Sondern zwischen dem Parsen der Logdatei und der SVG-Generierung.

Das Problem ist auch (relativ) neu - _wie_ neu kann ich leider nicht sagen, weil ich wie geasgt längere Zeit kein Update gemacht hatte. Ich helfe gerne beim Testen und Fixen - aber vielleicht könntest Du dabei den Lead übernehmen.

LG

pah


rudolfkoenig

Das Problem in diesem Fall liegt an dem Header, und man sieht es nur, wenn der Header nicht nur als erste Zeile der Datei, sondern auch mitten in den weiteren Daten vorkommt: deswegen hat mein Plot in dem anderen Beitrag auch funktioniert.

Die Argumentation mit dem Regexp der .gplot File zaehlt fuer mich nicht wirklich: FileLog erzeugt nie headers, und verlaesst sich in get auch darauf, dass in der Datei nichts anderes vorkommt.

Da "Muell" zu ignorieren den (jetzt schon zu langsamen) Plot noch etwas langsamer machen wuerde, schlage ich vor, den Header von dem externen Programm der die Logdatei schreibt nicht zu generieren.

Noch sauberer waere die Daten direkt per FileLog zu schreiben.

stgeran

Ganz aktuell:
2013-07-05_22:07:20 Temp_aussen humidity: 59.0
2013-07-05_22:09:17 Temp_aussen T: 20.9 H: 59.0
2013-07-05_22:09:17 Temp_aussen temperature: 20.9
2013-07-05_22:09:19 Temp_aussen T: 20.9 H: 59.0
2013-07-05_22:09:19 Temp_aussen humidity: 59.0
2013-07-05_22:10:19 Temp_aussen T: 20.9 H: 59.0
2013-07-05_22:10:19 Temp_aussen humidity: 59.0
2013-07-05_22:12:19 Temp_aussen T: 20.9 H: 59.0
2013-07-05_22:12:19 Temp_aussen temperature: 20.7
fhem empfängt also Daten, aber es werden in der "Maske" oder wie auch immer ihr die Darstellung beschreibt, die erscheint, wenn ich in fhem auf Plot drücke, keine Werte angezeigt.

@rudolfkoenig: Ja, der Rechner ist an und die fritzbox funktioniert auch.
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

Prof. Dr. Peter Henning

Lieber Rudi,

>Das Problem in diesem Fall liegt an dem Header, und man sieht es nur, wenn der Header nicht nur als erste Zeile der Datei,
>sondern auch mitten in den weiteren Daten vorkommt: deswegen hat mein Plot in dem anderen Beitrag auch funktioniert.

Kann nicht sein. a.) Wenn ich den Header in der Logdatei manuell lösche, ändert sich gar nichts und b.) er taucht eben nicht in weiteren Zeilen auf, sondern steht nur einmal oben drüber. Und zar trotz eines "reopen".

> Da "Muell" zu ignorieren den (jetzt schon zu langsamen) Plot noch etwas langsamer machen wuerde, schlage ich vor, den Header von dem externen Programm der die Logdatei schreibt nicht zu generieren.

Stimmt nicht ganz. Es wäre problemlos und ohne Geschwindigkeitsverlust machbar, die ersten N Zeilen einer Datei zu ignorieren. Da könnte nicht nur ein Spaltenheader auftauchen, sondern auch eine längere Beschreibung. Denk mal nachhaltig: Das hilft enorm, wenn man in 10 Jahren eine alte Logdatei von FHEM findet.

LG

pah

rudolfkoenig

> Kann nicht sein.

Kann doch, ich habs getestet :) Die erste Zeile stoert auch nicht (jedenfalls bei mir nicht), das wird ueberlesen, erst weitere Zeilen mitten im Text stoeren.

reopen ist leider fehlerhaft, und loescht die gecacheten Dateipositionen nicht, erst ein Neustart hilft.

Leider bedeutet eine (oder mehrere) Zeilen wegzulesen die Anpassung der Binaersuche, den ich z.Zt nur mit der Kneifzange anfassen will, da ich mich nicht mehr an alle Randfaelle erinnere, die testen muesste.

Prof. Dr. Peter Henning

So, jetzt habe ich mal etwas tiefer gegraben.

Der Fehler mit den fehlenden Diagrammen tritt auf, weil im Modul 92_FileLog.pm in den Zeilen ab 398ff der Name der CURRENT-Logdatei geraten und nicht bestimmt wird.

Im konkreten Fall: Aus ganz bestimmten Gründen logge ich für die Photovoltaikanlage die ausgelesenen Werte des gesamten Monats in einer täglichen Datei. Diese Datei hat die abstrakte Bezeichnung solarM_%Y-%m-%d.log, also z.B. heute solarM-2013-07-15.log

Im 92_FileLog.pm wird aber aus der Angabe "from" - in diesem Falle enthält das natürlich den Monatsersten 2013-07-01 - auf den Namen der Logdatei geschlossen. FHEM sucht also die Daten in solarM-2013-07-01.log

Natürlich kann ich den Fix selbst machen - irgendwo gibt es sicher einen Eintrag, der die tatsächlich verwendete CURRENT-Datei bestimmt. Allerdings ist die ganze Plotmimik inzwischen dermaßen komplex geworden, dass ich erst einmal rückfragen will, warum eigentlich der Name hier geraten wird.

LG

pah

rudolfkoenig

Weil irgendwelche Herrschaften Monatslogs haben, und im Plot ueber die Dateigrenze "zurueckblaettern" wollen.

Den Fix bitte als Patch schicken, ich moechte dass fuer eine bestimmte Datei immer einer verantwortlich ist, und den Ueberblick hat (siehe MAINTAINERS.txt).

Prof. Dr. Peter Henning

Zitat von: rudolfkoenig schrieb am Mo, 15 Juli 2013 16:46Weil irgendwelche Herrschaften Monatslogs haben

rofl

Nun gut, dann muss man den aktuellen Monat mit dem "from"-Monat vergleichen und kann dann den Dateinamen "raten".

LG

pah

BTW: Ich habe mir über die Geschwindigkeit des SVG-Plots Gedanken gemacht. Lässt sich um den Faktor 2 steigern, weil die Min/Max-Werte für jede Kurve zeitgleich mit dem Eintrag in die polyline berechnet werden können. Denn die polyline kann hinterher mit einer einzigen Transformation skaliert und an Ort und Stelle gerückt werden. Ich müsst enu rmal überprüfen, ob die Zeit wirklich da verloren geht und nicht schon im FileLog.


rudolfkoenig

> Ich müsst enu rmal überprüfen, ob die Zeit wirklich da verloren geht und nicht schon im FileLog.

Wuerde mich auch interessieren.
Ich habe vor 2-3 Jahren versucht das beste rauszuholen, und aus der Zeit sind noch meine CPU Kommentare in FileLog.pm drin. Leider kriege ich nicht mehr alles richtig zusammen, aber ich meine die beiden Module waren grob jeweils mit 50% "Schuld".

UliM

Hiho,
auch bei mir sind die meisten Plots leer, obgleich aktuelle Daten vorliegen und ich weder an .gplot noch an filelogs etwas geändert habe.


(siehe Anhang / see attachement)


Woran mag's liegen?
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

rudolfkoenig

Uli, ich brauche da mehr, da es bei mir tut.
- FileLog Definition+Attribute
- weblink Definition+Attribute
- Inhalt der FileLog-Datei, komplett, s.u.
- .gplot Datei

Du kannst auch "attr FileLogName loglevel 2" setzten, und nach einem refresh in das fhem-log schauen: ich vermute anhand des Titels im Screenshot, dass FileLog nichts zurueckgeliefert hat. Evtl. befinden sich in der Logdatei "kaputte" Zeilen, die fhem verwirren.

UliM

Zitat von: rudolfkoenig schrieb am Di, 16 Juli 2013 11:04Evtl. befinden sich in der Logdatei "kaputte" Zeilen, die fhem verwirren.
Hi,
Damit hattest Du Recht. In 3 Logfiles abschnittsweise Kauderwelsch. Diese Zeilen gelöscht -> geht wieder.
Da die Fehler in einer Logdatei in ganz anderen Log-Zeiträumen auftraten als in den beiden anderen, geheich davin aus, dass mein USB-Stick langsam die Grätsche macht. Werd den mal ersetzen.
Gibt es irgendwelche USB-Speicher, die besonders für Langlebigkeit bei viele Schreibzugriffen ausgelegt sind?

Danbke für den Hinweis,
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

rudolfkoenig

>  Gibt es irgendwelche USB-Speicher, die besonders für Langlebigkeit bei viele Schreibzugriffen ausgelegt sind?

Neuerdings macht FileLog kein "fsync()" mehr nach jede Zeile, das koennte dein Stick ab sofort auch deutlich schonen :) Als Nachteil kann man bei einem Absturz der Fritzbox (nicht FHEM) ein paar Zeilen verlieren.

locodriver

Das geschilderte Problem tritt bei mir bei einem Plot auf:

Das ist das gplot-File:

############################
# Display the power edited by hand
# Corresponding FileLog definition:
# define <filelogname> FileLog /var/log/fhem/Gesamt_ETW-%Y.log

set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "

set title '<L1>'
set ylabel "Energie (kWh)"
set y2label "Energie (kWh)"
set grid
set ytics
set y2tics
set grid xtics y2tics

set yrange [0:1000]
set y2range [0:1000]

# set format y "%.1f"
# set format y2 "%.1f"

#FileLog 3:GesamtHeizenergie:

plot \
  "< egrep 'GesamtHeizenergie' <IN>"\
         using 1:3 axes x1y2 title 'Gesamt Heizenergie' with lines lw2 ls l0fill\
 

Die Def. "simuliert" ein Balkendiagramm, deshalb sind alle Werte doppelt vorhanden.
Die Daten sind manuell erstellt (monatl. Summen in kWh):

2012-07-01_10:00:00 GesamtHeizenergie: 0.0
2012-08-01_10:00:00 GesamtHeizenergie: 0.0
2012-08-01_10:00:00 GesamtHeizenergie: 5.9
2012-09-01_10:00:00 GesamtHeizenergie: 5.9
2012-09-01_10:00:00 GesamtHeizenergie: 15.7
2012-10-01_10:00:00 GesamtHeizenergie: 15.7
2012-10-01_10:00:00 GesamtHeizenergie: 234.8
2012-11-01_10:00:00 GesamtHeizenergie: 234.8
2012-11-01_10:00:00 GesamtHeizenergie: 586.7
2012-12-01_10:00:00 GesamtHeizenergie: 586.7
2012-12-01_10:00:00 GesamtHeizenergie: 815.9
2013-01-01_10:00:00 GesamtHeizenergie: 815.9
2013-01-01_10:00:00 GesamtHeizenergie: 884.4
2013-02-01_10:00:00 GesamtHeizenergie: 884.4
2013-02-01_10:00:00 GesamtHeizenergie: 976.6
2013-03-01_10:00:00 GesamtHeizenergie: 976.6
2013-03-01_10:00:00 GesamtHeizenergie: 980.0
2013-04-01_10:00:00 GesamtHeizenergie: 980.0
2013-04-01_10:00:00 GesamtHeizenergie: 339.3
2013-05-01_10:00:00 GesamtHeizenergie: 339.3
2013-05-01_10:00:00 GesamtHeizenergie: 6.0
2013-06-01_10:00:00 GesamtHeizenergie: 6.0
2013-06-01_10:00:00 GesamtHeizenergie: 19.8
2013-07-01_10:00:00 GesamtHeizenergie: 19.8
2013-07-01_10:00:00 GesamtHeizenergie: 0.0
2013-08-01_10:00:00 GesamtHeizenergie: 0.0


Der Weblink:
define Gesamt_ETW FileLog ./log/Gesamt_ETW-%Y.log Gesamt_ETW
attr Gesamt_ETW archivedir ./log/var/fhemarchive
attr Gesamt_ETW logtype monat:GesamtHeizenergie,text:Werte
attr Gesamt_ETW nrarchive 1
attr Gesamt_ETW room AlleTemp

define weblink_010ETW_12 weblink fileplot Gesamt_ETW:monat:CURRENT
attr weblink_010ETW_12 alias 09Wärmemenge 2012/13
attr weblink_010ETW_12 fixedrange 2012-07-01 2013-06-30
attr weblink_010ETW_12 label "Heizenergie_ETW in kWh: Min  $data{min1}, Max $data{max1}, Letzter_Monat $data{currval1}, Durchschnitt $data{avg1}"
attr weblink_010ETW_12 room 010Wohnung

define weblink_010ETW_13 weblink fileplot Gesamt_ETW:monat:CURRENT
attr weblink_010ETW_13 alias 09Wärmemenge 2013/14
attr weblink_010ETW_13 fixedrange 2013-07-01 2014-06-30
attr weblink_010ETW_13 label "Heizenergie_ETW in kWh: Min  $data{min1}, Max $data{max1}, Letzter_Monat $data{currval1}, Durchschnitt $data{avg1}"
attr weblink_010ETW_13 room 010Wohnung


Ursprünglich hatte ich nur den Plot für 2012/13, welcher dann - ohne Fehlermeldung - nicht mehr funktionierte. Jetzt habe ich für das Folgejahr den Code kopiert und von 12 auf 13 angepasst. Beide Plots stehen untereinander (zur optischen Vergleichbarkeit), der neue funktioniert wieder, der originale nach wie vor nicht. Ich habe auch den neuen nochmal testweise kopiert und auf 12 geändert, dann gab es wieder keine Anzeige.


(siehe Anhang / see attachement)


Gibt es für das Problem einen Lösungsansatz?

Danke Uwe
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

rudolfkoenig

Hab keine Idee, schaut bei mir normal aus:

(siehe Anhang / see attachement)