Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Hat jemand schon ein Plugin geschrieben um sich Min/Max-Werte ausgeben lassen zu können?
So langsam würde man ja gern mal wissen, wie kalt es nachts draußen wirklich minimal war. Klar kann man in den Graphen nachschauen, aber eine Anzeige in der Visu etc wäre schon "schöner".
Grüße
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Hi,
Meine visu baue ich mir erst im Winter. Aber wenn du die werte in einem rrd hast, würde ich versuchen aus diesem den wert auszulesen. Entweder gibt es direkt einen befehl im rrd tool oder sonst die werte aus dem rrd als liste auslesen und dann mit perl den max bestimmen.
Ich denke so direkt gibts das noch nicht ist aber übersichtlich;
Der Ansatz ausm rrdtool ist sicher auch kein Fehler, kommt halt drauf an. Soll Min/Max irgendwann zurückgesetzt werden?
Wenn ja, hart (Tag/Woche/..) oder floating, also der älteste Wert raus? Je nachdem lässt sich da schon ein 5zeiler machen
Ich hätte gern regelmässig "floating 20h Min/Max" auf je eine GA gesendet. Wenn man den Fensterwert (20h) im Plugin einstellen kann, ist das sicher kein Fehler.
Usecase ist wie gesagt "Gabs die Nacht Frost?" oder "Wie hoch war die maximale VL am heutigen Tag?".
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
### Plugin Min/Max values from RRD auf den Bus
# v0.3
my $RRDName = "28.7FD4EB010000_temp";
my $ds = "MIN"; # Datasource: MIN AVERAGE MAX - egal bei Werten <180h
my $start = "now-20h"; # AT-STYLE TIME SPECIFICATION
my $end = "now";
$plugin_info{$plugname.'_cycle'} = 3600; # alle x sekunden
my $debug = 0;
my $gamin = '11/2/20'; # leer um Versand zu unterbinden-> ''
my $gamax = '11/2/21'; # leer um Versand zu unterbinden-> ''
my $dpt = $eibgaconf{$gamin}{'DPTSubId'} || $eibgaconf{$gamax}{'DPTSubId'} || "9.001";
# hier einen Wert setzen (statt "9.001" z.B. "5.001"), falls es nicht im import/config ist
### ENDE Definitionen
# return early on write/response (telegram from myself!)
if ($msg{'apci'} && $msg{'apci'} ne "A_GroupValue_Read") {
return;
}
my ($min,$max);
my ($dbstart, $step, $names, $data) =
RRDs::fetch('/var/www/rrd/'.$RRDName.'.rrd', "--start=$start","--end=$end", $ds);
foreach my $line (@$data) {
foreach my $val (@$line) {
next unless defined $val;
$min = $val unless defined $min;
$max = $val unless defined $max;
$min = $val if $val < $min;
$max = $val if $val > $max;
}
}
if ($msg{'apci'} eq "A_GroupValue_Read" and $msg{'dst'} eq $gamin) {
knx_write($gamin,$min,$dpt,1);
return;
} elsif ($msg{'apci'} eq "A_GroupValue_Read" and $msg{'dst'} eq $gamax) {
knx_write($gamax,$max,$dpt,1);
return;
}
if ($gamin) {
knx_write($gamin,$min,$dpt);
$plugin_subscribe{$gamin}{$plugname} = 1;
}
if ($gamax) {
knx_write($gamax,$max,$dpt);
$plugin_subscribe{$gamax}{$plugname} = 1;
}
return("Min $min Max $max in $start") if $debug;
return;
Ok, das läuft. Kann man verwenden.
Jetzt braucht Comet nur noch ein schönes Multiinfofeld Aber das ist ein anderes Thema.
Ggf. wäre noch eine multi-Variante interessant. Also x rrd auf x Gruppenadressen zu mappen, statt derzeit nur eine. Für die 4 Werte lasse ich derzeit das Plugin aber einfach 4 Mal laufen. Geht auch.
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Ah geht doch noch nicht.
MIN geht nur für Werte unter 0 Grad Wenns wie derzeit also über 0 Grad liegt, wird das nicht MIN. Gleiches vermutlich für MAX im kalten Winter. Vermutlich muss das noch initialisiert werden?
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Hmm, so ist das wenn mans noch schnell im stehen auf dem Sprung macht, der RRD-Teil war zu einfach als das das Gehirn zu 100% hochgefahren wäre:
Also ich wär soweit, wir wollten doch um sieben da sein?
AW: Jaja, habs doch gleich
An dem Tag hatte es minusgrade in der Nacht, da gingen alle Test-cases
Ggf. wäre noch eine multi-Variante interessant. Also x rrd auf x Gruppenadressen zu mappen, statt derzeit nur eine.
Naja, da wird nichts schneller oder besser, ein Plugin pro Wert tuts auch. Höchstens wird es übersichtlicher aber dafür stünden im Plugin dann eher hässliche Arrays oder noch hässlichere Hashes die man für $plugin_info de/serialisieren muss..
Aber das ist ja das schöne, wenns einem so nicht 100% gefällt macht man es halt ein bisschen anders, ist ja wahrlich kein Monstermässig komplexer Code (und postet/submitted es dann optimalerweise kurz)
Bin da ehrlichgesagt eher ein Freund von "einfach", kann man x-mal kopieren, durchnummerieren und versteht man in 3 Monaten auch noch auf Anhieb statt zu grübeln wie das nun noch gleich war und warum da soviele {#$%} sind :d
Das mit der CV steht auch auf meinem Radar, zwar nicht in diesem Kontext aber so ähnlich und dafür auch brauchbar
Übrigens am Rande: ich kenne das rrdtool gut genug zu wissen, das man mit einer "Eigenlösung" dafür statt fetch (könnte man sich ja auch die Werte so speichern und auswerten) als sehr guter programmierer bestenfalls gleichstand erreicht was die Performance&resourcen angeht - und dann auch nur für den eigenen use-case, wenn die Zeiträume und Auflösungen flexibel bzw. automatisch sein sollen ist das für genau sowas IMHO echt unschlagbar.
Irgendwie bin ich zu blöd dafür, habe folgenden Code und bekomme als Minimal immer nun 0.0:
Code:
### Plugin Min/Max values from RRD auf den Bus
my $RRDName = "28.203CF0020000_temp";
my $ds = "MIN"; # Datasource: MIN AVERAGE MAX - egal bei Werten <180h
my $start = "now-20h"; # AT-STYLE TIME SPECIFICATION
my $end = "now";
$plugin_info{$plugname.'_cycle'} = 3600; # alle x sekunden
my $debug = 0;
my $gamin = '7/3/0'; # DPT9.001 leer um Versand zu unterbinden-> ''
my $gamax = '7/3/1'; # leer um Versand zu unterbinden-> ''
### ENDE Definitionen
# return early on write/response (telegram from myself!)
if ($msg{'apci'} && $msg{'apci'} ne "A_GroupValue_Read") {
return;
}
-my ($min,$max) = (0,0);
+my ($min,$max);
my ($dbstart, $step, $names, $data) =
RRDs::fetch('/var/www/rrd/'.$RRDName.'.rrd', "--start=$start","--end=$end", $ds);
foreach my $line (@$data) {
foreach my $val (@$line) {
next unless defined $val;
+ $min = $val unless defined $min;
+ $max = $val unless defined $max;
$min = $val if $val < $min;
$max = $val if $val > $max;
}
}
if ($msg{'apci'} eq "A_GroupValue_Read" and $msg{'dst'} eq $gamin) {
knx_write($gamin,$min,9,1);
return;
} elsif ($msg{'apci'} eq "A_GroupValue_Read" and $msg{'dst'} eq $gamax) {
knx_write($gamax,$max,9,1);
return;
}
if ($gamin) {
knx_write($gamin,$min,9);
$plugin_subscribe{$gamin}{$plugname} = 1;
}
if ($gamax) {
knx_write($gamax,$max,9);
$plugin_subscribe{$gamax}{$plugname} = 1;
}
return("Min $min Max $max in $start") if $debug;
return;
Ich hab doch die Änderung von makki eingearbeitet, oder nicht?
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar