Dynamic Range in einem Plot

Begonnen von flurin, 23 Juli 2014, 20:01:29

Vorheriges Thema - Nächstes Thema

frank

bleibt der effekt auch, wenn du zb in den plot reinzoomst?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Jojo11

Gerade getestet: ja. Mir fällt auch bei den Daten nichts auf. Außer dass die Werte des einen Sensors 4 Nachkommastellen haben. Aber das geht ja sonst auch.

schöne Grüße
Jo


frank

du kannst mal verbose5 am plot einschalten oder bei global. vielleicht gibt das fehlerhinweise. sonst fhem über telnet starten und fehlermeldungen am terminal beobachten. hier gibt es wohl die meisten.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

flurin

#18
Hallo,

Ev. geht es mit dieser vereinfachten Variante (seit Wochen ohne Probleme in Betrieb):

fhem.cfg:

attr SVG_FileLog_temp_office_1 label sprintf( "[%d:%.1f]",int(min($data{min1},$data{min2})-0.3),max($data{max1},$data{max2})+0.5)

gplot:

# Created by FHEM/98_SVG.pm, 2014-08-25 14:22:17
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 '<TL>'
set ytics
set y2tics
set grid y2tics
set ylabel "Target"
set y2label "Temperature"
set yrange <L1>
set y2range <L1>

#FileLog 4:temp_office.temperature\x3a::
#FileLog 4:temp_office.target1\x3a::

plot "<IN>" using 1:2 axes x1y2 title 'Temperature' ls l0 lw 2 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Target' ls l7 lw 2 with lines


Gruss
flurin

Ergänzung

So sieht es aus:

(http://cisana.net/wp-content/uploads/2014/09/TempPlot.jpg)

Jojo11

Danke! Zu verbose5 fehlte mir bisher die Zeit. Werde das die Tage mal anschauen. Evtl sind auch Fehler in den Log files das Problem. Heute lief alles wie gewünscht.

schöne Grüße
Jo


Jojo11

Hallo,

nach längerer Fehlersuche habe ich das Problem nun reproduzierbar einkreisen können. Sobald einer der Temperatursensoren einen minimalen Wert unter 10°C hat, der andere aber seinen Minimalwert >10°C, wird nur der größere Wert bei min() berücksichtigt. In diesem Fall schießt die tatsächlich niedrigere Kurve nach unten aus dem Plot. Als min-Wert wird im Plot-Titel dann auch der größere Wert angegeben. Ein typischer log-Auszug sieht so aus:

2014-10-04_07:41:24 WS temperature: 9.6
2014-10-04_08:13:40 sensor2 temperature: 11.3125
2014-10-04_08:15:48 WS temperature: 10.2
2014-10-04_08:17:40 sensor2 temperature: 11.25
2014-10-04_08:19:23 WS temperature: 10.5
2014-10-04_08:19:23 WS humidity: 88
2014-10-04_08:19:23 WS battery: ok
2014-10-04_08:23:40 sensor2 temperature: 11.3125


In diesem Fall wird 11.25°C als absolutes Minimum genommen, nicht aber 9.6°C.
Ich habe jetzt mal ein paar Verläufe in der Vergangenheit überprüft und festgestellt, dass es immer das gleiche Muster ist.
Kann es am Übergang von ein- zu zweistelligen Werten liegen?

schöne Grüße
Jo

volschin

Wenn er den Wert als String und nicht als Zahl interpretiert, wäre 9... größer 1...

Gruß
Veit
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

flurin

Zitat von: volschin am 04 Oktober 2014, 11:01:56
Wenn er den Wert als String und nicht als Zahl interpretiert, wäre 9... größer 1...

so ist es.

siehe 99_Utils.pm:

sub
min($@)
{
  my ($min, @vars) = @_;
  for (@vars) {
    $min = $_ if $_ lt $min;
  }           
  return $min;
}

justme1968

min ist für string vergleiche. das ist historisch... es gibt ein minNum für zahlen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Jojo11

Danke, das war der richtige Hinweis  :)
Mit minNum klappt es nun endlich.

schöne Grüße
Jo

frank

gut zu wissen. dann werde ich mal umstellen.

gruss frank
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

holzwurm83

Zitat von: flurin am 23 Juli 2014, 22:00:06
vorher:

(http://forum.fhem.de/index.php?action=dlattach;topic=25618.0;attach=17452;image)


nachher:

(http://forum.fhem.de/index.php?action=dlattach;topic=25618.0;attach=17454;image)

Hallo zusammen,

ich versuche für meine RTs auch einen Plot mit so einem Abstand zu realisieren, aber irgendwie komme ich da nicht ans Ziel. Könnt ihr mir Hilfestellung geben.

Hier ist meine Plotdatei.
# Created by FHEM/98_SVG.pm, 2014-10-07 22:08:09
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 'Arbeitszimmer'
set ytics
set y2tics
set grid
set ylabel "Eingestellt"
set y2label "Gemessen"
set yrange <L1>

#FileLog 4:AZ_RT_links_Clima.T\x3a::
#FileLog 6:AZ_RT_links_Clima.T\x3a::

plot "<IN>" using 1:2 axes x1y2 title 'gemessen' ls l2 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'eingestellt' ls l1fill lw 1 with lines
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

flurin

Hallo holzwurm83

Ev. hilft Dir diese einfache Subroutine (in 99_myUtils.pm einfügen):

# argument: none
# return value: Range as [min:max]
sub
getLabel()
{
  my $label;
 
  if (defined($data{currval1}) && defined($data{currval2})) {
    my $min = int(minNum($data{min1},$data{min2})-0.3);
    my $max = maxNum($data{max1},$data{max2})+0.5;
    $label = sprintf("[%d:%.1f]",$min,$max);
  } else {
    $label = "";
  }
  #Log(3, "$label");
  return $label;
}


in fhem.cfg einfügen (Beispiel):

attr SVG_FileLog_temp_office_1 label getLabel()

Gruss
flurin


holzwurm83

Hallo Flurin,

danke für dein Feedback. Hab das gleich mal ausprobiert. Die Subroutine in die  99_myUtils.pm eingefügt und neu geladen.

attr auch eingefügt:
Zitatdefine SVG_FileLog_AZ_RT_links_Clima_1 SVG FileLog_AZ_RT_links_Clima:SVG_FileLog_AZ_RT_links_Clima_1:CURRENT
attr SVG_FileLog_AZ_RT_links_Clima_1 group Heizung
attr SVG_FileLog_AZ_RT_links_Clima_1 label getLabel()
attr SVG_FileLog_AZ_RT_links_Clima_1 room Arbeitszimmer,Plots

Es ändert sich nur leider nicht!?

- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

flurin

#29
In der Sub ist eine Zeile in Kommentar, ändere diese Zeile wie folgt (# entfernen):

Log(3, "label = $label");

reload 99_myUtils.pm

und schaue im Logfile (fhem-2015-02.log) nach; nach dem Aufruf deines Plots müsste ein Eintrag vorhanden sein, etwa:

2015.02.03 06:15:47 3: label = [11:21.0]

sollte es so aussehen:

2015.02.03 06:15:47 3: label =

also ohne Range, dann stimmt was nicht mit den Werten in $data. Könntest du die letzen Einträge deiner FileLog Datei (AZ_RT_links_Clima-2015.log) posten. Ist deine Plotdatei oben noch aktuell?

Gruss
flurin