readingsGroup - $<operator>[(<zellen>)] - eigene Berechnungen

Begonnen von bertl, 30 September 2026, 15:21:43

Vorheriges Thema - Nächstes Thema

bertl

Ich möchte in einer readingsGroup eigene Berechnungen über $<operator>[(<zellen>)] in der 99_myUtils.pm durchführen, da es sich um nicht nummerische Werte handelt - leider ohne Erfolg.

Ich bekomme immer folgende Warnungen welche vom Modul "33_readingsGroup.pm" kommen:
2026.09.30 14:33:21 1: PERL WARNING: Array found where operator expected at (eval 61503) line 1, near "rgTest @values"
Meine Funktion "rgTest" in 99_myUtils.pm wird dabei nie aufgerufen.

Zu den Details:
Ich verwende dieses Modul https://wiki.fhem.de/wiki/M%C3%A4hroboter:_Worx_Landroid,_Kress,_Landxcape um meinen Worx Landroid Mähroboter zu steuern bzw. Details auszulesen.

Nun habe ich eine readingsGroup vom Mähzeitplan erstellt und dabei wollte ich die Ende-Zeit über die Funktion "rgTest" berechnen lassen.

Hier die readingsGroup
Internals:
   DEF        <Tag>,<Kante>,<Start>,<Dauer>,<Ende>
MQTT2_Worx_M700:<Mo>,cfg_sc_d_2_3,cfg_sc_d_2_1,cfg_sc_d_2_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Mo>,cfg_sc_dd_2_3,cfg_sc_dd_2_1,cfg_sc_dd_2_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Di>,cfg_sc_d_3_3,cfg_sc_d_3_1,cfg_sc_d_3_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Di>,cfg_sc_dd_3_3,cfg_sc_dd_3_1,cfg_sc_dd_3_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Mi>,cfg_sc_d_4_3,cfg_sc_d_4_1,cfg_sc_d_4_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Mi>,cfg_sc_dd_4_3,cfg_sc_dd_4_1,cfg_sc_dd_4_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Do>,cfg_sc_d_5_3,cfg_sc_d_5_1,cfg_sc_d_5_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Do>,cfg_sc_dd_5_3,cfg_sc_dd_5_1,cfg_sc_dd_5_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Fr>,cfg_sc_d_6_3,cfg_sc_d_6_1,cfg_sc_d_6_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Fr>,cfg_sc_dd_6_3,cfg_sc_dd_6_1,cfg_sc_dd_6_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Sa>,cfg_sc_d_7_3,cfg_sc_d_7_1,cfg_sc_d_7_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<Sa>,cfg_sc_dd_7_3,cfg_sc_dd_7_1,cfg_sc_dd_7_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<So>,cfg_sc_d_1_3,cfg_sc_d_1_1,cfg_sc_d_1_2,$rgTest($ROW:3,4)
MQTT2_Worx_M700:<So>,cfg_sc_dd_1_3,cfg_sc_dd_1_1,cfg_sc_dd_1_2,$rgTest($ROW:3,4)
<hr>
MQTT2_Worx_M700:<Korrektur>,<>,<>,mowerTimeCorrection,<>
   FUUID      6abcb215-f33f-3e1e-89e6-ca201e41e1faffea
   NAME       rg_MQTT2_Worx_M700_Zeitplan
   NR         958
   NTFY_ORDER 50-rg_MQTT2_Worx_M700_Zeitplan
   STATE      Initialized
   TYPE       readingsGroup
   alwaysTrigger 2
   changed    0
   eventCount 4
   mayBeVisible 1
   CONTENT:
     MQTT2_Worx_M700 1
   CONTENT2:
   DEVICES:
     ARRAY(0x99e9fb8)
     ARRAY(0x9337088)
     ARRAY(0x188b978)
     ARRAY(0xa6273e0)
     ARRAY(0xa62e910)
     ARRAY(0x9b83820)
     ARRAY(0x9fda570)
     ARRAY(0x99df868)
     ARRAY(0x9968e40)
     ARRAY(0x9eac6a8)
     ARRAY(0x99f13b8)
     ARRAY(0x95085b0)
     ARRAY(0x9a48180)
     ARRAY(0x9438f40)
     ARRAY(0x9b64c08)
     ARRAY(0x9597298)
     ARRAY(0x9416c00)
   READINGS:
     2026-09-30 13:30:56   change          1790767855
   fhem:
     lastDefChange 26
     last_update 1790771603.69034
   helper:
     DEF       
     valueFormat {
  if( $READING =~ /cfg_sc_[d]+_[1-7]_3/ ) {
    $VALUE = ($VALUE == 0) ? "-" : "Ja";
  }
}
     valueStyle style="padding-right:5px;padding-left:5px;"
     cellStyle:
       c:1        style="width:80px;text-align:center;"
       c:2        style="width:60px;text-align:center;"
       c:3        style="width:60px;text-align:center;"
       c:4        style="width:60px;text-align:center;"
       c:5        style="width:60px;text-align:center;"
       r:1,c:1    style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"
       r:1,c:2    style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"
       r:1,c:3    style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"
       r:1,c:4    style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"
       r:1,c:5    style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"
     positions:
       MQTT2_Worx_M700.cfg_sc_d_1_1 14:3
       MQTT2_Worx_M700.cfg_sc_d_1_2 14:4
       MQTT2_Worx_M700.cfg_sc_d_1_3 14:2
       MQTT2_Worx_M700.cfg_sc_d_2_1 2:3
       MQTT2_Worx_M700.cfg_sc_d_2_2 2:4
       MQTT2_Worx_M700.cfg_sc_d_2_3 2:2
       MQTT2_Worx_M700.cfg_sc_d_3_1 4:3
       MQTT2_Worx_M700.cfg_sc_d_3_2 4:4
       MQTT2_Worx_M700.cfg_sc_d_3_3 4:2
       MQTT2_Worx_M700.cfg_sc_d_4_1 6:3
       MQTT2_Worx_M700.cfg_sc_d_4_2 6:4
       MQTT2_Worx_M700.cfg_sc_d_4_3 6:2
       MQTT2_Worx_M700.cfg_sc_d_5_1 8:3
       MQTT2_Worx_M700.cfg_sc_d_5_2 8:4
       MQTT2_Worx_M700.cfg_sc_d_5_3 8:2
       MQTT2_Worx_M700.cfg_sc_d_6_1 10:3
       MQTT2_Worx_M700.cfg_sc_d_6_2 10:4
       MQTT2_Worx_M700.cfg_sc_d_6_3 10:2
       MQTT2_Worx_M700.cfg_sc_d_7_1 12:3
       MQTT2_Worx_M700.cfg_sc_d_7_2 12:4
       MQTT2_Worx_M700.cfg_sc_d_7_3 12:2
       MQTT2_Worx_M700.cfg_sc_dd_1_1 15:3
       MQTT2_Worx_M700.cfg_sc_dd_1_2 15:4
       MQTT2_Worx_M700.cfg_sc_dd_1_3 15:2
       MQTT2_Worx_M700.cfg_sc_dd_2_1 3:3
       MQTT2_Worx_M700.cfg_sc_dd_2_2 3:4
       MQTT2_Worx_M700.cfg_sc_dd_2_3 3:2
       MQTT2_Worx_M700.cfg_sc_dd_3_1 5:3
       MQTT2_Worx_M700.cfg_sc_dd_3_2 5:4
       MQTT2_Worx_M700.cfg_sc_dd_3_3 5:2
       MQTT2_Worx_M700.cfg_sc_dd_4_1 7:3
       MQTT2_Worx_M700.cfg_sc_dd_4_2 7:4
       MQTT2_Worx_M700.cfg_sc_dd_4_3 7:2
       MQTT2_Worx_M700.cfg_sc_dd_5_1 9:3
       MQTT2_Worx_M700.cfg_sc_dd_5_2 9:4
       MQTT2_Worx_M700.cfg_sc_dd_5_3 9:2
       MQTT2_Worx_M700.cfg_sc_dd_6_1 11:3
       MQTT2_Worx_M700.cfg_sc_dd_6_2 11:4
       MQTT2_Worx_M700.cfg_sc_dd_6_3 11:2
       MQTT2_Worx_M700.cfg_sc_dd_7_1 13:3
       MQTT2_Worx_M700.cfg_sc_dd_7_2 13:4
       MQTT2_Worx_M700.cfg_sc_dd_7_3 13:2
       MQTT2_Worx_M700.mowerTimeCorrection 17:4
     recalc:
       undef
       undef
       undef
       ARRAY(0x9ace918)
       ARRAY(0x9536780)
     values:
       calc:
         undef
         undef
         undef
         undef
         undef
         ARRAY(0xa61f2f0)
       formated:
         undef
         undef
         ARRAY(0x97392f0)
         ARRAY(0x9b92050)
         ARRAY(0x9520c58)
         ARRAY(0x93aa368)
       orig:
         undef
         undef
         ARRAY(0x93dc1e0)
         ARRAY(0xa031108)
         ARRAY(0x953d058)
         ARRAY(0x994ff60)
       prefixsuffix:
         undef
         undef
         ARRAY(0x99df298)
         ARRAY(0x9b93eb8)
         ARRAY(0x9d198f0)
         ARRAY(0x9ab7470)
Attributes:
   alias      Worx-Mähzeitplan
   alwaysTrigger 2
   cellStyle  {
  "c:1" => 'style="width:80px;text-align:center;"',
  "c:2" => 'style="width:60px;text-align:center;"',
  "c:3" => 'style="width:60px;text-align:center;"',
  "c:4" => 'style="width:60px;text-align:center;"',
  "c:5" => 'style="width:60px;text-align:center;"',
  "r:1,c:1" => 'style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"',
  "r:1,c:2" => 'style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"',
  "r:1,c:3" => 'style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"',
  "r:1,c:4" => 'style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"',
  "r:1,c:5" => 'style="font-size:16px;text-align:center;font-weight:bold;color:white;background-color:grey;"',
}
   group      Worx
   nonames    1
   room       Draussen
   sortby     10
   style      style="font-size:14px;" border=1
   valueFormat {
  if( $READING =~ /cfg_sc_[d]+_[1-7]_3/ ) {
    $VALUE = ($VALUE == 0) ? "-" : "Ja";
  }
}
   valueStyle style="padding-right:5px;padding-left:5px;"

In der 99_myUtils.pm habe ich für Testzwecke nur folgenden Code hinterlegt:
sub rgTest($) {
  return 99;
}

Leider habe ich keine Beispiele hier im Forum dazu gefunden.
Hat das wer von euch in Verwendung wo es funktioniert?

Was mache ich falsch bzw. wo liegt das Problem?

Danke für eure Unterstützung
Robert

bertl

An den Modul-Verwalter @justme1968 von 33_readingsGroup.pm

Ich glaube das Problem für die nicht funktionierende Berechnung über $<operator>[(<zellen>)] in der 99_myUtils.pm gefunden zu haben.

1. Durch den Programmcode "package readingsGroup" ist die 99_myUtils.pm nicht bekannt - mir erschließt sich auch nicht, warum dieser hier benötigt wird!?

2. Für die vorgegebenen Funktionen 'min', 'max', 'sum' und 'scalar' wird folgender Funktionsaufruf benötigt:
return eval $calc .' @values';
3. Für eigene Funktionen in der 99_myUtils.pm wird folgender Funktionsaufruf benötigt:
return eval $calc .' \@values';
Haben die eigenen Berechnungen über 99_myUtils.pm eigentlich schon einmal funktioniert?

Hier die Änderungen welche bei mir für alle Berechnungen funktionieren (eigene und vorgegebene):
diff -u 33_readingsGroup.pm_old 33_readingsGroup.pm
--- 33_readingsGroup.pm_old    2026-10-23 14:58:07.171556885 +0200
+++ 33_readingsGroup.pm 2026-10-23 15:00:42.266114204 +0200
@@ -430,7 +430,7 @@
 }


-package readingsGroup;
+#package readingsGroup;
 sub
 rgCount($$)
 {
@@ -511,12 +511,14 @@
    return ( sum @values ) / $cnt;
  } elsif( $calc eq 'count' ) {
    return rgCount( $args, \@values );
+  } elsif( $calc eq 'min' or $calc eq 'max' or $calc eq 'sum' or $calc eq 'scalar' ) {
+    return eval $calc .' @values';
  }

-  return eval $calc .' @values';
+  return eval $calc .' \@values';
 }

-package main;
+#package main;

 sub
 readingsGroup_value2html($$$$$$$$$)
@@ -528,7 +530,8 @@

  my $value_orig = $v;
  if( $calc ) {
-    $v = readingsGroup::rgCalc($hash,$calc,$cell_row,$cell_column);
+    $v = rgCalc($hash,$calc,$cell_row,$cell_column);
    $hash->{helper}{values}{calc}[$cell_column][$cell_row] = $calc;

    $informid = "informId=\"$d-calc:$cell_row:$cell_column\"";

Bitte ändern!

Danke, Robert