Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter Slideshow (ehemals Diashow) v0.1.x

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

Test Adapter Slideshow (ehemals Diashow) v0.1.x

Test Adapter Slideshow (ehemals Diashow) v0.1.x

Scheduled Pinned Locked Moved Tester
adapterbildschirmschonerdiashowslideshow
100 Posts 26 Posters 14.6k Views 25 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O Oli

    @aggroralf
    Ich habe ioBroker als Docker auf einer Qnap-Nas installiert. Auf diesem Nas sind ebenfalls meine Bilder gespeichert.

    Was muss ich für einen Pfad eingeben, damit ich meine Bilder als Slideshow abspielen zu können?

    A Offline
    A Offline
    AggroRalf
    Developer
    wrote on last edited by
    #61

    @oli Hi,

    das wird so einfach nicht gehen. Du musst am besten im Container ein Mount auf dein Bild-Verzeichnis integrieren, dann ist es innerhalb des Containers quasi ein lokaler Pfad.

    VG Ralf

    O 1 Reply Last reply
    0
    • A AggroRalf

      @oli Hi,

      das wird so einfach nicht gehen. Du musst am besten im Container ein Mount auf dein Bild-Verzeichnis integrieren, dann ist es innerhalb des Containers quasi ein lokaler Pfad.

      VG Ralf

      O Online
      O Online
      Oli
      wrote on last edited by
      #62

      @aggroralf

      danke für den Hinweis, werde deinen Vorschlag mal versuchen umzusetzen.

      Gruß
      Oliver

      1 Reply Last reply
      0
      • R Offline
        R Offline
        Raabensohn
        wrote on last edited by Raabensohn
        #63

        hat sich erledigt.... 😉

        1 Reply Last reply
        0
        • ChristianxxxxC Offline
          ChristianxxxxC Offline
          Christianxxxx
          wrote on last edited by
          #64

          Super Adapter! Danke dafür👍
          Leider habe ich zwei Probleme, vielleicht liegt es auch einfach an mir. Zumindest konnte ich in den issus und hier im Forum nichts dazu finden.
          Ausgangssituation:
          Ich habe ein Android Tablet mit einer VIS an der Wand. Als Navigation benutze ich das "Material Design top Bar" widget in Verbindung mit "iframe 8 widget". Wie weiter oben schon empfohlen habe ich die Slideshow über eine neue View realisiert.
          Leider habe ich das Problem das sich die Slideshow nur dann automatisch aktiviert wenn ich in das top bar widget tippe. Tippen in den iframe widget teil haben keinen einfluss auf die aktivitäten der Slideshow.
          Außerdem habe ich den Effekt, dass wenn beim klingeln auf die Kamer view geschalt wird auch die Slideshow nicht automatisch startet, erst wenn ich wieder im Bereich der top bar tippe startet die Slideshow.
          Kann mir da einer helfen?

          1 Reply Last reply
          0
          • A AggroRalf
            Aktuelle Test Version 0.1.4
            Veröffentlichungsdatum 18.04.2021
            Github Link https://github.com/gaudes/ioBroker.slideshow

            Adapter ioBroker.slideshow 0.1.4

            Hallo zusammen,

            ich habe mir vor Weihnachten einen Amazon Echo Show 8 gegönnt. In Firefox stellt er mir mit VIS die Haussteuerung dar. Meine Idee war dann, diesen (und auch andere Anzeigegeräte wie Tablets) aber auch als "digitalen Bilderrahmen" zu verwenden. Ein Beispiel zeigt bekanntlich mehr als tausend Worte:

            Slideshow Demo

            Der Adapter stellt eine somit eine Diashow mit Bilschirmschoner-Funktion für VIS zur Verfügung.

            Folgende Quellen stehen aktuell zur Verfügung:

            • Die letzten acht täglichen Bilder von Bing.com
            • Via VIS-Dateimanager hochgeladene Bilder
            • Bilder aus beliebigem Pfad im Dateisystem
            • Bilder von Synology PhotoStation

            Als Dateitypen gehen aktuell nur JPG, JPEG und PNG. Die Bilder werden beim Start des Adapters eingelesen, daher ist bei Änderungen ein Neustart des Adapters notwendig. Ausnahme ist Bing, diese werden täglich neu eingelesen.

            Zur Darstellung in VIS stellt der Adapter ein Widget zur Verfügung. Dieses bietet auch Funktionen für Effekt beim Bildwechsel, beispielsweise sanftes Ein- und Ausblenden. Zusätzlich kann ein Timeout eingestellt werden. Sofern auf anderen View im Projekt keine Aktion für das eingestellte Timeout erfolgt ist, wird zur View mit der Slideshow gewechselt. Durch Klicken des Bilds wird entweder zurück zur letzten Ansicht oder zu einer eingestellten Ansicht gewechselt.

            Über das Slideshow-Widget habe ich für die obige Demo dann noch ein View-Wechsel-Widget gelegt, welches mittels eines kleinen Blockly-Script automatisch durch von mir definierte "Unter-Views" wechselt, wo ich trotz Slideshow die wichtigsten Infos dargestellt bekomme.

            Der Adapter hat bereits recht fehlerfrei einen Alpha-Test hinter sich gebracht, danke an alle Beteiligten.

            Installation
            Die Installation sollte aus dem Beta-Zweig erfolgen.
            Alternativ über die "Katze", dann gaudes/ioBroker.slideshow#main auf der Seite "Beliebig" eintragen.

            Was tun bei Fehlern oder Problemen?
            Bei Fehlern sollte zuerst das Log in ioBroker geprüft werden. Ich habe versucht, möglichst treffende Fehlermeldungen auszugeben.
            Bei Problemen mit dem VIS-Widget gerne auch mal in die Konsole der Entwicklertools eines Browsers schauen (meist F12-Taste), eventuell stehen dort auch Fehlermeldungen.

            Rückmeldungen gerne hier im Forum oder in Discord (Channel #slideshow https://discord.gg/SjaaQdeM ).

            So, und nun viel Spass beim Testen.

            ACHTUNG: ADAPTER WURDE UMBENANNT
            Der bisherige Name war Diashow. Korrekt und etwas "internationaler" heißt der Adapter nun Slideshow.

            R Offline
            R Offline
            RandyAndy
            wrote on last edited by
            #65

            @aggroralf

            Hallo Ralf,

            ich versende den Adpater nun schon ein Weile und alles läuft wunderbar. Ich verwende den Adapter um Sehenswürdigkeiten und Attraktionen anzuzeigen.
            Wird auch positiv angenommen.
            Ich bin aber mal so frech zu fragen ob es möglich wäre zu Bildern einen http:// Link zu hinterlegen. Sobald man das Bild anklickt wird dann ein Fenster (iframe z.B.) geöffnet und der hinterlegte Link geöffnet.
            Könnte man vielleicht im Dateinamen hinterlegen z.B. getrennt durch einen # oder über eine Datenbank, JSON, etc die die Bilder des Folders und den Link verbindet.

            Nur mal so als Idee.

            Andreas

            1 Reply Last reply
            0
            • H Offline
              H Offline
              Hausbaer
              wrote on last edited by
              #66

              Ich Versuche verzweifelt, Bilder von meiner OMV NAS zu verlinken.

              Hat dies schon jemand am Laufen?

              1 Reply Last reply
              0
              • Rene RR Offline
                Rene RR Offline
                Rene R
                wrote on last edited by
                #67

                @Ralf

                Hallo wäre es möglich im Localen Ordner die Bilder nach den neusten Bilder zu suchen und anzuzeigen statt zuerst die alten Bilder und dann auf die neuen.

                Gruß Rene

                A 1 Reply Last reply
                0
                • Rene RR Rene R

                  @Ralf

                  Hallo wäre es möglich im Localen Ordner die Bilder nach den neusten Bilder zu suchen und anzuzeigen statt zuerst die alten Bilder und dann auf die neuen.

                  Gruß Rene

                  A Offline
                  A Offline
                  AggroRalf
                  Developer
                  wrote on last edited by
                  #68

                  @rene-r Hi, eine bestimmte Reihenfolge muss es halt geben 🙂

                  Aktuell ist es glaub einfach nach Dateiname im Ordner, mehr nicht.

                  Rene RR 1 Reply Last reply
                  0
                  • A AggroRalf

                    @rene-r Hi, eine bestimmte Reihenfolge muss es halt geben 🙂

                    Aktuell ist es glaub einfach nach Dateiname im Ordner, mehr nicht.

                    Rene RR Offline
                    Rene RR Offline
                    Rene R
                    wrote on last edited by
                    #69

                    @aggroralf

                    und wie kann ich es machen dass die neusten Bilder angezeigt werden, es gibt ja ein Tool um die Bilderdatei umzuschreiben nach Erstellungsdatum.

                    oder wäre es möglich ein kleines Skript zu schreiben wo nach Namen suchen tut, denn im Adapter stehen ja die Dateinamen.

                    A 1 Reply Last reply
                    0
                    • Rene RR Rene R

                      @aggroralf

                      und wie kann ich es machen dass die neusten Bilder angezeigt werden, es gibt ja ein Tool um die Bilderdatei umzuschreiben nach Erstellungsdatum.

                      oder wäre es möglich ein kleines Skript zu schreiben wo nach Namen suchen tut, denn im Adapter stehen ja die Dateinamen.

                      A Offline
                      A Offline
                      AggroRalf
                      Developer
                      wrote on last edited by
                      #70

                      @rene-r Meinst externe Tools ? Sowas kann meines Wissens z.B. IrfanView.

                      Rene RR 2 Replies Last reply
                      0
                      • A AggroRalf

                        @rene-r Meinst externe Tools ? Sowas kann meines Wissens z.B. IrfanView.

                        Rene RR Offline
                        Rene RR Offline
                        Rene R
                        wrote on last edited by
                        #71

                        @aggroralf

                        oder was halt perfekt wäre, wenn man den Adapter mit Google Fotos verbinden könnte und von dort aus die Bilder laden könnte.

                        Das würde mir einiges an Arbeit abnehmen und somit auch alles stabil laufen.

                        Wäre ja ein Vorschlag

                        Gruß

                        Rene

                        1 Reply Last reply
                        0
                        • A AggroRalf

                          @rene-r Meinst externe Tools ? Sowas kann meines Wissens z.B. IrfanView.

                          Rene RR Offline
                          Rene RR Offline
                          Rene R
                          wrote on last edited by
                          #72

                          @aggroralf

                          Mit externe Tools kann man ja per Skript ja die Bilder von Google Fotos runterladen bzw. synchronisieren.

                          aber vom Adapter fängt er ja nicht nach den neuen Bildern anzuzeigen sondern fängt bei den alten Bilder an und geht hoch zu den neuen Bildern. und möchte es dass es andersrum ist.

                          1 Reply Last reply
                          0
                          • H Offline
                            H Offline
                            hinsen2k
                            wrote on last edited by
                            #73

                            @AggroRalf

                            Nun hab ich deinen Adapter auch endlich gefunden 🙂 Danke dafür - es scheint genau das zu sein, was ich suche.

                            Allerdings bekomme ich den Adapter wohl nicht sauber installiert. Übers Beta Repository in aktuellster iobroker Version finde ich ihn und kann ihn installieren. Die Instanz ist grün und sollte daher wohl auch funktionieren. Allerdings finde ich es merkwürdig, dass ich unter den Objekten ausschließlich einen Ordner 0 mit dem Bolean Datenpunkt updatepicturelist habe. Mehr nicht. Soll das so sein!?
                            Im Standard ist ja Bing als Bildquelle ausgewählt. Ich denke, dass daraufhin mit dem Widget in der VIS sofort Bilder zu sehen wären, oder? Ich sehe nichts. Auch wenn ich Bilder einer lokalen Quelle auswähle, kommt nichts.
                            Die Standard-Quelle im Datenpunkt slideshow.0.picture existiert bei mir gar nicht. Aber in was müsste Sie ggf. ändern?

                            Ich glaube, bei mir ist der Wurm drin 😉

                            Hast Du einen Tipp für mich?

                            VG
                            sven

                            DJMarc75D 1 Reply Last reply
                            0
                            • H hinsen2k

                              @AggroRalf

                              Nun hab ich deinen Adapter auch endlich gefunden 🙂 Danke dafür - es scheint genau das zu sein, was ich suche.

                              Allerdings bekomme ich den Adapter wohl nicht sauber installiert. Übers Beta Repository in aktuellster iobroker Version finde ich ihn und kann ihn installieren. Die Instanz ist grün und sollte daher wohl auch funktionieren. Allerdings finde ich es merkwürdig, dass ich unter den Objekten ausschließlich einen Ordner 0 mit dem Bolean Datenpunkt updatepicturelist habe. Mehr nicht. Soll das so sein!?
                              Im Standard ist ja Bing als Bildquelle ausgewählt. Ich denke, dass daraufhin mit dem Widget in der VIS sofort Bilder zu sehen wären, oder? Ich sehe nichts. Auch wenn ich Bilder einer lokalen Quelle auswähle, kommt nichts.
                              Die Standard-Quelle im Datenpunkt slideshow.0.picture existiert bei mir gar nicht. Aber in was müsste Sie ggf. ändern?

                              Ich glaube, bei mir ist der Wurm drin 😉

                              Hast Du einen Tipp für mich?

                              VG
                              sven

                              DJMarc75D Offline
                              DJMarc75D Offline
                              DJMarc75
                              wrote on last edited by
                              #74

                              @hinsen2k Wie sieht denn die Konfig der Instanz aus ?

                              Lehrling seit 1975 !!!
                              Beitrag geholfen ? dann gerne ein upvote rechts unten im Beitrag klicken ;)
                              https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge

                              H 1 Reply Last reply
                              0
                              • DJMarc75D DJMarc75

                                @hinsen2k Wie sieht denn die Konfig der Instanz aus ?

                                H Offline
                                H Offline
                                hinsen2k
                                wrote on last edited by
                                #75

                                @djmarc75
                                48944b08-7c5d-4d11-911e-9d2a4682adc0-image.png

                                Eigentlich so, wie es nach der Installation ist. Ich verstehe es so, dass so wenigstens die Bing Bilder sofort sichtbar wären. Aber es ist wie in meinem vorherigen Post bereits beschrieben.

                                1 Reply Last reply
                                0
                                • M Online
                                  M Online
                                  mading
                                  wrote on last edited by
                                  #76

                                  Hi,

                                  danke für den tollen Adapter, funktioniert mit Synology DSM wunderbar! Eine Frage, wenn ich mir das Datum wann das Foto aufgenommen wurde, anzeigen lassen möchte, erhalte ich in VIS mit {slideshow.0.date} ein kryptisches Datum (epoch?)

                                  96fbdd9b-3e8b-49bd-a4f2-512e1f232a01-image.png

                                  In den Datenpunkten ist das Datum korrekt:
                                  25674c0d-cc1e-4c13-9782-d7e9444d1873-image.png

                                  1 Reply Last reply
                                  0
                                  • M Online
                                    M Online
                                    mading
                                    wrote on last edited by
                                    #77

                                    kann meinen Beitrag nicht editieren. Hat sich erledigt, es gibt ein timestamp widget

                                    1 Reply Last reply
                                    0
                                    • DJMarc75D Offline
                                      DJMarc75D Offline
                                      DJMarc75
                                      wrote on last edited by
                                      #78

                                      Tag,
                                      vermisst eigentlich noch jemand, ausser mir, einen DP welcher den aktuellen Dateinamen des Fotos zeigt?
                                      Klar macht das bei BING wenig Sinn aber bei den anderen Methoden schon mehr, da man ja die Dateinamen selbst festlegt.
                                      Ich löse das momentan per Auslesen vom DebugLog und per Skript - aber ist halt nicht optimal 🙃

                                      ISSUE auf GIT hab ich gemacht - gerne dranhängen (https://github.com/gaudes/ioBroker.slideshow/issues/276)

                                      djmarc75 created this issue in gaudes/ioBroker.slideshow

                                      closed start/stop/picname/etc #276

                                      Lehrling seit 1975 !!!
                                      Beitrag geholfen ? dann gerne ein upvote rechts unten im Beitrag klicken ;)
                                      https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge

                                      1 Reply Last reply
                                      0
                                      • DJMarc75D Offline
                                        DJMarc75D Offline
                                        DJMarc75
                                        wrote on last edited by DJMarc75
                                        #79

                                        Kleiner Edit von mir in der main.js im Verzeichnis

                                        /opt/iobroker/node_modules/iobroker.slideshow/build
                                        

                                        var __create = Object.create;
                                        var __defProp = Object.defineProperty;
                                        var __defProps = Object.defineProperties;
                                        var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
                                        var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
                                        var __getOwnPropNames = Object.getOwnPropertyNames;
                                        var __getOwnPropSymbols = Object.getOwnPropertySymbols;
                                        var __getProtoOf = Object.getPrototypeOf;
                                        var __hasOwnProp = Object.prototype.hasOwnProperty;
                                        var __propIsEnum = Object.prototype.propertyIsEnumerable;
                                        var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
                                        var __spreadValues = (a, b) => {
                                         for (var prop in b || (b = {}))
                                           if (__hasOwnProp.call(b, prop))
                                             __defNormalProp(a, prop, b[prop]);
                                         if (__getOwnPropSymbols)
                                           for (var prop of __getOwnPropSymbols(b)) {
                                             if (__propIsEnum.call(b, prop))
                                               __defNormalProp(a, prop, b[prop]);
                                           }
                                         return a;
                                        };
                                        var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
                                        var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
                                        var __reExport = (target, module2, copyDefault, desc) => {
                                         if (module2 && typeof module2 === "object" || typeof module2 === "function") {
                                           for (let key of __getOwnPropNames(module2))
                                             if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
                                               __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
                                         }
                                         return target;
                                        };
                                        var __toESM = (module2, isNodeMode) => {
                                         return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
                                        };
                                        var utils = __toESM(require("@iobroker/adapter-core"));
                                        var import_global_helper = require("./modules/global-helper");
                                        var slideBing = __toESM(require("./modules/slideBing"));
                                        var slideLocal = __toESM(require("./modules/slideLocal"));
                                        var slideFS = __toESM(require("./modules/slideFS"));
                                        var slideSyno = __toESM(require("./modules/slideSynology"));
                                        let Helper;
                                        const MsgErrUnknown = "Unknown Error";
                                        let UpdateRunning = false;
                                        class Slideshow extends utils.Adapter {
                                         constructor(options = {}) {
                                           super(__spreadProps(__spreadValues({}, options), {
                                             name: "slideshow"
                                           }));
                                           this.tUpdatePictureStoreTimeout = null;
                                           this.tUpdateCurrentPictureTimeout = null;
                                           this.on("ready", this.onReady.bind(this));
                                           this.on("stateChange", this.onStateChange.bind(this));
                                           this.on("unload", this.onUnload.bind(this));
                                           this.isUnloaded = false;
                                         }
                                         async onReady() {
                                           try {
                                             Helper = new import_global_helper.GlobalHelper(this);
                                             await this.setObjectNotExistsAsync("updatepicturelist", {
                                               type: "state",
                                               common: {
                                                 name: "updatepicturelist",
                                                 type: "boolean",
                                                 role: "button",
                                                 read: true,
                                                 write: true,
                                                 desc: "Update picture list",
                                                 def: false
                                               },
                                               native: {}
                                             });
                                             await this.setStateAsync("updatepicturelist", false, true);
                                             this.subscribeStates("updatepicturelist");
                                             await this.updatePictureStoreTimer();
                                           } catch (err) {
                                             Helper.ReportingError(err, MsgErrUnknown, "onReady");
                                           }
                                         }
                                         async onStateChange(id, state) {
                                           if (state) {
                                             if (id === `${this.namespace}.updatepicturelist` && (state == null ? void 0 : state.val) === true && (state == null ? void 0 : state.ack) === false) {
                                               if (UpdateRunning === true) {
                                                 Helper.ReportingInfo("Info", "Adapter", "Update picture list already running");
                                               } else {
                                                 Helper.ReportingInfo("Info", "Adapter", "Updating picture list");
                                                 clearTimeout(this.tUpdateCurrentPictureTimeout);
                                                 await this.updatePictureStoreTimer();
                                               }
                                               await this.setStateAsync("updatepicturelist", false, false);
                                             }
                                           }
                                         }
                                         onUnload(callback) {
                                           try {
                                             this.isUnloaded = true;
                                             clearTimeout(this.tUpdateCurrentPictureTimeout);
                                             clearTimeout(this.tUpdatePictureStoreTimeout);
                                             callback();
                                           } catch (e) {
                                             callback();
                                           }
                                         }
                                         async updatePictureStoreTimer() {
                                           UpdateRunning = true;
                                           let updatePictureStoreResult = { success: false, picturecount: 0 };
                                           Helper.ReportingInfo("Debug", "Adapter", "UpdatePictureStoreTimer occured");
                                           try {
                                             this.tUpdatePictureStoreTimeout && clearTimeout(this.tUpdatePictureStoreTimeout);
                                           } catch (err) {
                                             Helper.ReportingError(err, MsgErrUnknown, "updatePictureStoreTimer", "Clear Timer");
                                           }
                                           try {
                                             switch (this.config.provider) {
                                               case 1:
                                                 updatePictureStoreResult = await slideBing.updatePictureList(Helper);
                                                 break;
                                               case 2:
                                                 updatePictureStoreResult = await slideLocal.updatePictureList(Helper);
                                                 break;
                                               case 3:
                                                 updatePictureStoreResult = await slideFS.updatePictureList(Helper);
                                                 break;
                                               case 4:
                                                 updatePictureStoreResult = await slideSyno.updatePictureList(Helper);
                                                 break;
                                             }
                                           } catch (err) {
                                             Helper.ReportingError(err, MsgErrUnknown, "updatePictureStoreTimer", "Call Timer Action");
                                           }
                                           try {
                                             if (this.config.update_picture_list && this.config.update_picture_list > 0 && updatePictureStoreResult.success === true) {
                                               Helper.ReportingInfo("Debug", "updatePictureStoreTimer", `Update every ${this.config.update_picture_list} hours, starting timer`);
                                               this.tUpdatePictureStoreTimeout = setTimeout(() => {
                                                 this.updatePictureStoreTimer();
                                               }, this.config.update_picture_list * 36e5);
                                             } else if (updatePictureStoreResult.success === false) {
                                               this.tUpdatePictureStoreTimeout = setTimeout(() => {
                                                 this.updatePictureStoreTimer();
                                               }, this.config.update_interval * 3e5);
                                             }
                                             if (updatePictureStoreResult.success === true && updatePictureStoreResult.picturecount > 0 && this.isUnloaded === false) {
                                               await this.setObjectNotExistsAsync("picturecount", {
                                                 type: "state",
                                                 common: {
                                                   name: "picturecount",
                                                   type: "number",
                                                   role: "value",
                                                   read: true,
                                                   write: false,
                                                   desc: "Pictures found"
                                                 },
                                                 native: {}
                                               });
                                               await this.setStateAsync("picturecount", { val: updatePictureStoreResult.picturecount, ack: true });
                                               this.updateCurrentPictureTimer();
                                             }
                                           } catch (err) {
                                             Helper.ReportingError(err, MsgErrUnknown, "updatePictureStoreTimer", "Set Timer");
                                           }
                                           UpdateRunning = false;
                                         }
                                         async updateCurrentPictureTimer() {
                                           var _a;
                                           let CurrentPictureResult = null;
                                           let Provider = "";
                                           Helper.ReportingInfo("Debug", "Adapter", "updateCurrentPictureTimer occured");
                                           try {
                                             this.tUpdateCurrentPictureTimeout && clearTimeout(this.tUpdateCurrentPictureTimeout);
                                           } catch (err) {
                                             Helper.ReportingError(err, MsgErrUnknown, "updateCurrentPictureTimer", "Clear Timer");
                                           }
                                           try {
                                             switch (this.config.provider) {
                                               case 1:
                                                 CurrentPictureResult = await slideBing.getPicture(Helper);
                                                 Provider = "Bing";
                                                 break;
                                               case 2:
                                                 CurrentPictureResult = await slideLocal.getPicture(Helper);
                                                 Provider = "Local";
                                                 break;
                                               case 3:
                                                 CurrentPictureResult = await slideFS.getPicture(Helper);
                                                 Provider = "FileSystem";
                                                 break;
                                               case 4:
                                                 CurrentPictureResult = await slideSyno.getPicture(Helper);
                                                 Provider = "Synology";
                                                 break;
                                             }
                                           } catch (err) {
                                             Helper.ReportingError(err, MsgErrUnknown, "updateCurrentPictureTimer", "Call Timer Action");
                                           }
                                           try {
                                             if (CurrentPictureResult !== null && this.isUnloaded === false) {
                                               Helper.ReportingInfo("Debug", Provider, `Set picture to ${CurrentPictureResult.path}`);
                                               await this.setObjectNotExistsAsync("picture", {
                                                 type: "state",
                                                 common: {
                                                   name: "picture",
                                                   type: "string",
                                                   role: "text",
                                                   read: true,
                                                   write: false,
                                                   desc: "Current picture"
                                                 },
                                                 native: {}
                                               });
                                               await this.setStateAsync("picture", { val: CurrentPictureResult.url, ack: true });
                                               await this.setObjectNotExistsAsync("path", {
                                                 type: "state",
                                                 common: {
                                                   name: "path",
                                                   type: "string",
                                                   role: "text",
                                                   read: true,
                                                   write: false,
                                                   desc: "Path and Name"
                                                 },
                                                 native: {}
                                               });
                                               await this.setStateAsync("path", { val: CurrentPictureResult.path, ack: true });
                                               await this.setObjectNotExistsAsync("info1", {
                                                 type: "state",
                                                 common: {
                                                   name: "info1",
                                                   type: "string",
                                                   role: "text",
                                                   read: true,
                                                   write: false,
                                                   desc: "Info 1 for picture"
                                                 },
                                                 native: {}
                                               });
                                               await this.setStateAsync("info1", { val: CurrentPictureResult.info1, ack: true });
                                               await this.setObjectNotExistsAsync("info2", {
                                                 type: "state",
                                                 common: {
                                                   name: "info2",
                                                   type: "string",
                                                   role: "text",
                                                   read: true,
                                                   write: false,
                                                   desc: "Info 2 for picture"
                                                 },
                                                 native: {}
                                               });
                                               await this.setStateAsync("info2", { val: CurrentPictureResult.info2, ack: true });
                                               await this.setObjectNotExistsAsync("info3", {
                                                 type: "state",
                                                 common: {
                                                   name: "info3",
                                                   type: "string",
                                                   role: "text",
                                                   read: true,
                                                   write: false,
                                                   desc: "Info 3 for picture"
                                                 },
                                                 native: {}
                                               });
                                               await this.setStateAsync("info3", { val: CurrentPictureResult.info3, ack: true });
                                               await this.setObjectNotExistsAsync("date", {
                                                 type: "state",
                                                 common: {
                                                   name: "date",
                                                   type: "number",
                                                   role: "date",
                                                   read: true,
                                                   write: false,
                                                   desc: "Date of picture"
                                                 },
                                                 native: {}
                                               });
                                               await this.setStateAsync("date", { val: ((_a = CurrentPictureResult.date) == null ? void 0 : _a.getTime()) || null, ack: true });
                                             }
                                           } catch (err) {
                                             Helper.ReportingError(err, MsgErrUnknown, "updateCurrentPictureTimer", "Call Timer Action");
                                           }
                                           try {
                                             this.tUpdateCurrentPictureTimeout = setTimeout(() => {
                                               this.updateCurrentPictureTimer();
                                             }, this.config.update_interval * 1e3);
                                           } catch (err) {
                                             Helper.ReportingError(err, MsgErrUnknown, "updateCurrentPictureTimer", "Set Timer");
                                           }
                                         }
                                        }
                                        if (module.parent) {
                                         module.exports = (options) => new Slideshow(options);
                                        } else {
                                         (() => new Slideshow())();
                                        }
                                        //# sourceMappingURL=main.js.map
                                        
                                        

                                        Zeile 211 bis 223 von mir hinzugefügt.
                                        Dadurch wird ein neuer DP "path" erzeugt (Neustart des Adapters) in welchen bei jedem Bilderwechsel der aktuelle Pfad inkl. Dateiname geschrieben wird.

                                        Benutzung auf eigenes Risiko natürlich aber falls das jemand testen mag dann gerne.

                                        p.s. bei Update vom Adapter wird die main.js natürlich wieder mit der originalen überschrieben.

                                        Lehrling seit 1975 !!!
                                        Beitrag geholfen ? dann gerne ein upvote rechts unten im Beitrag klicken ;)
                                        https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge

                                        ? 1 Reply Last reply
                                        0
                                        • DJMarc75D DJMarc75

                                          Kleiner Edit von mir in der main.js im Verzeichnis

                                          /opt/iobroker/node_modules/iobroker.slideshow/build
                                          

                                          var __create = Object.create;
                                          var __defProp = Object.defineProperty;
                                          var __defProps = Object.defineProperties;
                                          var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
                                          var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
                                          var __getOwnPropNames = Object.getOwnPropertyNames;
                                          var __getOwnPropSymbols = Object.getOwnPropertySymbols;
                                          var __getProtoOf = Object.getPrototypeOf;
                                          var __hasOwnProp = Object.prototype.hasOwnProperty;
                                          var __propIsEnum = Object.prototype.propertyIsEnumerable;
                                          var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
                                          var __spreadValues = (a, b) => {
                                           for (var prop in b || (b = {}))
                                             if (__hasOwnProp.call(b, prop))
                                               __defNormalProp(a, prop, b[prop]);
                                           if (__getOwnPropSymbols)
                                             for (var prop of __getOwnPropSymbols(b)) {
                                               if (__propIsEnum.call(b, prop))
                                                 __defNormalProp(a, prop, b[prop]);
                                             }
                                           return a;
                                          };
                                          var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
                                          var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
                                          var __reExport = (target, module2, copyDefault, desc) => {
                                           if (module2 && typeof module2 === "object" || typeof module2 === "function") {
                                             for (let key of __getOwnPropNames(module2))
                                               if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
                                                 __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
                                           }
                                           return target;
                                          };
                                          var __toESM = (module2, isNodeMode) => {
                                           return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
                                          };
                                          var utils = __toESM(require("@iobroker/adapter-core"));
                                          var import_global_helper = require("./modules/global-helper");
                                          var slideBing = __toESM(require("./modules/slideBing"));
                                          var slideLocal = __toESM(require("./modules/slideLocal"));
                                          var slideFS = __toESM(require("./modules/slideFS"));
                                          var slideSyno = __toESM(require("./modules/slideSynology"));
                                          let Helper;
                                          const MsgErrUnknown = "Unknown Error";
                                          let UpdateRunning = false;
                                          class Slideshow extends utils.Adapter {
                                           constructor(options = {}) {
                                             super(__spreadProps(__spreadValues({}, options), {
                                               name: "slideshow"
                                             }));
                                             this.tUpdatePictureStoreTimeout = null;
                                             this.tUpdateCurrentPictureTimeout = null;
                                             this.on("ready", this.onReady.bind(this));
                                             this.on("stateChange", this.onStateChange.bind(this));
                                             this.on("unload", this.onUnload.bind(this));
                                             this.isUnloaded = false;
                                           }
                                           async onReady() {
                                             try {
                                               Helper = new import_global_helper.GlobalHelper(this);
                                               await this.setObjectNotExistsAsync("updatepicturelist", {
                                                 type: "state",
                                                 common: {
                                                   name: "updatepicturelist",
                                                   type: "boolean",
                                                   role: "button",
                                                   read: true,
                                                   write: true,
                                                   desc: "Update picture list",
                                                   def: false
                                                 },
                                                 native: {}
                                               });
                                               await this.setStateAsync("updatepicturelist", false, true);
                                               this.subscribeStates("updatepicturelist");
                                               await this.updatePictureStoreTimer();
                                             } catch (err) {
                                               Helper.ReportingError(err, MsgErrUnknown, "onReady");
                                             }
                                           }
                                           async onStateChange(id, state) {
                                             if (state) {
                                               if (id === `${this.namespace}.updatepicturelist` && (state == null ? void 0 : state.val) === true && (state == null ? void 0 : state.ack) === false) {
                                                 if (UpdateRunning === true) {
                                                   Helper.ReportingInfo("Info", "Adapter", "Update picture list already running");
                                                 } else {
                                                   Helper.ReportingInfo("Info", "Adapter", "Updating picture list");
                                                   clearTimeout(this.tUpdateCurrentPictureTimeout);
                                                   await this.updatePictureStoreTimer();
                                                 }
                                                 await this.setStateAsync("updatepicturelist", false, false);
                                               }
                                             }
                                           }
                                           onUnload(callback) {
                                             try {
                                               this.isUnloaded = true;
                                               clearTimeout(this.tUpdateCurrentPictureTimeout);
                                               clearTimeout(this.tUpdatePictureStoreTimeout);
                                               callback();
                                             } catch (e) {
                                               callback();
                                             }
                                           }
                                           async updatePictureStoreTimer() {
                                             UpdateRunning = true;
                                             let updatePictureStoreResult = { success: false, picturecount: 0 };
                                             Helper.ReportingInfo("Debug", "Adapter", "UpdatePictureStoreTimer occured");
                                             try {
                                               this.tUpdatePictureStoreTimeout && clearTimeout(this.tUpdatePictureStoreTimeout);
                                             } catch (err) {
                                               Helper.ReportingError(err, MsgErrUnknown, "updatePictureStoreTimer", "Clear Timer");
                                             }
                                             try {
                                               switch (this.config.provider) {
                                                 case 1:
                                                   updatePictureStoreResult = await slideBing.updatePictureList(Helper);
                                                   break;
                                                 case 2:
                                                   updatePictureStoreResult = await slideLocal.updatePictureList(Helper);
                                                   break;
                                                 case 3:
                                                   updatePictureStoreResult = await slideFS.updatePictureList(Helper);
                                                   break;
                                                 case 4:
                                                   updatePictureStoreResult = await slideSyno.updatePictureList(Helper);
                                                   break;
                                               }
                                             } catch (err) {
                                               Helper.ReportingError(err, MsgErrUnknown, "updatePictureStoreTimer", "Call Timer Action");
                                             }
                                             try {
                                               if (this.config.update_picture_list && this.config.update_picture_list > 0 && updatePictureStoreResult.success === true) {
                                                 Helper.ReportingInfo("Debug", "updatePictureStoreTimer", `Update every ${this.config.update_picture_list} hours, starting timer`);
                                                 this.tUpdatePictureStoreTimeout = setTimeout(() => {
                                                   this.updatePictureStoreTimer();
                                                 }, this.config.update_picture_list * 36e5);
                                               } else if (updatePictureStoreResult.success === false) {
                                                 this.tUpdatePictureStoreTimeout = setTimeout(() => {
                                                   this.updatePictureStoreTimer();
                                                 }, this.config.update_interval * 3e5);
                                               }
                                               if (updatePictureStoreResult.success === true && updatePictureStoreResult.picturecount > 0 && this.isUnloaded === false) {
                                                 await this.setObjectNotExistsAsync("picturecount", {
                                                   type: "state",
                                                   common: {
                                                     name: "picturecount",
                                                     type: "number",
                                                     role: "value",
                                                     read: true,
                                                     write: false,
                                                     desc: "Pictures found"
                                                   },
                                                   native: {}
                                                 });
                                                 await this.setStateAsync("picturecount", { val: updatePictureStoreResult.picturecount, ack: true });
                                                 this.updateCurrentPictureTimer();
                                               }
                                             } catch (err) {
                                               Helper.ReportingError(err, MsgErrUnknown, "updatePictureStoreTimer", "Set Timer");
                                             }
                                             UpdateRunning = false;
                                           }
                                           async updateCurrentPictureTimer() {
                                             var _a;
                                             let CurrentPictureResult = null;
                                             let Provider = "";
                                             Helper.ReportingInfo("Debug", "Adapter", "updateCurrentPictureTimer occured");
                                             try {
                                               this.tUpdateCurrentPictureTimeout && clearTimeout(this.tUpdateCurrentPictureTimeout);
                                             } catch (err) {
                                               Helper.ReportingError(err, MsgErrUnknown, "updateCurrentPictureTimer", "Clear Timer");
                                             }
                                             try {
                                               switch (this.config.provider) {
                                                 case 1:
                                                   CurrentPictureResult = await slideBing.getPicture(Helper);
                                                   Provider = "Bing";
                                                   break;
                                                 case 2:
                                                   CurrentPictureResult = await slideLocal.getPicture(Helper);
                                                   Provider = "Local";
                                                   break;
                                                 case 3:
                                                   CurrentPictureResult = await slideFS.getPicture(Helper);
                                                   Provider = "FileSystem";
                                                   break;
                                                 case 4:
                                                   CurrentPictureResult = await slideSyno.getPicture(Helper);
                                                   Provider = "Synology";
                                                   break;
                                               }
                                             } catch (err) {
                                               Helper.ReportingError(err, MsgErrUnknown, "updateCurrentPictureTimer", "Call Timer Action");
                                             }
                                             try {
                                               if (CurrentPictureResult !== null && this.isUnloaded === false) {
                                                 Helper.ReportingInfo("Debug", Provider, `Set picture to ${CurrentPictureResult.path}`);
                                                 await this.setObjectNotExistsAsync("picture", {
                                                   type: "state",
                                                   common: {
                                                     name: "picture",
                                                     type: "string",
                                                     role: "text",
                                                     read: true,
                                                     write: false,
                                                     desc: "Current picture"
                                                   },
                                                   native: {}
                                                 });
                                                 await this.setStateAsync("picture", { val: CurrentPictureResult.url, ack: true });
                                                 await this.setObjectNotExistsAsync("path", {
                                                   type: "state",
                                                   common: {
                                                     name: "path",
                                                     type: "string",
                                                     role: "text",
                                                     read: true,
                                                     write: false,
                                                     desc: "Path and Name"
                                                   },
                                                   native: {}
                                                 });
                                                 await this.setStateAsync("path", { val: CurrentPictureResult.path, ack: true });
                                                 await this.setObjectNotExistsAsync("info1", {
                                                   type: "state",
                                                   common: {
                                                     name: "info1",
                                                     type: "string",
                                                     role: "text",
                                                     read: true,
                                                     write: false,
                                                     desc: "Info 1 for picture"
                                                   },
                                                   native: {}
                                                 });
                                                 await this.setStateAsync("info1", { val: CurrentPictureResult.info1, ack: true });
                                                 await this.setObjectNotExistsAsync("info2", {
                                                   type: "state",
                                                   common: {
                                                     name: "info2",
                                                     type: "string",
                                                     role: "text",
                                                     read: true,
                                                     write: false,
                                                     desc: "Info 2 for picture"
                                                   },
                                                   native: {}
                                                 });
                                                 await this.setStateAsync("info2", { val: CurrentPictureResult.info2, ack: true });
                                                 await this.setObjectNotExistsAsync("info3", {
                                                   type: "state",
                                                   common: {
                                                     name: "info3",
                                                     type: "string",
                                                     role: "text",
                                                     read: true,
                                                     write: false,
                                                     desc: "Info 3 for picture"
                                                   },
                                                   native: {}
                                                 });
                                                 await this.setStateAsync("info3", { val: CurrentPictureResult.info3, ack: true });
                                                 await this.setObjectNotExistsAsync("date", {
                                                   type: "state",
                                                   common: {
                                                     name: "date",
                                                     type: "number",
                                                     role: "date",
                                                     read: true,
                                                     write: false,
                                                     desc: "Date of picture"
                                                   },
                                                   native: {}
                                                 });
                                                 await this.setStateAsync("date", { val: ((_a = CurrentPictureResult.date) == null ? void 0 : _a.getTime()) || null, ack: true });
                                               }
                                             } catch (err) {
                                               Helper.ReportingError(err, MsgErrUnknown, "updateCurrentPictureTimer", "Call Timer Action");
                                             }
                                             try {
                                               this.tUpdateCurrentPictureTimeout = setTimeout(() => {
                                                 this.updateCurrentPictureTimer();
                                               }, this.config.update_interval * 1e3);
                                             } catch (err) {
                                               Helper.ReportingError(err, MsgErrUnknown, "updateCurrentPictureTimer", "Set Timer");
                                             }
                                           }
                                          }
                                          if (module.parent) {
                                           module.exports = (options) => new Slideshow(options);
                                          } else {
                                           (() => new Slideshow())();
                                          }
                                          //# sourceMappingURL=main.js.map
                                          
                                          

                                          Zeile 211 bis 223 von mir hinzugefügt.
                                          Dadurch wird ein neuer DP "path" erzeugt (Neustart des Adapters) in welchen bei jedem Bilderwechsel der aktuelle Pfad inkl. Dateiname geschrieben wird.

                                          Benutzung auf eigenes Risiko natürlich aber falls das jemand testen mag dann gerne.

                                          p.s. bei Update vom Adapter wird die main.js natürlich wieder mit der originalen überschrieben.

                                          ? Offline
                                          ? Offline
                                          A Former User
                                          wrote on last edited by
                                          #80

                                          @djmarc75

                                          super, gute Idee, danke dir! Zu beachten, wer in der Shell an den Dateien rumfummelt, sollte mit den richtigen Rechten arbeiten, also entweder als user iobroker oder anschliessend mit chown die Rechte wieder auf iobroker:iobroker setzen, sonst schiesst ihr euch unter Umstaenden was..

                                          Ich habs so gemacht, geht bestimmt auch anders, wenn man sudo -u iobroker macht 🙂

                                          ilovegym@iobrokerS:/opt/iobroker/node_modules/iobroker.slideshow/build$ sudo cp main.js main.js-old
                                          ilovegym@iobrokerS:/opt/iobroker/node_modules/iobroker.slideshow/build$ ls
                                          lib  main.js  main.js-old  modules
                                          ilovegym@iobrokerS:/opt/iobroker/node_modules/iobroker.slideshow/build$ sudo rm main.js
                                          ilovegym@iobrokerS:/opt/iobroker/node_modules/iobroker.slideshow/build$ sudo nano main.js
                                          ilovegym@iobrokerS:/opt/iobroker/node_modules/iobroker.slideshow/build$ ls -la
                                          total 40
                                          drwxrwxr-x+ 4 iobroker iobroker  4096 Dec 15 07:20 .
                                          drwxrwxr-x+ 7 iobroker iobroker  4096 Dec 10 13:10 ..
                                          drwxrwxr-x+ 2 iobroker iobroker  4096 Dec 10 13:10 lib
                                          -rw-rw-r--+ 1 root     root     10815 Dec 15 07:20 main.js
                                          -rw-rw-r--+ 1 root     root     10676 Dec 15 07:20 main.js-old
                                          drwxrwxr-x+ 2 iobroker iobroker  4096 Dec 10 13:10 modules
                                          ilovegym@iobrokerS:/opt/iobroker/node_modules/iobroker.slideshow/build$ sudo chown iobroker:iobroker main.js
                                          ilovegym@iobrokerS:/opt/iobroker/node_modules/iobroker.slideshow/build$ ls -la
                                          total 40
                                          drwxrwxr-x+ 4 iobroker iobroker  4096 Dec 15 07:20 .
                                          drwxrwxr-x+ 7 iobroker iobroker  4096 Dec 10 13:10 ..
                                          drwxrwxr-x+ 2 iobroker iobroker  4096 Dec 10 13:10 lib
                                          -rw-rw-r--+ 1 iobroker iobroker 10815 Dec 15 07:20 main.js
                                          -rw-rw-r--+ 1 root     root     10676 Dec 15 07:20 main.js-old
                                          drwxrwxr-x+ 2 iobroker iobroker  4096 Dec 10 13:10 modules
                                          ilovegym@iobrokerS:/opt/iobroker/node_modules/iobroker.slideshow/build$
                                          
                                          
                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          589

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe