logProxy modul zum manipulieren und ergänzen von SVG plots

Begonnen von justme1968, 26 August 2014, 22:47:55

Vorheriges Thema - Nächstes Thema

martinp876

#30
Hallo Andre,

e klappt bei mit immer noch nicht.
Die Einstellungen hatte ich dir als Muster gesendet - genau die gehen nicht (bei mir).

Das profile wird übrigens sauber gefüllt, nur gemalt wird nichts.

Gruss Martin

p.s. habs geschaft, mein Fehler.
Die Darstellung ist aber falsch - das Paar Uhrzeit/temp besagt immer "bis zu diesem Zeitpunkt ist diese Temp zu wählen".
Du hast "ab diesem Zeitpunkt" programmiert
eine HM eigenart.

Danke
Martin

justme1968

@frank: hab es eingebaut. patch für rudi und tobias kommt nächste woche. schaut dann z.b. so aus wie auf dem screenshot.

@walter: wir finden noch raus warum es bei dir nicht geht. aber auch erst nächste woche

@martin: schön das es geht. die zeitpunkte verschiebe ich noch.

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

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

wkarl

Hallo Andre,

ok, kein Problem. Ich hab hier noch ein paar andere Baustellen.

ciao
walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

frank

Zitathab es eingebaut. patch für rudi und tobias kommt nächste woche. schaut dann z.b. so aus wie auf dem screenshot.
besten dank. ich hatte im developer forum auch schon heimlich gelauscht.  :)

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

martinp876

Hi Andre,

für den TC-IT wäre es schön, jede der Listen darstellen zu können - das sind 3.
Meine Idee wäre, das mit einem trenner an das Device zu hängen - optional.

der Aufruf wäre z.B.
#logProxy Func:logProxy_WeekProfile2Plot("h_dctr_Climate",$from,$to,"","P3")


der Code müsste angepasst werden:
in logProxy_WeekProfile2Plot es zu Fehlern, wenn das Device nicht existiert, daher gleich mit:
sub
logProxy_WeekProfile2Plot($$$;$$)
{
  my ($profile, $from, $to, $regex,$l) = @_;

  return undef if( !$profile || !defined($defs{$profile}));

  if( $regex ) {
    eval { "test" =~ m/$regex/ };
    if( $@ ) {         
      Log3 undef, 3, "logProxy_WeekProfile2Plot: ". $regex .": ". $@;
      return undef;           
    }                 
  }

  if( $defs{$profile}{TYPE} eq "Heating_Control" ) {
    $profile = logProxy_Heating_Controll2WeekProfile($profile);
  } elsif( $defs{$profile}{TYPE} eq "WeekdayTimer" ) {
    $profile = logProxy_Heating_Controll2WeekProfile($profile);
  } elsif( $defs{$profile}{TYPE} eq "CUL_HM" ) {
    $profile = logProxy_HM2WeekProfile($profile,$l);
  } elsif( $defs{$profile}{TYPE} eq "MAX" ) {
    $profile = logProxy_MAX2WeekProfile($profile);
  } else {
    return undef;
  }

return if (!defined($profile));

und  für HM: incomplete list werden komplett ignoriert, list kann eingegeben werden, default ist P1
ZitatlogProxy_HM2WeekProfile($;$l)
{
  my ($d,$l) = @_;
  $l = "P1" if (!defined $l);
  my %profile = ();
  foreach(sort( grep /^R(_${l}_|_)._tempList...$/,keys %{$defs{$d}{READINGS}} )){
    my $i = $1 if ($_ =~ m/.*_(.)_tempList/);
    next if ($i > 7 || $i < 0);
    my %st = ();

    my @parts = split( ' ', ReadingsVal($d,$_,undef) );
    my ($time,$t2) = "00:00";
    while( @parts ) {
      $t2 = shift @parts;
      $st{$time} = shift @parts;
      $time = $t2;
    }
    $profile{$i} = \%st;
  }
  return (scalar (keys %profile) != 7)?undef:\%profile;
}

Schön fände ich, wenn man den Namen definieren kann - und dann mehrere Profile anzeigen kann. Als Namen konnte man entweder das Device nehmen oder ihn einfach als weiteren Parameter eingeben. Dann wäre ein mehrfaches aufrufen in einem File machbar?

#logProxy Func:logProxy_WeekProfile2Plot("h_dctr_Climate",$from,$to,"","P1")
#logProxy Func:logProxy_WeekProfile2Plot("h_dctr_Climate",$from,$to,"","P2")
#logProxy Func:logProxy_WeekProfile2Plot("h_dctr_Climate",$from,$to,"","P3")
.....
und andere Aktoren


Gruss Martin


justme1968

ja. hab ich schon auf dem plan. kommt in der nächsten version. aber mit etwas anderer syntax.

ignore berücksichtige ich dann auch.

mehrere profile aus einem device geht dann die genau so. mehrere profile aus unterschiedlichen devices geht jetzt schon. die namen kannst du einfach in der plot zeile als titel angeben.

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

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

RoBra81

Hallo,

ich wollte mir soeben auch mal den Verlauf der geplanten Soll-Temperatur meines HM-CC-RT-DN anzeigen lassen. Die Anzeige habe ich hinbekommen, aber da ist meiner Meinung nach ein Fehler drin: Im HM-CC-RT-DN steht immer erst der Bis-Zeitpunkt und dann die Soll-Temperatur:

R_0_tempListSat 08:00 18.0 18:00 14.0 24:00 18.0

=> bis 8:00 18°C, dann bis 18:00 14°C, ...

Im Plot wird daraus dann aber bis 18:00 18°C und dann bis 24:00 14°C.

Kann das jemand bestätigen?

Ronny

frank

#37
ZitatKann das jemand bestätigen?

Zitat von: martinp876 am 28 August 2014, 20:50:13
Die Darstellung ist aber falsch - das Paar Uhrzeit/temp besagt immer "bis zu diesem Zeitpunkt ist diese Temp zu wählen".
Du hast "ab diesem Zeitpunkt" programmiert
eine HM eigenart.

Zitat@martin: schön das es geht. die zeitpunkte verschiebe ich noch.
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

PichlAlex

#38
ich muss leider eine Frage zwischendurchstellen da mich das Thema brennend interessiert (und ich selbst schon überlegt habe so etwas zu schreiben):

wie installiere ich logProxy? Ich kann leider nirgends etwas dazu finden...


*edit*
im ersten Beitrag ist ganz am Ende nach den Screenshots ein Link zum Download der 98_logProxy.pm

justme1968

#39
im ersten beitrag ist das file zum runterladen. das muss ins FHEM verzeichnis.

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

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

justme1968

@martin:

wie funktionieren die drei profile? wird eines davon aktiv geschaltet oder gilt die summe aus allen dreien?

d.h. reicht es wenn man sie einzeln plotten kann oder auch alle drei überlagert in einer einzigen kurve?

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

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

justme1968

im ersten beitrag gibt es eine neue version:

- die schaltzeiten für hm thermostate sollten jetzt richtig sein.

- für hm tc-it kann an den device namen durch komma getrennt der name der profil liste (P1,P2 oder P3) angehängt werden: #logProxy Func:logProxy_WeekProfile2Plot("myHM-TC-IT,P2",$from,$to)

- es gibt ein paar debug meldungen zusätzlich wenn es probleme mit dem auslesen des profils aus dem device gibt.

- die patches für mindate und maxdate sind hier: http://forum.fhem.de/index.php/topic,26108.msg196158.html#new zu finden. damit lassen sich die daten für den min und max wert im plot z.b. so markieren:
#logProxy DbLog:dbLog:s300ht_1:temperature::
#logProxy ConstY:$data{avg1}
#logProxy ConstX:$data{mindate1},$data{min1}
#logProxy ConstX:$data{maxdate1},$data{max1}
#logProxy ConstX:$data{mindate1},$data{min1},$data{avg1}
#logProxy ConstX:$data{maxdate1},$data{max1},$data{avg1}

plot "<IN>" using 1:2 axes x1y1 title 'temp' ls l2 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'avg' ls l5 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 ls l0 lw 1 with points,\
     "<IN>" using 1:2 axes x1y1 ls l0 lw 1 with points,\
     "<IN>" using 1:2 axes x1y1 ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 ls l0 lw 1 with lines,\

das ganze schaut dann so aus:
(http://forum.fhem.de/index.php?action=dlattach;topic=26529.0;attach=18623)


was als nächstes kommt:

- ich werde für die wochenprofile einen eigenen typ in den column_spec vorsehen. die zeile aus dem beispiel oben wird dann so aussehen:#logProxy WeekProfile:myHM-TC-IT:P2

- das interpolieren und clippen beim ergänzen der werte am anfang und ende des plots. damit sollten die plot-abriss probleme der vergangenheit angehören

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

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

frank

hallo andre,

ich bin gerade beim testen von mindate und maxdate. mit

#logProxy ConstX:$data{currdate1},$data{min1},$data{max1}

erhalte ich 2 punkte an der aktuellen position. das ist soweit io. aber sobald ich maxdate oder mindate eingebe wird gar nichts geplottet. auch mit nur einem y-wert kommt nichts.

da ich zum ersten mal gepatcht habe bin ich unsicher, ob alles funktioniert hat. meine dateien sind im anhang. ich würde aber behaupten das sollte funktioniert haben. übrigens, mit der aktuellen 98_SVG.pm funktioniert das patchen nicht. ich habe, wie im patch zu sehen, dann version 6446 genommen.

hier die versionsnummern
# $Id: 98_SVG.pm 5956 2014-05-24 13:04:04Z rudolfkoenig $
# $Id: 98_logProxy.pm 5750 2014-05-05 09:26:45Z justme1968 $


es müsste doch genügen, nur svg zu patchen. oder muss ich auch filelog patchen?

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

justme1968

du musst vor allem filelog und dblog patchen. in SVG ist nur die doku für die commandref.

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

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

frank

#44
danke, bin schon dabei.  :)

edit:
funktioniert bestens. das thermostat-profil scheint auch zu funktionieren. eigentlich hatte ich das, das letzte mal auch schon gedacht.  ;) nach der anleitung in beitrag 1 hätte ich nun aber vermutet, dass die funktion für einen hm-cc-tc

logProxy_HM2WeekProfile("Thermostat.Keller_Climate",$from,$to)

wäre. funktionieren tut aber nur folgendes:

logProxy_WeekProfile2Plot("Thermostat.Keller_Climate",$from,$to)

sehe ich das richtig, dass wenn zb mehrere min punkte existieren, immer der am weitesten in der vergangenheit liegende, ausgewählt wird?

als letztes noch ein vorschlg zum clippen: kannst du die überstehenden kurventeile nicht einfach transparent machen oder verstecken? dann würde auch eine interpolation überflüssig werden. ausserdem wäre es aus meiner sicht eleganter, wenn man nicht einen festen zeitraum für die plotverlängerung wählen müsste, sondern einfach automatisch der nächste wert gesucht werden würde. bei fensterkontakten zb, kann man ja gar nicht abschätzen, wann der lezte wert gewesen sein könnte.

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