FHEM - Schutz der Konfigurationsdatei fhem.cfg mglich, wenn kein autocreate erwnscht ?

Begonnen von MichaS, 24 Mai 2012, 14:54:51

Vorheriges Thema - Nächstes Thema

MichaS

                                                       

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

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> 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

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

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.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

MichaS

                                                       

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

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

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)"
    },

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> 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.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

MichaS

                                                       

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

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

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.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

MichaS

                                                       

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 [] 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

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

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() }

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

MichaS

                                                       

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

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> 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.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

MichaS

                                                       

Hallo zusammen,

ich habe die Doku für mein FHEM-Wiki Statusdisplay an der FB7390<http://fhemwiki.de/wiki/Statusdisplay_Fritzbox_7390>entsprechend den Hinweisen von Rudi und als Alternativlösung von Ruebezahl
angepasst.

Vielen Dank Euch beiden !!

Gruß
Micha

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

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). ;-)

Am Donnerstag, 24. Mai 2012 15:16:54 UTC+2 schrieb Rudolf Koenig:
>
> Fuer unmuendige fhem-Benutzer kann man
> Save-Knopf/Kommandozeile in FHEMWEB ausblenden.
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Habe dich gerade umbenannt - Sorry, meinte natürlich Rudolf ;-)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com