Bitte um Hilfe zu Perl Code Hash mit Arrays...

Begonnen von dron72, 24 November 2019, 20:12:23

Vorheriges Thema - Nächstes Thema

dron72

Hallo zusammen,

ich stehe ein wenig auf dem Kriegsfuß mit Perl - sicher kann mir einer helfen.
Mir gehts darum, zu einem String ein paar zugeordnete Werte zurück zu bekommen. Ich dachte daher, ich mache ein Hash mit dem Code als Key und einem passenden Array für die anderen Werte. Hier ist mal ein wenig Code (das DEF aus einem Notify). Wie ihr sicher erahnen könnt, gehts um die Zuordnung einer UserID, die ich per MQTT bekomme zu einem User, dem genutzten "Medium" (=Finger, Karte, Code etc.) und dem auszuführenden FHEM Befehl.

MQTT2_ESP8266Client:USER:.* {
my $code = uc(ReadingsVal($NAME,"USER","unkown"));
Log 1, ("Usercode: ($code)");
my %codeInfos = (
'000001' => ("Oliver","Zeigefinger rechts","set keymatic open"),
'000002' => ("Oliver","Mittelfinger rechts","set keymatic lock")
);

my @userInfo = @{$codeInfos{$code}};
my $userName = $userInfo[0];
my $userFinger = $userInfo[1];
my $userCommand = $userInfo[2];
Log 1, ("User mit ($code) ist ($userName) und genutzt wurde ($userFinger) fuer ($userCommand)");

fhem $userCommand;

}


Habe schon viel durchprobiert und gelesen, aber bisher habe ich es nicht hinbekommen. Bei dieser Version gibts im Log:
2019.11.24 19:56:28 1: Usercode: (000001)
2019.11.24 19:56:28 1: ERROR evaluating my $EVTPART0='USER:';my $EVTPART1='000001';my $EVENT='USER: 000001';my $NAME='MQTT2_ESP8266Client';my $SELF='notifyFingerprint';my $TYPE='MQTT2_DEVICE';{
my $code = uc(ReadingsVal($NAME,"USER","unkown"));
Log 1, ("Usercode: ($code)");
my %codeInfos = (
'000001' => ("Oliver","Zeigefinger rechts","set keymatic open"),
'000002' => ("Oliver","Mittelfinger rechts","set keymatic lock")
);

my @userInfo = @{$codeInfos{$code}};
my $userName = $userInfo[0];
my $userFinger = $userInfo[1];
my $userCommand = $userInfo[2];
Log 1, ("User mit ($code) ist ($userName) und genutzt wurde ($userFinger) fuer ($userCommand)");

fhem $userCommand;

}: Can't use string ("Oliver") as an ARRAY ref while "strict refs" in use at (eval 1515485) line 9.

2019.11.24 19:56:28 3: notifyFingerprint return value: Can't use string ("Oliver") as an ARRAY ref while "strict refs" in use at (eval 1515485) line 9.



Könnte mir bitte jemand auf die Sprünge helfen, wie ich die drei Variablen unten (userName, userFinger und userCommand) sauber gefüllt bekomme?

Danke!

Olli

dron72

Habs jetzt selbst hinbekommen. So gehts. Ich hatte die Arrays im Hash nicht richtig definiert...

MQTT2_ESP8266Client:USER:.* {
my $code = uc(ReadingsVal($NAME,"USER","unkown"));
Log 1, ("Usercode: ($code)");
my %codeInfos = (
'000001' => ["Oliver","Zeigefinger rechts","set keymatic open"],
'000002' => ["Oliver","Mittelfinger rechts","set keymatic lock"]
);

my @userInfo = @{$codeInfos{$code}};
my $userName = $userInfo[0];
my $userFinger = $userInfo[1];
my $userCommand = $userInfo[2];
Log 1, ("User mit ($code) ist ($userName) und genutzt wurde ($userFinger) fuer ($userCommand)");

fhem $userCommand;

}