gelöst:Fehlermeldung: Too many arguments for main:: usw.

Begonnen von Jupedi, 17 April 2020, 19:53:26

Vorheriges Thema - Nächstes Thema

Jupedi

hallo,

kann jemand erklären, warum diese Definition nachstehende Fehlermeldung ergibt.

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

Es liegt wohl nicht am define selbst, weil auf einem anderen Raspi geht sie ohne Fehler durch.

Too many arguments for main::Multipl at (eval 752) line 1, near "))"

Es laufen auch zwei identische notify.
Ebenso strange, wenn ich bei den bereits funktionierenden notify auf bearbeiten (via DEF) gehe,
aber nix verändere und modify drücke kommt auch die Fehlermeldung

:(
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

CoolTux

Was genau soll den dieses Multipl für eine Funktion sein? Wo kommt die denn her?

Davon ab ist das keine vernünftige Regex

define n_Multipl notify ursprung
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Jupedi

Das ganze ist gerade erst mal eine Fingerübung.
Ich acker mich mich durch die ersten Schritte der Perlprogrammierung und zur Eigenmotivation
will ich mehrere Dummy Werte aus Fhem in einem Sub in 99_testUtils verarbeiten
und die Ergebnisse wieder an ein o. mehrere Dummys zurückgeben.

Ein Wert hat bereits geklappt die Übergabe mehrerer Werte, da haperts schon wieder.

Wollte für jeden zu übergebenden Dummy Wert erst mal ein eigenes notify erstellen.
(Wenn das klappt, dann versuchen ein notify zu erstellen, das alle Werte übergibt.

"ursprung" war nur der Name des dummy, das den zu übergebenden Wert enthält.

"Multipl" der Name meines Sub.

So viel zum Hintergrund des ganzen.

Bei einem Freund wird dieses notify

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

anstandlos angelegt und bei mir kommt eben die genannte Fehlermeldung.

Da will ich eigentlich hin:

Dummynamen Eingabe: variable1, variable2, variable3
Dummyname Ausgabe: ergebnis

Für jedes Dummy ein entsprechendes notify z.B.:

define n_Multipl1 notify variable1 {Multipl(ReadingsNum("variable1","state",""))}


Damit sollen die Werte weiterverarbeitet werden.


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

sub Multipl($$$)

{

#ob das überhaupt so möglich ist weiß ich noch nicht, elegant muss das auch noch nicht sein.


       my ($variable1) =@_;
       my ($variable2) =@_;
       my ($variable3) =@_;

       my ($Wert)= $variable1*$variable2*$variable3;

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

}

1;


Das zur Erklärung.

Mein primäres Prob. ist die Fehlermeldung beim notify.

Too many arguments for main::Multipl at (eval 752) line 1, near "))"
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

CoolTux

Hast Du ein shutdown restart Deines FHEM mal gemacht? Du hast bestimmt im laufenden Betrieb die Prototypen Deklaration geändert. Arbeite am besten ohne Prototyping

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

sub Multipl($$$)

{

#ob das überhaupt so möglich ist weiß ich noch nicht, elegant muss das auch noch nicht sein.


       my ($variable1) =@_;
       my ($variable2) =@_;
       my ($variable3) =@_;

       my ($Wert)= $variable1*$variable2*$variable3;

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

}

1;


Nicht
sub Multipl($$$)
{

sondern
sub Multipl {

Neustart nach dieser Änderung nicht vergessen.

Das hier würde ich ändern
my ($variable1) =@_;
my ($variable2) =@_;
my ($variable3) =@_;


Man kann hier noch mit shift arbeiten
my ($variable1) = shift;
my ($variable2) = shift;
my ($variable3) = shift;


Ab 4 Variablen kann man auch

my ($variable1, $variable2, variable3) = @_;
machen.

Und versuch gleich von Anfang an Dir eine schöne Formatierung zu zu legen

my ($Wert) = $variable1 * $variable2 * $variable3;

Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Jupedi

shutdown restart habe ich schon immer gemacht, aber vielleicht nicht lange genug danach gewartet.
Start dauert nach letztem Update sehr lange (HM CCU2)

Das notify geht jetzt. merci!
Prob. waren wohl die ($$$).

Allein es kommt noch nix im ergebnis dummy an.

Code ist jetzt wie folgt abgeändert.

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

sub Multipl

{

       my ($variable1) = shift;
       my ($variable2) = shift;
       my ($variable3) = shift;

       my $Wert = $variable1 * $variable2 * $variable3;

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

}

1;


Und die drei notify erstellt

define n_Multipl1 notify variable1 {Multipl(ReadingsNum("variable1","state",""))}

define n_Multipl2 notify variable2 {Multipl(ReadingsNum("variable2","state",""))}

define n_Multipl3 notify variable3 {Multipl(ReadingsNum("variable3","state",""))}
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

CoolTux

Triggert denn das Notify?
Gibt es ein Device namens Ergebniss und besser setreading nehmen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Jupedi


Triggert denn das Notify?
Der Zeitstempel des notify ändert sich, also würde ich sagen ja.

Gibt es ein Device namens Ergebniss
Es gibt ein Zieldummy/device genannt "ergebnis".

mmh, setstate hat auch schon mal funktioniert.  :-[

Bei

       my ($variable1) = shift;
       my ($variable2) = shift;
       my ($variable3) = shift;


ist mir nicht klar, wo die Zuordnungsinformation steckt, wenn z.B. das notify : n_Multipl2 triggert (Auslöser ist dummy variable2),
dass dieser Wert der $variable2 zugeordnet werden muss.

Kommen die Werte aus einem Array mit drei Werten und wird
my ($variable1, $variable2, variable3) = @_;
verwendet, so wird ja ein Wert nach dem anderen ausgelesen und ebenso seriell den Variablen: $variable1/2/3 zugeordnet.


Muss das dann so heißen?

fhem ("setreading ergebnis state" .$Wert);



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

CoolTux

Zitat von: Jupedi am 18 April 2020, 18:20:18
Bei

       my ($variable1) = shift;
       my ($variable2) = shift;
       my ($variable3) = shift;


ist mir nicht klar, wo die Zuordnungsinformation steckt, wenn z.B. das notify : n_Multipl2 triggert (Auslöser ist dummy variable2),
dass dieser Wert der $variable2 zugeordnet werden muss.

Kommen die Werte aus einem Array mit drei Werten und wird
my ($variable1, $variable2, variable3) = @_;
verwendet, so wird ja ein Wert nach dem anderen ausgelesen und ebenso seriell den Variablen: $variable1/2/3 zugeordnet.


Muss das dann so heißen?

fhem ("setreading ergebnis state" .$Wert);


Die Zuordnung machst Du bei der Übergabe wen Du die Funktion aufrufst. Das Konstrukt an sich ist aber seltsam.
So wie ich Dich verstanden habe übergibst Du immer nur einen Wert und hoffst das das dieser in der richtigen $variablen landet?

Wenn ich

meineFunktion('variable2')

aufrufe dann kannst Du nicht

meineFunktion {
    my $variable1;
    my $variable2;
    my $variable3;
}

hoffen das die variable2 auch in $variable2 landet. Sie wird immer in $variable1 landen weil Du nur eine übergibst.


Am besten Du zeigst mal Dein ganzes Konstrukt und vor allem bei Dir Logausgaben ein

Log 1,'Meine Logausgabe';
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Jupedi

viel mehr Konstrukt ist da fast nicht.


4 Dummys:
variable1, variable2, variable3, ergebnis

Es sind die drei notifys:
define n_Multipl1 notify variable1 {Multipl(ReadingsNum("variable1","state",""))}

define n_Multipl2 notify variable2 {Multipl(ReadingsNum("variable2","state",""))}

define n_Multipl3 notify variable3 {Multipl(ReadingsNum("variable3","state",""))}


Die Datei mit der ich es teste, genannt: 99_testUtils.pm

Der gesamte Code in 99_testUtils.pm besteht aus:


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

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

sub Multipl

{

       my ($variable1) = shift;
       my ($variable2) = shift;
       my ($variable3) = shift;

       my $Wert = $variable1 * $variable2 * $variable3;

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

}

1;


Damit bin ich überfragt: Log 1,'Meine Logausgabe';
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

CoolTux

#9
Du übergibst doch nur einen einzigen Wert an die Funktion.
Den Wert welcher die Funktion ReadingsNum aus liest.

Auf jeden Fall ist die Multiplikation Unsinn. Es kommen keine 3 Werte an..

Lese am besten erstmal ein Perlbuch. Und dann über erstmal mit eigenen Perlscripten in der Bash Shell Deines Linuxsystems.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Jupedi

Da bin ich ja dabei, ich stell das mal zurück, merci
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

CoolTux

Wir können das gerne auch zusammen mal üben . Ich zeige Dir einen Anfang wo Du drauf aufbauen kannst.
Wenn Du magst.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Jupedi

Danke, ich bin mit dem Perl Schmöker erst halb durch und war nur etwas ungeduldig.
Wollte mal etwas praktisch anwenden.
War vielleicht ein wenig früh.

Ich mache das Buch jetzt erst mal zuende und würde dann gerne auf dein Angebot zurückkommen.

Herzlichen Dank!
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

CoolTux

Du kannst das auch ausserhalb von FHEM üben. Sofern Du das noch nicht machst.

Einfach in der Linux Shell ein Perlscript anlegen und dadrin den Code ausprobieren.


Viel Spaß dabei.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Jupedi

#14
Mach das via Terminal des Notebook, ruf da das entsprechende Programmauf, an dem ich gerade übe auf.

jo, merci
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