gelöst:Probleme mit Wertübergabe beim ersten 99_testUtils Versuch

Begonnen von Jupedi, 12 März 2020, 15:54:07

Vorheriges Thema - Nächstes Thema

Jupedi

Hallo,

beschäftige mich gerade etwas mit Perl Programmierung und versuche es in einer 99_testUtils anzuwenden.

Ich habe zwei Dummys definiert <ursprung> und <ergebnis>

Ziel ist nur, zu Testzwecken, den Wert aus <ursprung> an die Sub zu übergeben,
etwas zu rechnen ( $Wert1*100) und dann an Dummy <ergebnis> zurückzugeben.

Der Aufruf soll über folgendes Notify erfolgen.
define n_Multipl notify ergebnis {Multipl("ergebnis")}

Die Datei heißt 99_testUtils.pm

Mein Testscript sieht so aus.

package main;
use strict;
use warnings;
use POSIX;

sub testUtils_Initialize($)
{
   my ($hash) = @_;
}

sub Multipl($)

{

my ($Wert1) = @_;

  my $Wert2 = $Wert1*100;

{fhem ("setstate ergebnis $Wert2")}

}

1;


Habe versucht, mich an die Struktur aus dem Wiki zu halten, scheitere aber gerade.

Der Wert von<ergebnis> ändert sich nicht entsprechend.

Woran krankts ?
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

KernSani

Aktuell übergibst du den Wert ,,ergebnis", du müsstest noch mit ReadingsVal (siehe Commandref) den tatsächlich Wert aus dem Dummy lesen


Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

rabehd

Zitat von: KernSani am 12 März 2020, 16:14:40
Aktuell übergibst du den Wert ,,ergebnis", du müsstest noch mit ReadingsVal (siehe Commandref) den tatsächlich Wert aus dem Dummy lesen


Gesendet von iPhone mit Tapatalk

Vielleicht etwas ausführlicher.
Du übergibst der Funktion immer die Zeichenkette "ergebnis".
Somit ist $Wert1 keine Zahl, sondern eine Zeichenkette. Eine Zeichenkette mal 100... macht das Sinn?
Auch funktionierende Lösungen kann man hinterfragen.

xenos1984

Außerdem müsstest du offenbar auf ursprung triggern und nicht auf ergebnis, und auch dessen Wert übergeben.

Prof. Dr. Peter Henning

ZitatEine Zeichenkette mal 100... macht das Sinn?
Aber ja. Perl ist eine Sprache mit schwacher Typisierung - wenn die Zeichenkette also einen Zahlenwert hat, geht das durchaus.

Kann man ausprobieren, indem man
{"100"*3}
in die FHEM Kommandozeile eingibt.

LG

pah

rabehd

Zitat von: Prof. Dr. Peter Henning am 12 März 2020, 18:06:50
Aber ja. Perl ist eine Sprache mit schwacher Typisierung - wenn die Zeichenkette also einen Zahlenwert hat, geht das durchaus.

Kann man ausprobieren, indem man
{"100"*3}
in die FHEM Kommandozeile eingibt.

LG

pah

Schon klar, aber mit Wort- oder Buchstabenwert (wie beim Geocaching) rechnet Perl wohl normalerweise nicht.
Auch funktionierende Lösungen kann man hinterfragen.

Jupedi

Danke für die Infos
Werde jetzt noch mal versuchen das umzusetzen und melde mich dann.
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

Jupedi

Also, das Notify sieht jetzt so aus:

define n_Multipl notify ursprung {Multipl(ReadingsNum("ursprung","state",""))}

damit scheint die Übergabe an die Sub zu funktionieren.

Die Sub sieht jetzt so aus:

package main;
use strict;
use warnings;
use POSIX;

sub testUtils_Initialize($$)
{
   my ($hash) = @_;
}

sub Multipl($)

{

my ($Wert1) = @_;

my $Wert2=$Wert1*100;

       {
       fhem ("setstate ergebnis" .$Wert2);
       }

}

1;


Im Log ist jetzt folgende Meldung:

2020.03.13 17:12:19 3: setstate ergebnis100 : Usage: setstate <name> <state>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.

2020.03.13 17:12:19 3: n_Multipl return value: Usage: setstate <name> <state>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.


Es scheint der Rückgabebefehl das Problem zu sein.

{fhem ("setstate ergebnis" .$Wert2);}

Nur kann ich mittels commandref den Fehler nicht finden.

setstate <devspec> <value>
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

Otto123

#8
Auch Leerzeichen haben eine Bedeutung :)
"setstate ergebnis " .$Wert2
Sagt doch die Fehlermeldung sehr plastisch  :-X setstate ergebnis100 du wolltest doch setstate ergebnis 100
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Jupedi

Ach komm, das Leerzeichen  ::) Das darf doch nicht ...

Funktioniert !!!

Danke  :D
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO