Ich habe mir einen Sensor für meinen Kaffeeröster gebaut und werte die Daten mit FHEM aus. Für die Grafik benötige ich einen Zeitraum von ca 10-20 Minuten. Sehe ich das richtig, das es dafür kein Attribut derzeit gibt und auch keine ,,schnelle" Lösung? Sonst würde ich das mal versuchen. Hat jemand noch einen Tipp, was ich zusätzlich beachten sollte? (Ich würde mich an den Quelltext setzen und einfach bei ,,hours/days" schauen, wie ich das anpasse.)
Das Attribut fixedrange unterstützt doch perl-Code. Man kann also eine Funktion bauen, die einen syntaktisch korrekten Wert zurückliefert, der dann ausgewertet wird.
Bei mir wird sowas genutzt, um in der laufenden Woche immer den Zeitraum Montag-Freitag auszuwerten, egal, welcher Wochentag gerade ist.
Was ich gerade nicht weiß: ob man da nur tageweise Werte YYYY-MM-DD angeben kann oder ob das auch zusätzlich HH:MM:SS unterstützen würde.
attr <device> fixedrange {mo2fr($wday)}
sub mo2fr {
my $wday = shift;
$wday = 7 unless $wday;
my @a = localtime(time - ($wday-1)*DAYSECONDS);
my $from = strftime "%Y-%m-%d",@a;
@a = localtime(time - ($wday-6)*DAYSECONDS);
my $to = strftime "%Y-%m-%d",@a;
return "$from $to";
}
Hm, bei mir wird das nicht unterstützt. Ich habe allerdings länger kein update gemacht, weil ich nicht genug Zeit mitbringen kann, um mögliche Anpassungen zu machen. Ich habe direkt eingegriffen und zumindest wenn "endPlotNow" ist, klappt das. Ich schreibe ja nun nicht in SVG herum, sondern meinem eigenen Modul, aber das ist logisch, was man da tut. Es ist die Stelle
if($defs{$wl}) { ## defs $wl enthaelt Internals
$fr = AttrVal($wl, "fixedrange", undef);## und nicht undef, wie in SVG
$fr = AnalyzePerlCommand(undef,$1) if($fr && $fr =~ m/^{(.*)}$/); #137800
if($fr) {
if($fr =~ "^(min|hour|qday|day|week|month|year)" ||
$fr =~ m/^\d+min/ || #fixedrange with offset
$fr =~ m/^\d+hour/ || #fixedrange with offset
$fr =~ m/^\d+day/ ||
$fr =~ m/^\d+year/ ) {
$frx=$fr; #fixedrange with offset
und da werden die Minuten eingefügt, damit man sie auslesen kann. Dann bei
my $endPlotNow = (&SVG_Attr($FW_wname, $wl, "endPlotNow", undef) && !$st);
kommt ein elsif-Block hinzu
} elsif($zoom =~ m/^(\d+)?min/) {
my $nMins = $1 ? ($1-1) : 0;
if($endPlotNow) {
my $t = int(($now + ($off-$nMins-1)*60)/300.0)*300 + 300;
my @l = localtime($t);
$eCharts_devs{$d}{from} = &SVG_tspec(@l);
@l = localtime($t+$nMins*60+59);
$eCharts_devs{$d}{to} = &SVG_tspec(@l);
} else {
my $t = int($now/60)*60 + ($off-$nMins)*60;
my @l = localtime($t);
$eCharts_devs{$d}{from} = &SVG_tspec(@l);
@l = localtime($t+($nMins+1)*60-1);
$eCharts_devs{$d}{to} = &SVG_tspec(@l);
}
und was ich noch nicht kapiere ist der Part nach dem else. Davor wird richtig ausgeführt, dahinter habe ich aus der Logik heraus angepasst, aber das klappt nicht. Ich kann also nicht in Minutenschritten durch die Daten "laufen". OK, beim Kaffee rösten reichen mir die letzten zehn Minuten aber erstmal. Mal sehen, wann ich wieder Zeit finde, da weiter zu machen.