NEWS
Adapter mit Bilder-Upload
-
@jey-cee Ja, der Adapter lĂ€uft innerhalb des ioBroker. Nur seine "Klicki-Bunti"-Konfig-OberflĂ€che kommt ĂŒber den WebAdapter. Genau wie die Inhalte, die er anzeigt.
-
@haus-automatisierung Also, aus der Konfigseite versende ich so:
const response = await new Promise((resolve) => { $("#upload_info").text(`Uploading File ${Object.keys(uploadStatus).length || 1} of ${filesLength}!`); socket.emit('sendTo', appProperties.namespace, '_uploadFile', { fileName: filename, fileData: file }, (res) => { resolve(res); }) });im Adapter empfange ich dies so im
onMessageBereich:case '_uploadFile': const uploadPath = path.join(instanceDir + userFiles, obj.message.fileName); if (!fs.existsSync(uploadPath)) { this.log.info(`Uploading a new file to: ${uploadPath}`); fs.writeFile(uploadPath, obj.message.fileData, 'binary', (err) => { if (err) { this.log.error(`Could not upload the file ${uploadPath}. Error: ${err}`); this.sendTo(obj.from, obj.command, { error: err, url: null }, obj.callback); } else { this.sendTo(obj.from, obj.command, { error: null, url: obj.message.fileName, msg: 'File uploaded successfully!' }, obj.callback); } }); } else { this.log.warn(`The file trying to upload already exists: ${uploadPath}`); this.sendTo(obj.from, obj.command, { error: 'File already exists!', url: obj.message.fileName }, obj.callback); } break; Und hier kommt ab und an das Kommando nicht zurĂŒck.@skb sagte in Adapter mit Bilder-Upload:
Auch die socket.io Verbindung ist die von ioBroker. Alles "Bordmittel".
Ja, aber Du baust Dir damit deinen eigenen Weg via:
@skb sagte in Adapter mit Bilder-Upload:
Also, aus der Konfigseite versende ich so:
socket.emit('sendTo',Warum nicht mit
socket.emit('writeFile64',wie oben verlinkt? Dann muss dein Adapter damit gar nichts machen und es lĂ€uft alles ĂŒber das Frontend. -
@skb sagte in Adapter mit Bilder-Upload:
Auch die socket.io Verbindung ist die von ioBroker. Alles "Bordmittel".
Ja, aber Du baust Dir damit deinen eigenen Weg via:
@skb sagte in Adapter mit Bilder-Upload:
Also, aus der Konfigseite versende ich so:
socket.emit('sendTo',Warum nicht mit
socket.emit('writeFile64',wie oben verlinkt? Dann muss dein Adapter damit gar nichts machen und es lĂ€uft alles ĂŒber das Frontend.@haus-automatisierung Ach, schau an. Ok, "das geht"? ... ok, wo landet die Datei dann? Wie kann man sie dann wieder abrufen?
-
@haus-automatisierung Ach, schau an. Ok, "das geht"? ... ok, wo landet die Datei dann? Wie kann man sie dann wieder abrufen?
@skb Sagmal klickst Du auch irgend einen Link hier an oder liest was ich schreibe? :)
-
@skb Sagmal klickst Du auch irgend einen Link hier an oder liest was ich schreibe? :)
@haus-automatisierung Klar, tat ich :) Da ist die Funktion aufgefĂŒhrt. Ok, in der Readme kommt dann:
writeFile64(_adapter, fileName, data64, options, callback)Heisst im Endeffekt mache ich:
socket.emit('writeFile64', 'energiefluss-erweitert.0', 'userFiles/Bild.jpg', Bild64Daten, function()');Die Datei bekomme ich dann auf dem anderen Weg wieder - ok.
Mit readDir bekomme ich die Dinge dann aufgelistet zurĂŒck?
-
@haus-automatisierung Klar, tat ich :) Da ist die Funktion aufgefĂŒhrt. Ok, in der Readme kommt dann:
writeFile64(_adapter, fileName, data64, options, callback)Heisst im Endeffekt mache ich:
socket.emit('writeFile64', 'energiefluss-erweitert.0', 'userFiles/Bild.jpg', Bild64Daten, function()');Die Datei bekomme ich dann auf dem anderen Weg wieder - ok.
Mit readDir bekomme ich die Dinge dann aufgelistet zurĂŒck?
@skb sagte in Adapter mit Bilder-Upload:
Mit readDir bekomme ich die Dinge dann aufgelistet zurĂŒck?
Nochmal der Link...
https://iobroker.readthedocs.io/de/latest/bestpractice/storefiles.html
-
@skb sagte in Adapter mit Bilder-Upload:
Mit readDir bekomme ich die Dinge dann aufgelistet zurĂŒck?
Nochmal der Link...
https://iobroker.readthedocs.io/de/latest/bestpractice/storefiles.html
@haus-automatisierung Ne, ich meine, wenn der User nun Bilder hochgeladen hat, die ich abrufen möchte. Da kenne ich ja nicht jeden Dateinamen. So bekÀme ich das Verzeichs, oder?
-
@haus-automatisierung Ne, ich meine, wenn der User nun Bilder hochgeladen hat, die ich abrufen möchte. Da kenne ich ja nicht jeden Dateinamen. So bekÀme ich das Verzeichs, oder?
@skb sagte in Adapter mit Bilder-Upload:
Da kenne ich ja nicht jeden Dateinamen.
Den Namen musst Du einfach als Attribut irgendwo anders speichern (in das Instance-Objekt o.Ă€. wo. der Rest deiner Config auch liegt).
-
@skb sagte in Adapter mit Bilder-Upload:
Da kenne ich ja nicht jeden Dateinamen.
Den Namen musst Du einfach als Attribut irgendwo anders speichern (in das Instance-Objekt o.Ă€. wo. der Rest deiner Config auch liegt).
@haus-automatisierung Aber, mit dem readDir komme ich ja auch weiter. Ich schaue mal, wie das geht. Danke!
Dann geht dies ja wirklich besser, als gedacht đ -
@skb sagte in Adapter mit Bilder-Upload:
Da kenne ich ja nicht jeden Dateinamen.
Den Namen musst Du einfach als Attribut irgendwo anders speichern (in das Instance-Objekt o.Ă€. wo. der Rest deiner Config auch liegt).
@haus-automatisierung Also so:
let fileData = await readImage(file); const response = await new Promise((resolve) => { socket.emit('writeFile64', appProperties.namespace, 'userFiles/' + filename, fileData, (res) => { resolve(res); }); }); console.log(response);Bekomme ich "null" zurĂŒck -.-
Auch ein:
const response_folder = await new Promise((resolve) => { socket.emit('mkdir', appProperties.namespace, 'userFiles', (error) => { resolve(error); }) }); console.log(response_folder);Liefert leider "null".
-
Ah, read the manual hilft auch weiter :D Gibt null, wenn kein Fehler auftaucht. Also, der "upload" klappt sehr gut. Dankeschön erstmal!
Jetzt wĂ€re natĂŒrlich die Frage, kommt man "so" an das Bild heran? Ich wĂŒrde dem User gerne eine Auswahl seiner Bilder geben, die er nutzen kann und dann sieht er ja den Namen der Datei. Somit wĂ€re es dann gut zu wissen, wie ich dann an die Datei komme und sie ausliefern kann - ĂŒber den WebAdapter dann.
Die Datei steckt ja nun in der ioBroker DB. Wie könnte man sie via URL anzeigen?
Eine Idee?
Edit: Ist es richtig, das die Datei dann einfach ĂŒber den Admin Adapter kommt? Habe ich nun mal "getestet" - ĂŒber:
http://192.168.70.70:8081/files/Adapter.Instanz/Dateiname.jpg kommt genau das Base64 đ@haus-automatisierung @Jey-Cee
Kann man sich darauf verlassen, das der Admin Adapter immer auf Port 8081 lÀuft? Nein, oder?
Welche Admin Instanz wird denn fĂŒr die Datei-Ablage/Anzeige genutzt?Aber: Dies funktioniert ja z.B. nicht von extern, denke ich, weil das Bild ja statisch verlinkt wĂŒrde und dann auf den Host des Admin-Adapter zeigt. Ich frage mich noch, ob man das Bild nicht auch vom WebAdapter ausliefern lassen könnte?
-
Ah, read the manual hilft auch weiter :D Gibt null, wenn kein Fehler auftaucht. Also, der "upload" klappt sehr gut. Dankeschön erstmal!
Jetzt wĂ€re natĂŒrlich die Frage, kommt man "so" an das Bild heran? Ich wĂŒrde dem User gerne eine Auswahl seiner Bilder geben, die er nutzen kann und dann sieht er ja den Namen der Datei. Somit wĂ€re es dann gut zu wissen, wie ich dann an die Datei komme und sie ausliefern kann - ĂŒber den WebAdapter dann.
Die Datei steckt ja nun in der ioBroker DB. Wie könnte man sie via URL anzeigen?
Eine Idee?
Edit: Ist es richtig, das die Datei dann einfach ĂŒber den Admin Adapter kommt? Habe ich nun mal "getestet" - ĂŒber:
http://192.168.70.70:8081/files/Adapter.Instanz/Dateiname.jpg kommt genau das Base64 đ@haus-automatisierung @Jey-Cee
Kann man sich darauf verlassen, das der Admin Adapter immer auf Port 8081 lÀuft? Nein, oder?
Welche Admin Instanz wird denn fĂŒr die Datei-Ablage/Anzeige genutzt?Aber: Dies funktioniert ja z.B. nicht von extern, denke ich, weil das Bild ja statisch verlinkt wĂŒrde und dann auf den Host des Admin-Adapter zeigt. Ich frage mich noch, ob man das Bild nicht auch vom WebAdapter ausliefern lassen könnte?
@skb sagte in Adapter mit Bilder-Upload:
Edit: Ist es richtig, das die Datei dann einfach ĂŒber den Admin Adapter kommt?
Das sollte ĂŒber den Web-Adapter auch so funktionieren. MĂŒsste ich auch testen.
-
@skb sagte in Adapter mit Bilder-Upload:
Edit: Ist es richtig, das die Datei dann einfach ĂŒber den Admin Adapter kommt?
Das sollte ĂŒber den Web-Adapter auch so funktionieren. MĂŒsste ich auch testen.
http://192.168.70.70:8082/files/Adapter.Instanz/Dateiname.jpg erscheint leider nichts
auch nicht via:
http://192.168.70.70:8082/Adapter.Instanz/Dateiname.jpg -
http://192.168.70.70:8082/files/Adapter.Instanz/Dateiname.jpg erscheint leider nichts
auch nicht via:
http://192.168.70.70:8082/Adapter.Instanz/Dateiname.jpg -
@haus-automatisierung Ist bei mir nicht angehakt. Daher wundere ich mich.
-
Ah, read the manual hilft auch weiter :D Gibt null, wenn kein Fehler auftaucht. Also, der "upload" klappt sehr gut. Dankeschön erstmal!
Jetzt wĂ€re natĂŒrlich die Frage, kommt man "so" an das Bild heran? Ich wĂŒrde dem User gerne eine Auswahl seiner Bilder geben, die er nutzen kann und dann sieht er ja den Namen der Datei. Somit wĂ€re es dann gut zu wissen, wie ich dann an die Datei komme und sie ausliefern kann - ĂŒber den WebAdapter dann.
Die Datei steckt ja nun in der ioBroker DB. Wie könnte man sie via URL anzeigen?
Eine Idee?
Edit: Ist es richtig, das die Datei dann einfach ĂŒber den Admin Adapter kommt? Habe ich nun mal "getestet" - ĂŒber:
http://192.168.70.70:8081/files/Adapter.Instanz/Dateiname.jpg kommt genau das Base64 đ@haus-automatisierung @Jey-Cee
Kann man sich darauf verlassen, das der Admin Adapter immer auf Port 8081 lÀuft? Nein, oder?
Welche Admin Instanz wird denn fĂŒr die Datei-Ablage/Anzeige genutzt?Aber: Dies funktioniert ja z.B. nicht von extern, denke ich, weil das Bild ja statisch verlinkt wĂŒrde und dann auf den Host des Admin-Adapter zeigt. Ich frage mich noch, ob man das Bild nicht auch vom WebAdapter ausliefern lassen könnte?
@skb sagte in Adapter mit Bilder-Upload:
ĂŒber den WebAdapter dann
evtl kannst du die Extenstion FunktionalitÀt des Web-Adapters nutzen.
https://github.com/ioBroker/ioBroker.web/blob/master/WEB-EXTENSIONS-HOWTO.md
allgemein zu writeFile und readFile.
ich gehe mal davon aus, das du es im rahmen eines eigenen adapter einsetzt und nicht aus dem javascript-adapterwir gehen von folgendem adapter aus: demoadapter mit instanz 0
wenn ich dort mit writeFile("abc.txt",dateiinhalt);
schreibe, dann ist die datei im folgenden verzeichnis zu finden (wenn nicht redis eingesetzt, aber ist ja wie gesagt irrelevant.)iobroker/iobroker-data/files/demoadapter.0/abc.txtwenn du diese datei dann ĂŒber den webadapter abrufen möchtest, dann mĂŒsste der pfad unter
http://192.168.x.x:8082/demoadapter.0/abc.txtzu finden sein
die extension fĂŒr den web-adapter kannst du nutzen, wenn du beim ausliefern noch was machen willst.
beispieladapter, die das einsetzen
Cameras: https://github.com/ioBroker/ioBroker.cameras/blob/master/lib/web.js
Simple-api: https://github.com/ioBroker/ioBroker.simple-api/blob/master/lib/simpleapi.js#L73
Proxy: https://github.com/ioBroker/ioBroker.proxy/blob/master/lib/proxy.js#L20
Eufy-Security: https://github.com/bropat/ioBroker.eufy-security/blob/master/src/lib/web.ts (Typescript-implementation)
REST-API: https://github.com/ioBroker/ioBroker.rest-api/blob/master/src/lib/rest-api.js#L67 -
@skb sagte in Adapter mit Bilder-Upload:
ĂŒber den WebAdapter dann
evtl kannst du die Extenstion FunktionalitÀt des Web-Adapters nutzen.
https://github.com/ioBroker/ioBroker.web/blob/master/WEB-EXTENSIONS-HOWTO.md
allgemein zu writeFile und readFile.
ich gehe mal davon aus, das du es im rahmen eines eigenen adapter einsetzt und nicht aus dem javascript-adapterwir gehen von folgendem adapter aus: demoadapter mit instanz 0
wenn ich dort mit writeFile("abc.txt",dateiinhalt);
schreibe, dann ist die datei im folgenden verzeichnis zu finden (wenn nicht redis eingesetzt, aber ist ja wie gesagt irrelevant.)iobroker/iobroker-data/files/demoadapter.0/abc.txtwenn du diese datei dann ĂŒber den webadapter abrufen möchtest, dann mĂŒsste der pfad unter
http://192.168.x.x:8082/demoadapter.0/abc.txtzu finden sein
die extension fĂŒr den web-adapter kannst du nutzen, wenn du beim ausliefern noch was machen willst.
beispieladapter, die das einsetzen
Cameras: https://github.com/ioBroker/ioBroker.cameras/blob/master/lib/web.js
Simple-api: https://github.com/ioBroker/ioBroker.simple-api/blob/master/lib/simpleapi.js#L73
Proxy: https://github.com/ioBroker/ioBroker.proxy/blob/master/lib/proxy.js#L20
Eufy-Security: https://github.com/bropat/ioBroker.eufy-security/blob/master/src/lib/web.ts (Typescript-implementation)
REST-API: https://github.com/ioBroker/ioBroker.rest-api/blob/master/src/lib/rest-api.js#L67@oliverio Danke fĂŒr deine AusfĂŒhrungen. Soweit bin ich schon und das klappt auch alles so ;)
Bild wird in den Adapter-Pfad geschrieben, Web-Extension per Instanz geht auch :)
Nur war von deinen Vorrednern die Rede, das ich doch meine Dateien mit Bordmitteln "in die Daten" des ioBroker schreiben soll. Das geht nur soweit, das ich die Datei als "base64" schreibe. Sie ist dann "irgendwo".
Ăber den Admin Adapter Port 8081 komme ich dann an die Datei. Das ist auch gut - oder weniger, wenn ich das Bild doch gerne ĂŒber den Web-Adapter haben möchte. Denn, wenn man relative Pfade nehmen wollen wĂŒrde, wĂŒrde die Datei ja per ioBroker extern nicht geladen werden können, da sie nur via Admin kommt.
-
@skb sagte in Adapter mit Bilder-Upload:
ĂŒber den WebAdapter dann
evtl kannst du die Extenstion FunktionalitÀt des Web-Adapters nutzen.
https://github.com/ioBroker/ioBroker.web/blob/master/WEB-EXTENSIONS-HOWTO.md
allgemein zu writeFile und readFile.
ich gehe mal davon aus, das du es im rahmen eines eigenen adapter einsetzt und nicht aus dem javascript-adapterwir gehen von folgendem adapter aus: demoadapter mit instanz 0
wenn ich dort mit writeFile("abc.txt",dateiinhalt);
schreibe, dann ist die datei im folgenden verzeichnis zu finden (wenn nicht redis eingesetzt, aber ist ja wie gesagt irrelevant.)iobroker/iobroker-data/files/demoadapter.0/abc.txtwenn du diese datei dann ĂŒber den webadapter abrufen möchtest, dann mĂŒsste der pfad unter
http://192.168.x.x:8082/demoadapter.0/abc.txtzu finden sein
die extension fĂŒr den web-adapter kannst du nutzen, wenn du beim ausliefern noch was machen willst.
beispieladapter, die das einsetzen
Cameras: https://github.com/ioBroker/ioBroker.cameras/blob/master/lib/web.js
Simple-api: https://github.com/ioBroker/ioBroker.simple-api/blob/master/lib/simpleapi.js#L73
Proxy: https://github.com/ioBroker/ioBroker.proxy/blob/master/lib/proxy.js#L20
Eufy-Security: https://github.com/bropat/ioBroker.eufy-security/blob/master/src/lib/web.ts (Typescript-implementation)
REST-API: https://github.com/ioBroker/ioBroker.rest-api/blob/master/src/lib/rest-api.js#L67
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen BeitrĂ€ge zu scrollen? Wenn du dich fĂŒr ein Konto anmeldest, kommst du immer genau dorthin zurĂŒck, wo du zuvor warst, und kannst dich ĂŒber neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und BeitrĂ€ge positiv bewerten, um anderen Community-Mitgliedern deine WertschĂ€tzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden đ
Registrieren Anmelden
