Unerklärliches "Can't locate" bei 00_MQTT.pm

Begonnen von Joachim1975, 14 Juli 2025, 11:29:28

Vorheriges Thema - Nächstes Thema

Joachim1975

Hallo FHEM-Community,

ich bin Neuling im Bereich der tiefergehenden FHEM-Konfiguration und benötige dringend eure Hilfe bei einem sehr hartnäckigen Problem. Ich versuche, FHEM über MQTT mit Home Assistant zu verbinden, aber ich erhalte kontinuierlich die Fehlermeldung Can't locate Net/MQTT/Constants.pm in @INC.

Mein FHEM läuft auf OS "Bookworm". Der Mosquitto MQTT Broker läuft auf meiner Home Assistant Instanz (IP: 192.168.10.111, Port: 1883).

Mein Ziel:
Definition eines MQTT-Brokers in FHEM über den Befehl:
define myBroker MQTT 192.168.10.111:1883

Das Problem:
Jeder Versuch, den Broker zu definieren, führt zu dieser Fehlermeldung im FHEM-Logfile:

Can't locate Net/MQTT/Constants.pm in @INC (you may need to install the Net::MQTT::Constants module) (@INC contains: ./lib . /FHEM . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.36.0 /usr/local/share/perl/5.36.0 /usr/lib/x86_64-linux-gnu/perl5/5.36 /usr/share/perl5/5.36 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.36 /usr/local/lib/site_perl /FHEM/lib) at ./FHEM/00_MQTT.pm line 42.
BEGIN failed--compilation aborted at ./FHEM/00_MQTT.pm line 42.
Bisherige Analyse und Versuche (mit Ergebnissen):

FHEM und Module aktualisiert:

update all und shutdown restart wurden ausgeführt.

Das Modul 00_MQTT.pm existiert unter /opt/fhem/FHEM/ mit korrekten Berechtigungen (-rw-r--r-- 1 fhem dialout ...).

Perl-Abhängigkeiten über apt geprüft/installiert:

Folgende Pakete wurden versucht zu installieren und waren bereits in der neuesten Version vorhanden:
sudo apt-get install libio-socket-ssl-perl libnet-ssleay-perl libjson-perl

Spezifische MQTT Perl-Abhängigkeit über apt:

Versuch, libnet-mqtt-perl zu installieren:
sudo apt-get install libnet-mqtt-perl

Ergebnis: E: Unable to locate package libnet-mqtt-perl (Paket wurde nicht gefunden).

Spezifische MQTT Perl-Abhängigkeit über CPAN:

Da apt das Paket nicht finden konnte, wurde Net::MQTT::Constants (indirekt über Net::MQTT::Simple) direkt über CPAN installiert.

Vorgehen:
sudo cpan
install Net::MQTT::Simple

Ergebnis der CPAN-Installation: Die Installation lief bis zum Ende durch, zeigte make install -- OK und listete Installationspfade wie /usr/local/share/perl/5.36.0/Net/MQTT/Simple.pm auf. Dies deutet auf eine erfolgreiche Installation hin.

Prüfung des Installationspfades des Moduls:

Suche nach Constants.pm auf dem System per SSH:
sudo find /usr/local -name "Constants.pm" 2>/dev/null | grep -i mqtt

Ergebnis: Das Modul wurde unter /usr/local/share/perl/5.36.0/Net/MQTT/Constants.pm gefunden. (Zuvor war es in einem temporären /root/.cpan/build/ Verzeichnis, was als Problem identifiziert wurde und durch die erneute CPAN-Installation behoben sein sollte).

Prüfung des Perl-Suchpfades von FHEM (@INC):

Abfrage in der FHEM-Kommandozeile: {join("\n", @INC)}

Ergebnis: Der Pfad /usr/local/share/perl/5.36.0/ ist eindeutig in der FHEM @INC-Liste enthalten.

FHEM-Neustart:

Nach jeder Installation und Prüfung wurde FHEM mit sudo systemctl restart fhem neu gestartet. Das Log bestätigt jeweils den "Server started" nach dem "Server shutdown".

Zusammenfassung des Problems:
Trotz aller Bestätigungen, dass das benötigte Perl-Modul Net::MQTT::Constants am korrekten Ort liegt und dieser Ort im Suchpfad von FHEM's Perl-Interpreter enthalten ist, weigert sich FHEM weiterhin, das Modul zu laden und wirft die gleiche Can't locate Fehlermeldung.

Ich bin mit meinem Latein am Ende. Hat jemand eine Idee, wo der Fehler liegen könnte oder wie man dies weiter debuggen kann? Liegt es an einem Caching-Problem, versteckten Berechtigungen, oder gibt es noch andere Fallstricke bei FHEM/Perl, die zu diesem Symptom führen können?

Vielen Dank im Voraus für jede Hilfe!

Joachim1975

Hallo FHEM-Community,

ich möchte mich herzlich für eure Hilfe und Geduld bedanken! Das Problem mit der hartnäckigen Fehlermeldung Can't locate Net/MQTT/Constants.pm wurde erfolgreich gelöst.
Die Ursache war eine Kombination aus einem Missverständnis meinerseits bezüglich der FHEM-Module.

Das eigentliche Problem war die Verwechslung der FHEM-Module MQTT und MQTT2_CLIENT.

Steht wohl auch hier: https://wiki.fhem.de/wiki/MQTT

MQTT2_CLIENT
Ein MQTT2_CLIENT-IO-Device wird z.B. angelegt mit
define myBroker MQTT2_CLIENT 10.0.0.5:1883 ## bitte EIGENE IP-Adresse eintragen

Dann schaffe ich ja doch irgendwann meine EnOcean Taster im Homeassistent einzubinden.
Die werden da nämlich nicht wirklich über den USB300 Stick unterstützt.
Ist anscheinend nicht populär genug.

Vielen Dank nochmals an alle, die sich die Zeit genommen haben, hier zu helfen! Manchmal ist die Lösung einfacher, als man denkt, wenn man nur die richtigen Module und Syntaxregeln kennt.





passibe

Also für Net::MQTT::Simple gibt es ein Debian-paket: https://packages.debian.org/sid/libnet-mqtt-simple-perl
Wenn Net::MQTT::Constants tatsächlich in Net::MQTT::Simple enthalten ist, brauchst du da nicht mit CPAN hantieren.

Wobei, nevermind, das gibts nur für sid und noch nicht für bookworm ...

betateilchen

Zitat von: Joachim1975 am 14 Juli 2025, 12:48:04Die Ursache war eine Kombination aus einem Missverständnis meinerseits bezüglich der FHEM-Module.

Das eigentliche Problem war die Verwechslung der FHEM-Module MQTT und MQTT2_CLIENT.


Zitat von: passibe am 14 Juli 2025, 20:58:58Also für Net::MQTT::Simple gibt es ein Debian-paket: https://packages.debian.org/sid/libnet-mqtt-simple-perl
Wenn Net::MQTT::Constants tatsächlich in Net::MQTT::Simple enthalten ist, brauchst du da nicht mit CPAN hantieren.

Wobei, nevermind, das gibts nur für sid und noch nicht für bookworm ...

Völlig egal.
Für MQTT2 braucht man beides nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tobi01001

Zitat von: Joachim1975 am 14 Juli 2025, 12:48:04Hallo FHEM-Community,

ich möchte mich herzlich für eure Hilfe und Geduld bedanken! Das Problem mit der hartnäckigen Fehlermeldung Can't locate Net/MQTT/Constants.pm wurde erfolgreich gelöst.
Die Ursache war eine Kombination aus einem Missverständnis meinerseits bezüglich der FHEM-Module.

Das eigentliche Problem war die Verwechslung der FHEM-Module MQTT und MQTT2_CLIENT.

Steht wohl auch hier: https://wiki.fhem.de/wiki/MQTT

MQTT2_CLIENT
Ein MQTT2_CLIENT-IO-Device wird z.B. angelegt mit
define myBroker MQTT2_CLIENT 10.0.0.5:1883 ## bitte EIGENE IP-Adresse eintragen

Dann schaffe ich ja doch irgendwann meine EnOcean Taster im Homeassistent einzubinden.
Die werden da nämlich nicht wirklich über den USB300 Stick unterstützt.
Ist anscheinend nicht populär genug.

Vielen Dank nochmals an alle, die sich die Zeit genommen haben, hier zu helfen! Manchmal ist die Lösung einfacher, als man denkt, wenn man nur die richtigen Module und Syntaxregeln kennt.

Glückwunsch, dass du das so schnell hinbekommen hast! Eventuell kannst du noch paar Informationen beisteuern falls ich - oder wer anderes auch mal vor dem Problem steht:

Welches Bookworm-Image hast du genau genommen? Ich hatte mit dem RPI3 und einem der Releases einige Probleme.

wirst du damit die EnOcean Taster anbinden? Über Fhem und MQTT and den Moquitto und dann Homeassistant?

Und wo benutzt du (oder auch nicht) den USB300 Stick bzw. wobei speziell hilft dir da der Weg über fhem und MQTT?

Danke und Gruß,
Tobias

P.S.: Das Thema eventuell noch als (gelöst) markieren?
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Joachim1975

Hallo Tobias,

vielen Dank für deine Rückmeldung und die interessanten Fragen! Hier sind die Antworten zu deinen Punkten:

1. Welches Bookworm-Image hast du genau genommen? Ich hatte mit dem RP3 und einem der Releases einige Probleme.

Ich habe auf einem Mini-Rechner Proxmox laufen und hier auf einer virtuellen Maschine Debian "Bookworm" installiert. Anschließend habe ich FHEM nach einer Anleitung aus einem YouTube-Video eingerichtet. Das ging eigentlich recht unkompliziert. Was mich bei der Installation aufgehalten hat, war die Einbindung des USB-Anschlusses in die virtuelle Maschine, die Integration einer deutschen Tastatur (sie war standardmäßig Englisch eingestellt) und das Einstellen der richtigen Systemzeit. Ich will es mal so sagen: Ich habe viel gelernt!

2. Wirst du damit die EnOcean Taster anbinden? Über Fhem und MQTT und den Mosquitto und dann Homeassistant?

Ja, genau das ist der Ansatz, und er funktioniert bereits sehr zuverlässig. Hier eine kurze Erklärung:

Physikalische EnOcean-Anbindung:
Der EnOcean USB-Stick wurde in den Anlern-Modus versetzt und hat spontan alle EnOcean-Produkte erkannt, die bei mir installiert sind, sobald diese ausgelöst wurden. Der physische EnOcean-Taster ist direkt mit dem EnOcean-Schaltaktor (beides von Eltako) verbunden und schaltet diesen zuverlässig.

FHEM als zentrale Steuerungsebene:
In FHEM wurde nun ein virtueller Taster erstellt, der seine Signale über den EnOcean-USB-Stick sendet. Das bedeutet, ich kann den Aktor sowohl über den physischen Taster als auch über diesen simulierten Taster via USB-Stick schalten.

Zuverlässige Statusrückmeldung:
Damit ich immer weiß, ob das Licht an oder ausgeschaltet ist – egal ob durch den physischen Taster oder meinen simulierten Taster ausgelöst – erfasse ich das Bestätigungstelegramm des Aktors. Dieses Telegramm gibt immer Rückmeldung, wenn der Aktor (in meinem Fall das Licht) ein- oder ausschaltet.

MQTT-Integration für Status und Steuerung:

Statusübertragung: Über MQTT übertrage ich an dieser Stelle zunächst den Status des Aktors an Home Assistant. In Home Assistant ist ein MQTT-Gerät (eine Lampe) definiert, welches nun aufgrund des empfangenen Aktor-Status die Lampe als ein- bzw. ausgeschaltet signalisiert.

Steuerung von Home Assistant: Im nächsten Schritt wollte ich natürlich auch von Home Assistant aus die Lampe ein- bzw. ausschalten. Auch das habe ich über MQTT gelöst:

Dafür habe ich in FHEM ein MQTT-Device erstellt, welches die Nachrichten von Home Assistant empfängt.

Dieses FHEM MQTT-Device nimmt den Zustand je nach empfangener Nachricht aus Home Assistant an (entweder "on" oder "off").

Anschließend löst ein simpler DOIF-Befehl in Abhängigkeit des Zustandes des MQTT-Devices den simulierten Taster über den EnOcean-USB-Stick aus, der dann den Aktor schaltet.

Der Aktor schickt dann wieder sein Bestätigungstelegramm aufgrund der Statusänderung, und der Kreislauf beginnt von Neuem.

3. Und wo benutzt du (oder auch nicht) den USB300 Stick bzw. wobei speziell hilft dir da der Weg über Fhem und MQTT?

Der USB300 Stick ist zentral für die Anbindung der EnOcean-Geräte. Er ist direkt an den FHEM-Server angeschlossen und ermöglicht FHEM die Kommunikation allen EnOcean-Produkten

P.S. Ja, das Thema kann ich gerne als [gelöst] markieren. Vielen Dank für die Nachfrage! Allerdings finde ich den "Button" nicht um das Thema als gelöst anzuzeigen...wo ist der?

Viele Grüße,

Joachim

P.S.: Obwohl softwareseitig alles funktioniert, habe ich festgestellt, dass die Reichweite von EnOcean doch etwas beschränkt erscheint. Grundsätzlich ist es eine tolle Technologie, da z.B. die Taster die Energie aus dem Tastendruck selbst generieren – es gibt keine Batterien. Einer meiner Aktoren ist aber etwas weiter entfernt und wird nicht so gut empfangen bzw. erreicht. Könnte sein, dass ich den bald durch einen Shelly-Aktor ersetze. Ich kann ja jetzt trotzdem das Signal des EnOcean-Tasters berücksichtigen, FHEM und Home Assistant sei Dank.

Beta-User

Die Konstruktion mit zusätzlichen Devices kommt mir unnötig kompliziert vor.

Die Option, die Aktoren mit MQTT_GENERIC_BRIDGE MQTT-fähig zu machen ist bekannt?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors