Berechnungen in 99_Utils.pm

Begonnen von haneub, 18 April 2016, 21:53:27

Vorheriges Thema - Nächstes Thema

haneub

Hallo,
habs auch nach 5h nicht geschafft ein Beispiel zu finden, wie ein Wert in einer subroutine in 99_Utils.pm übergeben wird und wieder zurück kommt.
Ich habe ein Gerät "VSR" mit Readings (z.B. REG_HC_TEMP_Extract das wird z.B. mit dem Wert 18 angezeigt.
Ich hab in 99_Utils.pm
sub
Wirkungsgrad($$$)
{
my ($Zuluft,$Abluft,$Frischluft) = @_;
my $eta=($Zuluft-$Frischluft)/($Abluft-$Frischluft);
return $eta;
}

div bei Null muss ich da noch abfangen..
Versucht habe ich ein
attr VSR userReadings eta {Wirkungsgrad("REG_HC_TEMP_Overheat","REG_HC_TEMP_Extract","REG_HC_TEMP_Outdoor");}
bekomme da aber immer nur als eta 0
Ich habs auch schon mit Value bzw. ReadingsVal ohne Erfolg versucht.
Wie bekomme ich die Werte der Readings in die Subroutine und das Ergebnis wieder zurück?
Vielen Dank, Harald

JMW

Z.B. so:


define di_Test DOIF ( "Trigger" ) ( {
                                     my $returnWert = Wirkungsgrad([Zuluftwert], [Abluftwert], [Frischluftwert]);
                                     fhem("set etaWert $returnWert");
                                   } )



haneub

Hallo,
danke für den Code
Das funktioniert irgendwie auch nicht:
ERROR:

di_Test DOIF: no trigger in condition: "REG_HC_TEMP_Outdoor" Unknown command my, try help. Unknown command fhem("set, try help. Unknown command }, try help.
Harald

JoWiemann

Zitat von: haneub am 18 April 2016, 21:53:27
Hallo,
habs auch nach 5h nicht geschafft ein Beispiel zu finden, wie ein Wert in einer subroutine in 99_Utils.pm übergeben wird und wieder zurück kommt.
Ich habe ein Gerät "VSR" mit Readings (z.B. REG_HC_TEMP_Extract das wird z.B. mit dem Wert 18 angezeigt.
Ich hab in 99_Utils.pm
sub
Wirkungsgrad($$$)
{
my ($Zuluft,$Abluft,$Frischluft) = @_;
my $eta=($Zuluft-$Frischluft)/($Abluft-$Frischluft);
return $eta;
}

div bei Null muss ich da noch abfangen..
Versucht habe ich ein
attr VSR userReadings eta {Wirkungsgrad("REG_HC_TEMP_Overheat","REG_HC_TEMP_Extract","REG_HC_TEMP_Outdoor");}
bekomme da aber immer nur als eta 0
Ich habs auch schon mit Value bzw. ReadingsVal ohne Erfolg versucht.
Wie bekomme ich die Werte der Readings in die Subroutine und das Ergebnis wieder zurück?
Vielen Dank, Harald

Ich denke, dass die Übergabewerte "REG_HC_TEMP_Overheat","REG_HC_TEMP_Extract","REG_HC_TEMP_Outdoor" keine Werte beinhalten. Ersetz doch mal durch ReadingsVal("devicename", "REG_HC_TEMP_Overheat",0) usw.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM