FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Sailor am 19 Mai 2019, 13:57:48

Titel: Doppelte Readings nach Neustart
Beitrag von: Sailor am 19 Mai 2019, 13:57:48
Ein herzerfrischendes "Moin" vom hntern-Deich vorweg!

Ich habe ein neues Modul für den DoorBird programmiert und habe dort zwei seltsame Verhalten entdeckt, welches ich mir nicht erklären kann.
Vielleicht könnt ihr mir ja einen Wink geben:

Problem 1
Vor einem Neustart habe ich folgende und richtige Readings im DeviceÖ

RelayAddr_01 1 2019-05-17 21:18:17
RelayAddr_02 2 2019-05-17 21:18:17
RelayAddr_03 ghcbml@1 2019-05-17 21:18:17
RelayAddr_04 ghcbml@2 2019-05-17 21:18:17
RelayAddr_05 ghcbml@3 2019-05-17 21:18:17


Nach dem Neustart hingegen habe ich die Readings doppelt mit leeren Einträgen:

RelayAddr_01 2019-05-17 08:25:48
RelayAddr_01 1 2019-05-17 21:18:17
RelayAddr_02 2019-05-17 08:25:48
RelayAddr_02 2 2019-05-17 21:18:17
RelayAddr_03 2019-05-17 08:25:48
RelayAddr_03 ghcbml@1 2019-05-17 21:18:17
RelayAddr_04 2019-05-17 08:25:48
RelayAddr_04 ghcbml@2 2019-05-17 21:18:17
RelayAddr_05 2019-05-17 08:25:48
RelayAddr_05 ghcbml@3 2019-05-17 21:18:17


und im Log bekomme ich folgenden Eintrag

2019.05.17 21:18:20 1: ./log/fhem.save:
Unknown command 1, try help.
Unknown command 2, try help.
Unknown command ghcbml@1, try help.
Unknown command ghcbml@2, try help.
Unknown command ghcbml@3, try help.


Wie kommen denn diese doppelten Readings zustande bzw. wie verhindert man diesen Fehler?

Problem 2

Ich bekomme ausserdem folgenden Eintrag im Log:
2019.05.19 13:37:29 1: PERL WARNING: Prototype mismatch: sub main::memcmp: none vs ($$;$) at /usr/local/share/perl/5.24.1/Sub/Exporter.pm line 445.

Kann sich Jemand einen Reim drauf machen, welcher Teil meines Programms den Exporter mismatch auslöst?

Gruss
    Sailor
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: jensb am 19 Mai 2019, 17:06:45
Ohne den Modulcode muss man spekulieren.

Problem1: Die Logeinträge deuten darauf hin, dass es bereits beim Schreiben der Readings Probleme gibt.
Problem2: Vermutlich ein formales Problem im Modulkopf. FHEM braucht keine Perl-Moduldefinitionen, stört sich aber auch nicht daran. Wenn man sie verwendet, müssen sie aber dem Perl-Standard entsprechen.

Wie wäre es mit Codeausschnitten?

Grüße,
Jens
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: zap am 20 Mai 2019, 07:39:23
Vielleicht in einem Fall ein unsichtbares Zeichen im Reading Name?

Du verwendest die Standardfunktionen wie readingsingleupdate für das Setzen der Readings?
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: Sailor am 20 Mai 2019, 09:53:19
Hi ZAP

Zitat von: zap am 20 Mai 2019, 07:39:23
Vielleicht in einem Fall ein unsichtbares Zeichen im Reading Name?
Du verwendest die Standardfunktionen wie readingsingleupdate für das Setzen der Readings?

DANKE! Das wars!!!

meine fehlerhafte Befehlszeile:
readingsBulkUpdate($hash, "RelayAddr_" . sprintf("%02d\n", $RelayNumber), $RelayAddress);

Super!

Bleibt nur noch Problem 2.
Da helfen auch keine Auszüge der Codezeilen, wenn mann nicht weiss an welcher Stelle das provoziert wird...
Der gesamte Code ist im /opt/fhem/FHEM/73_DoorBird.pm zu finden

Gruss
    Sailor
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: CoolTux am 20 Mai 2019, 10:18:55
Bei Deinem Problem 2 scheinst Du ein eigenes Perl zu verwenden. Sprich keines aus der Distribution. Ist das korrekt?
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: zap am 22 Mai 2019, 08:29:06
In Exporter.pm wird die Funktion memcmp offensichtlich nicht wie deklariert aufgerufen oder neu deklariert.
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: Sailor am 22 Mai 2019, 08:42:07
Hallo CoolTux

Zitat von: CoolTux am 20 Mai 2019, 10:18:55
Bei Deinem Problem 2 scheinst Du ein eigenes Perl zu verwenden. Sprich keines aus der Distribution. Ist das korrekt?

Nicht, das mir bewusst wäre.
Ich habe ein jungfräuliches Raspian Jessi aufgesetzt und für fhem noch zusätzlich


sudo apt-get install perl libdevice-serialport-perl
sudo apt-get install libio-socket-ssl-perl
sudo apt-get install libwww-perl
sudo apt-get install libio-socket-inet6-perl

sudo apt-get install sqlite3
sudo apt-get install libdbd-sqlite3-perl
sudo apt-get install libtext-diff-perl
sudo apt-get install libjson-perl
sudo apt-get install libcgi-pm-perl


wget  http://fhem.de/fhem-5.8.deb
sudo apt-get install -f
sudo dpkg -i fhem-5.8.deb
Open Browser http://192.168.178.9:8083/fhem
Enter "shutdown"

cd /opt
sudo chmod -R a+w fhem
sudo usermod -a -G tty pi
sudo usermod -a -G tty fhem

sudo nano /etc/init.d/fhem
Change/add as follows
# Required-Start:       $local_fs $remote_fs ntp

sudo update-rc.d -n fhem defaults
sudo update-rc.d -f fhem remove
sudo update-rc.d fhem defaults
sudo reboot


sowie die folgenden für mein Modul notwendigen Pakete



sudo apt-get install sox
sudo apt-get install libsox-fmt-all
sudo apt-get install libsodium-dev
sudo cpan Crypt::Argon2
sudo cpan Alien::Base::ModuleBuild
sudo cpan Alien::Sodium
sudo cpan Crypt::NaCl::Sodium


Ansonsten bin ich mir keiner Schuld bewusst.

Gruss
    Sailor
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: Sailor am 22 Mai 2019, 08:43:23
Hallo zap

Zitat von: zap am 22 Mai 2019, 08:29:06
In Exporter.pm wird die Funktion memcmp offensichtlich nicht wie deklariert aufgerufen oder neu deklariert.

Mag ja sein, aber wo verwende ich denn die exporter.pm in der 73_DoorBird.pm?
Dann könnte ich mich ja nach Alternativen umschauen.

Gruss
    Sailor
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: CoolTux am 22 Mai 2019, 08:46:59
 /usr/local/share/perl/5.24.1/Sub/Exporter.pm line 445.

Also dieser path kommt mir sehr ungewöhnlich vor.
Eventuell von eines der Module welche Du über cpan installiert hast.
Vielleicht ruft eines von denen die Funktion in Exporter auf.
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: Sailor am 22 Mai 2019, 21:52:52
Zitat von: CoolTux am 22 Mai 2019, 08:46:59
/usr/local/share/perl/5.24.1/Sub/Exporter.pm line 445.

Also dieser path kommt mir sehr ungewöhnlich vor.
Eventuell von eines der Module welche Du über cpan installiert hast.
Vielleicht ruft eines von denen die Funktion in Exporter auf.

Anders kann ich mir das auch nicht erklären.
Mal schauen, vielleicht bringt ja ein Update in der nahen Zukunft Abhilfe... Die Hoffnung stirbt zuletzt!

Gruss
    Sailor
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: zap am 24 Mai 2019, 07:42:30
Exporter.pm bietet eine export/import Funktion an, damit Module ihre Funktionen und Variablen für andere Module bereitstellen können.
Siehe https://metacpan.org/pod/Exporter, Module Description.

Eines der Module, die Dein Doorbird Modul verwendet, scheint wiederum Exporter.pm zu verwenden.
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: Sailor am 24 Mai 2019, 09:16:52
Hi zap

Zitat von: zap am 24 Mai 2019, 07:42:30
Exporter.pm bietet eine export/import Funktion an, damit Module ihre Funktionen und Variablen für andere Module bereitstellen können.
Siehe https://metacpan.org/pod/Exporter, Module Description.
Eines der Module, die Dein Doorbird Modul verwendet, scheint wiederum Exporter.pm zu verwenden.

Dann kann ich den Fehler eh nicht beheben...

Gibt es eine Möglichkeit den Fehler abyufangen, so dass er nicht im Log erscheint.
Ist ja nur Nerv-Kram, bei dem man eh nichts machen kann.

Gruss
    Sailor
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: jensb am 25 Mai 2019, 21:56:18
Den Exporter muss eigentlich jedes Perl-Modul verwenden und auch einige FHEM-Module tun das (ohne Nebenwirkungen), obwohl sie im engeren Sinne keine Perl-Module sind. Für ein Perl-Modul ist es Grundvorraussetzung, um von anderen Modulen genutzt werden zu können - es ist also für sich kein Problem.

Zitat von: Sailor am 19 Mai 2019, 13:57:48
2019.05.19 13:37:29 1: PERL WARNING: Prototype mismatch: sub main::memcmp: none vs ($$;$) at /usr/local/share/perl/5.24.1/Sub/Exporter.pm line 445.
Ich habe diesen Fehler selbst noch nicht gehabt, aber wenn ich die ersten Antworten aus der Suchmaschine richtig interpretiere, dann ist da nicht nur irgendein Formfehler in der Export-Deklaration, es ist auch schlechter Stil überhaupt etwas nach main zu exportieren.

Vielleicht kannst du herausfinden, welches Modul eine sub mit memcmp hat. Dann entweder dieses Modul selbst in Ordnung bringen, dessen Autor ansprechen oder auf ein anderes Modul zurückgreifen. Es wird wahrscheinlich nicht möglich sein, die Fehlermeldung aus dem Log zu verbannen - es ist schließlich ein Fehler.

Grüße,
Jens
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: herrmannj am 25 Mai 2019, 22:24:29
eigentlich sind das c support Funktionen, also eher so XS.

Das scheint mir irgendwas grundlegendes nicht in Ordnung. Tritt das denn auch bei anderen usern auf ?
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: Sailor am 26 Mai 2019, 11:06:18
Hallo Herrmann

Zitat von: herrmannj am 25 Mai 2019, 22:24:29
eigentlich sind das c support Funktionen, also eher so XS.
Das scheint mir irgendwas grundlegendes nicht in Ordnung. Tritt das denn auch bei anderen usern auf ?

Zumindest bei jedem User, der die Bibliotheken einbindet, die ich für mein 73_DoorBird.pm - Modul benötige.

Gruss
    Sailor
Titel: Antw:Doppelte Readings nach Neustart
Beitrag von: jensb am 27 Mai 2019, 20:00:54
Kommentier doch mal systematisch alle importierten Module in 73_DoorBird.pm aus, inkl. der davon abhängigen Zeilen in deinem Modul, so dass das Modul wieder valide wird.

Wenn die Exporter-Fehlermedlung beim Laden deines Modules nicht mehr kommt, hast du den Übeltäter und den kann man sich dann im nächsten Schritt genauer ansehen. Vielleicht hat da jemand seine eigene Version von memcmp verewigt, vielleicht ist es aber auch was ganz anderes.

Was bei der Fehlersuche auch helfen kann ist ein Traceback. Sofern du es noch nicht aktviert hast, startet FHEM so:

ExecStart=/usr/bin/perl -MCarp::Always fhem.pl fhem.cfg

Grüße,
Jens