ERROR: Malformed prototype for

Begonnen von Amenophis86, 10 November 2020, 12:42:23

Vorheriges Thema - Nächstes Thema

Amenophis86

Hallo,

kann mir mal einer sagen was mir dieser Fehler sagen will:
ERROR:Malformed prototype for main::KNX_TypAendern: $device, $dpt, $gr, $anz at ./FHEM/99_myUtils_Allgemein.pm line 38.

Ich komme nicht weiter. Hier mein Code:
##############################################
# $Id: myUtilsTemplate.pm 21509 2020-03-25 11:20:51Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;

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

# Enter you functions below _this_ line.

sub test()
{

}

sub KNX_rename ()
{

my @devices = devspec2array("NAME=KNX.*");
my $anz = 0;
my ($ugr, $gr);

foreach my $device (@devices)
{

#1/1/ - Schalten
if (substr($device,4,4) eq "0101")
{
KNX_TypAendern($device, "1.001", "1/2/", $anz);
}

#1/2/ - Dimmen
elsif (substr($device,4,4) eq "0102")
{
KNX_TypAendern($device, "3.007", "1/2/", $anz);
}

#1/3/ - Wert (Dimmen)
elsif (substr($device,4,4) eq "0103")
{
KNX_TypAendern($device, "5.001", "1/3/", $anz);
}

#1/4/ - RMs
elsif (substr($device,4,4) eq "0104")
{
KNX_TypAendern($device, "1.001", "1/4/", $anz);
}

#1/5/ - RMw
elsif (substr($device,4,4) eq "0105")
{
KNX_TypAendern($device, "5.001", "1/5/", $anz);
}

#2/0/ - Temperaturmesswert
elsif (substr($device,4,4) eq "0200")
{
KNX_TypAendern($device, "9.001", "2/0/", $anz);
}

#2/2/ - Betriebsartvorwahl
elsif (substr($device,4,4) eq "0202")
{
KNX_TypAendern($device, "20.102", "2/2/", $anz);
}

#2/3/ - Betriebsart Direkt
elsif (substr($device,4,4) eq "0203")
{
KNX_TypAendern($device, "1.001", "2/3/", $anz);
}

#3/1/ - Auf / Ab
elsif (substr($device,4,4) eq "0301")
{
KNX_TypAendern($device, "1.008", "3/1/", $anz);
}

#3/3/ - Absolute Position (inkl Lamellenposition)
elsif (substr($device,4,4) eq "0303")
{
KNX_TypAendern($device, "5.001", "3/3/", $anz);
}

#3/6/ - Diagnosetext
elsif (substr($device,4,4) eq "0306")
{
KNX_TypAendern($device, "16.000", "3/6/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0400")
{
KNX_TypAendern($device, "1.001", "4/0/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0401")
{
KNX_TypAendern($device, "1.001", "4/1/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0402")
{
KNX_TypAendern($device, "1.001", "4/2/", $anz);
}

}



}

sub KNX_TypAendern ($device, $dpt, $gr, $anz)
{
my ($device, $dpt, $gr, $anz) = @_;
my $ugr;

$anz++;
$ugr = substr($device,8);
if(substr($ugr,0,1) eq "0") {$ugr =~ s/0//;}
if(substr($ugr,0,1) eq "0") {$ugr =~ s/0//;}
$gr = $gr.$ugr;

fhem("defmod ".$device." KNX ".$gr.":dpt".$dpt);
}

1;


Line 38 ist übrigens: KNX_TypAendern($device, "1.001", "1/2/", $anz);
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Sidey

Hi,

Du kannst in den Prototypen keine Variablen Namen angeben:
https://docstore.mik.ua/orelly/perl/prog3/ch06_04.htm

Am besten lässt Du die auch gleich weg und verlierst dich nicht in dem Glauben, sie würden dir wirklich helfen.
Es gibt nur wenige Fälle in denen in Perl Prototypen verwendet werden sollten.
Pack die Validierung der übergebenen Variablen besser in die sub.

Gruß Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Amenophis86

#2
Ich habe nichtmal ahnung was Prototypen sind. Ich kann null mit dem Fehler anfange. Sorry. Wo habe ich den Prototypen genutzt?

Edit:
Was ich will ist folgendes. Die Sub KNX_TypAendern wird immer wieder gebraucht und muss aus der Haupt Sub ja die Daten bekommen, welche sich teilweise ändern. Wo liegt nun der Fehler in der Übergabe bzw. wo nutze ich dies Prototypen?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

sub KNX_TypAendern ($device, $dpt, $gr, $anz)


sub KNX_TypAendern ($$$$)

oder gleich ganz weg lassen

sub KNX_TypAendern {

}
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

Amenophis86

#4
Edit:

Ich komme gleich nochmal neu :D
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

Habe es jetzt wie folgt geändert:
##############################################
# $Id: myUtilsTemplate.pm 21509 2020-03-25 11:20:51Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;

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

# Enter you functions below _this_ line.

sub test()
{

}

sub KNX_rename ()
{

my @devices = devspec2array("NAME=KNX.*");
my $anz = 0;
my ($ugr, $gr);

foreach my $device (@devices)
{

#1/1/ - Schalten
if (substr($device,4,4) eq "0101")
{
KNX_TypAendern($device, "1.001", "1/2/", $anz);
}

#1/2/ - Dimmen
elsif (substr($device,4,4) eq "0102")
{
KNX_TypAendern($device, "3.007", "1/2/", $anz);
}

#1/3/ - Wert (Dimmen)
elsif (substr($device,4,4) eq "0103")
{
KNX_TypAendern($device, "5.001", "1/3/", $anz);
}

#1/4/ - RMs
elsif (substr($device,4,4) eq "0104")
{
KNX_TypAendern($device, "1.001", "1/4/", $anz);
}

#1/5/ - RMw
elsif (substr($device,4,4) eq "0105")
{
KNX_TypAendern($device, "5.001", "1/5/", $anz);
}

#2/0/ - Temperaturmesswert
elsif (substr($device,4,4) eq "0200")
{
KNX_TypAendern($device, "9.001", "2/0/", $anz);
}

#2/2/ - Betriebsartvorwahl
elsif (substr($device,4,4) eq "0202")
{
KNX_TypAendern($device, "20.102", "2/2/", $anz);
}

#2/3/ - Betriebsart Direkt
elsif (substr($device,4,4) eq "0203")
{
KNX_TypAendern($device, "1.001", "2/3/", $anz);
}

#3/1/ - Auf / Ab
elsif (substr($device,4,4) eq "0301")
{
KNX_TypAendern($device, "1.008", "3/1/", $anz);
}

#3/3/ - Absolute Position (inkl Lamellenposition)
elsif (substr($device,4,4) eq "0303")
{
KNX_TypAendern($device, "5.001", "3/3/", $anz);
}

#3/6/ - Diagnosetext
elsif (substr($device,4,4) eq "0306")
{
KNX_TypAendern($device, "16.000", "3/6/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0400")
{
KNX_TypAendern($device, "1.001", "4/0/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0401")
{
KNX_TypAendern($device, "1.001", "4/1/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0402")
{
KNX_TypAendern($device, "1.001", "4/2/", $anz);
}

}



}

sub KNX_TypAendern ($$$$)
{
my ($device, $dpt, $gr, $anz) = @_;
my $ugr;

$anz++;
$ugr = substr($device,8);
if(substr($ugr,0,1) eq "0") {$ugr =~ s/0//;}
if(substr($ugr,0,1) eq "0") {$ugr =~ s/0//;}
$gr = $gr.$ugr;

fhem("defmod ".$device." KNX ".$gr.":dpt".$dpt);
}

1;


Der neue Fehler lautet:
oo many arguments for main::KNX_TypAendern at ./FHEM/99_myUtils_Allgemein.pm line 38, near "$anz)"

Ich bin doch net doof und habe das schon ein paar Mal gemacht. Irgendwas muss ich doch übersehen, was ich sonst anders mache. Komisch
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

Ich habe mal die Rheinfolge der Subs geändert, das scheint geholfen zu haben. Warum auch immer. Hoffen wir, dass es dabei bleibt. Danke für die Hilfe
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux


##############################################
# $Id: myUtilsTemplate.pm 21509 2020-03-25 11:20:51Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;

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

# Enter you functions below _this_ line.

sub test()
{

}

sub KNX_TypAendern {

my ($device, $dpt, $gr, $anz) = @_;
my $ugr;

$anz++;
$ugr = substr($device,8);
if(substr($ugr,0,1) eq "0") {$ugr =~ s/0//;}
if(substr($ugr,0,1) eq "0") {$ugr =~ s/0//;}
$gr = $gr.$ugr;

fhem("defmod ".$device." KNX ".$gr.":dpt".$dpt);
}

sub KNX_rename ()
{

my @devices = devspec2array("NAME=KNX.*");
my $anz = 0;
my ($ugr, $gr);

foreach my $device (@devices)
{

#1/1/ - Schalten
if (substr($device,4,4) eq "0101")
{
KNX_TypAendern($device, $anz);
}

#1/2/ - Dimmen
if (substr($device,4,4) eq "0102")
{
KNX_TypAendern($device, "1.001", "1/2/", $anz);
}

#1/3/ - Wert (Dimmen)
elsif (substr($device,4,4) eq "0103")
{
KNX_TypAendern($device, "5.001", "1/3/", $anz);
}

#1/4/ - RMs
elsif (substr($device,4,4) eq "0104")
{
KNX_TypAendern($device, "1.001", "1/4/", $anz);
}

#1/5/ - RMw
elsif (substr($device,4,4) eq "0105")
{
KNX_TypAendern($device, "5.001", "1/5/", $anz);
}

#2/0/ - Temperaturmesswert
elsif (substr($device,4,4) eq "0200")
{
KNX_TypAendern($device, "9.001", "2/0/", $anz);
}

#2/2/ - Betriebsartvorwahl
elsif (substr($device,4,4) eq "0202")
{
KNX_TypAendern($device, "20.102", "2/2/", $anz);
}

#2/3/ - Betriebsart Direkt
elsif (substr($device,4,4) eq "0203")
{
KNX_TypAendern($device, "1.001", "2/3/", $anz);
}

#3/1/ - Auf / Ab
elsif (substr($device,4,4) eq "0301")
{
KNX_TypAendern($device, "1.008", "3/1/", $anz);
}

#3/3/ - Absolute Position (inkl Lamellenposition)
elsif (substr($device,4,4) eq "0303")
{
KNX_TypAendern($device, "5.001", "3/3/", $anz);
}

#3/6/ - Diagnosetext
elsif (substr($device,4,4) eq "0306")
{
KNX_TypAendern($device, "16.000", "3/6/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0400")
{
KNX_TypAendern($device, "1.001", "4/0/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0401")
{
KNX_TypAendern($device, "1.001", "4/1/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0402")
{
KNX_TypAendern($device, "1.001", "4/2/", $anz);
}

}



}

1;


Es liegt in der Tat an der Reihnfolge
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

Amenophis86

Ich meine mich auch zu erinnern, dass subs vorhanden sein müssen bevor sie aufgerufen werden ;)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

Das Sollte sich aber eigentlich erledigt haben wenn man Prototypen nicht verwendet. Und ich habe das gerade getestet. Bei mir geht es


##############################################
# $Id: myUtilsTemplate.pm 21509 2020-03-25 11:20:51Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;

sub
myUtils_TestFn_Initialize {

  my ($hash) = @_;
}

# Enter you functions below _this_ line.

sub test {

}


sub KNX_rename {

my @devices = devspec2array("NAME=KNX.*");
my $anz = 0;
my ($ugr, $gr);

foreach my $device (@devices)
{

#1/1/ - Schalten
if (substr($device,4,4) eq "0101")
{
KNX_TypAendern($device, $anz);
}

#1/2/ - Dimmen
if (substr($device,4,4) eq "0102")
{
KNX_TypAendern($device, "1.001", "1/2/", $anz);
}

#1/3/ - Wert (Dimmen)
elsif (substr($device,4,4) eq "0103")
{
KNX_TypAendern($device, "5.001", "1/3/", $anz);
}

#1/4/ - RMs
elsif (substr($device,4,4) eq "0104")
{
KNX_TypAendern($device, "1.001", "1/4/", $anz);
}

#1/5/ - RMw
elsif (substr($device,4,4) eq "0105")
{
KNX_TypAendern($device, "5.001", "1/5/", $anz);
}

#2/0/ - Temperaturmesswert
elsif (substr($device,4,4) eq "0200")
{
KNX_TypAendern($device, "9.001", "2/0/", $anz);
}

#2/2/ - Betriebsartvorwahl
elsif (substr($device,4,4) eq "0202")
{
KNX_TypAendern($device, "20.102", "2/2/", $anz);
}

#2/3/ - Betriebsart Direkt
elsif (substr($device,4,4) eq "0203")
{
KNX_TypAendern($device, "1.001", "2/3/", $anz);
}

#3/1/ - Auf / Ab
elsif (substr($device,4,4) eq "0301")
{
KNX_TypAendern($device, "1.008", "3/1/", $anz);
}

#3/3/ - Absolute Position (inkl Lamellenposition)
elsif (substr($device,4,4) eq "0303")
{
KNX_TypAendern($device, "5.001", "3/3/", $anz);
}

#3/6/ - Diagnosetext
elsif (substr($device,4,4) eq "0306")
{
KNX_TypAendern($device, "16.000", "3/6/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0400")
{
KNX_TypAendern($device, "1.001", "4/0/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0401")
{
KNX_TypAendern($device, "1.001", "4/1/", $anz);
}

#4/0/ - Fensterkontakt auf/zu
elsif (substr($device,4,4) eq "0402")
{
KNX_TypAendern($device, "1.001", "4/2/", $anz);
}

}
}

sub KNX_TypAendern {

my ($device, $dpt, $gr, $anz) = @_;
my $ugr;

$anz++;
$ugr = substr($device,8);
if(substr($ugr,0,1) eq "0") {$ugr =~ s/0//;}
if(substr($ugr,0,1) eq "0") {$ugr =~ s/0//;}
$gr = $gr.$ugr;

fhem("defmod ".$device." KNX ".$gr.":dpt".$dpt);
}

1;
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

Amenophis86

Hex, Hex.... :D Keine Ahnung woran es lag. Vielleicht weil die sub neu eingelesen wurde und alles neu angelegt?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Sidey

Zitat von: Amenophis86 am 10 November 2020, 13:02:04
Ich habe nichtmal ahnung was Prototypen sind. Ich kann null mit dem Fehler anfange. Sorry. Wo habe ich den Prototypen genutzt?

Prototypen sind subs in denen angegeben wird, wie viele Variablen und von welchem Typ sie erwartet werden:

sub KNX_TypAendern ($$$$)
Genau genommen die ($$$$) Angabe beschreibt den Prototypen.
Lässt Du es weg, wird kein Prototyp erzeugt gegen den der Compiler den Aufruf validiert.

Empfehlung: Prototypen in Perl meiden, solange es nicht zwingend Gründe gibt sie zu verwenden.
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Christoph Morrison

#12
Du rufst da vierzehn mal substr($device,4,4) auf - das könntest du auch auf einen Aufruf + eine Variable eindampfen.
Vorallem ist das ja eine exklusive Bedingung, d.h. der Rückgabewerk von substr erfüllt genau nur eine deiner Bedingungen - du prüfst aber jede Bedingung bei jedem Durchlauf durch, auch wenn z.B. die erste Bedingung wahr ist.

$anz ist in KNX_rename auch immer 0.

Wzut

oh haben wir hier ein neues Spiel  ala "wir stellen Amenophis86 99myUtils heute mal auf den Kopf " ?
Wenn ja hätte ich auch noch einen der mich inwischen oft anspringt : der unötige Wechsel FHEM->Perl->FHEM usw.
Bsp : fhem("defmod  -> CommandDefMod :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Christoph Morrison

Zitat von: Wzut am 10 November 2020, 19:29:23
oh haben wir hier ein neues Spiel  ala "wir stellen Amenophis86 99myUtils heute mal auf den Kopf " ?

Ich dachte heute wäre MyUtils-Dienstag?!

betateilchen

Wenn man an Prototypen was ändert, hilft in aller Regel ein FHEM Neustart mehr als das bloße Neuladen der Moduldatei nach dem Edit. Das führt immer mal zu solchen Effekten wie hier im Thread aufgetreten.

(man könnte das jetzt tiefergehend erklären, aber dazu habe ich jetzt keine Lust. Einfach merken: Neustart nach Änderung von Prototypen, auch wenn man sie löscht.)

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Amenophis86

Jetzt geht es los, ich habe für mich mal schnell ein Programm geschrieben um nicht alles per Hand ändern zu müssen bei über 200 Gruppenadresse und nicht mein bestes geben, ich bitte dies zu entschuldigten :D Aber danke für eure Vorschläge, welche ich übernehmen werde, wenn ich die Sub feste einplane und schön machen werde ;)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

Zitat von: betateilchen am 10 November 2020, 19:45:49
Wenn man an Prototypen was ändert, hilft in aller Regel ein FHEM Neustart mehr als das bloße Neuladen der Moduldatei nach dem Edit. Das führt immer mal zu solchen Effekten wie hier im Thread aufgetreten.

(man könnte das jetzt tiefergehend erklären, aber dazu habe ich jetzt keine Lust. Einfach merken: Neustart nach Änderung von Prototypen, auch wenn man sie löscht.)

Das habe ich gemerkt und mir gedacht aber top, dass du es nochmals bestätigst. Dann lag ich nicht so falsch mit meiner Vermutung :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

Ach und die Var $anz hatte ich am Anfang genutzt und ist dann durch Copy und Paste einfach drinnen geblieben. Hast recht, dass die nix bringt aktuell :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

betateilchen

#19
Zitat von: Christoph Morrison am 10 November 2020, 19:19:11
Du rufst da vierzehn mal substr($device,4,4) auf - das könntest du auch auf einen Aufruf + eine Variable eindampfen.



sub KNX_rename {
  my @devices = devspec2array("NAME=KNX.*");
  my $anz = 0;
  my ($ugr, $gr);

  foreach my $device (@devices) {

    given (substr($device,4,4)) {
  when ('0101') { KNX_TypAendern($device, $anz); next; };
  when ('0102') { KNX_TypAendern($device, "1.001", "1/2/", $anz); next; };
      # usw...
      default {}
    }
  }
}


Zitat von: Wzut am 10 November 2020, 19:29:23
Wenn ja hätte ich auch noch einen der mich inwischen oft anspringt : der unötige Wechsel FHEM->Perl->FHEM usw.
Bsp : fhem("defmod  -> CommandDefMod :)

Du hast zwar prinzipiell recht, aber wenn jemand mit fhem() arbeitet, finde ich das völlig ok und vor allem für viele Anwender einfacher zu verstehen.

Und wenn Du schon mit Command<...> um die Ecke kommst: man könnte ja auch gleich AnalyzeCommandChain() verwenden ;)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Christoph Morrison

Zitat von: betateilchen am 10 November 2020, 19:54:55


sub KNX_rename {
  my @devices = devspec2array("NAME=KNX.*");
  my $anz = 0;
  my ($ugr, $gr);

  foreach my $device (@devices) {

    given (substr($device,4,4)) {
  when ('0101') { KNX_TypAendern($device, $anz); return; };
  when ('0102') { KNX_TypAendern($device, "1.001", "1/2/", $anz); return; };
      # usw...
      default {}
    }
  }
}


s/return/next/;

betateilchen

Zitat von: Christoph Morrison am 10 November 2020, 20:04:11
s/return/next/;

Danke für den Hinweis, das war ein copy&paste Fehler meinerseits.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Amenophis86

ah given when heißt das bei Perl. Habe nach Switch und Case gesucht aber gelesen, dass man Probleme bekommen könnte. Wieder was gelernt. Da bin ich ja froh, dass MyUtils Dienstag ist und ihr meine hässlichen Code so schön gemacht habt :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...