Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Adapter mit Bilder-Upload

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Adapter mit Bilder-Upload

Geplant Angeheftet Gesperrt Verschoben Entwicklung
55 Beiträge 5 Kommentatoren 3.9k Aufrufe 8 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • OliverIOO OliverIO

    @skb benenne mal den kompletten sendTo-Befehl

    SKBS Offline
    SKBS Offline
    SKB
    Developer Most Active
    schrieb am zuletzt editiert von
    #46

    @oliverio weiter oben: https://forum.iobroker.net/post/1172033

    ... wer nicht mit der Zeit geht, geht mit der Zeit ...

    Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

    1 Antwort Letzte Antwort
    0
    • SKBS 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-automatisierungH Online
      haus-automatisierungH Online
      haus-automatisierung
      Developer Most Active
      schrieb am zuletzt editiert von haus-automatisierung
      #47

      @skb sagte in Adapter mit Bilder-Upload:

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

      Mh? In beiden Fällen gibst Du error in resolve() als Rückgabewert (auch wenn Du den Parameter einmal res genannt hast). Und wenn error == null ist, dann hat doch alles geklappt? Was hast Du erwartet?

      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
      📚 Meine inoffizielle ioBroker Dokumentation

      SKBS 1 Antwort Letzte Antwort
      0
      • haus-automatisierungH haus-automatisierung

        @skb sagte in Adapter mit Bilder-Upload:

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

        Mh? In beiden Fällen gibst Du error in resolve() als Rückgabewert (auch wenn Du den Parameter einmal res genannt hast). Und wenn error == null ist, dann hat doch alles geklappt? Was hast Du erwartet?

        SKBS Offline
        SKBS Offline
        SKB
        Developer Most Active
        schrieb am zuletzt editiert von
        #48

        @haus-automatisierung das habe ich ja oben korrigiert. Klappt ja soweit. Nur die Frage weiterhin, wie ich nun die Bilder nicht über Admin, sondern über den WebAdapter bekomme ...

        ... wer nicht mit der Zeit geht, geht mit der Zeit ...

        Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

        OliverIOO 1 Antwort Letzte Antwort
        0
        • SKBS SKB

          @haus-automatisierung das habe ich ja oben korrigiert. Klappt ja soweit. Nur die Frage weiterhin, wie ich nun die Bilder nicht über Admin, sondern über den WebAdapter bekomme ...

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von
          #49

          @skb

          und wo hat iobroker die dateien den im dateisystem bei dir abgelegt?
          bei dem sento bin ich mir jetzt nicht sicher, aber du sendest da nur eine erfolgsmeldung?
          aber kein upload?
          du schreibst die datei ja mit fs.writeFile

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          SKBS 1 Antwort Letzte Antwort
          0
          • OliverIOO OliverIO

            @skb

            und wo hat iobroker die dateien den im dateisystem bei dir abgelegt?
            bei dem sento bin ich mir jetzt nicht sicher, aber du sendest da nur eine erfolgsmeldung?
            aber kein upload?
            du schreibst die datei ja mit fs.writeFile

            SKBS Offline
            SKBS Offline
            SKB
            Developer Most Active
            schrieb am zuletzt editiert von
            #50

            @oliverio

            const response = await new Promise((resolve) => {
            	socket.emit('sendTo', appProperties.namespace, '_uploadFile', { fileName: filename, fileData: file }, (res) => { resolve(res); })
            });
            

            Hier schicke ich die Datei von der Webseite zu meinem Adapter. fileData hat dann den Base64 String der Datei.

            Und hier schreibe ich sie im Adapter in den Ordner der iobroker-data. In dem Falle /opt/iobroker/iobroker-data/energiefluss-erweitert.0/userFiles

            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;
            

            Die Datei bekomme ich dann per WebAdapter angezeigt via:
            http://192.168.2.19:8082/energiefluss-erweitert.0/userFiles/background.jpg

            Ich komme aber mit dem Anderen Weg nur über Admin an die Datei, wenn ich sie per:
            socket.emit('writeFile64', appProperties.namespace, 'userFiles/' + filename, fileData, (res) => { resolve(res); }); "direkt" zu ioBroker sende.

            ... wer nicht mit der Zeit geht, geht mit der Zeit ...

            Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

            1 Antwort Letzte Antwort
            0
            • OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von
              #51

              @skb

              du kannst mal hier schauen
              https://github.com/sbormann/ioBroker.iqontrol

              das ist eine alternative visualisierung (so als vis ersatz). da kannst du im admin ebenfalls dateien hochladen (wird dort mit emit/sendto/writefile gemacht

              wie die dateien wieder abgefragt werden hab ich auf die schnelle nicht gefunden
              muss aber ja möglich sein, da er in der visualisierung diese dateien als hintergründe oder als icons auch anzeigt.

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              SKBS 1 Antwort Letzte Antwort
              0
              • OliverIOO OliverIO

                @skb

                du kannst mal hier schauen
                https://github.com/sbormann/ioBroker.iqontrol

                das ist eine alternative visualisierung (so als vis ersatz). da kannst du im admin ebenfalls dateien hochladen (wird dort mit emit/sendto/writefile gemacht

                wie die dateien wieder abgefragt werden hab ich auf die schnelle nicht gefunden
                muss aber ja möglich sein, da er in der visualisierung diese dateien als hintergründe oder als icons auch anzeigt.

                SKBS Offline
                SKBS Offline
                SKB
                Developer Most Active
                schrieb am zuletzt editiert von
                #52

                @oliverio Danke, aber ich möchte nicht 2 Konfigurationen einsetzen. Also eine im Admin für Bilder und dann im Frontend sich die VIS zusammen bauen. Dann hat der User das Bild nicht hochgeladen und muss wieder wechseln. Finde ich nicht so praktikabel.

                Ich mache es dann so, wie gehabt - es geht ja. Ob das jetzt 'best practice' - möglich 😀

                Ich würde ja mit den Objekten und dem Meta Speicher arbeiten, aber ich komme aktuell nicht dahinter, wie ich via WebAdapter an die Files im Admin komme.

                Klar kann ich sie via socket.emit abfragen, aber dann habe ich die RAW und keinen Pfad.

                ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

                1 Antwort Letzte Antwort
                0
                • SKBS Offline
                  SKBS Offline
                  SKB
                  Developer Most Active
                  schrieb am zuletzt editiert von SKB
                  #53

                  Was mich zu dem Thema noch interessieren würde: Sobald mein Adapter gestartet ist, verbraucht er etwa 70-80MB RAM (laut Instanz-Anzeige).

                  Lade ich jetzt mehrere Dateien "hoch", die per writeFile geschrieben werden, steigt die Nutzung auf mehr als 250MB an (ok, er nutzt ja Daten und so weiter). Nach einer Zeit sinkt der Verbrauch "nur" auf 120-140MB. Werden jetzt erneut Datei Aktionen per sendTodurchgeführt, steigt die Nutzung erneut an und sinkt wieder - dann aber auf 160-180MB. So geht geht es kontinuierlich weiter (nach oben).

                  Durch die Nutzung einer BufferVariable, die den Inhalt des Bildes vorhält, ist es besser geworden.

                  Kann man diese "Garbage"-Collection (ohne Neustart des Adapters) irgendwie managen? Denn, nach einem Nuestart des Adapters schwimmt er wieder mit 70-80MB RAM im Strome.

                  ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                  Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

                  1 Antwort Letzte Antwort
                  0
                  • OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von OliverIO
                    #54

                    @skb

                    innerhalb von javascript/node nicht.
                    da läuft alles automatisch.
                    beim aufruf von node kann man parameter angeben. im browser wählt auch der browserhersteller die parameter an die man ggs über parameter beim start des browsers ran kommt.
                    im iobroker kommst du da meines wissens nicht ran.

                    du kannst nur schauen, das du selbst

                    1. keine speicherlücken erzeugst (passiert gern bei setInterval)
                    2. große variabeln nicht immer neu anlegst/deklarierst, sondern eher wiederverwendest. den erwähnten buffer ggfs.
                    3. komplexe referenzierung erzeugst. solange eine variable/objekt noch irgendwo referenziert wird, wird es auch nicht aufgeräumt
                    4. variabeln (also die, die viel speicher binden) explizit löschst
                      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

                    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_management

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    haus-automatisierungH 1 Antwort Letzte Antwort
                    1
                    • OliverIOO OliverIO

                      @skb

                      innerhalb von javascript/node nicht.
                      da läuft alles automatisch.
                      beim aufruf von node kann man parameter angeben. im browser wählt auch der browserhersteller die parameter an die man ggs über parameter beim start des browsers ran kommt.
                      im iobroker kommst du da meines wissens nicht ran.

                      du kannst nur schauen, das du selbst

                      1. keine speicherlücken erzeugst (passiert gern bei setInterval)
                      2. große variabeln nicht immer neu anlegst/deklarierst, sondern eher wiederverwendest. den erwähnten buffer ggfs.
                      3. komplexe referenzierung erzeugst. solange eine variable/objekt noch irgendwo referenziert wird, wird es auch nicht aufgeräumt
                      4. variabeln (also die, die viel speicher binden) explizit löschst
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

                      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_management

                      haus-automatisierungH Online
                      haus-automatisierungH Online
                      haus-automatisierung
                      Developer Most Active
                      schrieb am zuletzt editiert von haus-automatisierung
                      #55

                      @oliverio sagte in Adapter mit Bilder-Upload:

                      beim aufruf von node kann man parameter angeben.
                      im iobroker kommst du da meines wissens nicht ran.

                      Doch, seit js-controller 5.x über die io-package nodeProcessParams: https://github.com/ioBroker/ioBroker.js-controller/blob/0e88061f58602a0f3652062055d0f66e6d85d705/schemas/io-package.json#L1567C10-L1572

                      (geht logischerweise nicht im compact mode)

                      z.B. --max-old-space-size=SIZE (in megabytes)

                      As memory consumption approaches the limit, V8 will spend more time on garbage collection in an effort to free unused memory.

                      https://nodejs.org/docs/latest-v20.x/api/cli.html#--max-old-space-sizesize-in-megabytes

                      Genau den Parameter kann man (als Nutzer) aber bereits je Instanz steuern (memoryLimitMB) :

                      Screenshot 2024-06-21 at 12.34.39.png

                      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                      📚 Meine inoffizielle ioBroker Dokumentation

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      362

                      Online

                      32.5k

                      Benutzer

                      81.7k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe