FHEM Forum

FHEM => Sonstiges => Thema gestartet von: nccfast am 19 August 2015, 12:40:59

Titel: longpollSVG und logproxy oder DBLog
Beitrag von: nccfast am 19 August 2015, 12:40:59
Ich benutze zum plotten SVG und logproxy. Meine Daten sind in iner mysql DB.
Ich hätte gerne, dass sich die Graphen von selbst refreshen, sobald ein neuer Messwert dazukommt.

In der Commandref steht aber, dass das longpollSVG nur mit Filelogs funktioniert.
Heisst das also, dass, wenn man zum Plotten die DB benutzt, das longpollSVG nicht geht? Wenn ja, ist es geplant, das zu ändern?
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rudolfkoenig am 19 August 2015, 13:16:41
Ich plane das nicht, aber wenn jemand mir dafuer ein Patch schickt, baue ich das gerne ein.
Es geht darum, das flog Attribut im <svg> Tag korrekt zu setzen, diese muss ein Regexp aller Events beinhalten, die ein reload ausloesen sollten.
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: nccfast am 20 August 2015, 13:23:39
habe mal bei mir in der 98_SVG.pm ungefär bei Zeile 1288 folgendes ersetzt:

  $filter =~ s/ [^: ]*:/ /g;
  $filter =~ s/:[^ ]* / /g;
  $filter =~ s/(^ | $)//g;
  $filter =~ s/ /|/g;
  $filter =~ s/"/./g;


durch


  if (index($filter, " DbLog:") >= 0) #logproxy
  {
    $filter =~ s/ [^: ]*:/ /g;
    $filter =~ s/ [^: ]*:/ /g;
    $filter =~ s/:[^ ]* / /g;
    $filter =~ s/(^ | $)//g;
    $filter =~ s/ /|/g;
    $filter =~ s/"/./g;
  }
  else #Filelog
  {
    $filter =~ s/ [^: ]*:/ /g;
    $filter =~ s/:[^ ]* / /g;
    $filter =~ s/(^ | $)//g;
    $filter =~ s/ /|/g;
    $filter =~ s/"/./g;
  }
 
 


Dadurch werden bei mir meine mit logproxy erstellten Plots aktualisiert, weil im flog-Attribut nun die entprechenden Devices stehen.
Für DBLog pur hab ich noch keine Lösung.

Ausserdem habe ich in der svg.js in der Funktion FW_svgUpdateDevs in Zeile ca. 363 das "break" rausgemacht, da sonst nur der erste plot des Devices aktualisiert wird.


Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rudolfkoenig am 20 August 2015, 13:30:37
Dein Patch samt Kommentar ist verwirrend:
- du redest von logproxy, im Code wird auf DbLog geprueft.
- die Aenderung kopiert den vorhandenen Abschnitt fuer DbLog, und dupliziert da die erste Zeile, was mAn unter dem Strich keine Aenderung bewirkt.
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: nccfast am 20 August 2015, 13:41:13
Filelog-Zeile sieht so aus:
4:TH_Wohnzimmer.T\x3a:: 6:TH_Wohnzimmer.T\x3a::

logproxy sieht so aus:
DbLog:logdb:TH_Wohnzimmer:temperature:0:

Die besagte erste Zeile
$filter =~ s/ [^: ]*:/ /g;
ersetzt beim Filelog den String " 4:" durch " ".
Beim logproxy " DbLog:" durch " ". Ich möchte aber nochmal dasselbe drauf anwenden, damit auch " logdb:" ersetzt wird, das ja nach dem ersten Aufruf  am Anfang im filter steht.

Ich prüfe auf DBLog, um rauszufinden, dass es sich um ein logproxy gplot file handelt. Wenn es schönere Prüfungen an dieser stelle gibt, gerne.


Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rudolfkoenig am 20 August 2015, 14:19:38
Zitatlogproxy sieht so aus:
DbLog:logdb:TH_Wohnzimmer:temperature:0:

Es sei denn die logproxy Quelle ist kein DbLog, sondern FileLog oder ein logProxy built-In. Ich habe hier mal $filter fuer die SVGs aus fhem.cfg.demo als >$filter< ausgegeben (2xlogProxy, 2xFileLog):
> Func:logProxy_Func2Plot($from,$to,'{logProxy_hms2dec(sunrise_abs_dat($sec))}') Func:logProxy_Func2Plot($from,$to,'{logProxy_hms2dec(sunset_abs_dat($sec))}') ConstX:TimeNow(),4,10 <
> Polar::[11,15,21,14,16] Polar::[11,15,21,14,16] Polar::[14,16,23,24,21] Polar::["Livingroom","Bath","Children","Kitchen","Floor"] <
> 4:Cellar.dewpoint\x3a:10: 4:Garden.dewpoint\x3a:10: <
> 4:Garden.T\x3a:15: 10:Garden.T\x3a:0:delta-h 10:Garden.T\x3a:0:delta-d 4:predicted.*:15: <


Das hier genannte Patch wuerde mit diesen Werten nicht funktionieren.
Ich will dein Patch nicht verhindern, aber auch nicht mit falschen Kommentaren versehen.
Am liebsten waere, wenn andre (als logProxy Author) was dazu sagen koennte.
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: nccfast am 20 August 2015, 16:58:17
Da hast du recht. Es war nur ein erster Schuss. Irgendwie muss man erkennen, ob es sich um logproxy, DBlog oder Filelog handelt. Abhängig davon dann die Variable $filter auf die Devices/Readings verodert reduzieren.
Andre, kannst du was anbieten?
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: justme1968 am 20 August 2015, 22:04:13
ich glaube den filter nachträglich aus $srcDesc->{all} zu extrahieren funktioniert nicht wenn dbLog und logProxy noch mit berücksichtigt werden sollen. erst recht nicht da in einem plotfile auch alle drei Quellen gemischt sein können.

ich würde vorschlagen in jeder möglichen log quelle eine funktion vorzusehen der zur  devspec zeile jeweils den dazu gehörenden filter teil liefert.

dann steckt die 'intelligenz' jeweils dezentral in dem modul das dafür zuständig ist.

logProxy wurde für fileLog und dbLog die anfrage jeweils weiterleiten und für die logProxy eigenen plot typen müssen wir dann schauen ob es hier auch welche gibt bei denen longpollSVG sinnvoll ist.

gruss
  andre
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: nccfast am 21 August 2015, 07:21:45
das klingt doch sehr gut.
Wer kann das umsetzten?
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rudolfkoenig am 21 August 2015, 08:19:18
Da ich fuer SVG und FileLog zustaendig bin, habe ich erstmal den schwarzen Peter.
Die Aufgabe ist auf der TODO-Liste, Prio unklar :)
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rudolfkoenig am 22 August 2015, 15:17:24
Habe die Umwandlung in Regexp ausgelagert in das Modul-Eigene SVG_regexpFn.
Parameter: Quell-Instanz-Name, und alle FileLog-Parameter, die diese Instanz betreffen.
Titel: longpollSVG und logproxy oder DBLog
Beitrag von: justme1968 am 22 August 2015, 23:38:59
@nccfast: ich kann es gerade nicht selber testen. aber wenn du lust hast kannst du mal folgendes probieren:

in 98_logProxy.pm in logProxy_Initialize diese zeile einfügen:$hash->{SVG_regexpFn}     = "logProxy_regexpFn";und diese sub einbauen:sub 
logProxy_regexpFn($$)
{   
  my ($name, $filter) = @_;
         
  my $ret;
         
  my @a = split( ' ', $filter );
  for(my $i = 0; $i < int(@a); $i++) {
    my @fld = split(":", $a[$i]);
    if( $a[$i] =~ m/^(FileLog|DbLog):([^:]*):(.*)/ ) {
      my @options = split( ',', $fld[1] );
      my $log_dev = shift(@options);
      my $column_specs = $3;
         
      $ret .= '|' if( $ret );
      $ret .=  CallFn($log_dev, "SVG_regexpFn", $log_dev, $column_specs);
    }   
  }   
         
  return $ret;
}


damit sollte die logProxy seite erst mal erledigt sein.

für dblog braucht es in 93_DbLog.pm in DbLog_Initialize: $hash->{SVG_regexpFn}     = "DbLog_regexpFn"

und dann eine sub in der art:sub                             
DbLog_regexpFn($$)               
{                               
  my ($name, $filter) = @_;     
                                 
  my $ret;                       
                                 
  my @a = split( ' ', $filter );
  for(my $i = 0; $i < int(@a); $i++) {
    my @fld = split(":", $a[$i]);
                                 
    $ret .= '|' if( $ret );     
    $ret .=  $fld[0] .'.'. $fld[1];
  }                             
                                 
  return $ret;                   
}
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: nccfast am 23 August 2015, 09:44:49
Habs getestet für logproxy.
Hab ein Update gemacht, um neue 98_SVG.pm zu bekommen.
Hab alle Änderungen eingebaut in 98_logProxy.pm und 93_DbLog.pm

Ging dann erst mal nicht.

Hab dann die zeile
$ret .= ' ' if( $ret );
geändert zu
$ret .= '|' if( $ret );

Nun gehts.

Was ist mit :
ZitatAusserdem habe ich in der svg.js in der Funktion FW_svgUpdateDevs in Zeile ca. 363 das "break" rausgemacht, da sonst nur der erste plot des Devices aktualisiert wird.
Ist das ein Schmarrn von mir?

Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: frank am 23 August 2015, 11:02:14
mit dieser erweiterung kommt mein fhem nicht zurecht.
http://forum.fhem.de/index.php/topic,40293.0.html (http://forum.fhem.de/index.php/topic,40293.0.html)
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rudolfkoenig am 23 August 2015, 11:33:36
@nccfast: ich vermute ja, da die Schleife ueber die Plots die aeussere ist. Die Innere prueft nur, ob Bedingungen fuer ein Reload existieren, dafuer reicht eine.

@frank: geantwortet im verlinkten Thread.
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: justme1968 am 23 August 2015, 14:03:47
hast du die zeile in logProxy oder in DbLog geändert? oder in beiden?

gruss
  andre
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: nccfast am 24 August 2015, 17:29:43
in beiden
im logproxy allein reichte nicht
dblog allein hab ich nicht getestet

Edit:
Habs nochmal getestet

für log proxy reichts, wenn es nur im logproxy geändert wird. Nur im DBLog funktioniert hier nicht bei mir.

Für DBLog weiss ich es nicht mangels testumgebung
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: nccfast am 24 August 2015, 17:51:50
Zitat
@nccfast: ich vermute ja, da die Schleife ueber die Plots die aeussere ist. Die Innere prueft nur, ob Bedingungen fuer ein Reload existieren, dafuer reicht eine.
Stimmt
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: Tobias am 26 August 2015, 08:20:33
Bitte mal testen.....

Edit: update, ein Semikolon hat gefehlt....
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: nccfast am 06 September 2015, 21:58:05
Ist es getestet?
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: Tobias am 14 September 2015, 09:17:54
Solange ich keine Rückmeldung bekomme das das Modul wie erwartet funktioniert, checke ich es nicht ein.....
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rapster am 26 Oktober 2015, 13:01:17
Habs eingecheckt, scheint bei mir mit DbLog und longpollSVG zu funktionieren.

@Rudi, Nicht unbedingt notwendig allerdings könntest du bei Gelegenheit die fhemweb commandref zu longpollSVG anpassen damit die DbLog Kompatibilität erwähnt wird.

Gruß
  Claudiu
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rudolfkoenig am 26 Oktober 2015, 15:08:04
Da dieser Abschnitt FileLog spezifisch ist, und ich nicht genau weiss, ob/was man im DbLog/logProxy tun muss, haette ich gerne eine Erklaerung. Oder Patch.
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rapster am 26 Oktober 2015, 16:16:57
Was "genau" zutun ist kann ich nicht sagen,

Tobias bat mich nur das Ganze bei Gelegenheit in DbLog einzubauen, selber verwenden tut er (und ich) es nicht.

Zum Testen bei mir hat es allerdings gereicht das Attribut longpollSVG auf 1 zu setzen.
Anschließend hat es wie erwartet, ohne weitere Anpassungen, mit DbLog funktioniert.
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: justme1968 am 26 Oktober 2015, 16:23:12
logProxy reicht zur zeit nur 1:1 nach fileLog und dbLog durch.
Titel: Antw:longpollSVG und logproxy oder DBLog
Beitrag von: rudolfkoenig am 26 Oktober 2015, 18:37:17
Hab die Doku leicht geaendert, wer es verbessern will, soll sich melden.