[FHEM-Tablet-UI] WeekdayTimer Widget

Begonnen von svenson08, 24 Januar 2016, 18:39:21

Vorheriges Thema - Nächstes Thema

eki

Das müsste eigentlich alles passen (Ich habe mal bei mir eine Kopie Deines WeekdayTimer gebastelt und auch deine Definition verwendet, und das sieht gut aus).
Muss irgendwie an der Installation liegen, aber ohne weiter Info (sprich Konsole) kann ich da schwer was sagen (schau mal nach wie Du beim Safari die Konsole öffnest, die gibt es da sicher auch).

Pflasterbicker

Zitat von: eki am 28 Juni 2016, 12:34:12
Das müsste eigentlich alles passen (Ich habe mal bei mir eine Kopie Deines WeekdayTimer gebastelt und auch deine Definition verwendet, und das sieht gut aus).
Muss irgendwie an der Installation liegen, aber ohne weiter Info (sprich Konsole) kann ich da schwer was sagen (schau mal nach wie Du beim Safari die Konsole öffnest, die gibt es da sicher auch).

So, Konsole gefunden. WAS MACHT MAN DAMIT  :o
Würde es was helfen wenn ich einen Browser DEINER Wahl installiere, damit Du weißt was ich weiter tun kann?

Michael

eki

Setze mal Debug im index.html (oder wie auch immer das bei Dir heißt auf 1 und poste das, was dann auf der Konsole ausgegeben wird, wenn Du die Seite lädtst bzw. das Popup aufrufst.

Pflasterbicker

Ist es das was du brauchst?
/* FHEM tablet ui */
/**
* UI builder framework for FHEM
*
* Version: 2.0.0
*
* Copyright (c) 2015-2016 Mario Stephan <mstephan@shared-files.de>
* Under MIT License (http://www.opensource.org/licenses/mit-license.php)
*
*/

// depricated global variables
var deviceStates={};
var readings = {"STATE":true};
var devices = {};
var types = [];
var dir;
var filename;

var plugins = {
  modules: [],
  addModule: function (module) {
    this.modules.push(module);
  },
  load: function (name) {
    return loadplugin(name, function () {
var module = eval(name);
plugins.addModule(module);
        module.init();
        //update all what we have until now
        for (var key in ftui.paramIdMap) {
           module.update(ftui.paramIdMap[key].device,ftui.paramIdMap[key].reading);
        }
        ftui.log(1,'Loaded plugin: '+ name);
    },null,true);
  },
  update: function (dev,par) { 
    $.each(this.modules, function (index, module) {
      //Iterate each module and run update function
      module.update(dev,par);
    });
      ftui.log(1,'update done for "'+dev+':'+par+'"');
  }
}

var ftui = {
   config: {
        DEBUG: false,
        DEMO:false,
        debuglevel:0,
        doLongPoll:false,
        shortpollInterval:30 * 1000,
        styleCollection:{},
        stdColors:["green","orange","red","ligthblue","blue","gray"],
    },
    poll: {currLine:0,xhr:null,longPollRequest:null,shortPollTimer:null,longPollTimer:null,},
    states: {'lastSetOnline':0,'longPollRestart':false},
    paramIdMap:{},
    timestampMap:{},
    gridster:{instance:null,wx:0,wy:0,wm:5},

    init: function() {
        ftui.paramIdMap={};
        ftui.timestampMap={};
        ftui.loadStyleSchema();
        ftui.gridster.wx = parseInt( $("meta[name='widget_base_width']").attr("content") );
        ftui.gridster.wy = parseInt( $("meta[name='widget_base_height']").attr("content") );
        if ( $("meta[name='widget_margin']").attr("content") )
          ftui.gridster.wm = parseInt( $("meta[name='widget_margin']").attr("content") );
        ftui.config.doLongPoll = ($("meta[name='longpoll']").attr("content") == '1');
        ftui.config.DEMO = ($("meta[name='demo']").attr("content") == '1');
        ftui.config.debuglevel  = $("meta[name='debug']").attr("content") || 0;
        ftui.config.DEBUG = ( ftui.config.debuglevel>0 );
        ftui.config.TOAST  = ($("meta[name='toast']").attr("content") != '0');

        //self path
        dir = $('script[src*="fhem-tablet-ui"]').attr('src');
        var name = dir.split('/').pop();
        dir = dir.replace('/'+name,"");
        ftui.log(1,'Plugin dir: '+dir);
        var url = window.location.pathname;
        filename = url.substring(url.lastIndexOf('/')+1);
        ftui.log(1,'Filename: '+filename);
        ftui.fhem_dir = $("meta[name='fhemweb_url']").attr("content") || "/fhem/";
        ftui.log(1,'FHEM dir: '+ftui.fhem_dir);

        //add background for modal dialogs
        $("<div id='shade' />").prependTo('body').hide();
        $("#shade").on('click',function() {
            $(document).trigger("shadeClicked");
        });

        ftui.readStatesLocal();
        ftui.initPage();
        ftui.initLongpoll();

        $("*:not(select)").focus(function(){
            $(this).blur();
        });

        // refresh every x secs
        ftui.startShortPollInterval();
    },

    initPage: function(){
        //init gridster
        if ($.fn.gridster){
            if (ftui.gridster.instance)
                ftui.gridster.instance.destroy();
            ftui.gridster.instance = $(".gridster > ul").gridster({
              widget_base_dimensions: [ftui.gridster.wx, ftui.gridster.wy],
              widget_margins: [ftui.gridster.wm, ftui.gridster.wm],
              draggable: {
                handle: '.gridster li > header'
              }
            }).data('gridster');
            if($("meta[name='gridster_disable']").attr("content") == '1') {
                ftui.gridster.instance.disable();
            }
            if($("meta[name='gridster_starthidden']").attr("content") == '1') {
                $('.gridster').hide();
            }
        }
        //include extern html code
        var total = $('[data-template]').length;
        if (total>0){
            $('[data-template]').each(function(index) {
                var tempelem = $(this);
                $.get(
                    tempelem.data('template'),
                    {},
                    function (data) {
                        var parValues = tempelem.data('parameter');
                        for (var key in parValues) {
                            data = data.replace(new RegExp(key, 'g'), parValues[key]);
                        }
                        tempelem.html(data);
                        if (index === total - 1) {
                            //continue after loading the includes
                            ftui.initWidgets();
                        }
                    }
                );
            });
        }
        else{
           //continue immediately with initWidgets
          ftui.initWidgets();
        }
    },

    initWidgets: function(sel) {

        sel = (typeof sel !== 'undefined') ? sel : '';
        readings = {"STATE":true};
        devices = {};
        types = [];
        ftui.paramIdMap = {};
        ftui.timestampMap = {};

        //collect required widgets types
        $(sel+' div[data-type]').each(function(index){
            var type = $(this).data("type");
            if (types.indexOf(type)<0){
                  types.push(type);
            }
        });

        //init widgets
        var deferredArr = $.map(types, function(widget_type, i) {
            return plugins.load('widget_'+widget_type);
        });

        //get current values of readings not before all widgets are loaded
        $.when.apply(this, deferredArr).then(function() {
            ftui.log(1,'Request readings from FHEM');
            setTimeout(function(){
                ftui.shortPoll();
            }, 50);
        });
    },

    initLongpoll: function(){
        if ( ftui.config.doLongPoll ){
            var longpollDelay = $("meta[name='longpoll_delay']").attr("content");
            if (!$.isNumeric(longpollDelay)) longpollDelay = (typeof wvcDevices != 'undefined')?ftui.config.shortpollInterval:100;
            ftui.startLongPollInterval(longpollDelay);
        }
    },

    startShortPollInterval: function(delay) {
        clearInterval(ftui.shortPollTimer);
        ftui.shortPollTimer = setTimeout(function () {
            //get current values of readings every x seconds
            ftui.shortPoll();
            ftui.startShortPollInterval() ;
         }, delay || ftui.config.shortpollInterval);
    },

    startLongPollInterval: function(interval) {
        if (ftui.config.DEBUG) ftui.toast("Start Longpoll in " + interval/1000 + "s");
        clearInterval(ftui.longPollTimer);
        ftui.longPollTimer = setTimeout(function() {
            ftui.longPoll();
        }, interval);
        ftui.config.shortpollInterval = 15 * 60 * 1000; // 15 minutes
    },

    shortPoll: function() {
        var reading = null;
        ftui.log(1,'start shortpoll');
        var startTime = new Date();
        var paramCount = Object.keys(ftui.paramIdMap).length;
        if (paramCount===0)
            return;

        // invalidate all readings for detection of outdated ones
        for (var device in devices) {
            var params = deviceStates[device];
            for (reading in params) {
                params[reading].valid = false;
            }
        }
        //Request all devices from FHEM
        $.getJSON(ftui.fhem_dir,
                  {cmd: 'jsonlist2',
                   XHR:1,
                   timeout: 30000},  function (data) {

            // function to convert results
            function DevicesJSON(fhemJSON) {
                this.length = fhemJSON.Results.length;
                var results = fhemJSON.Results;
                for(var i = 0; i < this.length; i++)
                   this[results[i].Name] = results[i];
            }
            // function to import data
            function checkReading(device,section){
               for (var reading in section) {
                 var paramid = (reading==='STATE') ? device : [device,reading].join('-');
                 if( ftui.paramIdMap[paramid] ){
                       var newParam = section[reading];
                       if (typeof newParam!=='object')
                             newParam={"Value": newParam,"Time": ''};
                       var oldParam = getParameterByName(device,reading);
                       var isUpdated = (!oldParam || oldParam.val!=newParam.Value || oldParam.date!=newParam.Time);

                       // update deviceStates
                       var params = deviceStates[device] || {};
                       var param = params[reading]  || {};
                       param.date = newParam.Time;
                       param.val = newParam.Value;
                       param.valid = true;
                       params[reading] = param;
                       deviceStates[device]= params;

                       //update widgets only if necessary
                       if(isUpdated){
                           plugins.update(device,reading);
                       }
                 }
               }
            }
            // convert from indexed array to associative array
            var devicesJson  = new DevicesJSON(data);
            ftui.log(6,devicesJson);

            // start to get data of interest
            for(var device in devices){
               var dev = devicesJson[device];
               if (dev){
                   checkReading(device,dev.Readings);
                   checkReading(device,dev.Internals);
                   checkReading(device,dev.Attributes);
                }
            }
            // finished
            var duration = diffSeconds(startTime,new Date());
            if (ftui.config.DEBUG) ftui.toast("Full refresh done in "
                                 +duration+"s for "
                                 +paramCount+" parameter");
            ftui.log(1,'shortPoll - Done');
            ftui.onUpdateDone();
        });
    },

    longPoll: function() {
        if (ftui.config.DEMO) {console.log('DEMO-Mode: no longpoll');return;}
        ftui.log(1,(ftui.states.longPollRestart)?"Longpoll re-started":"Longpoll started");
        if (ftui.xhr)
            ftui.xhr.abort();
        if (ftui.longPollRequest)
            ftui.longPollRequest.abort();
        ftui.poll.currLine=0;
        if (ftui.config.DEBUG) {
            if (ftui.states.longPollRestart)
                ftui.toast("Longpoll re-started");
            else
                ftui.toast("Longpoll started");
        }
        ftui.states.longPollRestart=0;
        ftui.longPollRequest=$.ajax({
            url: ftui.fhem_dir,
            cache: false,
            async: true,
            data: {
                XHR:1,
                inform: "type=status;filter=.*;fmt=JSON"
            },
            xhr: function() {
                ftui.xhr = new window.XMLHttpRequest();
                ftui.xhr.addEventListener("readystatechange", function(e){
                    var data = e.target.responseText;
                    if ( e.target.readyState == 4) {
                        return;
                    }
                    if ( e.target.readyState == 3 ){
                        var lines = data.split(/\n/);//.replace(/<br>/g,"").split(/\n/);
                        lines.pop(); //remove last empty line

                        for (var i=ftui.poll.currLine, len = lines.length; i < len; i++) {
                            if (isValid(lines[i])){
                                var dataJSON = JSON.parse(lines[i]);
                                var params = null;
                                var param = null;
                                var isSTATE = ( dataJSON[1] !== dataJSON[2] );

                                var pmap = ftui.paramIdMap[dataJSON[0]];
                                var tmap = ftui.timestampMap[dataJSON[0]];

                                if ( pmap ) {
                                  if (isSTATE)
                                    pmap.reading = 'STATE';
                                  params = deviceStates[pmap.device] || {};
                                  param = params[pmap.reading]  || {};
                                  param.val = dataJSON[1];
                                  param.valid = true;
                                  params[pmap.reading] = param;
                                  deviceStates[pmap.device]= params;
                                  if (isSTATE)
                                    plugins.update(pmap.device,pmap.reading);
                                }

                                if ( tmap  && !isSTATE ) {
                                  params = deviceStates[tmap.device] || {};
                                  param = params[tmap.reading]  || {};
                                  param.date = dataJSON[1];
                                  params[tmap.reading] = param;
                                  deviceStates[tmap.device]= params;
                                  // update widgets
                                  plugins.update(tmap.device,tmap.reading);
                                }
                            }
                        }
                        ftui.poll.currLine = lines.length;
                        if (ftui.poll.currLine>1024){
                            ftui.states.longPollRestart=true;
                            ftui.longPollRequest.abort();
                        }
                    }
                }, false);
                return ftui.xhr;
                }
        })
        .done ( function( data ) {
            if (ftui.states.longPollRestart)
                ftui.longPoll();
            else{
                ftui.log(1,"Disconnected from FHEM - poll done - "+data);
                ftui.restartLongPoll();
            }
        })
        .fail (function(jqXHR, textStatus, errorThrown) {
            if (ftui.states.longPollRestart)
                ftui.longPoll();
            else{
                ftui.log(1,"Error while longpoll: " + textStatus + ": " + errorThrown);
                ftui.restartLongPoll();
            }
        });
    },

    setFhemStatus: function(cmdline) {
        if (ftui.config.DEMO) {console.log('DEMO-Mode: no setFhemStatus');return;}
        ftui.startShortPollInterval();
        cmdline = cmdline.replace('  ',' ');
        ftui.log(1,'send to FHEM: '+cmdline);
        $.ajax({
            async: true,
            cache:false,
            url: ftui.fhem_dir,
            data: {
                cmd: cmdline,
                XHR: "1"
            }
        })
        .fail (function(jqXHR, textStatus, errorThrown) {
                ftui.toast("Error: " + textStatus + ": " + errorThrown);
        })
        .done ( function( data ) {
            if ( !ftui.config.doLongPoll ){
                setTimeout(function(){
                    ftui.shortPoll();
                }, 4000);
            }
        });
    },

    loadStyleSchema: function (){
        $.each($('link[href$="-ui.css"],link[href$="-ui.min.css"]') , function (index, thisSheet) {
            if (!thisSheet || !thisSheet.sheet || !thisSheet.sheet.cssRules) return;
            var rules = thisSheet.sheet.cssRules;
            for (var r in rules){
                if (rules[r].style){
                   var styles = rules[r].style.cssText.split(';');
                   styles.pop();
                   var elmName = rules[r].selectorText;
                   var params = {};
                   for (var s in styles){
                       var param = styles[s].toString().split(':');
                       if (param[0].match(/color/)){
                          params[$.trim(param[0])]=$.trim(param[1]).replace('! important','').replace('!important','');
                       }
                   }
                   if (Object.keys(params).length>0)
                       ftui.config.styleCollection[elmName]=params;
                }
            }
        });
    },

    onUpdateDone: function(){
        $(document).trigger("updateDone");
        ftui.checkInvalidElements();
    },

    checkInvalidElements: function(){
        $('div.autohide[data-get]').each(function(index){
            var elem = $(this);
            var valid = elem.getReading('get').valid;
            if ( valid && valid===true )
                elem.removeClass('invalid');
            else
                elem.addClass('invalid');
        });
    },

    setOnline: function(){
        var ltime = new Date().getTime() / 1000;
        if ((ltime - ftui.states.lastSetOnline) > 60){
            if (ftui.config.DEBUG) ftui.toast("Network connected");
            ftui.states.lastSetOnline = ltime;
            ftui.startShortPollInterval(100);
            if (!ftui.config.doLongPoll){
                ftui.config.doLongPoll  = ($("meta[name='longpoll']").attr("content") == '1');
                if ( ftui.config.doLongPoll )
                    ftui.startLongPollInterval(100);
            }
            ftui.log(1,'FTUI is online');
        }
    },

    setOffline: function(){
        if (ftui.config.DEBUG) ftui.toast("Lost network connection");
        ftui.config.doLongPoll = false;
        clearInterval(ftui.shortPollTimer);
        clearInterval(ftui.longPollTimer);
        if (ftui.longPollRequest)
            ftui.longPollRequest.abort();
        ftui.saveStatesLocal();
        ftui.log(1,'FTUI is offline');
    },

    readStatesLocal: function(){
        if (!ftui.config.DEMO)
            deviceStates=JSON.parse(localStorage.getItem('deviceStates')) || {};
        else {
            $.ajax({async: false,url: "/fhem/tablet/data/"+filename.replace(".html",".dat"),})
            .done ( function( data ) {deviceStates=JSON.parse(data) || {};});
        }
    },

    saveStatesLocal: function(){
        //save deviceStates into localStorage
        var dataToStore = JSON.stringify(deviceStates);
        localStorage.setItem('deviceStates', dataToStore);
    },

    restartLongPoll: function(){
        ftui.toast("Disconnected from FHEM");
        if ( ftui.config.doLongPoll ){
            ftui.toast("Retry to connect in 10 seconds");
            setTimeout(function(){
                longPoll();
            }, 10000);
        }
    },

    toast: function(text){
        if (ftui.config.TOAST)
            $.toast(text);
    },

    log: function(level,text){
        if (ftui.config.debuglevel >= level)
            console.log(text);
    },
}

// event "page is loaded" -> start FTUI
$(document).on('ready', function() {
    ftui.init();
});

$(window).on('beforeunload', function(){
    ftui.log(5,'beforeunload');
    ftui.setOffline();
});

$(window).on('online offline', function() {
    ftui.log(5,'online offline');
    if (navigator.onLine)
        ftui.setOnline();
    else
        ftui.setOffline();
});


// deprecated function
function initReadingsArray(get) {
    if(! $.isArray(get)) {
        get = new Array(get);
    }
    for(var g=0; g<get.length; g++) {
        var reading = get[g];
        // fully qualified readings => DEVICE:READING
        if(reading.match(/:/)) {
            var fqreading = reading.split(':');
            var device = fqreading[0]
            if(!devices[device] && typeof device != 'undefined' && device !== 'undefined' ){
                devices[device] = true;
            }
            reading = fqreading[1];
        }
        if(!readings[reading] && !reading.match(/^[#\.\[].*/)){
            readings[reading] = true;
        }
    }
}

// deprecated function
function setFhemStatus(cmdline) {
     ftui.setFhemStatus(cmdline);
}

function loadplugin(plugin, success, error, async) {
    return dynamicload('js/'+plugin+'.js', success, error, async);
}

function dynamicload(file, success, error, async) {
    var cache = (ftui.config.DEBUG) ? false : true;
    return $.ajax({
        url: dir + '/../' + file,
        dataType: "script",
        cache: cache,
        async: async || false,
        context:{name: name},
        success: success||function(){ return true },
        error: error||function(){ return false },
    });
}


this.getPart = function (s,p) {
    if ($.isNumeric(p)){
        var c = (s && isValid(s)) ? s.split(" ") : '';
        return (c.length >= p && p>0 ) ? c[p-1] : s;
    }
    else {
        if ((s && isValid(s)) )
            var matches = s.match( new RegExp('^' + p + '$') );
        var ret='';
        if (matches) {
            for (var i=1;i<matches.length;i++) {
                ret+=matches[i];
            }
        }
        return ret;
    }
};

this.getDeviceValueByName = function (devname, paraname) {
    var param = getParameterByName(devname, paraname);
    return ( param ) ? param.val : null;
}
this.getDeviceValue = function (device, src) {
    var param = getParameter(device, src);
    return ( param ) ? param.val : null;
}

this.getReadingDateByName = function (devname, paraname) {
    var param = getParameterByName(devname, paraname);
    return ( param ) ? param.date : null;
}
this.getReadingDate = function (device, src) {
    var param = getParameter(device, src);
    return ( param ) ? param.date : null;
}

this.getParameterByName = function (devname, paraname) {
    // devname = DEVICE:READING; paraname is ignored
    if(devname.match(/:/)) {
        var temp = devname.split(':');
        devname = temp[0];
        paraname = temp[1];
    }
    paraname = paraname || Object.keys(readings)[0];
    if (devname && devname.length>0){
        var params = deviceStates[devname];
        return ( params && params[paraname] ) ? params[paraname] : null;
    }
    return null;
}
this.getParameter = function (elem, src) {
    var device = elem.data('device');
    var paraname = (src && src != '') ? elem.data(src) : Object.keys(readings)[0];
    if (device && device.length>0){
        var params = deviceStates[device];
        return ( params && params[paraname] ) ? params[paraname] : null;
    }
    return null;
}

this.getStyle = function (selector, prop) {
    var props = ftui.config.styleCollection[selector];
    return ( props && props[prop] ) ? props[prop] : null;
}

this.getClassColor = function (elem) {
    for (var i=0, len=ftui.config.stdColors.length; i<len; i++) {
        if ( elem.hasClass(ftui.config.stdColors[i]) ){
            return getStyle('.'+ftui.config.stdColors[i],'color');
        }
    }
    return null;
}

this.getIconId = function(iconName){
    if (!iconName || iconName=='')
        return "?";
    var rules = $('link[href$="font-awesome.min.css"]')[0].sheet.cssRules;
    for (var rule in rules){
        if ( rules[rule].selectorText && rules[rule].selectorText.match(new RegExp(iconName+':') )){
            var id = rules[rule].style.content;
            if (!id)
                return iconName;
            id = id.replace(/"/g,'').replace(/'/g,"");
            return (/[^\u0000-\u00ff]/.test(id))
                    ? id
                    : String.fromCharCode(parseInt(id.replace('\\',''),16));
        }
    }
}

// global helper functions
this.isValid = function(v){
    return (typeof v !== 'undefined' && v !== 'undefined'
         && typeof v !== typeof notusedvar
         && v !== '' && v !== ' ');
}

this.showModal = function (modal) {
    if(modal)
        $("#shade").fadeIn();
    else
       $("#shade").fadeOut();
}

// global date format functions
this.dateFromString = function (str) {
var m = str.match(/(\d+)-(\d+)-(\d+)[_\s](\d+):(\d+):(\d+).*/);
var m2 = str.match(/(\d\d).(\d\d).(\d\d\d\d)/);
var offset = new Date().getTimezoneOffset();
return (m) ? new Date(+m[1], +m[2] - 1, +m[3], +m[4], +m[5], +m[6])
            : (m2) ? new Date(+m2[3], +m2[2] - 1, +m2[1], 0, -offset, 0, 0)
            : new Date();
}

this.diffMinutes = function(date1,date2){
       var diff  = new Date(date2 - date1);
       return (diff/1000/60).toFixed(0);
}

this.diffSeconds = function(date1,date2){
       var diff  = new Date(date2 - date1);
       return (diff/1000).toFixed(1);
}

this.mapColor = function(value) {
    return getStyle('.'+value,'color') || value;
};

String.prototype.toDate = function() {
    return dateFromString(this);
}

Date.prototype.addMinutes = function(minutes) {
    return new Date(this.getTime() + minutes*60000);
}

Date.prototype.ago = function() {
  var now = new Date();
  var ms = (now - this) ;
  var x = ms / 1000;
  var seconds = Math.round(x % 60);
      x /= 60;
  var minutes = Math.round(x % 60);
      x /= 60;
  var hours = Math.round(x % 24);
      x /= 24;
  var days = Math.round(x);
  var userLang = navigator.language || navigator.userLanguage;
  var strUnits = (userLang.split('-')[0] === 'de')?['Tage','Stunden','Minuten','Sekunden']:['days','hours','minutes','seconds'];
  var ret = (days>0)?days +" "+strUnits[0]+ " ":"";
      ret += (hours>0)?hours +" "+strUnits[1]+ " ":"";
      ret += (minutes>0)?minutes +" "+strUnits[2]+ " ":"";
  return ret + seconds +" "+ strUnits[3];
};

Date.prototype.yyyymmdd = function() {
  var yyyy = this.getFullYear().toString();
  var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
  var dd  = this.getDate().toString();
  return yyyy+'-'+ (mm[1]?mm:"0"+mm[0])+'-'+(dd[1]?dd:"0"+dd[0]); // padding
};

Date.prototype.hhmm = function() {
  var hh = this.getHours().toString();
  var mm = this.getMinutes().toString();
  return (hh[1]?hh:"0"+hh[0])+':'+ (mm[1]?mm:"0"+mm[0]); // padding
};

Date.prototype.hhmmss = function() {
  var hh = this.getHours().toString();
  var mm = this.getMinutes().toString();
  var ss  = this.getSeconds().toString();
  return (hh[1]?hh:"0"+hh[0])+':'+ (mm[1]?mm:"0"+mm[0])+':'+(ss[1]?ss:"0"+ss[0]); // padding
};

Date.prototype.ddmm = function() {
  var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
  var dd  = this.getDate().toString();
  return (dd[1]?dd:"0"+dd[0])+'.'+(mm[1]?mm:"0"+mm[0])+'.'; // padding
};

Date.prototype.eeee = function() {
    var weekday_de = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'];
    var weekday = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
    var userLang = navigator.language || navigator.userLanguage;
    if(userLang.split('-')[0] === 'de')
        return weekday_de[this.getDay()];
    return weekday[this.getDay()];
};

Date.prototype.eee = function() {
    var weekday_de = ['Son','Mon','Die','Mit','Don','Fre','Sam'];
    var weekday = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
    var userLang = navigator.language || navigator.userLanguage;
    if(userLang.split('-')[0] === 'de')
        return weekday_de[this.getDay()];
    return weekday[this.getDay()];
};

Date.prototype.ee = function() {
    var weekday_de = ['So','Mo','Di','Mi','Do','Fr','Sa'];
    var weekday = ['Su','Mo','Tu','We','Th','Fr','Sa'];
    var userLang = navigator.language || navigator.userLanguage;
    if(userLang.split('-')[0] === 'de')
        return weekday_de[this.getDay()];
    return weekday[this.getDay()];
};

//sadly it not possible to use Array.prototype. here
this.indexOfGeneric = function(array,find){
  if (!array) return -1;
  for (var i=0;i<array.length;i++) {
    if (!$.isNumeric(array[i]))
        return indexOfRegex(array,find);
  }
  return indexOfNumeric(array,find);
};

this.indexOfNumeric = function(array,val){
   var ret=-1;
   for (var i=0;i<array.length;i++) {
       if (Number(val)>=Number(array[i]))
           ret=i;
   }
   return ret;
};

this.indexOfRegex = function(array,find){
  for (var i=0;i<array.length;i++) {
      try {
        var match = find.match(new RegExp('^'+array[i]+'$'));
      if (match)
            return i
      } catch(e) {}
  }
  return array.indexOf(find);
};

$.fn.once = function(a, b) {
    return this.each(function() {
        $(this).off(a).on(a,b);
    });
};


Du ich kann´s echt verstehen wenn Du sagst dass des mit meinem Unwissen keinen Sinn hat weiter zu machen, wär ich Dir auch net böse, ich möchte Dich da auch nicht weiter nerven... ;)

h3llsp4wn

Hallo zusammen,

kurzer Querschuss - da ich ja für das widget ein eigenes Symbol/Link für den Aufruf definieren muss - die Frage, ob jemand schon eine Möglichkeit
gefunden hat, den Status (Timer aktiv/inaktiv) direkt über das Symbol (Farbe) zu visualisieren. Ich würde gerne auf einen Blick sehen, ob der "Urlaubstimer"
aktiv ist oder nicht. Jemand schon eine Idee oder Umsetzung dazu?


Cheers,

h3ll

eki

Zitat von: Pflasterbicker am 28 Juni 2016, 15:23:11
Ist es das was du brauchst?

Du ich kann´s echt verstehen wenn Du sagst dass des mit meinem Unwissen keinen Sinn hat weiter zu machen, wär ich Dir auch net böse, ich möchte Dich da auch nicht weiter nerven... ;)

leider nein (und mach Dir mal keine Sorgen bezüglich "nerven" ich sag dann schon wenn es so weit ist ;-) ), das ist der Inhalt des js files, also der Quellcode, ich bräuchte aber die Ausgabe der Konsole (also das was das Script während des Ablaufs ausspuckt). Ich habe mal geschaut, es müsste so etwas wie "Show Error Console" im Debug Menu geben. Falls das nicht klappt wäre mal die Verwendung von Firefox angesagt. Dort musst Du einfach mit der rechten Maustaste in das Webfenster klicken und dann den Eintrag "Inspect Elemet" bzw. die deutsche Entsprechung anwählen.

Pflasterbicker

Ich hab mal den FireFox benutzt. Klick mit rechts auf den Button "Pumpenprogramm" und dann "Element untersuchen" ausgewählt.
Dann öffnet sich unten so ein Fenster und es springt zuerst in die Registerkarte "Inspektor". Wenn ich die Konsole anwähle steht da fast nix drin und es kommt auch nicht mehr wenn ich versuche den Button "Pumpenprogramm" erneut anzuklicken.

Hab mal 2 Screenshots angehängt

Michael

eki

Das ist schon mal die richtige Stelle. Jetzt noch den Debug Mode anschalten (das index*.html file das Du in Deinen Browser lädst mit einen texteditor öffnen und dort nach dem Eintrag so ähnlich wie
    <meta name="debug" content="0"> <!-- verbose level 1-6 = output to console;0 = not output -->
suchen und den Wert content="1" setzen. Danach die Seite noch mal laden.

Pflasterbicker

#128
Zitat von: eki am 29 Juni 2016, 16:48:17
Das ist schon mal die richtige Stelle. Jetzt noch den Debug Mode anschalten (das index*.html file das Du in Deinen Browser lädst mit einen texteditor öffnen und dort nach dem Eintrag so ähnlich wie
    <meta name="debug" content="0"> <!-- verbose level 1-6 = output to console;0 = not output -->
suchen und den Wert content="1" setzen. Danach die Seite noch mal laden.

Guten Abend

Ich glaub ich hab´s jetzt  ;D

GET
http://bresa.selfhost.eu:8083/fhem/ftui_eval/#technikraum.html [HTTP/1.1 200 OK 40ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/lib/jquery.gridster.min.css [HTTP/1.1 304 Not Modified 16ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/css/fhem-tablet-ui.css [HTTP/1.1 304 Not Modified 44ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/css/fhem-tablet-ui-wdtimer.css [HTTP/1.1 304 Not Modified 58ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/lib/font-awesome.min.css [HTTP/1.1 304 Not Modified 58ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/lib/jquery.toast.min.css [HTTP/1.1 304 Not Modified 61ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/lib/fhemSVG.css [HTTP/1.1 304 Not Modified 67ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/lib/openautomation.css [HTTP/1.1 304 Not Modified 78ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/fonts/roman/style.css [HTTP/1.1 304 Not Modified 88ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/fonts/material/style.css [HTTP/1.1 304 Not Modified 85ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/css/fhem-tablet-ui-user_tablet.css [HTTP/1.1 304 Not Modified 88ms]
GET
http://bresa.selfhost.eu:8083/fhem/pgm2/jquery.min.js [HTTP/1.1 304 Not Modified 92ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/lib/jquery.toast.min.js [HTTP/1.1 304 Not Modified 104ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/lib/jquery.gridster.min.js [HTTP/1.1 304 Not Modified 108ms]
GET
http://bresa.selfhost.eu:8083/fhem/tablet/js/fhem-tablet-ui-2.0_beta.js [HTTP/1.1 304 Not Modified 112ms]
Unbekannte Eigenschaft 'speak'.  Deklaration ignoriert. fhem-tablet-ui.css:46:13
Unbekannte Eigenschaft '-moz-osx-font-smoothing'.  Deklaration ignoriert. fhem-tablet-ui.css:54:31
Fehler beim Verarbeiten des Wertes für 'display'.  Deklaration ignoriert. fhem-tablet-ui.css:264:13
Fehler beim Verarbeiten des Wertes für 'display'.  Deklaration ignoriert. fhem-tablet-ui.css:265:13
Fehler beim Verarbeiten des Wertes für 'display'.  Deklaration ignoriert. fhem-tablet-ui.css:266:13
Unbekannte Eigenschaft 'whiteSpace'.  Deklaration ignoriert. fhem-tablet-ui.css:364:14
Fehler beim Verarbeiten des Wertes für 'min-height'.  Deklaration ignoriert. fhem-tablet-ui.css:411:16
Unbekannte Eigenschaft 'appearance'.  Deklaration ignoriert. fhem-tablet-ui.css:634:14
Unbekannte Pseudoklasse oder Pseudoelement '-ms-expand'.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui.css:639:8
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:5:0
Ungeschlossener String ''\"` --><form accept-charset=\"UTF-8\" action=\"/svenson08/ftui-weekdaytimer-widget/search\" class=\"js-site-search-form\" data-scoped-search-url=\"/svenson08/ftui-weekdaytimer-widget/search\" data-unscoped-search-url=\"/search\" method=\"get\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /></div>' gefunden.  Ungeschlossener String '"Sortierung der  WeekdayTimer Profile eingefügt' gefunden.  Ungeschlossener String '">Sortierung der WeekdayTimer Profile eingefügt</a>' gefunden.  Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:139:27
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:453:554
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:457:557
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:461:265
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:485:70
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:513:70
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:545:70
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:549:454
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:577:70
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:581:332
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:585:375
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:589:250
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:593:248
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:625:70
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:629:327
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:669:70
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:693:70
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:729:70
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:733:362
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:737:593
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:741:501
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:745:488
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:749:254
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:753:431
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:789:70
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:793:241
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:810:256
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:814:395
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:818:401
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:822:407
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:826:408
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:830:587
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:834:584
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:838:246
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:850:195
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:862:497
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:866:325
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:870:253
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:874:323
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:878:407
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:882:322
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:886:327
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:890:296
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:894:227
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:898:325
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:902:228
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:906:437
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:910:437
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:914:316
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:926:501
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:930:514
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:934:253
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:938:513
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:942:596
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:946:511
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:950:517
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:954:297
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:963:228
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:967:514
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:971:417
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:975:438
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:979:438
Selektor erwartet.  Regelsatz wegen ungültigem Selektor ignoriert. fhem-tablet-ui-wdtimer.css:983:317
Ungeschlossener String ''\"` --><form accept-charset=\"UTF-8\" action=\"\" class=\"js-jump-to-line-form\" method=\"get\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /></div>' gefunden.  Unerwartetes Dateiende beim Suchen nach Abschließende } eines ungültigen Regelsatzes. fhem-tablet-ui-wdtimer.css:1005:27
Unbekannte Eigenschaft '-moz-osx-font-smoothing'.  Deklaration ignoriert. font-awesome.min.css:4:601
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden.  Fehler beim Verarbeiten des Wertes für 'filter'.  Deklaration ignoriert. font-awesome.min.css:4:1840
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden.  Fehler beim Verarbeiten des Wertes für 'filter'.  Deklaration ignoriert. font-awesome.min.css:4:2003
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden.  Fehler beim Verarbeiten des Wertes für 'filter'.  Deklaration ignoriert. font-awesome.min.css:4:2169
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden.  Fehler beim Verarbeiten des Wertes für 'filter'.  Deklaration ignoriert. font-awesome.min.css:4:2340
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden.  Fehler beim Verarbeiten des Wertes für 'filter'.  Deklaration ignoriert. font-awesome.min.css:4:2513
Unbekannte Eigenschaft 'speak'.  Deklaration ignoriert. fhemSVG.css:14:6
Unbekannte Eigenschaft '-moz-osx-font-smoothing'.  Deklaration ignoriert. fhemSVG.css:23:24
Unbekannte Eigenschaft 'speak'.  Deklaration ignoriert. openautomation.css:14:6
Unbekannte Eigenschaft '-moz-osx-font-smoothing'.  Deklaration ignoriert. openautomation.css:23:24
Unbekannte Eigenschaft 'speak'.  Deklaration ignoriert. style.css:15:9
Unbekannte Eigenschaft '-moz-osx-font-smoothing'.  Deklaration ignoriert. style.css:23:27
Unbekannte Eigenschaft 'speak'.  Deklaration ignoriert. style.css:15:9
Unbekannte Eigenschaft '-moz-osx-font-smoothing'.  Deklaration ignoriert. style.css:23:27
Fehler beim Verarbeiten des Wertes für 'background-image'.  Deklaration ignoriert. fhem-tablet-ui-user_tablet.css:67:19
Fehler beim Verarbeiten des Wertes für 'background-image'.  Deklaration ignoriert. fhem-tablet-ui-user_tablet.css:68:19
Fehler beim Verarbeiten des Wertes für 'background-image'.  Deklaration ignoriert. fhem-tablet-ui-user_tablet.css:70:19
GET
http://bresa.selfhost.eu:8083/fhem/tablet/images/bg2.jpg [HTTP/1.1 304 Not Modified 26ms]
Plugin dir: /fhem/tablet/js fhem-tablet-ui-2.0_beta.js:506:13
Filename:  fhem-tablet-ui-2.0_beta.js:506:13
FHEM dir: /fhem/ fhem-tablet-ui-2.0_beta.js:506:13
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_pagetab.js [HTTP/1.1 200 OK 56ms]
Longpoll started fhem-tablet-ui-2.0_beta.js:506:13
Synchrone XMLHttpRequests am Haupt-Thread sollte nicht mehr verwendet werden, weil es nachteilige Effekte für das Erlebnis der Endbenutzer hat. Für weitere Hilfe siehe http://xhr.spec.whatwg.org/ jquery.min.js:4:25327
GET
XHR
http://bresa.selfhost.eu:8083/fhem/ [HTTP/1.1 200 OK]
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_famultibutton.js [HTTP/1.1 200 OK 80ms]
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_widget.js [HTTP/1.1 200 OK 58ms]
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/lib/fa-multi-button.min.js [HTTP/1.1 200 OK 52ms]
Loaded plugin: widget_pagetab fhem-tablet-ui-2.0_beta.js:506:13
Request readings from FHEM fhem-tablet-ui-2.0_beta.js:506:13
GET
XHR
http://bresa.selfhost.eu:8083/fhem/ftui_eval/technikraum.html [HTTP/1.1 200 OK 34ms]
start shortpoll fhem-tablet-ui-2.0_beta.js:506:13
':' erwartet, aber ';' gefunden.  Deklaration ignoriert. ftui_eval
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_pagetab.js [HTTP/1.1 200 OK 53ms]
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_label.js [HTTP/1.1 200 OK 68ms]
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_clock.js [HTTP/1.1 200 OK 57ms]
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_switch.js [HTTP/1.1 200 OK 260ms]
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_wdtimer.js [HTTP/1.1 200 OK 194ms]
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_push.js [HTTP/1.1 200 OK 392ms]
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_svgplot.js [HTTP/1.1 200 OK 398ms]
Loaded plugin: widget_pagetab fhem-tablet-ui-2.0_beta.js:506:13
Loaded plugin: widget_clock fhem-tablet-ui-2.0_beta.js:506:13
Loaded plugin: widget_label fhem-tablet-ui-2.0_beta.js:506:13
Loaded plugin: widget_switch fhem-tablet-ui-2.0_beta.js:506:13
Loaded plugin: widget_push fhem-tablet-ui-2.0_beta.js:506:13
GET
XHR
http://bresa.selfhost.eu:8083/fhem/tablet/js/widget_image.js [HTTP/1.1 200 OK 245ms]
Loaded plugin: widget_svgplot fhem-tablet-ui-2.0_beta.js:506:13
GET
http://bresa.selfhost.eu:8083/fhem/SVG_showLog [HTTP/1.1 200 OK 85ms]
update done for "HM_360257:temperature"


Passt des?

Liebe Grüße und Gute Nacht, Michael

Edit: Ich hab mir die index.html mal angesehen. Da sind ja Links zu Dateien aus den verschiedenen Ordnern drin (js, css...)
die haben alle den Pfad /fhem/tablet/ . Sollte da nicht /fhem/tablet_eval/ als Pfad drin sein? Hab ja die Version 2 installiert.
Jetzt hab ich des einfach mal getestet und alle Pfade auf /tablet_eval geändert, und schon geht gar nix mehr. Nachdem ich alle Pfade wieder zurück geschrieben hab funktioniert das Tablet-UI wieder, bis halt auf den Button...aber vielleicht ist das ein Lösungsansatz...

stiffmeister

#129
Hallo,
habe nun auch das WeekdayTimer Widget in Betrieb genommen und es funktioniert ja sehr gut im Standart.
Nun hab ich die modifizierte Version von Eki eingebaut, aber leider kann ich keinen Timer mit "sunrise" oder "sunset"
speichern.
es kommt immer die Fehlermeldung: "Einstellungen konnten nicht übernommen werden"
@Eki, kannst du vielleicht nochmal erläutern, auf was man speziell achten muss bei deiner Erweiterung?
thx

Stiff

list vom timer:
Internals:
   COMMAND    {fhem("set $NAME level $EVENT")}
   CONDITION
   DEF        og_sz_JalousieRechts de {fhem("set $NAME level $EVENT")}
   DEVICE     og_sz_JalousieRechts
   GlobalDaylistSpec
   LANGUAGE   de
   NAME       og_sz_JalousieRechtsTimer
   NR         24
   STATE      active
   STILLDONETIME 0
   TYPE       WeekdayTimer
   Readings:
     2016-06-30 14:50:14   currValue       100
     2016-06-30 14:50:14   nextUpdate      2016-07-02 09:47:00
     2016-06-30 14:50:14   nextValue       100
     2016-06-30 14:50:14   state           active
   SWITCHINGTIMES:
   Timer:
     Og_sz_jalousierechtstimer_settimerofday:
       HASH       og_sz_JalousieRechtsTimer
       MODIFIER   SetTimerOfDay
       NAME       og_sz_JalousieRechtsTimer_SetTimerOfDay
       SETTIMERATMIDNIGHT 1
   Daynumber:
     !$we       8
     $we        7
     di         2
     do         4
     fr         5
     mi         3
     mo         1
     sa         6
     so         0
   Helper:
     daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
     daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
     Switchingtime:
   Longdays:
     de:
       Sonntag
       Montag
       Dienstag
       Mittwoch
       Donnerstag
       Freitag
       Samstag
       Wochenende
       Werktags
     en:
       Sunday
       Monday
       Tuesday
       Wednesday
       Thursday
       Friday
       Saturday
       weekend
       weekdays
     fr:
       Dimanche
       Lundi
       Mardi
       Mercredi
       Jeudi
       Vendredi
       Samedi
       weekend
       jours de la semaine
   Profil:
   Shortdays:
     de:
       so
       mo
       di
       mi
       do
       fr
       sa
       $we
       !$we
     en:
       su
       mo
       tu
       we
       th
       fr
       sa
       $we
       !$we
     fr:
       di
       lu
       ma
       me
       je
       ve
       sa
       $we
       !$we
Attributes:


Code von der Tablet UI Eval:
<td width="50%" class="large left-align">Bad
</td>
<td width="50%">
<div id="wdtimer_ftui"
data-type="wdtimer"
data-device="og_sz_JalousieRechtsTimer"
data-style="square"
data-theme="light"
data-title="Bad-Wochenprogramm"
data-cmdlist='{"15°C Eco":"eco","18°C":"18.0","20°C":"20.0","22°C Komfort":"comfort"}'>
<div data-type="push" data-icon="fa-wrench">
</div>
</div>
</td>

klausw

Ich habe das gleiche Problem.
Selbst eine vom WeekdayTimer geladene Einstellung lässt sich ungeändert nicht speihern.

Wenn man bereits Sunrise/Sunset in der WeekdayTimer Definition drin hat, dann zeigt das Widget 3 Eingabefelder an. Wählt man nun eine andere Einstellung im Dropdown Menü aus, dann sind es auf einmal 4 Eingabefelder.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

eki

Zitat von: stiffmeister am 30 Juni 2016, 14:47:09
Hallo,
habe nun auch das WeekdayTimer Widget in Betrieb genommen und es funktioniert ja sehr gut im Standart.
Nun hab ich die modifizierte Version von Eki eingebaut, aber leider kann ich keinen Timer mit "sunrise" oder "sunset"
speichern.
es kommt immer die Fehlermeldung: "Einstellungen konnten nicht übernommen werden"
@Eki, kannst du vielleicht nochmal erläutern, auf was man speziell achten muss bei deiner Erweiterung?
thx

Stiff

list vom timer:
Internals:
   COMMAND    {fhem("set $NAME level $EVENT")}
   CONDITION
   DEF        og_sz_JalousieRechts de {fhem("set $NAME level $EVENT")}
   DEVICE     og_sz_JalousieRechts
   GlobalDaylistSpec
   LANGUAGE   de
   NAME       og_sz_JalousieRechtsTimer
   NR         24
   STATE      active
   STILLDONETIME 0
   TYPE       WeekdayTimer
   Readings:
     2016-06-30 14:50:14   currValue       100
     2016-06-30 14:50:14   nextUpdate      2016-07-02 09:47:00
     2016-06-30 14:50:14   nextValue       100
     2016-06-30 14:50:14   state           active
   SWITCHINGTIMES:
   Timer:
     Og_sz_jalousierechtstimer_settimerofday:
       HASH       og_sz_JalousieRechtsTimer
       MODIFIER   SetTimerOfDay
       NAME       og_sz_JalousieRechtsTimer_SetTimerOfDay
       SETTIMERATMIDNIGHT 1
   Daynumber:
     !$we       8
     $we        7
     di         2
     do         4
     fr         5
     mi         3
     mo         1
     sa         6
     so         0
   Helper:
     daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
     daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
     Switchingtime:
   Longdays:
     de:
       Sonntag
       Montag
       Dienstag
       Mittwoch
       Donnerstag
       Freitag
       Samstag
       Wochenende
       Werktags
     en:
       Sunday
       Monday
       Tuesday
       Wednesday
       Thursday
       Friday
       Saturday
       weekend
       weekdays
     fr:
       Dimanche
       Lundi
       Mardi
       Mercredi
       Jeudi
       Vendredi
       Samedi
       weekend
       jours de la semaine
   Profil:
   Shortdays:
     de:
       so
       mo
       di
       mi
       do
       fr
       sa
       $we
       !$we
     en:
       su
       mo
       tu
       we
       th
       fr
       sa
       $we
       !$we
     fr:
       di
       lu
       ma
       me
       je
       ve
       sa
       $we
       !$we
Attributes:


Code von der Tablet UI Eval:
<td width="50%" class="large left-align">Bad
</td>
<td width="50%">
<div id="wdtimer_ftui"
data-type="wdtimer"
data-device="og_sz_JalousieRechtsTimer"
data-style="square"
data-theme="light"
data-title="Bad-Wochenprogramm"
data-cmdlist='{"15°C Eco":"eco","18°C":"18.0","20°C":"20.0","22°C Komfort":"comfort"}'>
<div data-type="push" data-icon="fa-wrench">
</div>
</div>
</td>


Welche Parameter die verschiedenen Varianten von Sunrise brauchen steht im Wiki zu SUNRISE_EL. Soweit ich sehe brauchst Du 2 Zeiten, in Deinem Beispiel sehe ich nur eine. Bei den letzten beiden Eingabeparametern wird geprüft, ob es sich um gültige Zeitangaben handelt, da könnte eventuell das Problem liegen.

Außerdem muss man mindestens einen der Tage anwählen. Das ist im Fall von klausw wohl der Fehler. Warum beim Lesen kein Wert gesetzt ist kann ich nur prüfen, wenn ich die ursprüngliche def kenne.

stiffmeister

@Eki,
Wenn ich 2 Zeiten eintrage, dann kann ich zwar scheinbar speichern, aber im Log kommt dann:
2016.07.01 06:27:43 3: [og_sz_JalousieRechtsTimer] no valid Switchingtime found in <{fhem("set $NAME level $EVENT")}>, check first parameter
Im Weekdaytimer selber sehe ich im def auch das, obwohl mir das Widget, wenn ich es erneut öffne, die eingestellten Zeiten anzeigt??

lg
stiff

klausw

Zitat von: eki am 30 Juni 2016, 17:46:37
Außerdem muss man mindestens einen der Tage anwählen. Das ist im Fall von klausw wohl der Fehler. Warum beim Lesen kein Wert gesetzt ist kann ich nur prüfen, wenn ich die ursprüngliche def kenne.

Mist, das ist mir nicht mal aufgefallen.
Ich hatte mo-so drinstehen. Das habe ich heute noch einmal nachgestellt und jetzt funktioniert es.
Wer weiß, vorher hatte ich in den Eingabefeldern einige fehlerhafte Werte eingetragen. Evtl. hat sich da was verschluckt.
Also -> funktioniert  8)

Allerdings habe ich immer noch das Problem mit den Eingabefeldern:

ich öffne die Eingabemaske z.B. mit sunset_abs in den Einstellungen und sehe auch 3 Felder (Offset,früheste Zeit, späteste Zeit)
wenn ich jetzt sunset_rel auswähle und dann wieder auf sunset_abs habe ich 4 Felder. das erste ist leer und dann kommen Offset,früheste Zeit, späteste Zeit
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

eki

Zitat von: klausw am 01 Juli 2016, 10:16:50
Mist, das ist mir nicht mal aufgefallen.
Ich hatte mo-so drinstehen. Das habe ich heute noch einmal nachgestellt und jetzt funktioniert es.
Wer weiß, vorher hatte ich in den Eingabefeldern einige fehlerhafte Werte eingetragen. Evtl. hat sich da was verschluckt.
Also -> funktioniert  8)

Allerdings habe ich immer noch das Problem mit den Eingabefeldern:

ich öffne die Eingabemaske z.B. mit sunset_abs in den Einstellungen und sehe auch 3 Felder (Offset,früheste Zeit, späteste Zeit)
wenn ich jetzt sunset_rel auswähle und dann wieder auf sunset_abs habe ich 4 Felder. das erste ist leer und dann kommen Offset,früheste Zeit, späteste Zeit

Beim Aufrufen wird das Widget so konfiguriert, dass alle gefüllten Felder gezeigt werden (also nur die, die in Der zugrunde liegenden Definition verwendet wurden). Wird auf eine andere Variante geschaltet, werden alle möglichen Parameter angeboten, also alle laut Beschreibung der Funktion inklusive der Optionalen (welche das sind bitte dem Wiki für SUNRISE_EL entnehmen). Beim Abspeichern werden die leeren Felder weggelassen.