FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: TomLee am 21 Juni 2026, 12:25:15

Titel: MQTT2_SERVER: publish mit Binärdatei-Payload (-f Flag wie mosquitto_pub)
Beitrag von: TomLee am 21 Juni 2026, 12:25:15
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
Titel: Aw: MQTT2_SERVER: publish mit Binärdatei-Payload (-f Flag wie mosquitto_pub)
Beitrag von: betateilchen am 21 Juni 2026, 18:50:06
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.
Titel: Aw: MQTT2_SERVER: publish mit Binärdatei-Payload (-f Flag wie mosquitto_pub)
Beitrag von: TomLee am 21 Juni 2026, 19:21:27
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?
Titel: Aw: MQTT2_SERVER: publish mit Binärdatei-Payload (-f Flag wie mosquitto_pub)
Beitrag von: TomLee am 22 Juni 2026, 13:26:32
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.