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

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    12
    2
    247

  • 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.7k

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.
  • 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
                            • Attila PergeA Offline
                              Attila PergeA Offline
                              Attila Perge
                              wrote on last edited by
                              #81

                              Hallo Ralf,
                              super Adapter, Danke!

                              Habe die Tage installiert und getestet.
                              Auf mein Laptop funktioniert es auch.
                              Auf ein Android Tablet unter Firefox und Chrom funktioniert es auch.
                              Habe jetzt noch auf einen älteren IPad getestet, dort scheint es aber nicht zu funktionieren.
                              Sollte später aber darüber laufen.

                              Hast du eine Idee, was ich unter IOS anders machen muss, damit es dort auch funktioniert?

                              Ich habe es auch in der ioBroker App versucht, dort scheint es leider auch nicht zu funktionieren.

                              Hat es jemand unter IOS zum laufen bekommen?

                              VG Attila

                              1 Reply Last reply
                              0
                              • W Offline
                                W Offline
                                Wiesel 0
                                wrote on last edited by
                                #82

                                Hallo zusammen,

                                (Hoffe hier richtig zu sein, da dies mein erster Beitrag in diesem Forum ist.)

                                zunächst mal: super Adapter, der hat mir wirklich noch gefehlt!

                                ich habe die Slideshow seit kurzem auf einem Android Outkitel RT1 und auf einem kleinen NUC über Windows in VIS 1.4.16. am laufen.

                                Ich habe leider das Problem, dass sowohl beim Tablet als auch im Windows-Browser nach einigen Stunden der Speicher voll läuft und die View abstürzt.
                                Ich habe es dann auf dem Tablet mit der App IOBroker Visu probiert, was leider auch keine Besserung brachte.

                                Im Browser steht nur Fehlercode: Out of Memory und die Visu App friert einfach ein.

                                Ich habe leider im Forum zu dem Problem nichts gefunden.

                                Hat jemand eine Idee, wie ich das Problem in den Griff bekomme?

                                Vielen Dank schonmal für eure Hilfe.!

                                Einstellungen Slideshow.png

                                Ro75R DJMarc75D 2 Replies Last reply
                                0
                                • W Wiesel 0

                                  Hallo zusammen,

                                  (Hoffe hier richtig zu sein, da dies mein erster Beitrag in diesem Forum ist.)

                                  zunächst mal: super Adapter, der hat mir wirklich noch gefehlt!

                                  ich habe die Slideshow seit kurzem auf einem Android Outkitel RT1 und auf einem kleinen NUC über Windows in VIS 1.4.16. am laufen.

                                  Ich habe leider das Problem, dass sowohl beim Tablet als auch im Windows-Browser nach einigen Stunden der Speicher voll läuft und die View abstürzt.
                                  Ich habe es dann auf dem Tablet mit der App IOBroker Visu probiert, was leider auch keine Besserung brachte.

                                  Im Browser steht nur Fehlercode: Out of Memory und die Visu App friert einfach ein.

                                  Ich habe leider im Forum zu dem Problem nichts gefunden.

                                  Hat jemand eine Idee, wie ich das Problem in den Griff bekomme?

                                  Vielen Dank schonmal für eure Hilfe.!

                                  Einstellungen Slideshow.png

                                  Ro75R Offline
                                  Ro75R Offline
                                  Ro75
                                  wrote on last edited by
                                  #83

                                  @wiesel-0 Aller 20 Sekunden werden neue Bilder geladen und ggfs. im Speicher (Cache) gehalten. Irgendwann läuft der halt voll.

                                  SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                                  1 Reply Last reply
                                  1
                                  • W Wiesel 0

                                    Hallo zusammen,

                                    (Hoffe hier richtig zu sein, da dies mein erster Beitrag in diesem Forum ist.)

                                    zunächst mal: super Adapter, der hat mir wirklich noch gefehlt!

                                    ich habe die Slideshow seit kurzem auf einem Android Outkitel RT1 und auf einem kleinen NUC über Windows in VIS 1.4.16. am laufen.

                                    Ich habe leider das Problem, dass sowohl beim Tablet als auch im Windows-Browser nach einigen Stunden der Speicher voll läuft und die View abstürzt.
                                    Ich habe es dann auf dem Tablet mit der App IOBroker Visu probiert, was leider auch keine Besserung brachte.

                                    Im Browser steht nur Fehlercode: Out of Memory und die Visu App friert einfach ein.

                                    Ich habe leider im Forum zu dem Problem nichts gefunden.

                                    Hat jemand eine Idee, wie ich das Problem in den Griff bekomme?

                                    Vielen Dank schonmal für eure Hilfe.!

                                    Einstellungen Slideshow.png

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

                                    @wiesel-0 sagte in Test Adapter Slideshow (ehemals Diashow) v0.1.x:

                                    der Speicher voll läuft und die View abstürzt

                                    Ja, das ist bei mir auch so und eigentlich auch "normal". Erklärung dazu: Je mehr verschiedene Bilder (Summe in MB aller Bilder) Du in deinem Verzeichnis hast, desto mehr wird im jeweiligen Browser in den Cache geschrieben und irgendwann ist der dann übervoll und zwingt den Browser in die Knie.
                                    Teste es mal mit den BING Bildern und Du wirst sehen dass der Browser nicht abstürzt.

                                    Eine Lösung diesbezüglich seitens des Adapters oder ioBroker kann und wird es daher nicht geben. 🙂

                                    EDIT:
                                    Ich nutze den Fullybrowser auf einem FireTV Stick - falls der Fully dann mal abschmieren sollte, startet dieser eben automatisch wieder neu 🙂

                                    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
                                    • W Offline
                                      W Offline
                                      Wiesel 0
                                      wrote on last edited by
                                      #85

                                      Hallo DJMarc75,

                                      danke für die schnelle Hilfe!
                                      Tatsächlich kannte ich den Fully Browser noch nicht!

                                      Der hat es voll gebracht und hat genau die Einstellungen (Auto-Relaoad, Delete Cache on Auto-Reload und Delete Webstorage), die ich gesucht habe!

                                      Vielen Dank für diesen Tip!

                                      VG

                                      1 Reply Last reply
                                      0
                                      • J Offline
                                        J Offline
                                        jensven
                                        wrote on last edited by
                                        #86

                                        habe mir die slideshow jetzt auch mal installiert und funktionier soweit auch ganz gut
                                        Verstehe ich das so richtig:
                                        Ich erstelle eine View in der ich dann das Widget über den ganzen Bildschirm lege. Dann muss ich ein Script erstelle mit dem ich dann nach einer vorgegeben inaktiviät in das View von der slideshow wechsle?

                                        DJMarc75D 1 Reply Last reply
                                        0
                                        • J jensven

                                          habe mir die slideshow jetzt auch mal installiert und funktionier soweit auch ganz gut
                                          Verstehe ich das so richtig:
                                          Ich erstelle eine View in der ich dann das Widget über den ganzen Bildschirm lege. Dann muss ich ein Script erstelle mit dem ich dann nach einer vorgegeben inaktiviät in das View von der slideshow wechsle?

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

                                          @jensven sagte in Test Adapter Slideshow (ehemals Diashow) v0.1.x:

                                          habe mir die slideshow jetzt auch mal installiert und funktionier soweit auch ganz gut

                                          super 👍

                                          @jensven sagte in Test Adapter Slideshow (ehemals Diashow) v0.1.x:

                                          Ich erstelle eine View in der ich dann das Widget über den ganzen Bildschirm lege. Dann muss ich ein Script erstelle mit dem ich dann nach einer vorgegeben inaktiviät in das View von der slideshow wechsle?

                                          Das kommt ja darauf an was Du wie genau umsetzen willst, aber das sollte nicht in diesem Beitrag behandelt werden da dies nichts mit dem Adapter zu tun hat sondern eine allgemeine Frage zum Thema "Visualisierung" ist. 🙂

                                          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

                                          J 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

                                          84

                                          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