HM Devices nach Schliessen der Linux Konsole verschwunden

Begonnen von tobi73, 09 Januar 2013, 00:15:30

Vorheriges Thema - Nächstes Thema

tobi73

Hallo Rudi, hallo Experten!

Erst mal ein ,,gutes Neues" und Glückwunsch zum neuen Forum - gefällt mir sehr! Und jetzt gleich zu einem Problem, das ich mit FHEM seit dem letzten Update habe (fhem.pl 1764 -> 2442)

Immer, wenn ich FHEM über die Linux Konsole starte und diese dann schließe, gehen alle definierten Homematic Devices verloren. Um das Problem(?) einzugrenzen habe ich ein bisschen rumexperimentiert:

Offensichtlich scheint dies zu passieren, wenn HUP Signal an den fhem Prozess gesendet wird. HUP veranlasst, wenn ich es in fhem.pl richtig sehe, das Neu-Laden der Konfiguration (rereadCfg).
RereadCfg löscht alle Defs und liest dann das cfg-File neu ein. Also hab ich da mal etwas debuggt und geloggt - s. unten. Mit dem Lesen des cfg-Files sollten dann auch alle HM Devices wieder neu erstellt werden. Und genau das scheint nicht zu klappen, weil FHEM behauptet, die HMid sei schon vergeben.

BTW, ich hatte dieses Phänomen, dass sich vermeintlich gelöschte HM Defs nicht wieder anlegen lassen, auch schon mal sporadisch beim manuellen Löschen und wieder-Anlegen über das pgm2 Kommandofenster. Leider war das aber nicht reproduzierbar.

Unten habe ich das ganze in einer Minimalkonfiguration mit einem einzigen HM Gerät (WZ_SD1) nachgestellt und die cfg-File und Logs (verbose5) angehängt und kommentiert. Vielleicht könnt Ihr Euch das mal ansehen  ich komme leider nicht weiter. Möglich wäre natürlich, fhem immer über pgm2 per ,,shutdown restart" zu starten oder im Code HUP zu ignorieren - ist aber beides mE keine saubere Lösung.

Vielen Dank schon mal für Eure Hilfe! Falls mehr  Logs oder Traces oder weiter Infos benötigt werden, bitte meldet Euch!
Gruß Tobias


Konfiguration (Auszüge)

attr global autoload_undefined_devices 1
attr global logfile /opt/fhem/log/fhem-%Y-%m.log
attr global modpath /opt/fhem

define WEB FHEMWEB 8083 global
...

define autocreate autocreate
attr autocreate autosave 1
attr autocreate device_room %TYPE
attr autocreate filelog /opt/fhem/log/%NAME-%Y.log
attr autocreate weblink 1
attr autocreate weblink_room Plots

define HMLAN1 HMLAN 192.168.1.88
attr HMLAN1 fp_UG 580,960,1,
attr HMLAN1 hmId 7DE3B7
attr HMLAN1 hmProtocolEvents 1

define telnetPort telnet 7072 global

define WZ_SD1 CUL_HM 1A33B1
attr WZ_SD1 devInfo 010100
attr WZ_SD1 firmware 1.9
attr WZ_SD1 hmClass receiver
attr WZ_SD1 model HM-LC-SW1-PL
attr WZ_SD1 serialNr JEQ0036741
attr WZ_SD1 subType switch
define FileLog_WZ_SD1 FileLog /opt/fhem/log/WZ_SD1-%Y.log WZ_SD1
attr FileLog_WZ_SD1 logtype text
attr FileLog_WZ_SD1 room Logfiles


Logfile (Auszüge)

 #Hier geht's los, nachdem das Konsolen Fenster geschlossen wurde
  #Anm: Der Log ,,Geloescht" wurde im Code von mir aufgenommen.


2013.01.08 23:43:10 1: Geloescht wird FHEMWEB:192.168.1.80:50554
2013.01.08 23:43:10 1: Geloescht wird FHEMWEB:192.168.1.80:50553
2013.01.08 23:43:10 1: Geloescht wird FHEMWEB:192.168.1.80:50552
2013.01.08 23:43:10 1: Geloescht wird FHEMWEB:192.168.1.80:50551
2013.01.08 23:43:10 1: Geloescht wird FileLog_WZ_SD1
2013.01.08 23:43:10 1: Geloescht wird WZ_SD1
2013.01.08 23:43:10 1: Geloescht wird telnetPort
2013.01.08 23:43:10 1: Geloescht wird HMLAN1
2013.01.08 23:43:10 1: Geloescht wird autocreate
2013.01.08 23:43:10 1: Geloescht wird Logfile
2013.01.08 23:43:10 1: Geloescht wird WEB
2013.01.08 23:43:10 1: Geloescht wird global  
 # >> Heisst, das Löschen der Defs (Insbesondere des ,,WZ_SD1" ist erfolgt, zumindest ist das ,,UndefFn" ohne Murren durchgelaufen....
 
  # So, und jetzt also wieder die cfg neu laden:

2013.01.08 23:43:20 1: Including /etc/fhem.cfg
2013.01.08 23:43:20 5: Cmd: >attr global autoload_undefined_devices 1<
2013.01.08 23:43:20 5: Cmd: >attr global logfile /opt/fhem/log/fhem-%Y-%m.log<
2013.01.08 23:43:20 5: Cmd: >attr global modpath /opt/fhem<
2013.01.08 23:43:20 5: Loading /opt/fhem/FHEM/99_myUtils.pm
2013.01.08 23:43:20 5: Cmd: >attr global motd SecurityCheck:\
\
telnetPort has no password/globalpassword attribute.\
Running with root privileges.\
Restart fhem for a new check if the problem is fixed,\
or set the global attribute motd to none to supress this message.\
<
2013.01.08 23:43:20 5: Cmd: >attr global statefile /opt/fhem/log/fhem.save<
2013.01.08 23:43:20 5: Cmd: >attr global userattr Alarmgruppe Alarmgruppe_map devStateIcon fp_EG fp_UG icon structexclude webCmd<
2013.01.08 23:43:20 5: Cmd: >attr global verbose 5<
2013.01.08 23:43:20 5: Cmd: >define WEB FHEMWEB 8083 global<
2013.01.08 23:43:20 4: FHEMWEB directories:
2013.01.08 23:43:20 4:   web server root: /opt/fhem/www
2013.01.08 23:43:20 4:   icon directory: /opt/fhem/www/images
2013.01.08 23:43:20 4:     Notice: if style-specific subdirectories /opt/fhem/www/images/default etc. exist, icons are only read from there and not from /opt/fhem/www/images!
2013.01.08 23:43:20 4:   doc directory: /opt/fhem/docs
2013.01.08 23:43:20 4:   css directory: /opt/fhem/www/pgm2
2013.01.08 23:43:20 4:   gplot directory: /opt/fhem/www/gplot
2013.01.08 23:43:20 4:   javascript directory: /opt/fhem/www/pgm2

...
 # Hier jetzt die ganzen WEB und Icon-Definitionen  hier jetzt unwichtig
...

2013.01.08 23:43:20 5: Triggering global (1 changes)
2013.01.08 23:43:20 5: Notify loop for global DEFINED telnetPort

  # So, jetzt versucht fhem das HM Device neu zu definieren:
2013.01.08 23:43:20 5: Cmd: >define WZ_SD1 CUL_HM 1A33B1<
2013.01.08 23:43:20 1: define: HMid DEF already used by WZ_SD1

 #... und scheitert, weil es angeblich noch definiert ist !?!

  # Und da es doch nicht definiert ist, können natürlich auch keine Attribute gesetzt werden :

2013.01.08 23:43:20 5: Cmd: >attr WZ_SD1 devInfo 010100<
2013.01.08 23:43:20 3: Please define WZ_SD1 first
2013.01.08 23:43:20 5: Cmd: >attr WZ_SD1 firmware 1.9<
2013.01.08 23:43:20 3: Please define WZ_SD1 first
2013.01.08 23:43:20 5: Cmd: >attr WZ_SD1 hmClass receiver<
2013.01.08 23:43:20 3: Please define WZ_SD1 first
2013.01.08 23:43:20 5: Cmd: >attr WZ_SD1 model HM-LC-SW1-PL<
2013.01.08 23:43:20 3: Please define WZ_SD1 first
2013.01.08 23:43:20 5: Cmd: >attr WZ_SD1 serialNr JEQ0036741<
2013.01.08 23:43:20 3: Please define WZ_SD1 first
2013.01.08 23:43:20 5: Cmd: >attr WZ_SD1 subType switch<
2013.01.08 23:43:20 3: Please define WZ_SD1 first


2013.01.08 23:43:20 5: Cmd: >define FileLog_WZ_SD1 FileLog /opt/fhem/log/WZ_SD1-%Y.log WZ_SD1<
2013.01.08 23:43:20 5: Triggering global (1 changes)
2013.01.08 23:43:20 5: Notify loop for global DEFINED FileLog_WZ_SD1
2013.01.08 23:43:20 5: Cmd: >attr FileLog_WZ_SD1 logtype text<
2013.01.08 23:43:20 5: Cmd: >attr FileLog_WZ_SD1 room Logfiles<
2013.01.08 23:43:20 1: Including /opt/fhem/log/fhem.save
...

rudolfkoenig

> 2013.01.08 23:43:20 5: Cmd: >define WZ_SD1 CUL_HM 1A33B1<
> 2013.01.08 23:43:20 1: define: HMid DEF already used by WZ_SD1

Haengt wohl damit zusammen, dass in CUL_HM die Adresse 1A33B1 im $modules{CUL_HM}{defptr} gespeichert ist.
Dieser sollte normalerweise im CUL_HM_Undef (UndefFn des CUL_HM Moduls, aufgerufen von rereadcfg) entfernt.

Leider wird UndefFn seit spaetestens Version 1874 nicht mehr aufgerufen, wenn Rereadcfg "anonym" (wie beim HUP) aufgerufen wird, nur wenn es ueber FHEMWEB oder telnet aufgerufen wurde. Das habe ich jetzt gefixed und eingecheckt.

tobi73

Hi Rudi,

mann, ging das schnell. Vielen Dank!
Ich teste es gleich, soblald ich heute abend zu hause bin...

 Gruß Tobias

tobi73

Hallo!
Habe mit der Version 2459 aus dem svn getestet und funktioniert. Danke nochmals!
Letzte vielleicht dumme (Anfänger)frage dazu: Warum wird beim HUP Signal die Konfig überhaupt neu geladen? Frage rein aus Interesse...

Gruß
Tobias

Rohan

Zitat: " From time to time, you need to tell a program to HUP (Hang UP).  This causes the program to restart and examine its configuration files."
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor