Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. View bei Nacht umschalten

    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

    UNSOLVED View bei Nacht umschalten

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

      Ich suche für ein kleines Problem eine Lösung.
      Ich möchte bei Nacht die View umschalten und dann tagsüber wieder zurück.
      Also ab xx Uhr auf den View "uhr" und ab 5 Uhr wieder auf den View "Info"
      Dazu habe ich aber auch dieses Script laufen:

      // *******************************************************************************************************
      //
      // 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
      // *******************************************************************************************************
       
      // -----------------------------------------------------------------------------
      // allgemeine Variablen
      // -----------------------------------------------------------------------------
      var logging = true;                                        // 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 = '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
       
      var DisplayTime = '25';    // Darstellungszeit der Views bei Autowechsel
      var startView = 1;  // Startview bei Autowechsel
       
      //Alle vorhandenen Views
      var VisViews = [
          
              /* View Name */              /* Anzeigezeit in Sek. */   /* In Slideshow anzeigen? */
             /* ohne Projekt */          /* 0 = kein Auto Wechsel */   /* In Slideshow anzeigen? */
       
          {'view':'Alexa',                        'SWSec':60,             'ShowIAV':'no'},
          {'view':'Aquarium',                     'SWSec':60,             'ShowIAV':'no'},
          {'view':'Ausgang',                      'SWSec':60,             'ShowIAV':'no'},
          {'view':'BadHeiz',                      'SWSec':60,             'ShowIAV':'no'},
          {'view':'Diagramme',                    'SWSec':60,             'ShowIAV':'no'},
          {'view':'Heizung',                      'SWSec':60,             'ShowIAV':'yes'},
          {'view':'JuliaHeiz',                    'SWSec':60,             'ShowIAV':'no'},
          {'view':'Licht',                        'SWSec':60,             'ShowIAV':'yes'},
          {'view':'MartinHeiz',                   'SWSec':60,             'ShowIAV':'no'},
          {'view':'News',                         'SWSec':120,            'ShowIAV':'no'},
          {'view':'Programm',                     'SWSec':120,            'ShowIAV':'yes'},
          {'view':'Programm_Tips',                'SWSec':60,             'ShowIAV':'no'},
          {'view':'Schlafheiz',                   'SWSec':60,             'ShowIAV':'no'},
          {'view':'Info',                         'SWSec':0,              'ShowIAV':'yes'},
          {'view':'System',                       'SWSec':60,             'ShowIAV':'yes'},
          {'view':'Tuer',                         'SWSec':60,             'ShowIAV':'yes'},
          {'view':'Uhr',                          'SWSec':120,            'ShowIAV':'yes'},
          {'view':'Wett',                         'SWSec':60,             'ShowIAV':'no'},
          {'view':'WohnHeiz',                     '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'});
       
       
      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;
              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) {
          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();
                      }
                  }
              }
          }
      }
       
      // Beobachten des View Datenpunktes für Auswertung
      on({id:"vis.0.control.data", change: "ne"}, function (dp) {
          checkView(dp.state.val);
      });
       
       
      

      Lässt sich das irgendwie in dem Script mit einbauen?
      Oder sollte das als eigenes Script laufen und ich nehme den View "Uhr" aus dem anderen Script aus?

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo,

        ich empfehle dir, einen Datenpunkt in einem separaten Skript zu erstellen. Den nennst du zB Nachtview (mit true/false).

        In dem Skript reagierst du dann auch auf die Änderung des Datenpunktes mit on() und führst mit setState(vis.0.control....) aus.

        Der Datenpunkt ist somit auch jederzeit über einen Knopf in VIS oder sonstwie (Szenen, Taster, etc) schaltbar.

        In dem Seitenwechsel Skript stellst du dann nur den Datenpunkt um. Ausserdem kannst du noch eine Abfrage in die Funktion switchView() einbauen, die zB bei Nacht keine automatischen Viewwechsel zulässt.

        Pix

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

          Danke für die schnelle Antwort.
          Ich bin zwar noch dabei Bahnhof zu erfassen, aber ich werde al einen Versuch machen.

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

          Support us

          ioBroker
          Community Adapters
          Donate

          679
          Online

          31.9k
          Users

          80.2k
          Topics

          1.3m
          Posts

          javascript
          2
          3
          370
          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