Probleme mit WriteStatefile()

Begonnen von Noname, 21 Oktober 2014, 06:37:43

Vorheriges Thema - Nächstes Thema

Noname

Hallo,

ich habe für eine Zeitsteuerung die Einstellung in at
mit der Funktion modify über den Floorplan einstellbar
konfiguriert. Nach dem verstellen, soll der neue Einstellwert
sofort in das statefile abgespeichert werden, um bei Neustart
von Fhem auch die neu eingestellten werte zu laden.

Leider wird immer wieder nach dem Speichern der Config
bzw. Neustart von Fhem nicht nur der Inhalt von state
, sonder auch ein Teil der Konfiguration in das Statefile geschrieben.
Dieses verursacht dann eine Fehlermeldung bei Neustart
von Fhem. Allerdings passiert diese nicht regelmäßig
sondern sporadisch.

Wer kann weiterhelfen?


Vielen Dank bereits im Voraus



Fehlermeldung Fhem:
Error messages while initializing FHEM:
statefile: FS20_Zentral_Aus_T already defined, delete it first
Unknown command if($value{FS20_Status}, try help.
Unknown command }, try help.
FS20_Zentral_Ein_T already defined, delete it first
Unknown command if($value{FS20_Status}, try help.
Unknown command }, try help.


Auszug aus statefile:
..
...
setstate FS20_Zeit_Zentral_Aus 01:00
setstate FS20_Zeit_Zentral_Aus 2014-10-05 09:35:17 state 01:00
setstate FS20_Zeit_Zentral_Aus_N active
setstate FS20_Zeit_Zentral_Ein 06:00
setstate FS20_Zeit_Zentral_Ein 2014-07-13 09:27:23 state 06:00
setstate FS20_Zeit_Zentral_Ein_N active
define FS20_Zentral_Aus_T at 01:00 {
if($value{FS20_Status} == 1) {fhem("set Licht_Sued,Licht_Nord,Multimedia,Multimedia_Buero,Licht_Buero off")}
}
setstate FS20_Zentral_Aus_T Next: 01:00:00
define FS20_Zentral_Ein_T at 06:00 {
if($value{FS20_Status} == 1) {fhem("set Multimedia,Multimedia_Buero on")}
}
setstate FS20_Zentral_Ein_T Next: 06:00:00
setstate FileLog_Alarm_History active
setstate FileLog_FB_Anruf_History active
....
..

Auszug aus Config File:
# Strom Ein über Uhrzeit und Status 1, Auto
define FS20_Zentral_Ein_T at *06:00 {\
if($value{FS20_Status} == 1) {fhem("set Multimedia,Multimedia_Buero on")}\
}
attr FS20_Zentral_Ein_T room System

define FS20_Zeit_Zentral_Ein dummy
attr FS20_Zeit_Zentral_Ein fp_03_Einstellung 400,300,2,Strom Ein Täglich um
attr FS20_Zeit_Zentral_Ein room System
attr FS20_Zeit_Zentral_Ein setList state:time
attr FS20_Zeit_Zentral_Ein webCmd state

define FS20_Zeit_Zentral_Ein_N notify FS20_Zeit_Zentral_Ein {\
fhem("modify FS20_Zentral_Ein_T *%");;\
fhem("{WriteStatefile()}")\
}
attr FS20_Zeit_Zentral_Ein_N room System

# Strom Aus über Uhrzeit und Status 1, Auto
define FS20_Zentral_Aus_T at *00:30 {\
if($value{FS20_Status} == 1) {fhem("set Licht_Sued,Licht_Nord,Multimedia,Multimedia_Buero,Licht_Buero off")}\
}
attr FS20_Zentral_Aus_T room System

define FS20_Zeit_Zentral_Aus dummy
attr FS20_Zeit_Zentral_Aus fp_03_Einstellung 400,600,2,Strom Aus Täglich um
attr FS20_Zeit_Zentral_Aus room System
attr FS20_Zeit_Zentral_Aus setList state:time
attr FS20_Zeit_Zentral_Aus webCmd state

define FS20_Zeit_Zentral_Aus_N notify FS20_Zeit_Zentral_Aus {\
fhem("modify FS20_Zentral_Aus_T *%");;\
fhem("{WriteStatefile()}")\
}
attr FS20_Zeit_Zentral_Aus_N room System



betateilchen

WriteStatefile() ist eigentlich nicht dazu gedacht, vom Benutzer direkt aufgerufen zu werden. Die Aufgaben dieser Funktion sind klar umrissen und ausprogrammiert, und dazu gehört auch das Wegschreiben bestimmter Konfigurationszeilen. Wenn Du diese - nicht im "offiziellen" Funktionsumfang dokumentierte - Funktion in eigener Verantwortung einsetzt, musst Du einfach damit rechnen, dass eine solche Funktion IHRE originäre Aufgabe erfüllt und nicht zwangsläufig DEINE Wünsche befriedigt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

1. betateilchen hat mit seinem Kommentar recht.
2. die erwaehnten Meldungen legen zwei Probleme nahe:
2a. FS20_Zentral_Aus_T wird mehrfach definiert. Background-Info: ein at wird im fhem.cfg gespeichert, wenn es wiederkehrend ist (d.h. Definition mit *), und in fhem.state, falls es einmalig ist (ohne *). Falls man das at umstellt, und nur einen der beiden Dateien speichert, dann koennen solche Meldungen ganz natuerlich entstehen. Siehe auch 1.
2b. Die Zeilen in fhem.state sind nicht korrekt, weil mehrzeilige Definitionen nicht mit \ gespeichert sind. Das konnte ich gerade nicht nachvollziehen, gehe also von nachtraeglich manuell geaenderten fhem.state aus.
3. { ... fhem("{WriteStatefile()}") } ist doppelt gemoppelt, { ... WriteStatefile() } reicht.

Hauswart

Wenn ich in der Kommandozeile folgendes eingebe: {WriteStateFile} erscheint:
ZitatBareword "WriteStateFile" not allowed while "strict subs" in use at (eval 207) line 1.

Wo muss ich anfangen, den Fehler zu suchen?  8)
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

herrmannj


Hauswart

Dann erhalte ich:
Undefined subroutine &main::WriteStateFile called at (eval 236) line 1.
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

herrmannj

Kann gerade nicht im Source nachschauen aber oben ist File klein geschrieben

Vg
Joerg

Hauswart

Scheint tatsächlich das Problem gewesen zu sein. Kleines f
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)