From b128ebbc5a6013bf126ca2e4edea40cd861ee41a Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Thu, 3 Jan 2013 12:51:51 +0000 Subject: [PATCH] readingsUpdate attribute-Namelist and documentation unified git-svn-id: https://svn.fhem.de/fhem/trunk@2406 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_CUL_HM.pm | 10 +-- fhem/FHEM/10_MAX.pm | 12 +-- fhem/FHEM/11_FHT.pm | 158 ++++++++++++++++++--------------- fhem/FHEM/11_OWDevice.pm | 6 +- fhem/FHEM/14_CUL_MAX.pm | 4 +- fhem/FHEM/46_TRX_ELSE.pm | 3 +- fhem/FHEM/46_TRX_LIGHT.pm | 7 +- fhem/FHEM/46_TRX_SECURITY.pm | 7 +- fhem/FHEM/46_TRX_WEATHER.pm | 7 +- fhem/FHEM/49_IPCAM.pm | 4 +- fhem/FHEM/50_WS300.pm | 8 +- fhem/FHEM/57_Calendar.pm | 7 +- fhem/FHEM/59_Twilight.pm | 7 +- fhem/FHEM/59_Weather.pm | 6 +- fhem/FHEM/67_ECMDDevice.pm | 6 +- fhem/FHEM/71_YAMAHA_AVR.pm | 6 +- fhem/FHEM/72_FB_CALLMONITOR.pm | 9 +- fhem/FHEM/98_structure.pm | 5 +- 18 files changed, 149 insertions(+), 123 deletions(-) diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 823a11784..423dc5b3b 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -213,13 +213,12 @@ CUL_HM_Initialize($) $hash->{RenameFn} = "CUL_HM_Rename"; $hash->{AttrList} = "IODev do_not_notify:1,0 ignore:1,0 dummy:1,0 ". "showtime:1,0 loglevel:0,1,2,3,4,5,6 ". - "event-on-change-reading event-on-update-reading ". "hmClass:receiver,sender serialNr firmware devInfo ". "rawToReadable unit ". - "peerList ". #todo Updt1 remove - "peerIDs ". - "actCycle actStatus autoReadReg:1,0 ". - ""; + "peerList ". #todo Updt1 remove + "peerIDs ". + "actCycle actStatus autoReadReg:1,0 ". + $readingFnAttributes; my @modellist; foreach my $model (keys %culHmModel){ push @modellist,$culHmModel{$model}{name}; @@ -4588,6 +4587,7 @@ CUL_HM_setAttrIfCh($$$$)
  • dummy
  • showtime
  • loglevel
  • +
  • readingFnAttributes
  • hmClass, model, subType
    diff --git a/fhem/FHEM/10_MAX.pm b/fhem/FHEM/10_MAX.pm index fba09c1b4..4c6b5eb7a 100755 --- a/fhem/FHEM/10_MAX.pm +++ b/fhem/FHEM/10_MAX.pm @@ -73,7 +73,8 @@ MAX_Initialize($) $hash->{ParseFn} = "MAX_Parse"; $hash->{SetFn} = "MAX_Set"; $hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 dummy:0,1 " . - "showtime:1,0 loglevel:0,1,2,3,4,5,6 event-on-update-reading event-on-change-reading"; + "showtime:1,0 loglevel:0,1,2,3,4,5,6 ". + $readingFnAttributes; return undef; } @@ -406,7 +407,7 @@ MAX_Parse($$) if($measuredTemperature ne "") { readingsBulkUpdate($shash, "temperature", $measuredTemperature); } - readingsEndUpdate($shash, 0); + readingsEndUpdate($shash, 1); }elsif($msgtype eq "ShutterContactState"){ my $bits = pack("H2",$args[0]); @@ -421,7 +422,7 @@ MAX_Parse($$) readingsBeginUpdate($shash); readingsBulkUpdate($shash, "battery", $batterylow ? "low" : "ok"); readingsBulkUpdate($shash,"onoff",$isopen); - readingsEndUpdate($shash, 0); + readingsEndUpdate($shash, 1); }elsif($msgtype eq "CubeClockState"){ my $clockset = $args[0]; @@ -448,7 +449,7 @@ MAX_Parse($$) readingsBulkUpdate($shash, "decalcification", "$decalcDays[$args[11]], $args[12]:00"); #readingsBulkUpdate($shash, "weekProfile", "$args[13]"); $shash->{internal}{weekProfile} = $args[13]; - readingsEndUpdate($shash, 0); + readingsEndUpdate($shash, 1); } elsif($msgtype eq "Error") { if(@args == 0) { @@ -576,13 +577,12 @@ MAX_Parse($$) Attributes
    diff --git a/fhem/FHEM/11_FHT.pm b/fhem/FHEM/11_FHT.pm index a298676ce..d469470eb 100755 --- a/fhem/FHEM/11_FHT.pm +++ b/fhem/FHEM/11_FHT.pm @@ -186,7 +186,8 @@ FHT_Initialize($) $hash->{ParseFn} = "FHT_Parse"; $hash->{AttrList} = "IODev do_not_notify:1,0 model:fht80b dummy:1,0 " . "showtime:1,0 loglevel:0,1,2,3,4,5,6 retrycount " . - "minfhtbuffer lazy tmpcorr ignore:1,0 event-on-update-reading event-on-change-reading"; + "minfhtbuffer lazy tmpcorr ignore:1,0 ". + $readingFnAttributes; } @@ -391,10 +392,12 @@ FHT_Parse($$) { my ($hash, $msg) = @_; +Log 1, "FHTVAL0: >$msg< ". length($msg); + $msg = lc($msg); my $dev = substr($msg, 16, 4); my $cde = substr($msg, 20, 2); - my $val = substr($msg, 26, 2) if(length($msg) > 26); + my $val = (length($msg) > 26 ? substr($msg, 26, 2) : undef); my $confirm = 0; if(!defined($modules{FHT}{defptr}{$dev})) { @@ -431,7 +434,7 @@ FHT_Parse($$) my $cmd = $codes{$cde}; if(!$cmd) { Log $ll4, "FHT $name (Unknown: $cde => $val)"; - $def->{CHANGED}[0] = "unknown_$cde: $val"; + readingsSingleUpdate($def, "unknown_$cde", $val, 1); return $name; } @@ -444,21 +447,22 @@ FHT_Parse($$) # measured-temp= (measured-high * 256 + measured-low) / 10. # measured-low and measured-high will only be stored as internals if($cmd eq "measured-low") { - - $def->{fhem}{measuredLow}= $val; - return ""; + $def->{".measuredLow"}= $val; + return ""; } elsif($cmd eq "measured-high") { - $def->{fhem}{measuredHigh}= $val; + $def->{".measuredHigh"}= $val; - if(defined($def->{fhem}{measuredLow})) { + if(defined($def->{".measuredLow"})) { - $val = ($val*256.0 + $def->{fhem}{measuredLow})/10.0+ AttrVal($name, "tmpcorr", 0.0); - $cmd = "measured-temp"; - } else { - return ""; - } + $val = ($val*256.0 + $def->{".measuredLow"})/10.0+ + AttrVal($name, "tmpcorr", 0.0); + $cmd = "measured-temp"; + } else { + return ""; + + } } # @@ -562,8 +566,8 @@ FHT_Parse($$) } else { readingsBulkUpdate($def, $cmd, $val); if($cmd eq "measured-temp") { - $def->{STATE} = "$cmd: $val"; - readingsBulkUpdate($def, "temperature", $val); + readingsBulkUpdate($def, "state", "measured-temp: $val"); + readingsBulkUpdate($def, "temperature", $val); # For dewpoint } } @@ -572,7 +576,7 @@ FHT_Parse($$) # # now we are done with updating readings # - readingsEndUpdate($def, 0); + readingsEndUpdate($def, 1); ################################ # Softbuffer: delete confirmed commands @@ -774,26 +778,32 @@ getFhtBuffer($) none, Battery low,Temperature too low, Window open, Fault on window sensor
  • -
  • actuator (without a suffix) stands for all actuators. +
  • actuator (without a suffix) stands for all actuators.
  • actuator or actuator1..8 can take following values: - +
  • + +
  • The FHT is very economical (or lazy), it accepts one message from the @@ -803,7 +813,9 @@ getFhtBuffer($) sent to the FHT, see the related fhtbuf entry in the get section.
    You can send up to 8 commands in one message at once to the FHT if you specify them all as - arguments to the same set command, see the example above.

    + arguments to the same set command, see the example above. +
  • +
  • time sets hour and minute to local time

  • @@ -827,14 +839,17 @@ getFhtBuffer($) For holiday_short (party mode) The temperature for the holiday period is set by the desired-temperature @@ -848,15 +863,15 @@ getFhtBuffer($)
  • The *-from1/*-from2/*-to1/*-to2 valuetypes need a time - spec as argument in the HH:MM format. They define the periods, where - the day-temp is valid. The minute (MM) will be rounded to 10, and - 24:00 means off. -

  • + spec as argument in the HH:MM format. They define the periods, where + the day-temp is valid. The minute (MM) will be rounded to 10, and + 24:00 means off.
  • To synchronize the FHT time and to "wake" muted FHTs it is adviseable to schedule following command:
    define fht_sync at +*3:30 set TYPE=FHT time -

    +
  • +
  • report1 with parameter 255 requests all settings for monday till sunday to be sent. The argument is a bitfield, to request @@ -876,7 +891,7 @@ getFhtBuffer($)

    Note: This command generates a lot of RF traffic, which can lead to further problems, especially if the reception is not clear. -

  • +
  • report2 with parameter 255 requests the following settings to be reported: day-temp night-temp windowopen-temp @@ -884,22 +899,21 @@ getFhtBuffer($) The argument is (more or less) a bitfield, to request unique values add up the following: measured-temp and actuator is sent along if it is considered - appropriate - - by the FHT. -

    + appropriate by the FHT.
  • +
  • lowtemp-offset needs a temperature as argument, valid values must be between 1.0 and 5.0 Celsius.
    It will trigger a warning if desired-temp - measured-temp > lowtemp-offset in a room for at least 1.5 hours after the last - desired-temp change.

    + desired-temp change.
  • +
  • FHEM optionally has an internal software buffer for FHT devices. This buffer should prevent transmission errors. If there is no @@ -909,12 +923,14 @@ getFhtBuffer($) See the fhtsoftbuffer, retrycount and minfhtbuffer attributes for details. -

    +
  • +
  • If a buffer is still in the softbuffer, it will be sent in the following order:
    desired-temp,mode,report1,report2, holiday1,holiday2,day-temp,night-temp, [all other commands] -

    +
  • +
    @@ -925,8 +941,6 @@ getFhtBuffer($) Attributes
    Generated events:
    diff --git a/fhem/FHEM/11_OWDevice.pm b/fhem/FHEM/11_OWDevice.pm index 54666d440..61579b659 100644 --- a/fhem/FHEM/11_OWDevice.pm +++ b/fhem/FHEM/11_OWDevice.pm @@ -40,7 +40,8 @@ OWDevice_Initialize($) $hash->{DefFn} = "OWDevice_Define"; $hash->{AttrFn} = "OWDevice_Attr"; - $hash->{AttrList} = "trimvalues polls interfaces loglevel:0,1,2,3,4,5"; + $hash->{AttrList} = "trimvalues polls interfaces loglevel:0,1,2,3,4,5 ". + $readingFnAttributes; } ################################### @@ -449,8 +450,7 @@ OWDevice_Define($$)
  • interfaces: supersedes the interfaces exposed by that device.
  • loglevel
  • eventMap
  • -
  • event-on-update-reading
  • -
  • event-on-change-reading
  • +
  • readingFnAttributes


  • diff --git a/fhem/FHEM/14_CUL_MAX.pm b/fhem/FHEM/14_CUL_MAX.pm index d948f8c28..54d949e3b 100644 --- a/fhem/FHEM/14_CUL_MAX.pm +++ b/fhem/FHEM/14_CUL_MAX.pm @@ -43,7 +43,8 @@ CUL_MAX_Initialize($) $hash->{ParseFn} = "CUL_MAX_Parse"; $hash->{SetFn} = "CUL_MAX_Set"; $hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 " . - "showtime:1,0 loglevel:0,1,2,3,4,5,6"; + "showtime:1,0 loglevel:0,1,2,3,4,5,6 ". + $readingFnAttributes; } ############################# @@ -423,6 +424,7 @@ CUL_MAX_BroadcastTime(@)
  • do_not_notify

  • showtime

  • loglevel

  • +
  • readingFnAttributes

  • diff --git a/fhem/FHEM/46_TRX_ELSE.pm b/fhem/FHEM/46_TRX_ELSE.pm index c98978878..b0fcf49ea 100755 --- a/fhem/FHEM/46_TRX_ELSE.pm +++ b/fhem/FHEM/46_TRX_ELSE.pm @@ -48,7 +48,8 @@ TRX_ELSE_Initialize($) $hash->{DefFn} = "TRX_ELSE_Define"; $hash->{UndefFn} = "TRX_ELSE_Undef"; $hash->{ParseFn} = "TRX_ELSE_Parse"; - $hash->{AttrList} = "IODev do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev do_not_notify:1,0 loglevel:0,1,2,3,4,5,6 ". + $readingFnAttributes; Log 1, "TRX_ELSE: Initialize" if ($TRX_ELSE_debug == 1); } diff --git a/fhem/FHEM/46_TRX_LIGHT.pm b/fhem/FHEM/46_TRX_LIGHT.pm index cf4661336..3a5538bd5 100755 --- a/fhem/FHEM/46_TRX_LIGHT.pm +++ b/fhem/FHEM/46_TRX_LIGHT.pm @@ -105,7 +105,9 @@ TRX_LIGHT_Initialize($) $hash->{DefFn} = "TRX_LIGHT_Define"; $hash->{UndefFn} = "TRX_LIGHT_Undef"; $hash->{ParseFn} = "TRX_LIGHT_Parse"; - $hash->{AttrList} = "IODev ignore:1,0 event-on-update-reading event-on-change-reading do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 ". + "loglevel:0,1,2,3,4,5,6 ". + $readingFnAttributes; } @@ -727,8 +729,7 @@ KlikAanKlikUit, NEXA, CHACON, HomeEasy UK.
    You need to define an RFXtrx433 diff --git a/fhem/FHEM/46_TRX_SECURITY.pm b/fhem/FHEM/46_TRX_SECURITY.pm index adc11baae..05ba88a11 100755 --- a/fhem/FHEM/46_TRX_SECURITY.pm +++ b/fhem/FHEM/46_TRX_SECURITY.pm @@ -77,7 +77,9 @@ TRX_SECURITY_Initialize($) $hash->{DefFn} = "TRX_SECURITY_Define"; $hash->{UndefFn} = "TRX_SECURITY_Undef"; $hash->{ParseFn} = "TRX_SECURITY_Parse"; - $hash->{AttrList} = "IODev ignore:1,0 event-on-update-reading event-on-change-reading do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 ". + "loglevel:0,1,2,3,4,5,6 ". + $readingFnAttributes; } @@ -591,8 +593,7 @@ TRX_SECURITY_Parse($$) diff --git a/fhem/FHEM/46_TRX_WEATHER.pm b/fhem/FHEM/46_TRX_WEATHER.pm index 305db12eb..7dff47500 100755 --- a/fhem/FHEM/46_TRX_WEATHER.pm +++ b/fhem/FHEM/46_TRX_WEATHER.pm @@ -110,7 +110,9 @@ TRX_WEATHER_Initialize($) $hash->{DefFn} = "TRX_WEATHER_Define"; $hash->{UndefFn} = "TRX_WEATHER_Undef"; $hash->{ParseFn} = "TRX_WEATHER_Parse"; - $hash->{AttrList} = "IODev ignore:1,0 event-on-update-reading event-on-change-reading do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 ". + "loglevel:0,1,2,3,4,5,6 ". + $readingFnAttributes; } @@ -1221,8 +1223,7 @@ TRX_WEATHER_Parse($$)
    diff --git a/fhem/FHEM/49_IPCAM.pm b/fhem/FHEM/49_IPCAM.pm index 6d18f91d0..aa2d5ba47 100644 --- a/fhem/FHEM/49_IPCAM.pm +++ b/fhem/FHEM/49_IPCAM.pm @@ -45,7 +45,8 @@ IPCAM_Initialize($$) $hash->{GetFn} = "IPCAM_Get"; $hash->{AttrList} = "delay credentials path query snapshots storage timestamp:0,1 ". "do_not_notify:1,0 showtime:1,0 ". - "loglevel:0,1,2,3,4,5,6 disable:0,1"; + "loglevel:0,1,2,3,4,5,6 disable:0,1 ". + $readingFnAttributes; } ##################################### @@ -434,6 +435,7 @@ IPCAM_guessFileFormat($) {
  • disable
  • do_not_notify
  • loglevel
  • +
  • readingFnAttributes
  • path
    Defines the path and query component of the complete URI to get a snapshot of the diff --git a/fhem/FHEM/50_WS300.pm b/fhem/FHEM/50_WS300.pm index 01ef5916e..70d60716f 100644 --- a/fhem/FHEM/50_WS300.pm +++ b/fhem/FHEM/50_WS300.pm @@ -65,7 +65,10 @@ WS300_Initialize($) my ($hash) = @_; # Provider - $hash->{AttrList} = "do_not_notify:0,1 showtime:0,1 model:ws300 loglevel:0,1,2,3,4,5,6 event-on-update-reading event-on-change-reading"; + $hash->{AttrList} = "do_not_notify:0,1 showtime:0,1 model:ws300 ". + "loglevel:0,1,2,3,4,5,6 ". + $readingFnAttributes; + $hash->{DefFn} = "WS300_Define"; $hash->{GetFn} = "WS300_Get"; $hash->{ParseFn} = "WS300_Parse"; @@ -662,8 +665,7 @@ NEXTPOLL:
  • do_not_notify
  • loglevel
  • model (ws300)
  • -
  • event-on-update-reading
  • -
  • event-on-change-reading
  • +
  • readingFnAttributes

  • diff --git a/fhem/FHEM/57_Calendar.pm b/fhem/FHEM/57_Calendar.pm index c8c7fb127..92dd70d81 100644 --- a/fhem/FHEM/57_Calendar.pm +++ b/fhem/FHEM/57_Calendar.pm @@ -700,8 +700,8 @@ sub Calendar_Initialize($) { $hash->{UndefFn} = "Calendar_Undef"; $hash->{GetFn} = "Calendar_Get"; $hash->{SetFn} = "Calendar_Set"; - $hash->{AttrList}= "loglevel:0,1,2,3,4,5 event-on-update-reading event-on-change-reading"; - + $hash->{AttrList}= "loglevel:0,1,2,3,4,5 ". + $readingFnAttributes; } ################################### @@ -1058,8 +1058,7 @@ sub Calendar_Undef($$) { Attributes
    diff --git a/fhem/FHEM/59_Twilight.pm b/fhem/FHEM/59_Twilight.pm index 4f71ede44..12f88cc69 100644 --- a/fhem/FHEM/59_Twilight.pm +++ b/fhem/FHEM/59_Twilight.pm @@ -83,8 +83,8 @@ Twilight_Initialize($) $hash->{DefFn} = "Twilight_Define"; $hash->{UndefFn} = "Twilight_Undef"; $hash->{GetFn} = "Twilight_Get"; - $hash->{AttrList}= "loglevel:0,1,2,3,4,5 event-on-update-reading ". - "event-on-change-reading"; + $hash->{AttrList}= "loglevel:0,1,2,3,4,5 ". + $readingFnAttributes; } sub @@ -413,8 +413,7 @@ Twilight_getWeatherHorizon($) Attributes
    diff --git a/fhem/FHEM/59_Weather.pm b/fhem/FHEM/59_Weather.pm index 0fddf1573..4d83eaf61 100755 --- a/fhem/FHEM/59_Weather.pm +++ b/fhem/FHEM/59_Weather.pm @@ -128,7 +128,8 @@ sub Weather_Initialize($) { $hash->{UndefFn} = "Weather_Undef"; $hash->{GetFn} = "Weather_Get"; $hash->{SetFn} = "Weather_Set"; - $hash->{AttrList}= "loglevel:0,1,2,3,4,5 localicons event-on-update-reading event-on-change-reading"; + $hash->{AttrList}= "loglevel:0,1,2,3,4,5 localicons ". + $readingFnAttributes; } @@ -596,8 +597,7 @@ WeatherAsHtml($) Attributes
    diff --git a/fhem/FHEM/67_ECMDDevice.pm b/fhem/FHEM/67_ECMDDevice.pm index ee3acca46..355dd0e23 100644 --- a/fhem/FHEM/67_ECMDDevice.pm +++ b/fhem/FHEM/67_ECMDDevice.pm @@ -48,7 +48,8 @@ ECMDDevice_Initialize($) $hash->{SetFn} = "ECMDDevice_Set"; $hash->{DefFn} = "ECMDDevice_Define"; - $hash->{AttrList} = "loglevel:0,1,2,3,4,5"; + $hash->{AttrList} = "loglevel:0,1,2,3,4,5 ". + $readingFnAttributes; } ################################### @@ -340,8 +341,7 @@ ECMDDevice_Define($$)

    diff --git a/fhem/FHEM/71_YAMAHA_AVR.pm b/fhem/FHEM/71_YAMAHA_AVR.pm index 7302c223c..a33bcfcf2 100755 --- a/fhem/FHEM/71_YAMAHA_AVR.pm +++ b/fhem/FHEM/71_YAMAHA_AVR.pm @@ -61,7 +61,8 @@ YAMAHA_AVR_Initialize($) $hash->{DefFn} = "YAMAHA_AVR_Define"; $hash->{UndefFn} = "YAMAHA_AVR_Undefine"; - $hash->{AttrList} = "do_not_notify:0,1 loglevel:0,1,2,3,4,5 volume-smooth-change:0,1 volume-smooth-time:0,1,2,3,4,5 volume-smooth-steps:1,2,3,4,5,6,7,8,9,10 event-on-update-reading event-on-change-reading"; + $hash->{AttrList} = "do_not_notify:0,1 loglevel:0,1,2,3,4,5 volume-smooth-change:0,1 volume-smooth-time:0,1,2,3,4,5 volume-smooth-steps:1,2,3,4,5,6,7,8,9,10 ". + $readingFnAttributes; } ################################### @@ -789,8 +790,7 @@ volume_level
  • loglevel
  • do_not_notify
  • -
  • event-on-update-reading
  • -
  • event-on-change-reading

  • +
  • readingFnAttributes
  • volume-smooth-change
  • Optional attribute to activate a smooth volume change.

    diff --git a/fhem/FHEM/72_FB_CALLMONITOR.pm b/fhem/FHEM/72_FB_CALLMONITOR.pm index 0e5601c18..a595279bb 100755 --- a/fhem/FHEM/72_FB_CALLMONITOR.pm +++ b/fhem/FHEM/72_FB_CALLMONITOR.pm @@ -91,7 +91,8 @@ FB_CALLMONITOR_Initialize($) $hash->{UndefFn} = "FB_CALLMONITOR_Undef"; - $hash->{AttrList}= "do_not_notify:0,1 loglevel:1,2,3,4,5 unique-call-ids:0,1 local-area-code remove-leading-zero:0,1 reverse-search-cache-file reverse-search:all,internal,klicktel.de,dasoertliche.de,search.ch,none reverse-search-cache:0,1 reverse-search-phonebook-file event-on-update-reading event-on-change-reading"; + $hash->{AttrList}= "do_not_notify:0,1 loglevel:1,2,3,4,5 unique-call-ids:0,1 local-area-code remove-leading-zero:0,1 reverse-search-cache-file reverse-search:all,internal,klicktel.de,dasoertliche.de,search.ch,none reverse-search-cache:0,1 reverse-search-phonebook-file ". + $readingFnAttributes; } ##################################### @@ -611,8 +612,7 @@ sub FB_CALLMONITOR_loadCacheFile($)