Error bei DOIF in Verbindung mit Perl Subroutine im Ausführungsteil

Begonnen von harry-th, 25 Oktober 2015, 18:19:44

Vorheriges Thema - Nächstes Thema

harry-th

Hallo,
ich bekomme in einer DOIF Anweisung ein error reading (error {IstVerbrauch()}: 1445792702.10954), obwohl eigentlich alles so funktioniert wie es soll:

Hier das DOIF:
Internals:
   CFGFN
   DEF        ([EnergieZaehler:Pinlevel] eq "low") ({IstVerbrauch()})
   NAME       pinLow
   NR         2500
   NTFY_ORDER 50-pinLow
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-10-25 18:05:02   Device          EnergieZaehler
     2015-10-25 18:05:02   cmd_event       EnergieZaehler
     2015-10-25 18:05:02   cmd_nr          1
     2015-10-25 18:05:02   e_EnergieZaehler_Pinlevel low
     2015-10-25 18:05:02   error           {IstVerbrauch()}: 1445792702.10954
     2015-10-25 18:05:02   state           cmd_1
   Condition:
     0          ReadingValDoIf('EnergieZaehler','Pinlevel','') eq "low"
   Devices:
     0           EnergieZaehler
     all         EnergieZaehler
   Do:
     0:
       0          {IstVerbrauch()}
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           EnergieZaehler:Pinlevel
     all         EnergieZaehler:Pinlevel
   State:
   Timerfunc:
   Trigger:
Attributes:
   do         always
   loglevel   0
   room       Energie


die PERL Subroutine:

package main;

use strict;
use warnings;
use POSIX;
use Time::HiRes qw(gettimeofday);

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
  my $oldTime = 0;
  my $MomentanVerbrauch = 0;
}

# Enter you functions below _this_ line.

sub IstVerbrauch () {

my $temp = gettimeofday();
$main::MomentanVerbrauch = 48000/($temp - $main::oldTime);
fhem ("set MomentanVerbrauch $main::MomentanVerbrauch");
$main::oldTime = $temp;
}


In FHEM ist ein Dummy MomentanVerbrauch definiert, der korrekt jeweils mit dem aktuellen Wert beschrieben wird.
Warum existiert im DOIF dieses error Reading?

Hat jemand eine Idee?

Danke schon mal vorab

Gruß

Harald

Damian

Zitat von: harry-th am 25 Oktober 2015, 18:19:44
Hallo,
ich bekomme in einer DOIF Anweisung ein error reading (error {IstVerbrauch()}: 1445792702.10954), obwohl eigentlich alles so funktioniert wie es soll:

Hier das DOIF:
Internals:
   CFGFN
   DEF        ([EnergieZaehler:Pinlevel] eq "low") ({IstVerbrauch()})
   NAME       pinLow
   NR         2500
   NTFY_ORDER 50-pinLow
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-10-25 18:05:02   Device          EnergieZaehler
     2015-10-25 18:05:02   cmd_event       EnergieZaehler
     2015-10-25 18:05:02   cmd_nr          1
     2015-10-25 18:05:02   e_EnergieZaehler_Pinlevel low
     2015-10-25 18:05:02   error           {IstVerbrauch()}: 1445792702.10954
     2015-10-25 18:05:02   state           cmd_1
   Condition:
     0          ReadingValDoIf('EnergieZaehler','Pinlevel','') eq "low"
   Devices:
     0           EnergieZaehler
     all         EnergieZaehler
   Do:
     0:
       0          {IstVerbrauch()}
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           EnergieZaehler:Pinlevel
     all         EnergieZaehler:Pinlevel
   State:
   Timerfunc:
   Trigger:
Attributes:
   do         always
   loglevel   0
   room       Energie


die PERL Subroutine:

package main;

use strict;
use warnings;
use POSIX;
use Time::HiRes qw(gettimeofday);

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
  my $oldTime = 0;
  my $MomentanVerbrauch = 0;
}

# Enter you functions below _this_ line.

sub IstVerbrauch () {

my $temp = gettimeofday();
$main::MomentanVerbrauch = 48000/($temp - $main::oldTime);
fhem ("set MomentanVerbrauch $main::MomentanVerbrauch");
$main::oldTime = $temp;
}


In FHEM ist ein Dummy MomentanVerbrauch definiert, der korrekt jeweils mit dem aktuellen Wert beschrieben wird.
Warum existiert im DOIF dieses error Reading?

Hat jemand eine Idee?

Danke schon mal vorab

Gruß

Harald

Deine Routine muss einen Returncode: 0 "" oder undef liefern.

Gruß

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