FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Jupedi am 12 März 2020, 15:54:07

Titel: gelöst:Probleme mit Wertübergabe beim ersten 99_testUtils Versuch
Beitrag von: Jupedi am 12 März 2020, 15:54:07
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 ?
Titel: Antw:Probleme beim ersten 99_testUtils Versuch
Beitrag 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
Titel: Antw:Probleme beim ersten 99_testUtils Versuch
Beitrag von: rabehd am 12 März 2020, 16:39:05
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?
Titel: Antw:Probleme beim ersten 99_testUtils Versuch
Beitrag von: xenos1984 am 12 März 2020, 16:56:33
Außerdem müsstest du offenbar auf ursprung triggern und nicht auf ergebnis, und auch dessen Wert übergeben.
Titel: Antw:Probleme beim ersten 99_testUtils Versuch
Beitrag von: Prof. Dr. Peter Henning am 12 März 2020, 18:06:50
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
Titel: Antw:Probleme beim ersten 99_testUtils Versuch
Beitrag von: rabehd am 12 März 2020, 18:44:53
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.
Titel: Antw:Probleme beim ersten 99_testUtils Versuch
Beitrag von: Jupedi am 13 März 2020, 15:49:49
Danke für die Infos
Werde jetzt noch mal versuchen das umzusetzen und melde mich dann.
Titel: Antw:Probleme beim ersten 99_testUtils Versuch
Beitrag von: Jupedi am 13 März 2020, 17:30:46
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>
Titel: Antw:Probleme beim ersten 99_testUtils Versuch
Beitrag von: Otto123 am 13 März 2020, 18:43:11
Auch Leerzeichen haben eine Bedeutung :)
"setstate ergebnis " .$Wert2
Sagt doch die Fehlermeldung sehr plastisch  :-X setstate ergebnis100 du wolltest doch setstate ergebnis 100
Titel: Antw:Probleme beim ersten 99_testUtils Versuch
Beitrag von: Jupedi am 13 März 2020, 18:48:47
Ach komm, das Leerzeichen  ::) Das darf doch nicht ...

Funktioniert !!!

Danke  :D
Titel: Antw:gelöst:Probleme mit Wertübergabe beim ersten 99_testUtils Versuch
Beitrag von: Prof. Dr. Peter Henning am 14 März 2020, 15:34:13
https://www.bpb.de/apuz/287315/lesekompetenz-und-lesebegriff
8)

LG

pah