FHEM Forum

Verschiedenes => Bastelecke => Thema gestartet von: golmic am 28 Dezember 2019, 17:10:13

Titel: TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: golmic am 28 Dezember 2019, 17:10:13
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 (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
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: CoolTux am 28 Dezember 2019, 18:18:43
Versuch mal bitte so

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

Und dann ein reload des Moduls oder fhem neustart
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: golmic am 28 Dezember 2019, 19:36:36
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?
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: CoolTux am 28 Dezember 2019, 20:23:47
Die Meldung ist die selbe geblieben. Hat wohl nicht geholfen.
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: CoolTux am 28 Dezember 2019, 20:27:37
if(scalar(@{$readings_keys})>0) {
      foreach my $reading (sort @{$readings_keys}) {


Versuch mal so.
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: golmic am 28 Dezember 2019, 21:38:38
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) {
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: CoolTux am 28 Dezember 2019, 22:02:20
Gut fangen wir erstmal ganz oben an.

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

Die Änderungen von oben bitte wieder Rückgängig machen.
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: golmic am 28 Dezember 2019, 22:22:43
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?
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: CoolTux am 28 Dezember 2019, 22:27:17
Ich werde ein issues auf machen.
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: CoolTux am 29 Dezember 2019, 08:06:57
Habe eben ein Issues aufgemacht.

Grüße
Titel: Antw:TinyTX - 36_GSD.pm Fehler mit perl Version 5.28
Beitrag von: CoolTux am 29 Dezember 2019, 08:23:36
Ganz vergessen. Kannst Du bitte noch auf gelöst setzen.