FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jostmario am 19 März 2015, 23:03:36

Titel: Array mit userreadings übergeben
Beitrag von: jostmario am 19 März 2015, 23:03:36
Hallo

habe in der 99_myUtils.pm diesen Code


#Das ist die Berechnung der aktuell nutzbaren Energiemenge (Temperaturen >40°, 8 Fühler, Puffer 3200 l ).
sub CalcEnergiemenge(@)
{
my @Array=@{shift()};
my $Sum = 0;
foreach(@Array)
{ $Sum += ($_ > 40 ? $_  : 40) }
return sprintf("%d", (($Sum - 180)/ 8 * 3200 * 0.001163));
}




diesen möchte ich per userreading aufrufen wie kann ich da ein array senden.
so klappt es nicht

attr myuvr_messuebersicht userReadings Energiemenge {CalcEnergiemenge (ReadingsVal"myuvr_messuebersicht","Sensor01", 0) , (ReadingsVal"myuvr_messuebersicht","Sensor02", 0),(ReadingsVal"myuvr_messuebersicht","Sensor03", 0),(ReadingsVal"myuvr_messuebersicht","Sensor04", 0),(ReadingsVal"myuvr_messuebersicht","Sensor05", 0),(ReadingsVal"myuvr_messuebersicht","Sensor06", 0),(ReadingsVal"myuvr_messuebersicht","Sensor07", 0),(ReadingsVal"myuvr_messuebersicht","Sensor08", 0)}

er gibt als fehlermeldung dann

Error evaluating myuvr_messuebersicht userReading Energiemenge: Can't use string ("74.6") as an ARRAY ref while "strict refs" in use at ./FHEM/99_myUtils.pm line 170

Gruß Josty

Titel: Antw:Array mit userreadings übergeben
Beitrag von: jostmario am 21 März 2015, 09:14:52
Hallo


hab es selbst rausgefunden.
in der fhem.cfg haben zwei klammern gefehlt
{CalcEnergiemenge ((ReadingsNum"myuvr_messuebersicht","Sensor01", 0) , (ReadingsVal"myuvr_messuebersicht","Sensor02", 0),(ReadingsVal"myuvr_messuebersicht","Sensor03", 0),(ReadingsVal"myuvr_messuebersicht","Sensor04", 0),(ReadingsVal"myuvr_messuebersicht","Sensor05", 0),(ReadingsVal"myuvr_messuebersicht","Sensor06", 0),(ReadingsVal"myuvr_messuebersicht","Sensor07", 0),(ReadingsVal"myuvr_messuebersicht","Sensor08", 0))}

und die 99_myUtils.pm hab ich so angepasst:

#Das ist die Berechnung der aktuell nutzbaren Energiemenge (Temperaturen >40°, 8 Fühler, Puffer 3200 l ).

sub CalcEnergiemenge(@)
{
my $Sum = 0;
foreach(@_)
{ $Sum += ($_ > 40 ? $_ : 40) }
return sprintf("%d", (($Sum - 180)/ 8 * 3200 * 0.001163));
}


Gruß Josty