readingsProxy: überarbeitete Version zum Test

Begonnen von Dr. Boris Neubert, 27 März 2026, 08:03:58

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Hallo,

daran wurde nichts geändert. Ich habe in den Code geschaut und das sollte noch gehen. $DEVICE bezieht sich auf den primären Proxy:

  my $set_fn = AttrVal( $hash->{NAME}, "setFn", "" );
  if( $set_fn =~ m/^{.*}$/s ) {
    my $CMD = $a[0];
    my $DEVICE = $primaryDevname;
    my $READING = $primaryReading;
    my $ARGS = join(" ", @a[1..$#a]);

    my $set_fn = eval $set_fn;
    Log3 $name, 3, $name .": setFn: ". $@ if($@);

    readingsSingleUpdate($hash, "lastCmd", $a[0], 0);

    return undef if( !defined($set_fn) );
    $v = $set_fn if( $set_fn ne '' );
  } else {
    readingsSingleUpdate($hash, "lastCmd", $a[0], 0);
  }

Kannst du mal bitte Device-Definition (raw für Forum) posten?

Grüße
Boris
FHEM-Developer seit 2007, Mitgründer und Förder-Mitglied des FHEM e.V.
Bitte keine unaufgeforderten privaten Nachrichten!

erwin

Hallo Boris,
Es geht um die valueFn !
Da wird $DEVICE nicht definiert.
In der Vorgänger-version vom Modul hat folgendes funktioniert:
attr testdev valueFn {  my $opmode = (ReadingsVal($DEVICE,'HK4_OpMode','on') eq 'off')?'off':'on'; # on/auto/off
   my $status = ReadingsVal($DEVICE,'HK4_Pumpe','on');
   my $s1 = 'err';
   if($VALUE eq 'on') { 
      if ($opmode eq 'on') {
         $s1 = ($status eq 'on')?'heating':'waiting';
      } else {
         $s1 = 'cold';
      }
   } else {
      $s1 = ($opmode eq 'on')?'warm':'idle';
   }
   return "$opmode $s1";
}
Mit der neuen Version könnte man diesen code vereinfachen, allerdings bräuchte man dann auch den Namen vom readingsProxy im eval verfügbar, um auf die "eigenen" readings zuzugreifen.
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...