NEWS
Über Mqtt empfangenes Bild in Datei speichern
-
Hallo
Ich empfange über MQTT eine Bilddatei. Diese möchte ich nun wieder als solche speichern. Hierzu muss ich die Rohdaten als Bytearray vom Broker direckt wieder in die Datei schreiben. Ich habe bisher folgendes schon lauffähig:
const mqtt = require('mqtt') const url = 'mqtt://xxx.yyy.zzz.www:aaaa' const options = { // Clean session clean: true, connectTimeout: 4000, // Authentication // clientId: 'emqx_test', username: 'name', password: 'passwort', } const client = mqtt.connect(url, options) var dest_path = 'zielpfad' var kamera = '123456' client.on('connect', function () { console.log('Connected') // Subscribe to a topic client.subscribe('top1' + kamera + '/picture_file', function (err) { if (!err) { // Publish a message to a topic // client.publish('test', 'Hello mqtt') // Mögliche Testnachricht an MQQT senden um verbindung zu bestätigen und im IO Broker zu verarbeiten } }) }) // Receive messages client.on('message', function (topic, message) { // message is Buffer console.log(message.toString()) client.end() }) code_text
Wichtig ist dieser Bereich:
client.on('message', function (topic, message) { // message is Buffer console.log(message.toString()) client.end() code_text
In VB würde ich das mit einem Streamwriter machen aber ich habe leider keine Ahnung wie ich das in Javascript machen kann, da ich dort absoluter neuling bin. Kann mir jemand weiterhelfen?
-
@vetinari77 Nicht getestet, aber in die Richtung:
const fs = require('node:fs'); fs.writeFileSync('/home/iobroker/meinbild.jpg', message);
-
@haus-automatisierung said in Über Mqtt empfangenes Bild in Datei speichern:
const fs = require('node:fs');
Danke, das ging schnell (und unerwartet einfach). Villeicht habe ich deswegen nichts finden können bei meiner Suche. 1000 Dank. Leider kann ich die Datei nicht öffnen (scheint irgendwie fehlerhaft zu sein). Ich versuche mal herauszubekommen warum das so ist.
-
@vetinari77 sagte in Über Mqtt empfangenes Bild in Datei speichern:
Ich versuche mal herauszubekommen warum das so ist.
Unter Linux mit dem
file
Befehl mal genauer schauen. Meist stehen irgendwelche Zeichen davor oder dahinter, welche dort nicht hingehören. Alsofile /home/iobroker/meinbild.jpg
-
Danke nochmal. Scheint tatsächlich kein jpg oder anderes Bildformat zu sein. Als ausgabe kommt lediglich "data". Ich glaube ich versuche mal auf einem anderen weg die Bilder zu holen. Eventuell kann ich mir vom Server den Pfad schicken lassen und das Bld dann per SFTP holen. Trotzdem noch einmal vielen lieben Dank für die Unterstützung.