MQTT2_SERVER: publish mit Binärdatei-Payload (-f Flag wie mosquitto_pub)

Begonnen von TomLee, 21 Juni 2026, 12:25:15

Vorheriges Thema - Nächstes Thema

TomLee

Hi,

weiß noch nicht genau ob ich es überhaupt benötigen werde, es fällt mir nur gerade nebenbei auf.
Mit mosquitto_pub -h 192.168.188.26 -u bli -P bla -t 'esl/image/test' -f storch.binkann ich binäre Payloads aus einer Datei heraus publizieren.

Wäre sowas mit dem MQTT2-Server auch möglich umzusetzen?

Gruß Thomas

betateilchen

Wenn man solche speziellen Anforderungen hat, sollte man einen echten mqtt-Server benutzen.

MQTT2_SERVER ist bei weitem kein vollständiger Ersatz und war auch nie als solcher konzipiert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Ok, danke.

Habs jetzt eh so gelöst bekommen wie ich mir das vorgestellt hatte.
Schicke dem ESP einfach die Bild-Url (jpg/png) einer RSS Definition und er holt sich das Bild selbst.

Bin noch nicht dazu gekommen, probier ich aber später aus.
Grundsätzlich könnte ich die Datei auslesen und die Daten über den MQTT2 Server senden?

TomLee

Der befragte Agent hat mir die Kenntnis gebracht, das MQTT2 die Payload durch seinen Kommando-Parser jagt und dabei Binärdaten zerschießt.
Als Base64 senden geht:

sub raw {
    my $hex = '\00\FF\C0...';  # single quotes! (double quotes würden \FF etc. falsch interpretieren)
    use MIME::Base64;
    $hex =~ s/\\//g;           # \FF → FF
    $hex =~ s/\s//g;           # Whitespace raus
    my $b64 = encode_base64(pack("H*", $hex), "");  # zweiter Parameter "" = kein Zeilenumbruch
    fhem("set MQTT2_Server publish esl_581_bw/image/raw $b64");
}

Weil in meinem Sketch bisher nur Rohbinärdaten mit 23040 Bytes vorgesehen waren, musste dort die Buffergröße (base64 von 23040 Bytes = 30720 Zeichen) angepasst werden.

Ich bleib bei meiner Http Variante, aber als Option auch aus FHEM via MQTT die Bilddaten zu senden, lass ich die größere Buffergröße im Sketch.