Ergebnisse einer sup in Fhem anzeigen?

Begonnen von Wolfi, 27 August 2017, 15:23:13

Vorheriges Thema - Nächstes Thema

Wolfi

Ich habe eine sub in der 99_myutils die einen Mittelwert aus logs berechnet.
Der Aufruf als Kommando Zeile in Fhem funktioniert einwandfrei.

{myAverage("86400"*30, "FileLog_AktuellerVerbrauch_cumDay" , "4:::")}
Das Ergebnisse ist korrekt.
Aber wie bekomme ich das Resultat bzw. Wie lautet der Syntax
Wenn ich das Ergebnis dieser Funktion in einer reading Gruppe oder eines dummy anzeigen möchte..?


franky08

Der Mittelwert steht in der sub in einer Variable, dann kannst du mit fhem "set <name des dummy> $var" das Ergebnis in ein dummy schreiben.

P.S. oder poste mal die sub

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Wolfi

Ja die variable habe ich  gefunden.
$avg
Kannst du mir mal kurz den den Syntax schreiben.
Also Definition des dummy  Aufruf der sup innerhalb des Dummy und Zuweisung bzw. Anzeige des Ergebnisses.
Bekomme es nicht hin.

franky08

Ist doch ganz einfach, lege ein dummy an:

define <name> dummy

und dann, in der sub

fhem "set <name> $avg";
mehr ist das nicht  ;)

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Wolfi

Das muss in die sub??  fhem "set <name> $avg";
Nicht in die fhem.cfg
Und wie erfolgt dann der Aufruf der sub in der fhem.cfg bzw. Dummy

franky08

#5
Grundlagen lesen!!
Die sub über notify oder ein at triggern, die fhem.cfg nicht editieren, lässt sich alles im Webif machen! In die sub gehöhrt nur die Zeile mit der Variablen.

Und die nächste Frage kenne ich jetzt auch schon, "wie rufe ich die sub auf?", mit {name der sub}

https://fhem.de/Heimautomatisierung-mit-fhem.pdf

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Wolfi

Also so?

sub
myAverage($$$)
{
my ($offset,$logfile,$cspec) = @_;
my $period_s = strftime "%Y-%m-%d\x5f%H:%M:%S", localtime(time-$offset);
my $period_e = strftime "%Y-%m-%d\x5f%H:%M:%S", localtime;
my $oll = $attr{global}{verbose};
$attr{global}{verbose} = 0;
my @logdata = split("\n", fhem("get $logfile - - $period_s $period_e $cspec"));
$attr{global}{verbose} = $oll;
my ($cnt, $cum, $avg) = (0)x3;
foreach (@logdata){
  my @line = split(" ", $_);
  if(defined $line[1] && "$line[1]" ne ""){
   $cnt += 1;
   $cum += $line[1];
  }
}
if("$cnt" > 0){$avg = sprintf("%0.1f", $cum/$cnt)};
Log 4, ("myAverage: File: $logfile, Field: $cspec, Period: $period_s bis $period_e, Count: $cnt, Cum: $cum, Average: $avg");
return $avg;
fhem "set test $avg";
}
##########################################################

Gute Grundlagen zum Lesen hast du einen Tipp.?

franky08

ZitatGute Grundlagen zum Lesen hast du einen Tipp.?

oben im Link.
Was passiert denn wenn du jetzt in der Komandozeile von fhem {myAverage} eingibst?
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Wolfi

Das Ergebniss wird unterhalb der Kommandozeile angezeigt. So wie vorher.
Jetzt muss ich das mit der Definition des dummy in der cfg noch irgendwie hinbekommen.

franky08

#9
Du weist aber das es average auch als "fertigen" fhem Befehl/Hilfs- Erweiterungsmodul gibt?

https://fhem.de/commandref.html#average
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

CoolTux

Zitat von: Wolfi am 27 August 2017, 17:00:27
Das Ergebniss wird unterhalb der Kommandozeile angezeigt. So wie vorher.
Jetzt muss ich das mit der Definition des dummy in der cfg noch irgendwie hinbekommen.

Lass doch mal bitte die Finger von der cfg. Was willst du da?

define dummyName dummy

In der Kommandozeile des FHEMWEB eingeben und das Teil ist angelegt. Speichern nicht vergessen. Links oben rotes Fragezeichen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

franky08

ZitatDas Ergebniss wird unterhalb der Kommandozeile angezeigt. So wie vorher.
Jetzt muss ich das mit der Definition des dummy in der cfg noch irgendwie hinbekommen.

Das dummy device must du natürlich vorher anlegen oder wo soll der fhem "set ...." sonst hin schreiben??
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

@CoolTux

ZitatLass doch mal bitte die Finger von der cfg. Was willst du da?

Ja, ja, hatte ich ihm oben auch schon geschrieben...  :o

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

CoolTux

Zitat von: Wolfi am 27 August 2017, 16:43:06
Also so?

sub
myAverage($$$)
{
my ($offset,$logfile,$cspec) = @_;
my $period_s = strftime "%Y-%m-%d\x5f%H:%M:%S", localtime(time-$offset);
my $period_e = strftime "%Y-%m-%d\x5f%H:%M:%S", localtime;
my $oll = $attr{global}{verbose};
$attr{global}{verbose} = 0;
my @logdata = split("\n", fhem("get $logfile - - $period_s $period_e $cspec"));
$attr{global}{verbose} = $oll;
my ($cnt, $cum, $avg) = (0)x3;
foreach (@logdata){
  my @line = split(" ", $_);
  if(defined $line[1] && "$line[1]" ne ""){
   $cnt += 1;
   $cum += $line[1];
  }
}
if("$cnt" > 0){$avg = sprintf("%0.1f", $cum/$cnt)};
Log 4, ("myAverage: File: $logfile, Field: $cspec, Period: $period_s bis $period_e, Count: $cnt, Cum: $cum, Average: $avg");
return $avg;
fhem "set test $avg";
}
##########################################################

Gute Grundlagen zum Lesen hast du einen Tipp.?

Ist der Code von Dir? Sieht mir nach ziemlich alten Code aus. Denke mal so vor 2015.
Einige FHEM Sachen werden so nicht mehr gehandhabt. Zum Beispiel ist es nicht mehr erwischt die Hash's direkt zu manipulieren. Dafür möge man bitte Routinen aus der fhem.pl verwenden.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Wolfi

Zitat von: franky08 am 27 August 2017, 17:35:10
Das dummy device must du natürlich vorher anlegen oder wo soll der fhem "set ...." sonst hin schreiben??

Habe ich doch so gemacht via Kommandozeile aber der Dummy bleibt leer bzw. ???
Nach Ausführung der sub