// *******************************************************************************************************
//
// 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 = 'Home';                                   // Standard-View
// Aus Datenpunkt vis.0.control.data entnehmen 
// der Teil vor dem Slash ist der Projektname:
// "Wandtablet/Home"
var project = "main";     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 Slideshow anzeigen? */
   {'view':'Spotify',                      'SWSec':60,             'ShowIAV':'yes'},
   
   {'view':'Musik',                        'SWSec':60,             'ShowIAV':'yes'},
   
   {'view':'Sonos_Bad',                      'SWSec':60,              'ShowIAV':'yes'},
   {'view':'Sonos_Schlaf',                   'SWSec':60,            'ShowIAV':'yes'},
 
   {'view':'3_NAS_stats',                           'SWSec':0,            '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: 'true',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);
});
//Bei Bewegung auf Kamerabild umschalten
on({id:"hm-rpc.0.xxxxxxxxx.1.MOTION"/*Bewegungsmelder.xxxxxxxxxx:1.MOTION*/, change: 'any'}, function (dp) {
    if(getState("javascript.0.Alarmanlage.Status.Status").val != 2 || getState("javascript.0.Alarmanlage.Status.Status").val != '2'){
       checkView('Kamera_Garage');
    }
    else{
       checkView('Alarmanlage_code');
   }
});