TinyTX - 36_GSD.pm Fehler mit perl Version 5.28

Begonnen von golmic, 28 Dezember 2019, 17:10:13

Vorheriges Thema - Nächstes Thema

golmic

Hallo!
Ich bin derzeit dabei meine fhem-Installation von RPI-2 / Jessie auf einen RPI-4 / Buster um zu ziehen. Durch den Umzug ändert sich die benutzte perl-Version von 5.20 auf 5.28.
Ich habe einige TinyRX-Sensoren mit dem Modul 36_GSD.pm von Hexenmeister (https://raw.githubusercontent.com/hexenmeister/MyFHEM/master/FHEM/36_GSD.pm ) eingebunden.
Jeelink läuft auch soweit auf dem RPI-4.
Sobald eine neue Nachricht von einen TinyTX kommt, wird aber kein neues Device angelegt. Im Logfile erscheint dann aber die folgenden Fehlermeldung:

2019.12.28 16:51:34 0: ERROR: Cannot autoload GSD
2019.12.28 16:51:34 3: TinyTx: Unknown code GSD 2 83 1 208 81 202 158 14 16 154 6 24 136 19 , help me!
2019.12.28 16:51:48 1: reload: Error:Modul 36_GSD deactivated: Experimental keys on scalar is now forbidden at ./FHEM/36_GSD.pm line 678.
Type of arg 1 to keys must be hash or array (not hash element) at ./FHEM/36_GSD.pm line 678, near "})"


Im Modul steht an dieser Stelle (fett) derzeit dieser Code:

if(scalar(@readings_keys)>0) {
      foreach my $reading (sort @readings_keys) {
        my $val = $dMap->{READINGS}->{$reading};
       [b] Log 5, "GSD: update $dev_name $reading: " . $val;[/b]
        my $mReading = $readings_mapping->{$reading};
        if(defined($mReading)) {
        #Log 1, "GSD remapp reading: $reading -> $mReading";
        $reading = $mReading;
        }
        readingsBulkUpdate($dev_hash, $reading, $val);
        #readingsSingleUpdate($dev_hash, $reading, $val, 1);
      }


Da ich parktisch über keine perl-Kenntnisse verfüge, weiß ich nicht was in dem Modul zu ändern ist, damit es auch unter der Version 5.28 wieder läuft. Wer kann mit weiterhelfen?
Danke und Gruß
Golmic

CoolTux

Versuch mal bitte so

foreach my $reading (sort @{$readings_keys})

Und dann ein reload des Moduls oder fhem neustart
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

golmic

Danke.
Habe die Zeile im Modul mal geändert. Jetzt kommt nach dem reload die Meldung:
Experimental keys on scalar is now forbidden at ./FHEM/36_GSD.pm line 678.
Type of arg 1 to keys must be hash or array (not hash element) at ./FHEM/36_GSD.pm line 678, near "})"
Global symbol "$readings_keys" requires explicit package name (did you forget to declare "my $readings_keys"?) at ./FHEM/36_GSD.pm line 680.

Muss ich jetzt $readings_keys definieren?

CoolTux

Die Meldung ist die selbe geblieben. Hat wohl nicht geholfen.
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

CoolTux

if(scalar(@{$readings_keys})>0) {
      foreach my $reading (sort @{$readings_keys}) {


Versuch mal so.
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

golmic

Die Änderung hat den Fehler auch nicht beseitigt. Meldung sieht jetzt so aus:
Experimental keys on scalar is now forbidden at ./FHEM/36_GSD.pm line 678.
Type of arg 1 to keys must be hash or array (not hash element) at ./FHEM/36_GSD.pm line 678, near "})"
Global symbol "$readings_keys" requires explicit package name (did you forget to declare "my $readings_keys"?) at ./FHEM/36_GSD.pm line 679.
Global symbol "$readings_keys" requires explicit package name (did you forget to declare "my $readings_keys"?) at ./FHEM/36_GSD.pm line 680.


Kann es sein, dass man noch was anderes anpassen muss? Vor ,,if (scalar..." steht noch folgendes:

     my @readings_keys=keys($dMap->{READINGS});
    if(scalar(@{$readings_keys})>0) {

CoolTux

Gut fangen wir erstmal ganz oben an.

my @readings_keys=keys( %{$dMap->{READINGS}} );

Die Änderungen von oben bitte wieder Rückgängig machen.
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

golmic

Das war die Lösung. Modul läuft und TinyTX devices werden angelegt.
Danke CoolTux für deine Unterstützung.
Wie / wer kann die Änderung auf Git-Hub nachtragen?

CoolTux

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

CoolTux

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

CoolTux

Ganz vergessen. Kannst Du bitte noch auf gelöst setzen.
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