[patch] 01_FHEMWEB - trigger für FileWrite() aus "Edit files"

Begonnen von betateilchen, 22 Januar 2015, 11:44:03

Vorheriges Thema - Nächstes Thema

betateilchen


Index: 01_FHEMWEB.pm
===================================================================
--- 01_FHEMWEB.pm (Revision 7648)
+++ 01_FHEMWEB.pm (Arbeitskopie)
@@ -1775,6 +1775,7 @@
     }
     my $ret = FW_fC("rereadcfg") if($filePath eq $attr{global}{configfile});
     $ret = FW_fC("reload $fileName") if($fileName =~ m,\.pm$,);
+    DoTrigger("global", "FILEWRITE $filePath", 1) unless $ret;
     $ret = ($ret ? "<h3>ERROR:</h3><b>$ret</b>" :
                 "Saved the file $fileName to $forceType");
     FW_style("style list", $ret);


Damit kann man per NotifyFn() in einem Modul feststellen, ob die zugehörige Konfigurationsdatei per "Edit files" geändert wurde und dann automatisch ein reread der Konfigurationsdatei auslösen. Beispiel: die Layoutdatei von 02_RSS.pm


sub RSS_Notify() {
  my ($hash,$dev) = @_;

  return if($dev->{NAME} ne "global");
  return if(!grep(m/^FILEWRITE $hash->{LAYOUTFILE}$/, @{$dev->{CHANGED}}));

  Log3($hash,4,"RSS: $hash->{NAME} reread layout after edit.");
  undef = RSS_readLayout($hash);
  return undef;
}

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Ich schlage vor, den Trigger direkt aus FileWrite auszuloesen.
Einwaende?

betateilchen

Die Idee hatte ich auch, bin aber davon abgekommen, weil


  • den Trigger finde ich nur in dem Fall sinnvoll, wenn ohnehin im Frontend gearbeitet wird
  • FileWrite() wird an sehr vielen Stellen verwendet, wo ein Trigger niemals gebraucht wird

Bei einer Implementierung direkt in der FileWrite() habe ich irgendwie Bauchschmerzen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Habs in FHEMWEB eingebaucht, obwohl ich was genaueres als "irgendwie Bauchschmerzen" haben wollte.

FileWrite wird z.Zt. noch an zu wenigen Stellen verwendet: FHEMWEB, FB_CALLMONITOR, eventTypes, SVG, setKeyValue(). Theoretisch muesste RSS auch auf .gplot Aenderungen reagieren, oder?

betateilchen

Zitat von: rudolfkoenig am 23 Januar 2015, 11:50:59
Habs in FHEMWEB eingebaucht

Eingebaucht finde ich cool  8)

Danke für die Änderung. Wenn ich etwas genaueres als "Bauchschmerzen" hätte schreiben können, hätte ich das sicher getan. Und wenn sich wirklich eine Notwendigkeit ergibt, den Trigger zu zentralisieren, dürfte es ja kein großes Problem sein, diese eine Codezeile zu verschieben.

RSS muss nicht auf Änderungen in gplot Dateien reagieren, denn RSS bindet ja immer nur den "fertigen" plot ein und an dieser Stelle der Layoutdefinition ändert sich für RSS nichts bei einer gplot-Änderung. Spätestens beim nächsten RSS-refresh (default=60 Sekunden) ist dann auch der aktualiserte plot im RSS.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!