DOIF: PERL WARNING: Use of uninitialized value

Begonnen von alpha1974, 15 April 2015, 08:11:19

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: alpha1974 am 15 April 2015, 19:16:23
Hmmm... ich habe das DOIF-Device gerade mal gelöscht und alle Warnungen sind verschwunden... Mysteriös!

ja, damit ich etwas analysieren kann, musst du es schaffen ein list vom DOIF-Modul zu liefern, wo ein Realtimer nicht belegt ist.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

alpha1974

Herzlichen Dank für Eure Hilfe!!! Ich probiere weiter herum, befürchte aber, dass ich es im laufenden Betrieb nicht nachgestellt bekomme, da die Warnungen nur beim Start von FHEM auftauchen.
FHEM/Z-Wave USB-Dongle + div. Devices

Damian

Zitat von: alpha1974 am 15 April 2015, 20:30:34
Herzlichen Dank für Eure Hilfe!!! Ich probiere weiter herum, befürchte aber, dass ich es im laufenden Betrieb nicht nachgestellt bekomme, da die Warnungen nur beim Start von FHEM auftauchen.

Hast du die fhem.cfg manuell editiert?

Womöglich steht dann die Definition der Dummys hinter dem DOIF-Modul.

Wenn man alles über die Weboberfläche definiert, dann kann so etwas nicht passieren, weil sich DOIF nicht definieren lässt, wenn die Dummys noch nicht existieren.

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

flurin

#18
Zitat von: Damian am 15 April 2015, 21:25:55
Hast du die fhem.cfg manuell editiert?

Womöglich steht dann die Definition der Dummys hinter dem DOIF-Modul.

Wenn man alles über die Weboberfläche definiert, dann kann so etwas nicht passieren, weil sich DOIF nicht definieren lässt, wenn die Dummys noch nicht existieren.

Gruß

Damian

Was jedoch vorkommen kann, ist das ein Dummy nach der Definition vom DOIF fälschlicherweise auf 10 statt 10:00 gesetzt wird.

Gruss
flurin

alpha1974

Die Reihenfolge der Definitionen müsste eigentlich stimmen (sicher bin ich mir nicht). Vielleicht resultiert das Problem daraus, dass "Sonnenaufgang" und "Sonnenuntergang" dynamisch über ein at-Device (sun_riseSet_timer) gesetzt werden. Allerdings sind beide Dummys direkt nach dem FHEM-Start richtig gesetzt.

Hier die einschlägigen Code-Schnipsel auf fhem.cfg:
define WZLampe_Ausschaltzeit_abends dummy
define WZLampe_BeginnReaktionszeit_morgens dummy
define Sonnenaufgang dummy
define Sonnenuntergang dummy
define sun_riseSet_timer at *00:05:00 { my $s = sunrise();; fhem("set Sonnenaufgang $s");; $s = sunset_abs('HORIZON=2',0,"16:00","22:00");; fhem("set Sonnenuntergang $s");; }
define WZ_Helligkeit readingsProxy ZWave_multisensor:luminance
attr WZ_Helligkeit alias Helligkeit (Lux)
attr WZ_Helligkeit fp_FHEMServer 151,191,1,,
attr WZ_Helligkeit group Wohnzimmer-Sensoren
attr WZ_Helligkeit room Wohnzimmer
attr WZ_Helligkeit stateFormat { substr(ReadingsVal("ZWave_multisensor","luminance",0),0,length(ReadingsVal("ZWave_multisensor","luminance",0))-4) }

define di_WZLampe DOIF (([WZ_Helligkeit]<=10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]]) or [[Sonnenuntergang]]) (set ZWave_stehlampe_wz_power on) \
DOELSEIF ([[WZLampe_Ausschaltzeit_abends]] or ([WZ_Helligkeit]>10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]])) (set ZWave_stehlampe_wz_power off)
attr di_WZLampe room Wohnzimmer
FHEM/Z-Wave USB-Dongle + div. Devices

flurin

Zitat von: alpha1974 am 16 April 2015, 09:05:58
Die Reihenfolge der Definitionen müsste eigentlich stimmen (sicher bin ich mir nicht). Vielleicht resultiert das Problem daraus, dass "Sonnenaufgang" und "Sonnenuntergang" dynamisch über ein at-Device (sun_riseSet_timer) gesetzt werden. Allerdings sind beide Dummys direkt nach dem FHEM-Start richtig gesetzt.

Hier die einschlägigen Code-Schnipsel auf fhem.cfg:
define WZLampe_Ausschaltzeit_abends dummy
define WZLampe_BeginnReaktionszeit_morgens dummy
define Sonnenaufgang dummy
define Sonnenuntergang dummy
define sun_riseSet_timer at *00:05:00 { my $s = sunrise();; fhem("set Sonnenaufgang $s");; $s = sunset_abs('HORIZON=2',0,"16:00","22:00");; fhem("set Sonnenuntergang $s");; }
define WZ_Helligkeit readingsProxy ZWave_multisensor:luminance
attr WZ_Helligkeit alias Helligkeit (Lux)
attr WZ_Helligkeit fp_FHEMServer 151,191,1,,
attr WZ_Helligkeit group Wohnzimmer-Sensoren
attr WZ_Helligkeit room Wohnzimmer
attr WZ_Helligkeit stateFormat { substr(ReadingsVal("ZWave_multisensor","luminance",0),0,length(ReadingsVal("ZWave_multisensor","luminance",0))-4) }

define di_WZLampe DOIF (([WZ_Helligkeit]<=10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]]) or [[Sonnenuntergang]]) (set ZWave_stehlampe_wz_power on) \
DOELSEIF ([[WZLampe_Ausschaltzeit_abends]] or ([WZ_Helligkeit]>10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]])) (set ZWave_stehlampe_wz_power off)
attr di_WZLampe room Wohnzimmer


Für einen ähnlichen Anwendungsfall habe ich eine KISS-Lösung:


define di_floorlamp_motion DOIF ([multi_living:luminance:d] < 15 and [multi_living:?open]) \
({myLog("Living: Motion detected")}, set dining_floorlamp on-for-timer 60)
attr di_floorlamp_motion do always


Es wird unabhängig von der Zeit bei luminance < 15 eine Lampe 60 sec lang eingeschaltet.

Gruss
flurin

Damian

Zitat von: alpha1974 am 16 April 2015, 09:05:58
Die Reihenfolge der Definitionen müsste eigentlich stimmen (sicher bin ich mir nicht). Vielleicht resultiert das Problem daraus, dass "Sonnenaufgang" und "Sonnenuntergang" dynamisch über ein at-Device (sun_riseSet_timer) gesetzt werden. Allerdings sind beide Dummys direkt nach dem FHEM-Start richtig gesetzt.

Hier die einschlägigen Code-Schnipsel auf fhem.cfg:
define WZLampe_Ausschaltzeit_abends dummy
define WZLampe_BeginnReaktionszeit_morgens dummy
define Sonnenaufgang dummy
define Sonnenuntergang dummy
define sun_riseSet_timer at *00:05:00 { my $s = sunrise();; fhem("set Sonnenaufgang $s");; $s = sunset_abs('HORIZON=2',0,"16:00","22:00");; fhem("set Sonnenuntergang $s");; }
define WZ_Helligkeit readingsProxy ZWave_multisensor:luminance
attr WZ_Helligkeit alias Helligkeit (Lux)
attr WZ_Helligkeit fp_FHEMServer 151,191,1,,
attr WZ_Helligkeit group Wohnzimmer-Sensoren
attr WZ_Helligkeit room Wohnzimmer
attr WZ_Helligkeit stateFormat { substr(ReadingsVal("ZWave_multisensor","luminance",0),0,length(ReadingsVal("ZWave_multisensor","luminance",0))-4) }

define di_WZLampe DOIF (([WZ_Helligkeit]<=10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]]) or [[Sonnenuntergang]]) (set ZWave_stehlampe_wz_power on) \
DOELSEIF ([[WZLampe_Ausschaltzeit_abends]] or ([WZ_Helligkeit]>10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]])) (set ZWave_stehlampe_wz_power off)
attr di_WZLampe room Wohnzimmer


So richtig kann ich es nicht nachvollziehen. Die Realtimer werden erst beim Hochfahren gesetzt, wenn die Initialisierungsphase abgeschlossen ist und davor können eigentlich keine Trigger kommen, die dazu führen dass die Warnings kommen, weil die Realtimer noch nicht gesetzt wären.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

alpha1974

Zitat von: flurin am 16 April 2015, 10:20:29
Für einen ähnlichen Anwendungsfall habe ich eine KISS-Lösung:


define di_floorlamp_motion DOIF ([multi_living:luminance:d] < 15 and [multi_living:?open]) \
({myLog("Living: Motion detected")}, set dining_floorlamp on-for-timer 60)
attr di_floorlamp_motion do always


Es wird unabhängig von der Zeit bei luminance < 15 eine Lampe 60 sec lang eingeschaltet.

Vielleicht muss ich die Verwendung der Dummy-Devices nochmals überdenken. Mein Anwendungsfall weicht etwas ab: Hier soll jeden Abend nach Sonnenuntergang bis 22:45h die Beleuchtung an sein und tagsüber solange die Helligkeit unter 10 liegt. Hintergrund ist eine simple Anwesenheitssimulation: Wenn es draußen dunkel ist, soll drinnen eine Lampe eingeschaltet sein und zwar - als "Zwangsbeleuchtung" - unabhängig davon, ob der Bewegungsmelder anschlägt.
FHEM/Z-Wave USB-Dongle + div. Devices

alpha1974

Zitat von: Damian am 16 April 2015, 19:13:16
So richtig kann ich es nicht nachvollziehen. Die Realtimer werden erst beim Hochfahren gesetzt, wenn die Initialisierungsphase abgeschlossen ist und davor können eigentlich keine Trigger kommen, die dazu führen dass die Warnings kommen, weil die Realtimer noch nicht gesetzt wären.

Ich habe mal die fhem.cfg angehängt, vielleicht ergibt sich daraus für das geschulte Auge noch etwas Hilfreicheres.
FHEM/Z-Wave USB-Dongle + div. Devices

Damian

Zitat von: alpha1974 am 16 April 2015, 19:58:51
Ich habe mal die fhem.cfg angehängt, vielleicht ergibt sich daraus für das geschulte Auge noch etwas Hilfreicheres.

Es wäre interessant zu wissen, wann genau die Warnings im Log kommen, welche Logs kommen zuvor und welche danach. Damit könnte man den Zeitpunkt besser einstufen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

flurin

Zitat von: alpha1974 am 16 April 2015, 19:56:27
Vielleicht muss ich die Verwendung der Dummy-Devices nochmals überdenken. Mein Anwendungsfall weicht etwas ab: Hier soll jeden Abend nach Sonnenuntergang bis 22:45h die Beleuchtung an sein und tagsüber solange die Helligkeit unter 10 liegt. Hintergrund ist eine simple Anwesenheitssimulation: Wenn es draußen dunkel ist, soll drinnen eine Lampe eingeschaltet sein und zwar - als "Zwangsbeleuchtung" - unabhängig davon, ob der Bewegungsmelder anschlägt.

Evtl. hilft Dir eine solche Aufteilung weiter (ungetestet):


define di_abend DOIF ([Sonnenuntergang]-[WZLampe_Ausschaltzeit_abends])
attr di_abend cmdState on|off



define di_tag DOIF ([WZ_Helligkeit] < 10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]])
attr di_tag cmdState on|off



define di_WZLampe DOIF ([di_abend:?on] or [di_tag:?on])
  (set ZWave_stehlampe_wz_power on)
DOELSE
  (set ZWave_stehlampe_wz_power off)
attr di_WZLampe do always


Gruss
flurin

Damian

Zitat von: Damian am 16 April 2015, 20:04:25
Es wäre interessant zu wissen, wann genau die Warnings im Log kommen, welche Logs kommen zuvor und welche danach. Damit könnte man den Zeitpunkt besser einstufen.

Gruß

Damian

Also ich habe jetzt alles bei mir nachgebaut: Dummys definiert, DOIF definiert, Belegung der Dummys sogar in der fhem.save gelöscht, damit sie nicht belegt sind. Das Ergebnis nach dem Hochfahren:

Internals:
   DEF        (([hell]>0 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]]) or [[Sonnenuntergang]]) (set ZWave_stehlampe_wz_power on)
   NAME       di_WZLampe
   NR         409
   NTFY_ORDER 50-di_WZLampe
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-04-16 20:32:13   cmd_event       hell
     2015-04-16 20:32:13   cmd_nr          1
     2015-04-16 20:42:35   e_hell_STATE    6.3
     2015-04-16 20:32:13   error           set ZWave_stehlampe_wz_power on: Please define ZWave_stehlampe_wz_power first
     2015-04-16 20:32:13   state           cmd_1
     2015-04-16 20:38:36   timer_1_c1      error: Wrong timespec ???: either HH:MM:SS or {perlcode}
     2015-04-16 20:38:36   timer_2_c1      error: Wrong timespec ???: either HH:MM:SS or {perlcode}
     2015-04-16 20:38:36   timer_3_c1      error: Wrong timespec ???: either HH:MM:SS or {perlcode}
   Condition:
     0          (InternalDoIf('hell','STATE','')>0 and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")) or DOIF_time_once($hash->{timer}{2},$wday,"")
   Devices:
     0           hell
     all         hell
   Do:
     0          set ZWave_stehlampe_wz_power on
   Helper:
     last_timer 3
     sleeptimer -1
   Internals:
     0           hell:STATE
     all         hell:STATE
   Itimer:
     all         WZLampe_BeginnReaktionszeit_morgens Sonnenuntergang
   Readings:
   Realtime:
     0          00:00:00
     1          00:00:00
     2          00:00:00
   State:
   Time:
     0          [WZLampe_BeginnReaktionszeit_morgens]
     1          [Sonnenuntergang]
     2          [Sonnenuntergang]
   Timecond:
     0          0
     1          0
     2          0
   Timer:
     0          0
     1          0
     2          0
   Timerfunc:
   Timers:
     0           2
   Trigger:
Attributes:


Alles verhält sich hier, wie von mir erwartet, Fehlermeldungen bei den Timern, Realtimer mit 00:00:00 belegt, Bedingung wurde auch schon überprüft, weil Heilligkeitssensor gesendet hat - von Warning allerdings keine Spur.

Gruß

Damian




Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

alpha1974

Sehr bizarr, aber mit meiner fhem.cfg kommen regelmäßig nach jedem "shutdown restart" dieselben Warnings. Hier die vollständigen Einträge im Logfile nach einem shutdown restart:
2015.04.17 10:14:37 0: Server shutdown
2015.04.17 10:14:39 1: Including fhem.cfg
2015.04.17 10:14:39 3: telnetPort: port 7072 opened
2015.04.17 10:14:39 3: WEB: port 8083 opened
2015.04.17 10:14:39 3: WEBphone: port 8084 opened
2015.04.17 10:14:39 3: WEBtablet: port 8085 opened
2015.04.17 10:14:40 2: eventTypes: loaded 756 events from ./log/eventTypes.txt
2015.04.17 10:14:40 3: Opening ZWDongle_0 device /dev/ttyACM0
2015.04.17 10:14:40 3: Setting ZWDongle_0 baudrate to 115200
2015.04.17 10:14:40 3: ZWDongle_0 device opened
2015.04.17 10:14:41 1: Including ./log/fhem.save
2015.04.17 10:14:41 1: PERL WARNING: Use of uninitialized value $end in string gt at ./FHEM/98_DOIF.pm line 476.
2015.04.17 10:14:41 1: PERL WARNING: Use of uninitialized value $begin in string gt at ./FHEM/98_DOIF.pm line 476.
2015.04.17 10:14:41 1: PERL WARNING: Use of uninitialized value $begin in string ge at ./FHEM/98_DOIF.pm line 481.
2015.04.17 10:14:41 3: ZWave reading config for fibaro/fgwpe.xml
2015.04.17 10:14:41 2: ZWave set ZWave_stehlampe_wz_power off


Ich habe jetzt mal Dein Beispiel verkürzt (ohne "or [[Sonnenuntergang]]") und bekomme weiterhin Warnings, wobei der Wert für die Helligkeit noch gespeichert war (noch keine aktuelle Meldung des Sensors):


DEF        ([WZ_Helligkeit]>10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]]) (set ZWave_stehlampe_wz_power off)
   NAME       di_WZLampe
   NR         60
   NTFY_ORDER 50-di_WZLampe
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-04-17 10:14:41   cmd_event       WZ_Helligkeit
     2015-04-17 10:14:41   cmd_nr          1
     2015-04-17 10:14:41   e_WZ_Helligkeit_STATE 189
     2015-04-17 10:14:41   state           cmd_1
     2015-04-17 10:14:41   timer_1_c1      18.04.2015 07:45:00
     2015-04-17 10:14:41   timer_2_c1      17.04.2015 20:12:06
   Condition:
     0          InternalDoIf('WZ_Helligkeit','STATE','')>10 and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
     0           WZ_Helligkeit
     all         WZ_Helligkeit
   Do:
     0          set ZWave_stehlampe_wz_power off
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
     0           WZ_Helligkeit:STATE
     all         WZ_Helligkeit:STATE
   Itimer:
     all         WZLampe_BeginnReaktionszeit_morgens Sonnenuntergang
   Readings:
   Realtime:
     0          07:45:00
     1          20:12:06
   State:
   Time:
     0          [WZLampe_BeginnReaktionszeit_morgens]
     1          [Sonnenuntergang]
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Trigger:
Attributes:
   room       Wohnzimmer
FHEM/Z-Wave USB-Dongle + div. Devices

alpha1974

Zitat von: flurin am 16 April 2015, 20:24:43
Evtl. hilft Dir eine solche Aufteilung weiter (ungetestet):


define di_abend DOIF ([Sonnenuntergang]-[WZLampe_Ausschaltzeit_abends])
attr di_abend cmdState on|off



define di_tag DOIF ([WZ_Helligkeit] < 10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]])
attr di_tag cmdState on|off



define di_WZLampe DOIF ([di_abend:?on] or [di_tag:?on])
  (set ZWave_stehlampe_wz_power on)
DOELSE
  (set ZWave_stehlampe_wz_power off)
attr di_WZLampe do always


Sehr gute Idee, vielen Dank!!! Das probiere ich die Tage mal aus. Würde es übersichtlicher machen, wobei meine Lösung ja auch funktioniert (bis auf die Warnings).
FHEM/Z-Wave USB-Dongle + div. Devices

Damian

Zitat von: alpha1974 am 17 April 2015, 10:23:33
Sehr bizarr, aber mit meiner fhem.cfg kommen regelmäßig nach jedem "shutdown restart" dieselben Warnings. Hier die vollständigen Einträge im Logfile nach einem shutdown restart:
2015.04.17 10:14:37 0: Server shutdown
2015.04.17 10:14:39 1: Including fhem.cfg
2015.04.17 10:14:39 3: telnetPort: port 7072 opened
2015.04.17 10:14:39 3: WEB: port 8083 opened
2015.04.17 10:14:39 3: WEBphone: port 8084 opened
2015.04.17 10:14:39 3: WEBtablet: port 8085 opened
2015.04.17 10:14:40 2: eventTypes: loaded 756 events from ./log/eventTypes.txt
2015.04.17 10:14:40 3: Opening ZWDongle_0 device /dev/ttyACM0
2015.04.17 10:14:40 3: Setting ZWDongle_0 baudrate to 115200
2015.04.17 10:14:40 3: ZWDongle_0 device opened
2015.04.17 10:14:41 1: Including ./log/fhem.save
2015.04.17 10:14:41 1: PERL WARNING: Use of uninitialized value $end in string gt at ./FHEM/98_DOIF.pm line 476.
2015.04.17 10:14:41 1: PERL WARNING: Use of uninitialized value $begin in string gt at ./FHEM/98_DOIF.pm line 476.
2015.04.17 10:14:41 1: PERL WARNING: Use of uninitialized value $begin in string ge at ./FHEM/98_DOIF.pm line 481.
2015.04.17 10:14:41 3: ZWave reading config for fibaro/fgwpe.xml
2015.04.17 10:14:41 2: ZWave set ZWave_stehlampe_wz_power off


Ich habe jetzt mal Dein Beispiel verkürzt (ohne "or [[Sonnenuntergang]]") und bekomme weiterhin Warnings, wobei der Wert für die Helligkeit noch gespeichert war (noch keine aktuelle Meldung des Sensors):


DEF        ([WZ_Helligkeit]>10 and [?[WZLampe_BeginnReaktionszeit_morgens]-[Sonnenuntergang]]) (set ZWave_stehlampe_wz_power off)
   NAME       di_WZLampe
   NR         60
   NTFY_ORDER 50-di_WZLampe
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-04-17 10:14:41   cmd_event       WZ_Helligkeit
     2015-04-17 10:14:41   cmd_nr          1
     2015-04-17 10:14:41   e_WZ_Helligkeit_STATE 189
     2015-04-17 10:14:41   state           cmd_1
     2015-04-17 10:14:41   timer_1_c1      18.04.2015 07:45:00
     2015-04-17 10:14:41   timer_2_c1      17.04.2015 20:12:06
   Condition:
     0          InternalDoIf('WZ_Helligkeit','STATE','')>10 and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
     0           WZ_Helligkeit
     all         WZ_Helligkeit
   Do:
     0          set ZWave_stehlampe_wz_power off
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
     0           WZ_Helligkeit:STATE
     all         WZ_Helligkeit:STATE
   Itimer:
     all         WZLampe_BeginnReaktionszeit_morgens Sonnenuntergang
   Readings:
   Realtime:
     0          07:45:00
     1          20:12:06
   State:
   Time:
     0          [WZLampe_BeginnReaktionszeit_morgens]
     1          [Sonnenuntergang]
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Trigger:
Attributes:
   room       Wohnzimmer


Offensichtlich kommt ein Event von e_WZ_Helligkeit_STATE paar Millisekunden bevor das DOIF-Moduls per global:INIT getrigger wird.
Ich denke, ich werde zukünftig die Vorbelegung mit 00:00:00 rausnehmen und den Vorschlag von flurin in der DOIF_Timer-Funktion einbauen, dann sind wir auf der sicheren Seite und dann ist die Bedingung in solch einem Fall auch immer false.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF