Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. writeFile / readFile (gelöst)

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    writeFile / readFile (gelöst)

    This topic has been deleted. Only users with topic management privileges can see it.
    • Asgothian
      Asgothian Developer last edited by Asgothian

      Hallo zusammen,

      ich versuche gerade aus dem Zigbee Adapter heraus Dateien zu speichern. Bisher hab ich das via fs.writeFile gemacht, und die Daten unter /opt/iobroker/iobroker-data/zigbee_x abgelegt. Jetzt wollte ich schauen ob es nicht Sinn macht, die Daten statt dessen über die im JSController eingebauten Funktion writeFile zu schreiben.

      Dabei komme ich irgendwie nicht auf einen grünen Zweig. Ich habe die folgenden 3 Aufrufe gemacht :

      this.writeFile(null, 'test.txt', 'test data', (err) => this.log.warn(err ? 'error writing file '+ JSON.stringify(err) : 'success'));
      this.writeFile('zigbee', 'test1.txt', 'test data', (err) => this.log.warn(err ? 'error writing file '+ JSON.stringify(err) : 'success'));
      this.writeFile('zigbee.2', 'test2.txt', 'test data', (err) => this.log.warn(err ? 'error writing file '+ JSON.stringify(err) : 'success'));
      

      und bekomme dafür die folgenden Meldungen :

      2025-02-22 13:42:51.560 - error: zigbee.2 (30129) Cannot write file test.txt: zigbee is not an object of type "meta"
      2025-02-22 13:42:51.564 - error: zigbee.2 (30129) Cannot write file test1.txt: zigbee is not an object of type "meta"
      2025-02-22 13:42:51.564 - error: zigbee.2 (30129) Cannot write file test2.txt: zigbee.2 is not an object of type "meta"
      2025-02-22 13:42:51.573 - warn: zigbee.2 (30129) error writing file {}
      2025-02-22 13:42:51.573 - warn: zigbee.2 (30129) error writing file {}
      2025-02-22 13:42:51.573 - warn: zigbee.2 (30129) error writing file {}
      

      was mache ich falsch ?

      A.

      Nachtrag: ich hab das mit jscontroller 6 und jscontroller 7.0.6 so. Nutze Node 20.18.0

      1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO last edited by

        @asgothian

        https://iobroker.readthedocs.io/de/latest/bestpractice/storefiles.html

        Asgothian 1 Reply Last reply Reply Quote 0
        • Asgothian
          Asgothian Developer @OliverIO last edited by

          @oliverio Danke

          Asgothian 1 Reply Last reply Reply Quote 0
          • Asgothian
            Asgothian Developer @Asgothian last edited by

            @asgothian Nachfrage dazu:

            ich hab im Zigbee-Adapter die Situation das einige Daten beim ersten Start geladen werden. Diese müssen danach via Upload dem Admin zur Verfügung gestellt werden.

            Ich suche nun nach einer Möglichkeit, bestimmte Dateinamen abzugleichen ob diese bereits per Upload bereit gestellt wurden. Solange der ioBroker nicht mit Redis läuft habe ich einen Umweg dafür gefunden. Sobald Redis benutzt wird stehe ich aber auf dem Schlauch.

            Wie komme ich von diesem Schlauch wieder herunter ?

            Danke.

            A.

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @Asgothian last edited by OliverIO

              @asgothian

              aber solange du die in der dokumentation beschriebenen funktionen verwendest, muss du dich doch um die unterscheidung dateisystem/redis nicht kümmern. das macht der iobroker für dich.

              wenn du bspw eine datei schreibst und der benutzer hat redis nicht aktiviert, dann landet die datei im verzeichnis, wenn er redis aktiviert hat, landet die datei in der redis-datenbank
              genauso beim lesen. für dich ist das aber unerheblich.

              um abzugleichen ob bereits eine bestimmte anzahl von dateien da sind, kannst du entweder mit await this.readDirAsync(_adapter, path, options);
              ein ganzes verzeichnis deines storage brereichs einlesen und abgleichen

              oder einzeln mit await this.fileExistsAsync

              beispiele habe ich hier gefunden
              https://github.com/ioBroker/ioBroker.cameras/blob/939aa16d253f5365c8e6ee3280cb0aebfe6b458b/src/main.ts#L572
              das storage objekt wurde hier deklariert
              https://github.com/ioBroker/ioBroker.cameras/blob/939aa16d253f5365c8e6ee3280cb0aebfe6b458b/io-package.json#L197

              oder

              https://github.com/ioBroker/ioBroker.vis-2/blob/c965f7123b098d5341231efd71b34542d4fc363b/packages/iobroker.vis-2/src/main.ts#L844

              hier wird das metaobjekt dynamisch im code deklariert
              https://github.com/ioBroker/ioBroker.vis-2/blob/c965f7123b098d5341231efd71b34542d4fc363b/packages/iobroker.vis-2/src/main.ts#L1044

              Asgothian 1 Reply Last reply Reply Quote 0
              • Asgothian
                Asgothian Developer @OliverIO last edited by Asgothian

                @oliverio Das Problem ist das ich auf ein vom System definiertes Storage-Objekt zugreifen will - das welches das Admin-Interface des Zigbee-Adapters nutzt, nicht eines welches ich selber definiert habe.

                Und da sind wir dann wieder bei der Frage aus dem ersten Post - was muss ich da angeben.

                Sobald ich auf die Funktionen aus dem Adapter-Objekt zurückgreifen kann ist es kein problem die eigentliche Abfrage zu machen - nur komme ich damit bisher nicht weiter.

                Ich habe kein selbst-definiertes Meta-Objekt. Und wenn ich eines habe, dann wird das durch 'iob upload zigbee' nicht genutzt, sprich da landen die Daten nicht. Und aus der Admin-Obefläche komme ich an die Bilder in dem Objekt auch nicht ran (zumindest soweit ich das bisher testen konnte)

                A.

                OliverIO 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @Asgothian last edited by

                  @asgothian

                  ok, das kommt nicht so deutlich heraus das du nicht der zigbee adapter bist

                  Asgothian 1 Reply Last reply Reply Quote 0
                  • Asgothian
                    Asgothian Developer @OliverIO last edited by Asgothian

                    @oliverio Ich bin schon der Zigbee Adapter 🙂
                    Aber im Zigbee-Adapter ist nicht explizit ein meta-Objekt für die Bilder im Admin Interface definiert. Zumindest nicht an einer Stelle wo ich es gefunden habe. Ich denke dieses Objekt ist generell bei jedem Adapter vorhanden. Allerdings ist unklar ob auf dieses Objekt mit den entsprechenden Funktionen zugegriffen werden kann.

                    A.

                    OliverIO 1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO @Asgothian last edited by OliverIO

                      @asgothian

                      also ich interpretiere hier nur noch. ich hab das jetzt nicht selber ausprobiert. auch gibt es wahrscheinlich da nicht soviele beispiele.

                      ich würde davon ausgehen, das du im zigbee adapter kein meta objekt für einen anderen adapter defnierst oder solltest.

                      wenn man im admin adapter nachschaut findet man diese stelle
                      https://github.com/ioBroker/ioBroker.admin/blob/b8f54c7774a59b3f1b33c48c67ea0f27413465fa/packages/admin/io-package.json#L473

                      hier ist ein meta objekt definiert mit dem hilfetext
                      Benutzerdateien und Bilder für den Hintergrund

                      theoretisch müsstest du darüber dann auch vom zigbee-adapter reinschauen können um irgendwie zu prüfen ob alles da ist


                      besser wäre aber:
                      hab jetzt nicht noch weiter reingeschaut, ob es noch andere gibt, die dynamisch erzeugt werden.

                      so ganz hab ich deinen usecase noch nicht verstanden.
                      aber soweit für den zigbeeadapter werden eine gewisse anzahl von dateien benötigts (wahrscheinlich in einem bestimmten format) ansonsten läuft der nicht oder nur teilweise.

                      da würde mir eigentich am besten sowas einfallen:
                      Bei jsonConfig gibt es diese Komponente
                      https://github.com/ioBroker/ioBroker.admin/blob/b8f54c7774a59b3f1b33c48c67ea0f27413465fa/packages/jsonConfig/src/JsonConfigComponent/ConfigImageUpload.tsx
                      Wenn es das nicht nur für Bilder sondern für allgemeine Dateien gäbe, dann könnte der Anwender im AdminDialog deines Adapers lle Dateien bereitstellen, bei Upload kannst du auch gleich prüfen ob die Dateien in sich gültig sind und nur bei Erfolg dann die Config speichern und den Adapter starten.

                      Asgothian 1 Reply Last reply Reply Quote 0
                      • Asgothian
                        Asgothian Developer @OliverIO last edited by Asgothian

                        @oliverio ich zeig einfach mal worum es geht:

                        im Zigbee Adapter gibt es eine Seite wo die ganzen Geräte dargestellt werden, und eine Steuerung erlauben. Die gleichen Bilder werden auch im Objektbaum benutzt um die Devices leichter auffindbar zu machen

                        Screenshot 2025-02-23 at 09.43.02.png
                        Screenshot 2025-02-23 at 09.42.46.png

                        Das Problem ist das diese Bilder nicht Bestandteil des Adapter-Codes sind, sondern beim 1. Start / Integrieren eines neuen Gerätes aus dem Netz herunter geladen werden. Nachdem sie herunter geladen wurden befinden sie sich da wo alle 'image' assets für das Admin interface liegen (/opt/iobroker/node_modules/iobroker.zigbee/admin/img)

                        Der Screenshot vom Zigbee-Tab ist ohne Upload. Wenn ich jetzt ein Upload (und reload der Seite) mache sieht das ganze so aus:
                        Screenshot 2025-02-23 at 09.47.54.png

                        Das Problem ist das je nach Situation / Aktion des Benutzers dieses Upload nach einem Update des Adapters nach dem ersten Start nochmal erfolgen muss. Automatisch ausführen kann ich das nicht - selbst ein 'exec iob upload zigbee' vom Zigbee-Adapter aus aufgerufen klappt nicht - der Adapter wird vom JS Controller beendet.

                        Ich suche also eine Möglichkeit festzustellen ob der Upload erfolgt ist. Wenn nicht will ich das dem Nutzer darstellen:
                        Screenshot 2025-02-23 at 09.54.15.png .

                        Anbei ein Beispiel von dem Entwicklungssystem welches nicht auf Redis setzt. Da kann ich schauen ob alle Bilder erfolgreich übertragen wurden.

                        Ich hoffe jetzt wird klarer worum es mir geht.

                        Ich hatte das mit @arteck diskutiert - insbesondere weil ich eigentlich die Bilder direkt im Adapter an die 'richtige' stelle legen wollte - das hatte @arteck schon mal probiert und auch mit Ingo diskutiert - das geht aktuell nicht.

                        A.
                        Nachtrag: ich kann leider nicht einfach verifizieren ob alle von den Kacheln benötigten Bilder ladbar sind, da es durchaus sein kann das ein Bild nicht existiert. Ich muss schon den Abgleich zu den theoretisch verfügbaren Bildern machen. Nur dann kann ein Upload das fehlende Bild bereitstellen.

                        T 1 Reply Last reply Reply Quote 0
                        • T
                          ticaki Developer @Asgothian last edited by

                          @asgothian

                          Das hier liest sich aber anders - Zitat von @apollon77

                          Ich denke das einfachste ist wen der Adapter nach dem Download die files einfach in den Admin Store des Adapters schreibt per Adapter.writeFile. Dann brauchst du so einen Upload Hack nicht.

                          Asgothian 1 Reply Last reply Reply Quote 0
                          • Asgothian
                            Asgothian Developer @ticaki last edited by

                            @ticaki sagte in writeFile / readFile:

                            @asgothian

                            Das hier liest sich aber anders - Zitat von @apollon77

                            Ich denke das einfachste ist wen der Adapter nach dem Download die files einfach in den Admin Store des Adapters schreibt per Adapter.writeFile. Dann brauchst du so einen Upload Hack nicht.

                            Nach genau so einer Option habe ich lange gesucht - bisher habe ich dazu keine Möglichkeit gefunden. (Siehe auch 1. Post). Nebenbei: wo ist das Zitat her ?

                            Es kann sein das ich die Aussage von Arthur fälschlicherweise Ingo zugeordnet habe. Über 2 Ecken, alter Kopf, löchriges Gedächtnis. Wenn dem so sein sollte, dann tut mir das leid.

                            A.

                            T 1 Reply Last reply Reply Quote 0
                            • T
                              ticaki Developer @Asgothian last edited by

                              @asgothian

                              Hat er um ca. 9:40 im telegram dev-chat geschrieben.

                              Asgothian 1 Reply Last reply Reply Quote 0
                              • Asgothian
                                Asgothian Developer @ticaki last edited by

                                @ticaki Ah.. danke. Telegramm und ich spielen nicht miteinander 🙂

                                T 1 Reply Last reply Reply Quote 0
                                • T
                                  ticaki Developer @Asgothian last edited by ticaki

                                  @asgothian
                                  dann discord? Edit - nachricht ist auch im discord, beim ersten mal lesen nicht erkannt 🙂 Bildschirmfoto 2025-02-23 um 11.24.56.png

                                  Asgothian 1 Reply Last reply Reply Quote 0
                                  • Asgothian
                                    Asgothian Developer @ticaki last edited by

                                    @ticaki Danke - gefunden. Und auch schon was geschrieben

                                    1 Reply Last reply Reply Quote 0
                                    • OliverIO
                                      OliverIO last edited by OliverIO

                                      @asgothian

                                      Dann Bau dir doch deinen eigenen Upload ein.
                                      Der Upload von io Broker verwendet die gleichen Befehle, die du auch verwenden kannst

                                      Dann musst du nicht darauf vertrauen, ob der Benutzer etwas richtig oder vielleicht auch falsch machst. Dann ist das besser automatisiert und mehr Komfort für deinen Nutzer

                                      https://github.com/ioBroker/ioBroker.js-controller/blob/e38b2adfe0354339b6f5b0a49b10e94fb0b9b7ca/packages/cli/src/lib/setup/setupUpload.ts#L319

                                      Hast du denn diese Befehle schon verwendet?
                                      Kommen Fehlermeldungen?

                                      Asgothian 1 Reply Last reply Reply Quote 0
                                      • Asgothian
                                        Asgothian Developer @OliverIO last edited by

                                        @oliverio sagte in writeFile / readFile:

                                        Hast du denn diese Befehle schon verwendet?
                                        Kommen Fehlermeldungen?

                                        Siehe 1. Post.

                                        Asgothian 1 Reply Last reply Reply Quote 0
                                        • Asgothian
                                          Asgothian Developer @Asgothian last edited by Asgothian

                                          Die Lösung:

                                          this.writeFile(`${this.name}.admin`, 'test.txt', 'test data', (err) => this.log.warn(err ? 'error writing file '+ JSON.stringify(err) : 'success'));
                                          

                                          wirft keinen Fehler und erzeugt die Datei.

                                          Vielen Dank für die Hilfe. Damit komm ich erst einmal weiter

                                          A.

                                          1 Reply Last reply Reply Quote 2
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          501
                                          Online

                                          31.7k
                                          Users

                                          79.8k
                                          Topics

                                          1.3m
                                          Posts

                                          writefile zigbee
                                          3
                                          19
                                          585
                                          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