FHEM - Schutz der Konfigurationsdatei fhem.cfg möglich, wenn kein autocreate erwünscht ?

1,554 views
Skip to first unread message

MichaS

unread,
May 24, 2012, 8:54:51 AM5/24/12
to fhem-...@googlegroups.com
Hallo FHEM Gemeinde,

leider habe ich wieder das Problem, das meine doch schon recht umfängliche fhem.cfg nach dem Ereignis fhem.save inhaltlich verändert wird. Da sind dann Leerzeilen drin oder die (meine...) Formatierung durcheinander, oder alle Timer am Ende der Liste aufgeführt. Das macht dann das weitere Bearbeiten und Auffinden im Coding immer wieder schwierig. Die Funktion autocreate möchte ich auch nicht nutzen (zumindest nicht mit meiner produktiven fhem.cfg).
Das Ereignis fhem.save nutze ich momentan, um alle 15min den Status aller Devices für ein Statusdisplay in einer Datei zu haben (sicher auch anders möglich, war aber das einfachste.

Deshalb meine Frage: Könnte man ein globales Attribut einführen, was ein Ändern der fhem.cfg verhindert - wenn autocreate nicht erwünscht ist. Was schreibt/prüft/verändert eigentlich der fhem.save Prozess überhaupt. Ich finde die Config sollte immer einen festgeschriebenen Stand haben.

Gruß
Micha

Rudolf Koenig

unread,
May 24, 2012, 9:16:54 AM5/24/12
to fhem-...@googlegroups.com
> Deshalb meine Frage: K�nnte man ein globales Attribut einf�hren, was ein
> �ndern der fhem.cfg verhindert

Ungern (== nein). Man kann das "Problem" loesen, indem man save bzw. autocreate
mit der save Attribut nicht verwendet. Fuer unmuendige fhem-Benutzer kann man
Save-Knopf/Kommandozeile in FHEMWEB ausblenden.

Frei nach dem Motto: man muss die Fenster nicht vernageln, es reicht wenn man
nicht rausspringt.

> Was schreibt/pr�ft/ver�ndert eigentlich der fhem.save Prozess �berhaupt.

fhem.cfg bzw. alle includes
fhem.state

Ruebezahl

unread,
May 24, 2012, 9:27:32 AM5/24/12
to fhem-...@googlegroups.com
Hallo,

vielleicht würde es helfen die fhem.cfg mittels include aufzuteilen. Ich habe für jeden Raum eine eigene include-Datei in einem Unterverzeichnis und in der fhem.cfg stehen nur die globals und dann die include Anweisungen.
Die include-Dateien werden nach meinen Beobachtungen bei einem Save nicht angetastet.

R.

MichaS

unread,
May 24, 2012, 10:11:09 AM5/24/12
to fhem-...@googlegroups.com
Hallo zusammen,

wird nicht auch beim shutdown restart das Ereignis fhem.save ausgelöst um die aktuellen Werte zu speichern ? Ansonsten arbeite ich eigentlich gerne mit einem externen Editor (im Windows mit Notepad++) an der fhem.cfg, daher brauche ich den save Knopf eigentlich nicht.
Die Lösung mit den include Dateien hatte ich auch schon in Betrieb, aber irgendwann waren dann wieder von allein die Datei-Verweise aus der fhem.cfg raus und einige Timer wieder drin und somit wieder alles durcheinander.
Wie gesagt, löse ich alle 15min ein fhem.save per Timer aus, um eine Datei mit den Werten zur Weiterverarbeitung zu haben - das macht die Sache dadurch nicht besser. Wenn es eine elegantere Methode zur Überführung der States in eine Datei ala fhem.save gibt - Tips werden gerne angenommen.

Gruß
Micha

Ruebezahl

unread,
May 24, 2012, 10:36:29 AM5/24/12
to fhem-...@googlegroups.com
Also mit den include Einträgen hatte ich noch nie Probleme, es sei denn, das Filesystem hatte den Zugriff beschränkt, was bei einem Upgrade auf eine neue OS-Version mal vorgekommen ist.

Vielleicht würde dir jsonlist da helfen, so als commandline direkt an fhem gesendet via cron???

fhem> jsonlist CUL_HM
{
  "ResultSet": "devices#CUL_HM",
  "Results": [
    {
      "name": "BD_Lampen_Decke",
      "state": "off"
    },
    {
      "name": "BD_Luefter_Decke",
      "state": "off"
    },
    {
      "name": "BD_Taster_Tuer",
      "state": "Btn1 on (to broadcast)"
    },

Rudolf Koenig

unread,
May 24, 2012, 10:49:02 AM5/24/12
to fhem-...@googlegroups.com
> wird nicht auch beim shutdown restart das Ereignis fhem.save ausgel�st um
> die aktuellen Werte zu speichern ?

Nein.

Beim shutdown wird nur die fhem.state Datei geschrieben, aber sicher nicht
fhem.cfg. Sonst koennte man save auch sparen.

MichaS

unread,
May 24, 2012, 11:44:23 AM5/24/12
to fhem-...@googlegroups.com
Hallo Rudi,

ich habe da evtl. was durcheinander gebracht: 

Meine Datei für Speicherung der States ist: attr global statefile /var/InternerSpeicher/fhem/log/fhem.save und bei Dir heisst sie fhem.state . Ich war immer der Meinung, ein {fhem "save"} schreibt mir nur die States Datei neu und die heisst bei mir eben fhem.save

Von Dir programmiert soll ein "save" also eigentlich die fhem.cfg sichern (..+ überarbeiten) und nur im Anschluss wohl die States Datei auch mit.

Da ich gerne eine einzeilige States Datei zum Weiterbearbeiten haben möchte, wären die Ausgabeformate jsonlist oder xmllist nicht so optimal geeignet.

Deshalb die Frage: Gibt es einen fhem Befehl zum Sichern der fhem.state Datei in z.b. einem Timer ??

Gruß
Micha

Ruebezahl

unread,
May 25, 2012, 2:11:41 AM5/25/12
to fhem-...@googlegroups.com
Also ich könnte mir da auf die Schnelle nur so ein Workaround mittels einem Perl 1zeiler vorstellen

so etwas in etwa wie

define myreport notify myreport {open(REPORT, ">", "/tmp/report.txt");;my @@mdev=devspec2array("TYPE=CUL_HM");;foreach(@@mdev){my $state= Value($_);;print REPORT "$_ $state\n";;}close REPORT;;}

define myreport_timer at *+00:15:00 trigger myreport


sollte in /tmp/report.txt jeweils immer einzeilig den aktuellen Status der CUL_HM devices schreiben

R.

MichaS

unread,
May 25, 2012, 2:52:39 AM5/25/12
to fhem-...@googlegroups.com
Hallo Ruebezahl,

vielen Dank für das Perl Scripting, das werde ich heute abend gleich mal ausprobieren. Ich hoffe das funktioniert auch in meiner Fritzbox 7390 Busybox Umgebung :-)

Ich habe mir gestern noch einen "Workaround" gebaut. Habe in der commandref gesehen, das der Befehl "save"  noch mit dem Parameter [<configfile>] zur Angabe einer alternativen Konfig-Datei ausgestattet ist. Also jetzt im Timer alle 15min den Befehl "save fhemdummy.cfg" abgesetzt und er schreibt mir brav die fhem.save(fhem.state) und die fhemdummy.cfg - meine produktive fhem.cfg wird dann in Ruhe gelassen ...

@ Rudi: wenn möglich könnte man doch einen neuen Parameter "save statesonly" einbauen, um nur die fhem.save (fhem.state) zu speichern

Gruß
Micha

Rudolf Koenig

unread,
May 25, 2012, 2:52:50 AM5/25/12
to fhem-...@googlegroups.com
On Thu, May 24, 2012 at 11:11:41PM -0700, Ruebezahl wrote:
> Also ich k�nnte mir da auf die Schnelle nur so ein Workaround mittels einem
> Perl 1zeiler vorstellen

Etwas kuerzer (aber unflexibler) ist

{ WriteStateFile() }

MichaS

unread,
May 25, 2012, 3:13:19 PM5/25/12
to fhem-...@googlegroups.com
Hallo,

@Ruebezahl
Habe das Coding bei mir angepasst (Fritzbox 7390) und es funktioniert einwandfrei - Danke !!

define myreport notify myreport {open(REPORT, ">", "/var/InternerSpeicher/fhem/report.txt");;my @@mdev=devspec2array("TYPE=FS20");;foreach(@@mdev){my $state= Value($_);;print REPORT "$_ $state\n";;}close REPORT;;}
define myreport_timer at +*00:15:00 trigger myreport

@Rudi
wie setze ich { WriteStateFile() } in FHEM ein, damit ich es in einem Timer einbauen kann. Direkt in der Kommandozeile eingesetzt bringt es einen Fehler. Wie findest Du meinen Vorschlag einen neuen Parameter "statesonly" für save einzubauen, der dann nur { WriteStateFile() } auslöst ?

Gruß
Micha

Rudolf Koenig

unread,
May 27, 2012, 3:46:41 AM5/27/12
to fhem-...@googlegroups.com
> wie setze ich { WriteStateFile() } in FHEM ein, damit ich es in einem Timer
> einbauen kann. Direkt in der Kommandozeile eingesetzt bringt es einen
> Fehler.

Sorry, hab mich vertippt, heisst WriteStatefile:
at periodicStateSave at +*01:00 { WriteStatefile() }


> Wie findest Du meinen Vorschlag einen neuen Parameter "statesonly"
> f�r save einzubauen, der dann nur { WriteStateFile() } ausl�st ?

Nicht intuitiv. Weiterhin will ich keine Prozesskommunikation ueber Dateien
foerdern, dafuer gibt es bessere Mechanismen.

MichaS

unread,
May 30, 2012, 10:17:43 AM5/30/12
to fhem-...@googlegroups.com
Hallo zusammen,

ich habe die Doku für mein FHEM-Wiki Statusdisplay an der FB7390 entsprechend den Hinweisen von Rudi und als Alternativlösung von Ruebezahl angepasst.

Vielen Dank Euch beiden !!

Gruß
Micha

kossmann

unread,
Dec 18, 2012, 6:59:07 AM12/18/12
to fhem-...@googlegroups.com
Hallo Ruldolf,

wie geht dies denn am einfachsten? Die Kommandozeile würde ich gerne haben, den Save-Button aber nicht. Den drücke ich gelegentlich, da ich "denke", es sein ein "Eingabe/OK" Button und danach sieht meine fhem.cfg aus wie Sau.

In den Sourcen möchte ich dies nicht manuell auskommentieren, da dies beim nächsten Update zur Recht wieder überschrieben wird. In der CommandRef habe ich unter FHEMWEB allerdings keinen Parameter gefunden, welcher sich dazu eignet (kann aber auch wieder mal an mir liegen). ;-)

kossmann

unread,
Dec 18, 2012, 6:59:43 AM12/18/12
to fhem-...@googlegroups.com
Habe dich gerade umbenannt - Sorry, meinte natürlich Rudolf ;-)

kossmann

unread,
Dec 18, 2012, 7:02:47 AM12/18/12
to fhem-...@googlegroups.com
Vielleicht sollte ich doch mal 2 Minuten länger suchen, statt direkt zu fragen...

attr <Device> hiddenroom save

Hat sich also erledigt.
Reply all
Reply to author
Forward
0 new messages