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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. 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.7k

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

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

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

Geplant Angeheftet Gesperrt Verschoben Tester
adapterbildschirmschonerdiashowslideshow
100 Beiträge 26 Kommentatoren 14.9k Aufrufe 25 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Online
    M Online
    mading
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • M Online
      M Online
      mading
      schrieb am zuletzt editiert von
      #77

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

      1 Antwort Letzte Antwort
      0
      • DJMarc75D Online
        DJMarc75D Online
        DJMarc75
        schrieb am zuletzt editiert von
        #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 :upside_down_face:

        ISSUE auf GIT hab ich gemacht - gerne dranhängen (https://github.com/gaudes/ioBroker.slideshow/issues/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 Antwort Letzte Antwort
        0
        • DJMarc75D Online
          DJMarc75D Online
          DJMarc75
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          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
            Ein ehemaliger Benutzer
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • Attila PergeA Offline
              Attila PergeA Offline
              Attila Perge
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • W Offline
                W Offline
                Wiesel 0
                schrieb am zuletzt editiert von
                #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 Antworten Letzte Antwort
                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 Online
                  Ro75R Online
                  Ro75
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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 Online
                    DJMarc75D Online
                    DJMarc75
                    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                    0
                    • W Offline
                      W Offline
                      Wiesel 0
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • J Offline
                        J Offline
                        jensven
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        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 Online
                          DJMarc75D Online
                          DJMarc75
                          schrieb am zuletzt editiert von
                          #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 :+1:

                          @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 Antwort Letzte Antwort
                          0
                          • DJMarc75D DJMarc75

                            @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 :+1:

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

                            J Offline
                            J Offline
                            jensven
                            schrieb am zuletzt editiert von
                            #88

                            @djmarc75
                            da gebe ich dir insofern recht dass das mit der Thematik VIS zu tun hat.
                            Aber die grundsätzliche Aufgabe dieses Adapters ist es ja eine Diashow für die VIS zu sein anstatt das abschalten des Bildschirms o. ä.
                            Deswegen die Frage ob ich das so wie ich es beschrieben habe richtig verstanden habe oder ob es einen anderen Weg dafür gibt.

                            DJMarc75D 1 Antwort Letzte Antwort
                            0
                            • J jensven

                              @djmarc75
                              da gebe ich dir insofern recht dass das mit der Thematik VIS zu tun hat.
                              Aber die grundsätzliche Aufgabe dieses Adapters ist es ja eine Diashow für die VIS zu sein anstatt das abschalten des Bildschirms o. ä.
                              Deswegen die Frage ob ich das so wie ich es beschrieben habe richtig verstanden habe oder ob es einen anderen Weg dafür gibt.

                              DJMarc75D Online
                              DJMarc75D Online
                              DJMarc75
                              schrieb am zuletzt editiert von
                              #89

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

                              die grundsätzliche Aufgabe dieses Adapters ist es ja eine Diashow für die VIS zu sein

                              Ja genau und dieser Adapter und das zugehörige Widget macht auch absolut nichts anderes.
                              Es gibt da keinerlei Funktionen wie das Display zu schalten oder Sonstiges.
                              Dazu sind andere Adapter, Skripte, Browser, usw anzuwenden.

                              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 Antwort Letzte Antwort
                              0
                              • T Offline
                                T Offline
                                TripleX
                                schrieb am zuletzt editiert von
                                #90

                                @AggroRalf

                                Habe gerade deinen Adapter installiert.
                                Ordner und Bilder habe ich über den Dateimanager angelegt und das Widget auf eine extra Seite gepackt.
                                Nur startet die Diashow bei mir nicht.
                                Laut Protokoll ist alles ok.
                                Habe das Timeout auf 1 gesetzt.
                                Gehe mal davon aus, dass damit Minuten gemeint sind.
                                Kann es evtl. daran liegen, dass ich auf jeder Seite ein animiertes gif laufen habe oder wird sowas ignoriert?
                                Wäre es evtl. auch möglich den Adapter auf einer geteilten View (links Diashow / rechts z.B. Kalender) zu nutzen?

                                DJMarc75D 1 Antwort Letzte Antwort
                                0
                                • T TripleX

                                  @AggroRalf

                                  Habe gerade deinen Adapter installiert.
                                  Ordner und Bilder habe ich über den Dateimanager angelegt und das Widget auf eine extra Seite gepackt.
                                  Nur startet die Diashow bei mir nicht.
                                  Laut Protokoll ist alles ok.
                                  Habe das Timeout auf 1 gesetzt.
                                  Gehe mal davon aus, dass damit Minuten gemeint sind.
                                  Kann es evtl. daran liegen, dass ich auf jeder Seite ein animiertes gif laufen habe oder wird sowas ignoriert?
                                  Wäre es evtl. auch möglich den Adapter auf einer geteilten View (links Diashow / rechts z.B. Kalender) zu nutzen?

                                  DJMarc75D Online
                                  DJMarc75D Online
                                  DJMarc75
                                  schrieb am zuletzt editiert von
                                  #91

                                  @triplex zeig mal bitte einen Screenshot von Deinen Einstellungen.

                                  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

                                  T 1 Antwort Letzte Antwort
                                  0
                                  • DJMarc75D DJMarc75

                                    @triplex zeig mal bitte einen Screenshot von Deinen Einstellungen.

                                    T Offline
                                    T Offline
                                    TripleX
                                    schrieb am zuletzt editiert von
                                    #92

                                    @djmarc75 said in Test Adapter Slideshow (ehemals Diashow) v0.1.x:

                                    @triplex zeig mal bitte einen Screenshot von Deinen Einstellungen.

                                    11da9038-349b-4a57-8804-8ed3c083ef89-image.png

                                    87bd21a0-269d-442d-a59e-2d8250970c30-image.png

                                    8a502410-33aa-443b-98a9-f462abbe42b4-image.png

                                    57849f74-e473-47a9-add3-a34a719b5c76-image.png

                                    J 1 Antwort Letzte Antwort
                                    0
                                    • T TripleX

                                      @djmarc75 said in Test Adapter Slideshow (ehemals Diashow) v0.1.x:

                                      @triplex zeig mal bitte einen Screenshot von Deinen Einstellungen.

                                      11da9038-349b-4a57-8804-8ed3c083ef89-image.png

                                      87bd21a0-269d-442d-a59e-2d8250970c30-image.png

                                      8a502410-33aa-443b-98a9-f462abbe42b4-image.png

                                      57849f74-e473-47a9-add3-a34a719b5c76-image.png

                                      J Offline
                                      J Offline
                                      jensven
                                      schrieb am zuletzt editiert von
                                      #93

                                      @triplex
                                      die Bilder hast du auch so hochgeladen wie es dort steht ?

                                      Bilder aus dem lokalen Ordner iobroker/iobroker-data/files/vis.0/slideshow
                                      Bitte mit VIS-Dateimanager Ordner erstellen und Bilder hochladen
                                      

                                      Hast du mal den Button "updatepicturelist" während der adapter läuft gedrückt ? Vllt. wird dadurch das Problem gelöst.
                                      Ansonsten würde ich mal nur normale Bilder ausprobieren. Dann merkst du sofort ob es an den animierten GIF liegt

                                      T 1 Antwort Letzte Antwort
                                      0
                                      • J jensven

                                        @triplex
                                        die Bilder hast du auch so hochgeladen wie es dort steht ?

                                        Bilder aus dem lokalen Ordner iobroker/iobroker-data/files/vis.0/slideshow
                                        Bitte mit VIS-Dateimanager Ordner erstellen und Bilder hochladen
                                        

                                        Hast du mal den Button "updatepicturelist" während der adapter läuft gedrückt ? Vllt. wird dadurch das Problem gelöst.
                                        Ansonsten würde ich mal nur normale Bilder ausprobieren. Dann merkst du sofort ob es an den animierten GIF liegt

                                        T Offline
                                        T Offline
                                        TripleX
                                        schrieb am zuletzt editiert von
                                        #94

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

                                        @triplex
                                        die Bilder hast du auch so hochgeladen wie es dort steht ?

                                        Bilder aus dem lokalen Ordner iobroker/iobroker-data/files/vis.0/slideshow
                                        Bitte mit VIS-Dateimanager Ordner erstellen und Bilder hochladen
                                        

                                        Hast du mal den Button "updatepicturelist" während der adapter läuft gedrückt ? Vllt. wird dadurch das Problem gelöst.
                                        Ansonsten würde ich mal nur normale Bilder ausprobieren. Dann merkst du sofort ob es an den animierten GIF liegt

                                        Bilder habe ich wie beschrieben hochgeladen.
                                        Im Datenpunkt picturecount werden auch die Anzahl der Fotos angezeigt.

                                        Das mit dem GIF hast du falsch verstanden.
                                        Ich habe keine GIFs in der Diashow sondern auf den einzelnen Seiten.
                                        Könnte es evtl. daran liegen, dass die Diashow nicht startet, da sich immer was auf der View bewegt?

                                        T J 2 Antworten Letzte Antwort
                                        0
                                        • T TripleX

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

                                          @triplex
                                          die Bilder hast du auch so hochgeladen wie es dort steht ?

                                          Bilder aus dem lokalen Ordner iobroker/iobroker-data/files/vis.0/slideshow
                                          Bitte mit VIS-Dateimanager Ordner erstellen und Bilder hochladen
                                          

                                          Hast du mal den Button "updatepicturelist" während der adapter läuft gedrückt ? Vllt. wird dadurch das Problem gelöst.
                                          Ansonsten würde ich mal nur normale Bilder ausprobieren. Dann merkst du sofort ob es an den animierten GIF liegt

                                          Bilder habe ich wie beschrieben hochgeladen.
                                          Im Datenpunkt picturecount werden auch die Anzahl der Fotos angezeigt.

                                          Das mit dem GIF hast du falsch verstanden.
                                          Ich habe keine GIFs in der Diashow sondern auf den einzelnen Seiten.
                                          Könnte es evtl. daran liegen, dass die Diashow nicht startet, da sich immer was auf der View bewegt?

                                          T Offline
                                          T Offline
                                          TripleX
                                          schrieb am zuletzt editiert von
                                          #95

                                          Hallo zusammen!

                                          Noch jemand ne Idee warum die Diashow nicht startet?

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          957

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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