Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Adapter mit Bilder-Upload

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    Adapter mit Bilder-Upload

    This topic has been deleted. Only users with topic management privileges can see it.
    • haus-automatisierung
      haus-automatisierung Developer Most Active @SKB last edited by haus-automatisierung

      @skb Socket-IO ist gar keine Oberfläche, sondern nur die Lib für die Kommunikation. Die wird ja nach wie vor auch in React oder jsonConfig genutzt.

      Nur eben nicht mit dem Retro-jQuery-Kram usw. Und die Verknüpfung fehlt Dir ja gerade. Eventuell kannst Du es Dir ja dort abschauen.

      https://github.com/ioBroker/ioBroker.admin/blob/761ded4f4947cef7d051dd74e11b5f785e652c25/packages/jsonConfig/src/JsonConfigComponent/ConfigImageUpload.jsx

      SKB 1 Reply Last reply Reply Quote 0
      • SKB
        SKB Developer Most Active @haus-automatisierung last edited by

        @haus-automatisierung Ja, das sind ja Implementierungen, die ich bereits habe.

        Also, ich lade das Bild per jQuery (Ok, oldschool - aber zuverlässig) von der Platte, reiche es direkt an das socket.emit weiter, da socket direkt files kann - ohne sie zu konvertieren. Sie kommen im Adapter an, er schreibt sie auf die Platte und gut.

        Ab und an ist es aber so, das der Adapter keine Rückmeldung sendet - im Log aber eine Ausgabe erfolgt. Da hakt es gerade.

        haus-automatisierung 1 Reply Last reply Reply Quote 0
        • haus-automatisierung
          haus-automatisierung Developer Most Active @SKB last edited by

          @skb sagte in Adapter mit Bilder-Upload:

          Also, ich lade das Bild per jQuery (Ok, oldschool - aber zuverlässig) von der Platte, reiche es direkt an das socket.emit weiter

          Mit writeFile64 ? Zeig mal

          SKB 1 Reply Last reply Reply Quote 0
          • SKB
            SKB Developer Most Active @haus-automatisierung last edited by

            @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 onMessage Bereich:

            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.
            
            haus-automatisierung 1 Reply Last reply Reply Quote 0
            • Jey Cee
              Jey Cee Developer @SKB last edited by

              @skb dein Adapter läuft zu 100% in/mit ioBroker?
              Oder startet er rinen eigen Webserver unabhängig von ioBroker?

              Im ersten fall oder wenn du das per Konfig lösen willst solltest du die Funktionen von ioBroker nutzen.

              Im zweiten fall solltest du es mit deinem Webserver lösen ohne Abhängigkeit zum ioBroker.

              SKB 1 Reply Last reply Reply Quote 0
              • SKB
                SKB Developer Most Active @Jey Cee last edited by SKB

                @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.

                Jey Cee 1 Reply Last reply Reply Quote 0
                • Jey Cee
                  Jey Cee Developer @SKB last edited by

                  @skb also kein eigener webserver, da das der Web Adapter übernimmt.

                  SKB 1 Reply Last reply Reply Quote 0
                  • SKB
                    SKB Developer Most Active @Jey Cee last edited by

                    @jey-cee Genau. Auch die socket.io Verbindung ist die von ioBroker. Alles "Bordmittel".

                    1 Reply Last reply Reply Quote 0
                    • haus-automatisierung
                      haus-automatisierung Developer Most Active @SKB last edited by

                      @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 1 Reply Last reply Reply Quote 0
                      • SKB
                        SKB Developer Most Active @haus-automatisierung last edited by

                        @haus-automatisierung Ach, schau an. Ok, "das geht"? ... ok, wo landet die Datei dann? Wie kann man sie dann wieder abrufen?

                        haus-automatisierung 1 Reply Last reply Reply Quote 0
                        • haus-automatisierung
                          haus-automatisierung Developer Most Active @SKB last edited by

                          @skb Sagmal klickst Du auch irgend einen Link hier an oder liest was ich schreibe? 🙂

                          SKB 1 Reply Last reply Reply Quote 0
                          • SKB
                            SKB Developer Most Active @haus-automatisierung last edited by

                            @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 1 Reply Last reply Reply Quote 0
                            • haus-automatisierung
                              haus-automatisierung Developer Most Active @SKB last edited by

                              @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 1 Reply Last reply Reply Quote 0
                              • SKB
                                SKB Developer Most Active @haus-automatisierung last edited by

                                @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?

                                https://github.com/ioBroker/ioBroker.socket-classes?tab=readme-ov-file#readdir_adapter-dirname-options-callback

                                haus-automatisierung 1 Reply Last reply Reply Quote 0
                                • haus-automatisierung
                                  haus-automatisierung Developer Most Active @SKB last edited by

                                  @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 2 Replies Last reply Reply Quote 0
                                  • SKB
                                    SKB Developer Most Active @haus-automatisierung last edited by

                                    @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 👌

                                    1 Reply Last reply Reply Quote 0
                                    • SKB
                                      SKB Developer Most Active @haus-automatisierung last edited by SKB

                                      @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".

                                      haus-automatisierung 1 Reply Last reply Reply Quote 0
                                      • SKB
                                        SKB Developer Most Active last edited by

                                        Oder, kann man diese Commandos nun nicht über die "normale" socket Verbindung nutzen? Muss dazu doch noch der socket-client auf ioBroker installiert sein?

                                        1 Reply Last reply Reply Quote 0
                                        • SKB
                                          SKB Developer Most Active last edited by SKB

                                          Ah, read the manual hilft auch weiter 😄 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?

                                          haus-automatisierung OliverIO 2 Replies Last reply Reply Quote 0
                                          • haus-automatisierung
                                            haus-automatisierung Developer Most Active @SKB last edited by

                                            @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 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            891
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            55
                                            2376
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo