FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: betateilchen am 29 Januar 2016, 13:31:35

Titel: [98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: betateilchen am 29 Januar 2016, 13:31:35
Hallo Markus,

ich hätte da einen kleinen Vorschlag zum version-Befehl, mit dem man durch Angabe von "noheader" beim Aufruf die Ausgabe der Überschrift samt der ihr folgenden Leerzeile unterdrücken kann. Damit kann man eine einfach zu parsende Rückgabe als Ergebnis von CommandVersion() bekommen.


Index: 98_version.pm
===================================================================
--- 98_version.pm (Revision 10655)
+++ 98_version.pm (Arbeitskopie)
@@ -16,6 +16,8 @@
{
   my ($cl, $param) = @_;

+  my $noheader = ($param =~ s/ *noheader//);
+
   my @ret;
   my $max = 0;
   my $modpath = (exists($attr{global}{modpath}) ? $attr{global}{modpath} : "");
@@ -55,7 +57,9 @@
   @ret = map {/\$Id\: (\S+) (\S+) (.+?) \$/ ? sprintf("%-".$max."s %5d %s",$1,$2,$3) : $_} @ret;
   @ret = sort {version_sortModules($a, $b)} grep {(defined($param) ? $_ =~ /$param/ : 1)} @ret;
   return "no loaded modules found that match: $param" if($param && !@ret);
-  return sprintf("%-".$max."s %s","File","Rev   Last Change\n\n").
+
+  my $header = $noheader ? "" : sprintf("%-".$max."s %s","File","Rev   Last Change\n\n");
+  return $header.
          trim(join("\n",  grep (($_ =~ /^fhem.pl|\d\d_/), @ret))."\n\n".
               join("\n",  grep (($_ !~ /^fhem.pl|\d\d_/), @ret))
              );


Wenn das so eingebaut wird, kommt mein nächster Patch (für 98_fheminfo.pm), mit dem man folgende Ausgabe bekommt:

(http://up.picr.de/24426358so.png)
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: Markus Bloch am 29 Januar 2016, 17:12:16
Hallo Udo,

hab deinen Patch leicht verändert eingecheckt. Der optionale Parameter "noheader" darf nur am Ende stehen. In deinem Fall kann man nun folgenden Aufruf durchführen:

fhem> version fhem.pl noheader
fhem.pl 10639 2016-01-26 07:27:14Z rudolfkoenig
fhem>


Hab das ganze samt Doku-Ergänzung eingecheckt.

Wollte dich eh schonmal fragen, wie es mit fheminfo ausschaut? Wegen dem Datenbankformat und der Änderung zur Aufnahme der einzelnen Models pro Modul.

Gruß
Markus
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: betateilchen am 28 Februar 2017, 17:31:57
Hallo Markus,

wenn Du mal Zeit hast: könnte man die Ausgabe von version dahingehend erweitern, dass man auch die von FHEMWEB geladenen js-Dateien mit anzeigt, die eine $Id$ besitzen? Und bitte nur die mit einer Id.

Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: Markus Bloch am 28 Februar 2017, 18:26:43
Daran hatte ich auch schon gedacht. Werde ich bei Gelegenheit angehen.

Gruß
Markus
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: betateilchen am 28 Februar 2017, 18:27:26
Bin da draufgekommen, weil die heute morgen in SVN eingecheckte Version von fhemweb.js kaputt ist  und ich lange gebraucht habe, um festzustellen, woran es lag 8)
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: Markus Bloch am 01 März 2017, 21:08:29
Hallo Udo,

ich habe mir mal @FW_fhemwebjs angeschaut. Es enthält eine statische Liste aller Dateien die auf fhemweb*.js passen. Also:


$VAR1 = [
          'fhemweb.js',
          'fhemweb_colorpicker.js',
          'fhemweb_fbcalllist.js',
          'fhemweb_knob.js',
          'fhemweb_readingsGroup.js',
          'fhemweb_readingsHistory.js',
          'fhemweb_sortable.js',
          'fhemweb_uzsu.js',
          'fhemweb_weekprofile.js'
        ];


Im Rahmen von der Funktion FW_answerCall() wird %jsNeg und @jsList erzeugt basierend auf @FW_fhemwebjs, sowie dem Attribut JavaScripts. Damit wird die tatsächlich verwendete JS-Liste bei jeder HTTP-Antwort frisch erzeugt und steht so nicht global zur Verfügung um bspw. in version darauf zugreifen zu können. Man kann also nicht die tatsächlich verwendeten JS-Dateien in version ermitteln, weswegen ich das einlesen aller *.js-Dateien in "$FW_dir/pgm2" bevorzuge um alle JS-Dateien zu berücksichtigen die $Id$ gesetzt haben.

Ein beispielhaftes "version .js" sieht bei mir damit so aus:

File                       Rev   Last Change

fhemweb.js                 13392 2017-02-11 18:32:13Z rudolfkoenig
fhemweb_colorpicker.js     13107 2017-01-16 13:14:31Z justme1968
fhemweb_fbcalllist.js       9346 2015-10-02 19:30:04Z markusbloch
fhemweb_readingsGroup.js   13107 2017-01-16 13:14:31Z justme1968
fhemweb_readingsHistory.js 13107 2017-01-16 13:14:31Z justme1968
fhemweb_sortable.js        11261 2016-04-17 09:36:23Z markusbloch
fhemweb_uzsu.js            13107 2017-01-16 13:14:31Z justme1968
fhemweb_weekprofile.js     13277 2017-01-29 18:38:12Z Risiko
sorttable.js               13106 2017-01-16 13:12:53Z justme1968


Würde man alle JS-Dateien anzeigen (auch die, ohne $Id$) so sieht die Ausgabe für den selben Befehl folgendermaßen aus:

File                       Rev   Last Change

No Id found for alarm.js
No Id found for console.js
No Id found for dashboard.js
No Id found for fhemdoc_modular.js
fhemweb.js                 13392 2017-02-11 18:32:13Z rudolfkoenig
fhemweb_colorpicker.js     13107 2017-01-16 13:14:31Z justme1968
fhemweb_fbcalllist.js       9346 2015-10-02 19:30:04Z markusbloch
No Id found for fhemweb_knob.js
fhemweb_readingsGroup.js   13107 2017-01-16 13:14:31Z justme1968
fhemweb_readingsHistory.js 13107 2017-01-16 13:14:31Z justme1968
fhemweb_sortable.js        11261 2016-04-17 09:36:23Z markusbloch
fhemweb_uzsu.js            13107 2017-01-16 13:14:31Z justme1968
fhemweb_weekprofile.js     13277 2017-01-29 18:38:12Z Risiko
No Id found for floorplan_click.js
No Id found for floorplan_drag.js
No Id found for ios6.js
No Id found for jquery-ui.min.js
No Id found for jquery.knob.min.js
No Id found for jquery.min.js
No Id found for jquery.vticker.min.js
No Id found for RSS.js
sorttable.js               13106 2017-01-16 13:12:53Z justme1968
No Id found for svg.js
No Id found for zwave_neighborlist.js


Da das mir durchaus zu viel ist, bin ich ebenfalls für das ausblenden von JS-Dateien ohne $Id$.

Was meinst Du?

Gruß
Markus
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: betateilchen am 02 März 2017, 09:37:59
Gefällt mir nicht. Da wird viel zuviel angezeigt, was im Fehlerfall nicht intererssiert.

In 55_InfoPanel.pm habe ich etwas ähnliches gebaut, nämlich dass für das InfoPanel selbst bestimmte .js Dateien eingebunden werden, wenn sie in der FHEMWEB Instanz vorhanden sind.


sub btIP_getScript {
  my ($name) = shift;
  return "" if AttrVal($name,'noscript',0);

  my $scripts= "";
  my $jsTemplate = '<script type="text/javascript" src="%s"></script>';
  if(defined($data{FWEXT})) {
    foreach my $k (sort keys %{$data{FWEXT}}) {
      my $h = $data{FWEXT}{$k};
      next if($h !~ m/HASH/ || !$h->{SCRIPT});
      my $script = $h->{SCRIPT};
         $script = ($script =~ m,^/,) ? "$FW_ME$script" : "$FW_ME/pgm2/$script" unless ($script =~ m,^http,);
      $scripts .= sprintf($jsTemplate, $script);
    }
  }
#  $scripts .= sprintf($jsTemplate,"/fhem/pgm2/cordova-2.3.0.js");
#  $scripts .= sprintf($jsTemplate,"/fhem/pgm2/webviewcontrol.js");
  $scripts .= sprintf($jsTemplate,"/fhem/pgm2/fhemweb.js");
  $scripts =~ s/script>/script>\n/g;
  return $scripts;
}
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: rudolfkoenig am 02 März 2017, 10:50:48
Ich habe meine .js Dateien mit "// $Id:$" versehen.

Weiterhin habe ich in fhemweb.js die Variable version entfernt, samt Ausgabe, da sie mich mit fhemweb_uzsu.js verwirrt hat: andre hat version auch in seinen .js Dateien definiert, und die Letzte hat gewonnen.

Ich bin dafuer, dass der FHEM-Befehl version auch die .js Dateien mit $Id anzeigt (via Option?), das ist aber eine Meinung und kein Befehl :)
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: betateilchen am 02 März 2017, 11:11:49
Zitat von: rudolfkoenig am 02 März 2017, 10:50:48
Ich bin dafuer, dass der FHEM-Befehl version auch die .js Dateien mit $Id anzeigt

Da sind wir uns ja einig. Aber bitte nur die, die auch in Verwendung sind.
Es werden schließlich auch nur die Module angezeigt, die geladen sind.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: rudolfkoenig am 02 März 2017, 11:30:40
ZitatAber bitte nur die, die auch in Verwendung sind.
Das ist leider nicht trivial. Selbst wenn FHEMWEB die "selbst eingebauten" .js per Variable zur Verfuegung stellt, koennen andere Module (wie z.Bsp. ZWDongle) was nachladen.

Vorschlag: wen man "version" im Browser eintippt, dann wird version mit einer Liste von .js Dateien aufgerufen, und diese werden zusaetzlich nach $Id durchgesucht. Nachteil: FTUI oder vgl. wird damit nicht abgedeckt.

Titel: [98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: justme1968 am 02 März 2017, 11:44:01
die version variable sollte eigentlich jeweils file lokal sein. seltsam... arg... zu viel c gedacht. geht mit js natürlich so nicht. alles was nicht local in einer funktion ist wird global...

ich ändere es auch auf //.

die // variante kommt nur eider nicht mehr per js code an die version sondern nur noch per parsen des files. damit kann man alte versionen im browser cache nicht mehr identifizieren.

vorschlag zur anzeige: wie wäre es wenn man tatsächlich im jeweils aktuellen browser fenster nachfragt und die version der tatsächlich per loadscript geladenen js files dort abholt? d.h. das version kommando müsste über $hash->{CL} mit fhemweb.js kommunizieren. das sollte aber möglich sein.

ftui ist sowieso außen vor da man dort das version kommando nicht verwenden kann und auch überhaupt kein fhemweb js code geladen wird.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: rudolfkoenig am 02 März 2017, 11:58:21
Zitatvorschlag zur anzeige:
Ist ungefaehr das, was ich vorgeschlagen habe, nur andersherum. Mein Vorschlag waere in version.pm einfacher zu implementieren, und ist ungefaehrlicher, wenn deine Aussage zu FTUI stimmt, da FTUI auch ueber FHEMWEB mit FHEM kommuniziert.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: rudolfkoenig am 02 März 2017, 12:05:48
Zitatdamit kann man alte versionen im browser cache nicht mehr identifizieren.
Das ist ein valider Punkt, und spricht dafuer, dass man $Id:$ irgendwo sammelt.

Nochn Vorschlag: es gibt ein "var FW_version = {};" in fhemweb.js, und da schreibt jedes Modul beim Laden sich rein mit
FW_version["fhemweb.js"] = "$Id:$";

Wenn man in FHEMWEB "version" eingibt, dann wird das zusaetzlich ausgegeben. version.pm muss nicht modifiziert werden. Alle anderen Frontends muessen diese Funktionalitaet selbst implementieren.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: justme1968 am 02 März 2017, 12:12:33
klingt gut.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: betateilchen am 02 März 2017, 12:26:30
Sehr gute Alternative.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: rudolfkoenig am 02 März 2017, 13:44:23
Habs eingebaut, die Ausgabe kommt als Dialog.

Beim Testen mit fhem.cfg.demo ist mir eine Warnung ueber den Weg gelaufen, das wollte ich Markus nicht vorenthalten :)
2017.03.02 13:34:52.894 1: PERL WARNING: Use of uninitialized value $fn in pattern match (m//) at ./FHEM/98_version.pm line 32.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: betateilchen am 03 März 2017, 10:32:51
Funktionieren tut das ja, aber schön aussehen tut das (das=der Bereich mit den js-Dateien) nicht...
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: justme1968 am 03 März 2017, 18:01:59
wenn man in fhemweb.js aus der 18 eine 27 oder 29 macht schaut es schon mal aufgeräumter aus.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: rudolfkoenig am 03 März 2017, 19:32:25
Ich habe es mit 26 eingecheckt.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: betateilchen am 03 März 2017, 19:47:19
Die Bekanntgabe der Lottozahlen erfolgte ohne Gewähr.  8)
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: Markus Bloch am 04 März 2017, 14:00:04
Hallo zusammen,

ich bin aktuell viel unterwegs und komme nur selten zum lesen und noch seltener zum schreiben, daher erst jetzt meine Antwort.

Zitat von: rudolfkoenig am 02 März 2017, 13:44:23
Beim Testen mit fhem.cfg.demo ist mir eine Warnung ueber den Weg gelaufen, das wollte ich Markus nicht vorenthalten :)
2017.03.02 13:34:52.894 1: PERL WARNING: Use of uninitialized value $fn in pattern match (m//) at ./FHEM/98_version.pm line 32.


Was genau hast Du denn eingegeben? Kann ich erst ab Montag fixen, wenn ich wieder zurück bin.

Allgemeine Anmerkung zu der aktuellen Umsetzung. So wie es aktuell in fhemweb.js implementiert ist, sieht man nur die geladenen JS-Dateien die beim Aufruf des entsprechenden version-Befehls durch FHEMWEB ausgeliefert werden und sich in FW_version registriert haben. Man sieht damit nicht JS-Dateien die per FWEXT-SCRIPT für bestimmte Module gesetzt sind (Dashboard, Floorplan, ...), als auch bspw. console.js für den Event-Monitor. Solche JS-Dateien werden natürlich nicht beim Ausführen eines FHEM-Befehls geladen, sondern nur auf den entsprechenden URL's. Damit sieht man nur die Dateien die also ohnehin immer geladen werden. Oder sehe ich das falsch?

Zitat von: rudolfkoenig am 02 März 2017, 13:44:23
Habs eingebaut, die Ausgabe kommt als Dialog.

Ich würde es begrüßen, wenn man die aktuelle Implementierung aus fhemweb.js herauslösen kann und einen generischen Weg in fhemweb.js anbietet um sich als Hook auf die Befehlszeile zu hängen. Damit kann ich den JS-Anteil für version in einem separaten JS ebenfalls maintainen. So ist es wieder eine Insellösung in fhemweb.js mMn. Bestes Beispiel ist die Ausgabeformatierung.

Gruß
Markus

Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: rudolfkoenig am 04 März 2017, 14:31:52
ZitatMan sieht damit nicht JS-Dateien die per FWEXT-SCRIPT für bestimmte Module gesetzt sind
Falls diese JS-Dateien das angebotene Hook (FW_version) verwenden, dann sieht man sie auch.

@Markus: ich bin offen fuer eine Alternative, ich habe aber weder das von Dir beschriebene Problem verstanden, noch deine Loesung dafuer, deswegen will ich nicht anfangen zu basteln.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: Markus Bloch am 04 März 2017, 14:52:00
Hat sich schon erledigt. Habe gerade mal etwas rumprobiert und festgestellt, dass bei der Eingabe von "version" die auf der aktuellen Seite aktiven JS-Versionen angezeigt werden. Da es sich ja um ein Popup handelt.
Titel: Antw:[98_version.pm] patch für optionalen parameter "noheader"
Beitrag von: Markus Bloch am 06 März 2017, 21:46:47
Ich habe die Warnung hoffentlich gefixt. Exakt nachstellen konnte ich den Fall bei mir nicht. Desweiteren habe ich einen Hinweis für die Anzeige der geladenen JS-Dateien in der commandref hinzugefügt.

Gruß
Markus