Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Vorlage] Automatischer View-Wechsel u. Slideshow

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage] Automatischer View-Wechsel u. Slideshow

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

      Hi Leute,
      ich möchte euch mal wieder eines meiner Scripte zur Verfügung stellen.

      Da hier immer wieder die Frage aufkommt wie man in seinem Vis-Projekt die Seiten automatisch durchlaufen lassen bzw. nach eingestellter Zeit zurück auf die "Home-View" schalten lassen kann habe ich für mich mal etwas gebastelt das der Eine oder Andere vielleicht auch verwenden kann.

      Folgende Funktionen gibt es:

      • Automatischer Wechsel auf HomeView nach eingestellter Zeit
        (Anzeigezeit für jede View separat einstellbar)
      • "Slideshow", ausgewählte Views laufen der Reihe nach durch
        (Anzeigezeit fest oder für jede View separat einstellbar)
      • View Wechsel durch Auslöse-Trigger, bspw. Bewegungsmelder -> KameraView
      • Screensaver Seitenwechsel

      Erläuterungen habe ich ins Script eingepflegt, wenn dennoch Fragen sind einfach hier schreiben.

      //
      // Seitenwechsel-Script
      // Autor: Peoples
      //
      //
      // Funktionen:  1. Bei Viewwechsel wird geprüft ob eine andere View als Home gewählt ist
      //                 wenn das der Fall ist wird ein Timer gesetzt nach dessen Ablauf wieder zurück
      //                 auf Home gewechselt wird.
      //              2. Wenn die Alarmanlage eingeschalten ist wird die PinEingabeView angezeigt.
      //              3. Bei SystemView läuft kein Timer
      //
      //
      // v2.0.0 - 30.09.2018  Neue Version - Grundaufbau geändert
      // v2.0.1 - 09.03.2019  Slideshow aller gewünschen Views integriert
      // v2.0.2 - 23.03.2019  Zusatzfunktion zum steuern der Sonderdatenpunkte eingebaut
      // v2.0.3 - 28.03.2019  Zahlenwerte durch parseInt konvertiert
      // v2.0.4 - 21.05.2019  Fehlerkorrekturen
      // v2.0.5 - 14.09.2019  AutoViewWechsel als Screensaver möglich
      // *******************************************************************************************************
      
      // -----------------------------------------------------------------------------
      // allgemeine Variablen
      // -----------------------------------------------------------------------------
      var logging = false;                                        // Logging on/off
      var instanz = 'javascript.0';   instanz = instanz + '.';    // 
                                                                  //
      var pfad0 =   'System.Iobroker';      pfad0 = pfad0 + '.';  // Pfad innerhalb der Instanz 
      var timerTout;
      var timerAutoSV;
      var DefaultView = 'Home';                                   // Standard-View
      
      // Aus Datenpunkt vis.0.control.data entnehmen 
      // der Teil vor dem Slash ist der Projektname:
      // "Wandtablet/Home"
      var project = "Wandtablet";     project = project + '/';    // Name des Vis-Projekts
      
      var DisplayTime = '25';                                     // Darstellungszeit der Views bei Autowechsel
      var startView = 1;                                          // Startview bei Autowechsel
      var screenSv_time = 20;                                     // Zeit nach der der ScreenSaver Seitenwechsel angeht in Minuten
      
      //Alle vorhandenen Views
      var VisViews = [
          
              /* View Name */                  /* Anzeigezeit */   /* In Slideshow anzeigen? */
      
          {'view':'Alarmanlage_code',             'SWSec':180,            'ShowIAV':'no'},
          {'view':'Backup_Konfiguration',         'SWSec':180,            'ShowIAV':'no'},
          {'view':'Batterie',                     'SWSec':180,            'ShowIAV':'yes'},
          {'view':'Fenster',                      'SWSec':180,            'ShowIAV':'yes'},
          {'view':'Fritzbox',                     'SWSec':120,            'ShowIAV':'yes'},
          {'view':'Garten',                       'SWSec':60,             'ShowIAV':'yes'},
          {'view':'Heizung_Diagramme',            'SWSec':40,             'ShowIAV':'no'},
          {'view':'Heizung_EG',                   'SWSec':180,            'ShowIAV':'yes'},
          {'view':'Heizung_UG',                   'SWSec':180,            'ShowIAV':'yes'},
          {'view':'Heizung_Vitoladens300C',       'SWSec':90,             'ShowIAV':'yes'},
          {'view':'Home',                         'SWSec':0,              'ShowIAV':'yes'},
          {'view':'Kameras',                      'SWSec':90,             'ShowIAV':'yes'},
          {'view':'Kamera_Garage',                'SWSec':60,             'ShowIAV':'no'},
          {'view':'Kamera_Garten_Hinten',         'SWSec':60,             'ShowIAV':'no'},
          {'view':'Kamera_Bilder_Haustuere',      'SWSec':180,            'ShowIAV':'no'},
          {'view':'Kamera_Bilder_Klingel',        'SWSec':180,            'ShowIAV':'no'},
          {'view':'Konfiguration',                'SWSec':0,              'ShowIAV':'no'},
          {'view':'Licht_EG',                     'SWSec':180,            'ShowIAV':'yes'},
          {'view':'Licht_KG_Aussen',              'SWSec':180,            'ShowIAV':'yes'},
          {'view':'Netzwerk',                     'SWSec':180,            'ShowIAV':'yes'},
          {'view':'Raumklima',                    'SWSec':120,            'ShowIAV':'no'},
          {'view':'Saugroboter',                  'SWSec':120,            'ShowIAV':'yes'},
          {'view':'Sonos',                        'SWSec':180,            'ShowIAV':'no'},
          {'view':'Statistik',                    'SWSec':0,              'ShowIAV':'yes'},
          {'view':'Strom',                        'SWSec':180,            'ShowIAV':'yes'},
          {'view':'System',                       'SWSec':0,              'ShowIAV':'no'},
          {'view':'Wetter',                       'SWSec':60,            'ShowIAV':'yes'},
          {'view':'Wetter_Diagramme',             'SWSec':60,            'ShowIAV':'no'}
      ];
      // -----------------------------------------------------------------------------
      // Objekte
      // -----------------------------------------------------------------------------
      // Objekt für Alle Automatischen Abläufe
      createState(pfad0 + 'Timer_View_Switch',  {def: '0',type: 'number',name: 'Timer für Wechsel auf DefaultView'});
      createState(pfad0 + 'Auto_Switch_View',  {def: 'false',type: 'boolean',name: 'Alle Views durchlaufen lassen'});
      createState(pfad0 + 'ScreenSaverAcitve',  {def: 'false',type: 'boolean',name: 'Bildschirmschoner'});
      
      
      if(logging)log("Total "+Object.keys(VisViews).length+" entries");
      
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      
      // #############################################################################
      // #                                                                           #
      // #  Funktion zum automatischen Viewwechsel nach Timerablauf                  #
      // #                                                                           #
      // #############################################################################
      
      function switchToHomeView() {
              timerTout = setTimeout(function () {
                  var timer = parseInt(getState(pfad0 + 'Timer_View_Switch').val, 10);
                  if (timer > 1) {
                      setState(pfad0 + 'Timer_View_Switch',timer - 1);
                      switchToHomeView();
                  }
                  else{
                      setState(pfad0 + 'Timer_View_Switch', 0);
                      setState('vis.0.control.instance', 'FFFFFFFF'); //getState("vis.0.control.instance").val/*Control vis*/);
                      setState('vis.0.control.data', project + DefaultView);
                      setState('vis.0.control.command', 'changeView');
                  }
              }, 1000);
      }
      
      // #############################################################################
      // #                                                                           #
      // #  Funktion zum automatisch umlaufenden Viewwechsel                         #
      // #                                                                           #
      // #############################################################################
      
      function autoSwitchView(dspTime,i) {
              if(i === '') i = 0;
              if(logging) log(i);
              if(i < Object.keys(VisViews).length){
                  if(VisViews[i].ShowIAV == 'yes'){
                      timerAutoSV = setTimeout(function () {
                          var timer = parseInt(getState(pfad0 + 'Timer_View_Switch').val, 10);
                          if (timer > 1) {
                              setState(pfad0 + 'Timer_View_Switch', timer - 1);
                              autoSwitchView(dspTime, i);
                          }
                          else{
                                  setState(pfad0 + 'Timer_View_Switch', 0);
                                  if(getState(pfad0 + 'Auto_Switch_View').val === true) switchView(project+VisViews[i].view);
                                  startAutoSwitchView(dspTime,(i+1));
                          }
                      }, 1000);
                  }
                  else{
                      startAutoSwitchView(dspTime,(i+1));
                  }
              }
              else{
                 startAutoSwitchView(dspTime,startView); 
              }
      }
      
      // #############################################################################
      // #                                                                           #
      // #  Funktion zum Starten und Stoppen des automatischen Viewwechsel           #
      // #                                                                           #
      // #############################################################################
      function startAutoSwitchView(dspTime,i){
          if(getState(pfad0 + 'Auto_Switch_View').val === true){
              if(dspTime !== ''){
                  setState(pfad0 + 'Timer_View_Switch',parseInt(dspTime, 10));
              }
              else{
                  setState(pfad0 + 'Timer_View_Switch',15);
              }
              autoSwitchView(dspTime,i);
          } 
          else{
              if(timerTout) clearTimeout(timerTout);
              switchView(project + DefaultView);
              setStateDelayed(pfad0 + 'Timer_View_Switch',0,2000);
          }
      }
      //
      // Beobachten des View Datenpunktes
      on({id:"javascript.0.System.Iobroker.Auto_Switch_View", change: "ne"}, function (dp) {
      //    if(dp.state.val === true){
              startAutoSwitchView(DisplayTime,startView);
      //    }
      });
      
      // #############################################################################
      // #                                                                           #
      // #  Funktion zum Scriptbasierten Viewwechsel                                 #
      // #                                                                           #
      // #############################################################################
      
      function switchView(view){
          setState('vis.0.control.instance', 'FFFFFFFF');
          setState('vis.0.control.data', view);
          setState('vis.0.control.command', 'changeView');
      }
      
      // #############################################################################
      // #                                                                           #
      // #  Funktion zum Prüfen der Wunsch View und zum auslesen der Darstellzeit    #
      // #                                                                           #
      // #############################################################################
      
      function checkView(wishView){
          if(logging) log('View to check:'+wishView);
          if(getState(pfad0 + 'Auto_Switch_View').val === false ){
              for(var i = 0; i < Object.keys(VisViews).length; i++) {  
                  if(project+VisViews[i].view == wishView) {
                      if(logging) log('View found in:' + i);
                      if(timerTout) clearTimeout(timerTout);
                      setState(pfad0 + 'Timer_View_Switch', 0);
                      if(VisViews[i].SWSec !== 0){
                          setState(pfad0 + 'Timer_View_Switch', VisViews[i].SWSec);
                          switchToHomeView();
                      }
                  }
              }
          }
      }
      // #############################################################################
      // #                                                                           #
      // #  Zusatzfunktion um ZusatzDatenpunke zu steuern                            #
      // #                                                                           #
      // #############################################################################
      function additionalActions(dp){
          if(dp == "Wandtablet/System"){
              setState(pfad0 + "Letzte_System_Meldungen_prio", '');
          }
          if(dp == "Wandtablet/Kamera_Bilder_Haustuere"){
              setState(pfad0 + "Tuerklingel_in_Abwesenheit", false);
          }
      }
      // #############################################################################
      // #                                                                           #
      // #  ScreenSaver Funktion zum Durchschalten der Views als Bildschirmschoner   #
      // #                                                                           #
      // #############################################################################
      function screenSaver(){
          svTimer = setTimeout(function() {
              if(getState(pfad0 + 'ScreenSaverAcitve').val === true){
                  if((new Date().getTime() - getState('vis.0.control.data').lc)/60000 > screenSv_time){
                      setState(pfad0 + 'Auto_Switch_View', true);
                  }
                  else{
                      setState(pfad0 + 'Auto_Switch_View', false);
                  }  
                  screenSaver();  
              }
          }, 60000);
          
      }
      
      // Beobachten des Datenpunktes Screensaver um die Autoview einzuschalten
      on({id:'javascript.0.System.Iobroker.ScreenSaverAcitve'/*Bildschirmschoner*/, change: "ne"}, function (dp) {
          if(dp.state.val === true){
              screenSaver();
              if(logging) log('Screensaver On');
          }
          else{
              if(svTimer) clearTimeout(svTimer);
              setState(pfad0 + 'Auto_Switch_View', false);
              switchView(project + DefaultView);
          } 
      });
      
      
      // Beobachten des View Datenpunktes für Auswertung
      on({id:"vis.0.control.data", change: "ne"}, function (dp) {
          checkView(dp.state.val);
              // Zusatzfunktion um den Datenpunkt zurück zu setzten
          additionalActions(dp.state.val);
      });
      
      
      
      //Bei aktiver Alarmanlage auf Pin-View umschalten
      on({id: "javascript.0.Alarmanlage.Status.Status"/*Status für Scharfmeldung*/, change: 'any'}, function (dp) {
          if(dp.state.val == 2 || dp.state.val == '2'){
              switchView('Alarmanlage_code');
          }
          else{
              switchView(DefaultView);
          }
      });
      
      //Bei Bewegung auf Kamerabild umschalten
      on({id:"hm-rpc.0.XXXXXXXXXX.1.MOTION"/*Bewegungsmelder.Aussen.Haustuere.XXXXXXXXX:1.MOTION*/, change: 'any'}, function (dp) {
          if(dp.state.val === true ){
               if(getState("javascript.0.Alarmanlage.Status.Status").val != 2 || getState("javascript.0.Alarmanlage.Status.Status").val != '2'){
                 switchView('Kamera_Garage');
               }
               else{
                  switchView('Alarmanlage_code');
               }
          }
      });
      
      
      

      Edit - 28.03.2019 parsInt wegen warning im Log eingepflegt
      Edit - 14.09.2019 Screensaver Funktion eingebaut (Wunsch von Web4wash)

      Gruß
      Steffen

      W 1 Reply Last reply Reply Quote 17
      • wendy2702
        wendy2702 last edited by

        Danke für das Script!

        1 Reply Last reply Reply Quote 0
        • S
          Superdad last edited by

          Vielen Dank!

          1 Reply Last reply Reply Quote 0
          • S
            skokarl last edited by

            Alleine die Idee ist schon geil.
            Probiere ich heute abend, besten Dank !

            1 Reply Last reply Reply Quote 0
            • R
              reini last edited by

              Hallo, Frage dazu bitte – funktioniert auch wenn ich nur von einer bestimmten View automatisch auf Home zurückkehren möchte oder?!

              Peoples 1 Reply Last reply Reply Quote 0
              • Peoples
                Peoples @reini last edited by Peoples

                @reini
                Klar, bei allen eingetragen Views bei denen unter SwSec NICHT "0" steht wird gewechselt. Dort wo "0" steht nicht

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

                  • sehe ich das richtig das der Countdown in dem Datenpunkt "Timer_View_Switch" zu sehen sein müsste?
                    Bei mir steht da eisern die "0"

                  • Wenn ich den Pfad habe: Neu/Info
                    muss ich dann so eintragen:

                  ...
                  var DefaultView = 'Info';                                   // Standard-View
                   
                  // Aus Datenpunkt vis.0.control.data entnehmen 
                  // der Teil vor dem Slash ist der Projektname:
                  // "Wandtablet/Home"
                  var project = "Neu";     project = project + '/';    // Name des Vis-Projekts
                  ...
                  

                  oder verstehe ich das falsch?

                  • Zum automatischen Viewwechsel setze ich den Datenpunkt "Timer_View_Switch" auf "True". lässt es sich so einstellen das der Durchlauf nur X-mal wiederholt wird oder welche Möglichkeit habe ich den wieder auf "false" zu setzen?
                  Peoples 1 Reply Last reply Reply Quote 0
                  • Peoples
                    Peoples @Chaot last edited by Peoples

                    @Chaot
                    Timer_View_Switch zeigt die Zeit in Sekunden die es dauert bis automatisch auf die "Home-View" zurück geschaltet wird.

                    Dein Pfad würde bedeuten dass in dem Datenpunkt "vis.0.control.data" Neu/Info stehen würde.
                    Hier wäre dann "Neu" der Name deines Projekts und Info wäre die "Homeview"

                    Um den automatischen View-Wechsel einzuschalten muss der Datenpunkt "Auto_Switch_View" auf True gestellt werden nicht der Timer.

                    Aktuell läuft es solange durch bis der o.g. Datenpunkt wieder auf "false" gestellt wird eben eine Slideshow.
                    Ich habe bei mir in Vis einen kleinen Button (der den Umlauf ausschaltet) in jeder View den ich über die Anzeigeeinstellungen so eingestellt habe, dass er nur sichtbar ist wenn der Switch auf True ist. Und in meiner "Systemview" einen Button der das ganze einschaltet.

                    Die Idee mit dem X-fachen Umlauf finde ich gut muss mal schauen wie ich das einbinden kann.

                    Chaot 1 Reply Last reply Reply Quote 0
                    • Chaot
                      Chaot @Peoples last edited by

                      @Peoples
                      Danke.
                      Den "Auto_Switch_View" habe ich glatt übersehen.

                      Der Datenpunkt "Timer_View_Switch" bleibt bei mir bei 0 stehen wenn ich auf einen anderen View wechsle. Da muss ich wohl suchen warum das so ist.

                      Als "Default-View" habe ich "Info" eingetragen. Das meintest du mit "Homeview" oder?

                      Der Button zum Abschalten in den Views ist eine gute Idee. Das werde ich zunächst auch mal so umsetzen.

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

                        Oh, noch ein kleiner Fehler.
                        Wenn ich Auto Switch View einschalte werden alle Views übereinandergelegt.....

                        Peoples 1 Reply Last reply Reply Quote 0
                        • Peoples
                          Peoples @Chaot last edited by

                          @Chaot
                          OK bei mir nicht komisch.
                          Was hast du für eine Hardware und welche Zeit hast du eingestellt?

                          Chaot 1 Reply Last reply Reply Quote 0
                          • Chaot
                            Chaot @Peoples last edited by

                            @Peoples Ich habe die 25 Sekunden gelassen.
                            View wird dargestellt auf einem 10" Tablet mit Android 7 (Xido oder so ähnlich schimpft sich das Teil)

                            Peoples 1 Reply Last reply Reply Quote 0
                            • Peoples
                              Peoples @Chaot last edited by

                              @Chaot
                              OK an einer zu kürzen Zeit für den View - Wechsel kann es bei 25 Sekunden nicht liegen. Ich schau Mal ob es eine Möglichkeit gibt das zu lösen.
                              Hast du einen Raspberry für den IoB?

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

                                ich habe den ioBroker auf einem NUC unter Poxmox laufen.

                                Peoples 1 Reply Last reply Reply Quote 0
                                • Peoples
                                  Peoples @Chaot last edited by Peoples

                                  @Chaot
                                  so wie ich auch dann kann es an mangelnder performance auch nicht liegen.

                                  Mal eine blöde Frage was steht dann in deinem Datenpunkt wenn die ganzen Views übereinander liegen?

                                  1 Reply Last reply Reply Quote 0
                                  • Nashra
                                    Nashra Most Active Forum Testing last edited by

                                    Erstmal danke für das tolle Script.
                                    Läuft wirklich gut bis ich das Log mal eingeschaltet habe, da kommt wenn Slideshow aktiviert ist bei jedem Wechsel folgende Meldung:

                                    javascript.0 2019-03-28 13:03:06.000 info script.js.Meine_Geräte.View_wechsel_auto_und_slideshow: 6
                                    javascript.0 2019-03-28 13:03:06.000 warn at Timer.listOnTimeout (timers.js:290:5)
                                    javascript.0 2019-03-28 13:03:06.000 warn at tryOnTimeout (timers.js:323:5)
                                    javascript.0 2019-03-28 13:03:06.000 warn at ontimeout (timers.js:511:34)
                                    javascript.0 2019-03-28 13:03:06.000 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1869:34)
                                    javascript.0 2019-03-28 13:03:06.000 warn at Object.<anonymous> (script.js.Meine_Geräte.View_wechsel_auto_und_slideshow:116:29)
                                    javascript.0 2019-03-28 13:03:05.999 warn at startAutoSwitchView (script.js.Meine_Geräte.View_wechsel_auto_und_slideshow:139:13)
                                    javascript.0 2019-03-28 13:03:05.999 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1258:20)
                                    javascript.0 2019-03-28 13:03:05.998 warn Wrong type of javascript.0.System.Iobroker.Timer_View_Switch: "string". Please fix, while deprecated and will not work in next versions.
                                    javascript.0 2019-03-28 13:03:05.998 info script.js.Meine_Geräte.View_wechsel_auto_und_slideshow: 6ist der übergebene wert

                                    Peoples 1 Reply Last reply Reply Quote 1
                                    • Peoples
                                      Peoples @Nashra last edited by

                                      @Nashra
                                      Danke für den Hinweis konnte es nachstellen. Ich habe nun drei Zeilen geändert / ergänzt, kannst du nochmal das geänderte Script oben bei dir einbinden und sagen ob der Fehler immernoch kommt?

                                      Homer.J. Nashra 2 Replies Last reply Reply Quote 0
                                      • Homer.J.
                                        Homer.J. @Peoples last edited by

                                        @Peoples
                                        Hi, Peoples hab es mal eingefügt läuft jetzt super.
                                        Danke und Grüße Homer.J.

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

                                          Dann noch eine Frage an Alle, habt ihr auch das Phänomen wie Chaot, dass die Views beim automatischen Wechsel alle übereinander liegen?

                                          Nashra 1 Reply Last reply Reply Quote 0
                                          • Nashra
                                            Nashra Most Active Forum Testing @Peoples last edited by

                                            @Peoples sagte in [Vorlage] Automatischer View-Wechsel u. Slideshow:

                                            @Nashra
                                            Danke für den Hinweis konnte es nachstellen. Ich habe nun drei Zeilen geändert / ergänzt, kannst du nochmal das geänderte Script oben bei dir einbinden und sagen ob der Fehler immernoch kommt?

                                            Perfekt, läuft 👍 Danke

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            837
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            22
                                            143
                                            17992
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo