diff --git a/src/addon/firmware/rftypes/hb_switch_tp.xml b/src/addon/firmware/rftypes/hb_switch_tp.xml
new file mode 100644
index 00000000..bb21ed36
--- /dev/null
+++ b/src/addon/firmware/rftypes/hb_switch_tp.xml
@@ -0,0 +1,1471 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/addon/js/jp_webui_inc.js b/src/addon/js/jp_webui_inc.js
index 31e568ba..17cee1b6 100644
--- a/src/addon/js/jp_webui_inc.js
+++ b/src/addon/js/jp_webui_inc.js
@@ -1,3 +1,460 @@
+//Defines
+/*
+TOM_DAYIDX = new Array();
+TOM_DAYIDX['SATURDAY'] = 0;
+TOM_DAYIDX['SUNDAY'] = 1;
+TOM_DAYIDX['MONDAY'] = 2;
+TOM_DAYIDX['TUESDAY'] = 3;
+TOM_DAYIDX['WEDNESDAY'] = 4;
+TOM_DAYIDX['THURSDAY'] = 5;
+TOM_DAYIDX['FRIDAY'] = 6;
+
+TOM_DAY_ENG = new Array('SATURDAY', 'SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY');
+
+tom_endtime = 0;
+tom_level = 1;
+
+tom_maxtimeout = 1440;
+tom_mintimeout = 0;
+
+*/
+
+//-----
+
+
+CC_save_Level = function(prgName)
+{
+ var prg = (typeof prgName != "undefined" && prgName != null) ? prgName : "";
+ for (loop = 0; loop <= (document.getElementsByName(prg+'level_tmp').length -1); loop++)
+ {
+ document.getElementsByName(prg + 'level')[loop].value = parseInt(document.getElementsByName(prg +'level_tmp')[loop].value);
+ }
+};
+
+HBTimeoutManager = Class.create();
+
+HBTimeoutManager.prototype = Object.extend(new MsgBox(), {
+
+ initialize: function (iface, address, isOldDevGeneration, prgName) {
+
+ this.TOM_DAY = new Array (
+ translateKey('timeModuleLblSelSerialPatternSaturday') ,
+ translateKey('timeModuleLblSelSerialPatternSunday') ,
+ translateKey('timeModuleLblSelSerialPatternMonday') ,
+ translateKey('timeModuleLblSelSerialPatternTuesday') ,
+ translateKey('timeModuleLblSelSerialPatternWednesday') ,
+ translateKey('timeModuleLblSelSerialPatternThursday') ,
+ translateKey('timeModuleLblSelSerialPatternFriday')
+ );
+
+ this.isOldDevGeneration = isOldDevGeneration;
+ this.iface = iface;
+ this.address = address;
+
+ this.prg = (prgName != undefined && prgName != null) ? prgName : "";
+
+ //Woche anlegen und initialisieren
+ this.week = new Array(7);
+ this.divname = new Array(7); //DIV-Container
+ this.weekdirty = new Array(7); //Sind ƒnderungen erfolgt?
+
+ this.setMaxTimouts();
+
+ for (var dayidx = 0; dayidx < 7; dayidx++) {
+ this.week[dayidx] = new Array();
+ this.divname[dayidx] = '';
+ this.weekdirty[dayidx] = false;
+ }
+ },
+
+ setMaxTimouts: function() {
+ this.maxTimeOuts = 13;
+ },
+
+ setDivname: function (day, divid) {
+ var dayidx = TOM_DAYIDX[day];
+ this.divname[dayidx] = divid;
+ },
+
+ tom_toTime: function (timeout) {
+
+ var h = parseInt(timeout / 60);
+ var m = timeout - h * 60;
+
+ if (String(m).length == 1) m = "0" + m;
+ if (String(h).length == 1) h = "0" + h;
+
+ return h + ":" + m;
+ },
+
+ tom_toTimeout: function (time) {
+
+ var tokens;
+ var h, m;
+ var timeout = -1;
+
+ if (this.tom_isTime(time)) {
+ tokens = time.split(':');
+ h = tokens[0];
+ m = tokens[1];
+
+ timeout = parseInt(h, 10) * 60 + parseInt(m, 10);
+ }
+
+ return timeout;
+ },
+
+ tom_isTime: function (time) {
+ return time.match(/^[0-2]?[0-9]:[0-5][0,5]$/) != null;
+ },
+
+ tom_isLevel: function (level) {
+ return level.match(/\b([01]?[0-9][0-9]?|200)\b/) != null;
+ },
+
+ tom_checkAndSetTime: function (day, inputel, timeoutIdx) {
+
+ var dayidx = TOM_DAYIDX[day];
+ var timeouts = this.week[dayidx];
+ var elem = inputel.id.split("_");
+ var count = -1;
+ var inputelem;
+ var endtime;
+ var prev_endtime;
+ var next_endtime;
+ var time;
+
+ if (!this.prg) {
+ while ($(elem[0] + '_' + elem[1] + '_' + (count + 1))) {
+ count++;
+ timeouts[count][tom_endtime] = this.tom_toTimeout($(elem[0] + '_' + elem[1] + '_' + count).value);
+ }
+ } else {
+ while ($(this.prg + elem[1] + '_' + elem[2] + '_' + (count + 1))) {
+ count++;
+ timeouts[count][tom_endtime] = this.tom_toTimeout($(this.prg + elem[1] + '_' + elem[2] + '_' + count).value);
+ }
+ }
+
+ for (var loop = 0; loop <= (count - 1); loop++) {
+ timeoutIdx = loop;
+ if (!this.prg) {
+ inputelem = elem[0] + "_" + elem[1] + "_" + loop;
+ } else {
+ inputelem = this.prg + elem[1] + "_" + elem[2] + "_" + loop;
+ }
+ if (this.isOldDevGeneration) {
+ // Minuten der Zeit auf volle 10 pruefen und ggf. anpassen
+ $(inputelem).value = time = $(inputelem).value.replace(/[1-9]$/, "0");
+ } else {
+ // Minuten der Zeit auf volle 5 pruefen und ggf. anpassen
+ var arTime = $(inputelem).value.split(":"),
+ hour = parseInt(arTime[0]),
+ min =Math.round(arTime[1] / 5) * 5 ;
+ if (min <= 9) {min = "0" + min;}
+ if (min == 60) {min = "00"; hour++;}
+ if (hour <= 9) {hour = "0" + hour;}
+ if (hour == 24) {hour = "23"; min = "55";}
+
+ $(inputelem).value = time = hour + ":" + min;
+ }
+ endtime = this.tom_toTimeout(time);
+ prev_endtime = -1;
+ next_endtime = -1;
+
+
+ if (timeoutIdx != 0) prev_endtime = timeouts[timeoutIdx - 1][tom_endtime];
+ if (timeoutIdx != timeouts.length - 1) next_endtime = timeouts[timeoutIdx + 1][tom_endtime];
+
+
+ $(inputelem).style.backgroundColor = WebUI.getColor("transparent");
+ if (endtime > 0
+ && endtime <= 1440
+ && (prev_endtime < 0 || prev_endtime < endtime)
+ && (next_endtime < 0 || next_endtime > endtime)) timeouts[timeoutIdx][tom_endtime] = parseInt(endtime);
+ else $(inputelem).style.backgroundColor = WebUI.getColor("red");
+
+ this.weekdirty[dayidx] = true;
+ }
+ },
+
+ tom_checkAndSetLevel: function (day, inputelem, timeoutIdx) {
+
+ var level = inputelem.value;
+ var dayidx = TOM_DAYIDX[day];
+ var timeouts = this.week[dayidx];
+
+ inputelem.style.backgroundColor = WebUI.getColor("transparent");
+
+ if (this.tom_isLevel(level)
+ && level >= 0
+ && level <= 200) timeouts[timeoutIdx][tom_level] = parseInt(level);
+ else inputelem.style.backgroundColor = WebUI.getColor("red");
+
+ this.weekdirty[dayidx] = true;
+ },
+
+ tom_setDirty: function (day, inputelem, timeoutIdx) {
+ CC_save_Level(this.prg);
+ var tmp = inputelem.id.split("_");
+
+ if (this.prg) {
+ var id = this.prg + tmp[1] + "_" + tmp[2] + "_" + tmp[3];
+ } else {
+ var id = tmp[0] + "_" + tmp[1] + "_" + tmp[2];
+ }
+ var level = $F(id);
+ var dayidx = TOM_DAYIDX[day];
+ var timeouts = this.week[dayidx];
+
+ inputelem.style.backgroundColor = WebUI.getColor("transparent");
+
+ if (this.tom_isLevel(level)
+ && level >= 0
+ && level <= 200) timeouts[timeoutIdx][tom_level] = parseInt(level);
+ else inputelem.style.backgroundColor = WebUI.getColor("red");
+
+ this.weekdirty[dayidx] = true;
+
+ },
+
+ tom_getPostStr: function () {
+
+ var postStr = "";
+
+ for (var dayidx = 0; dayidx < 7; dayidx++) {
+ //Welcher Tag enth‰lt die relevanten Daten: "wie am Vortag"-Funktion?
+ var prev_day = $(this.prg + 'prevday_' + dayidx);
+ var p = dayidx;
+ while (prev_day.checked) {
+ p--;
+ prev_day = $(this.prg+ 'prevday_' + p);
+ }
+ //-----
+
+ if (this.weekdirty[dayidx] || this.weekdirty[p]) //Dieser Tag oder der Vortag "dirty"?
+ {
+ var timeouts = this.week[p];
+
+ if (timeouts && timeouts.length > 0) {
+ for (var i = 0; i < timeouts.length; i++) {
+ if (this.isOldDevGeneration) {
+ postStr += "&LEVEL" + TOM_DAY_ENG[dayidx] +"_" + (i+1) + "=" + timeouts[i][tom_level];
+ postStr += "&TIMEOUT_" + TOM_DAY_ENG[dayidx] +"_" + (i+1) + "=" + timeouts[i][tom_endtime];
+ } else {
+ postStr += "&" + this.prg + "LEVEL_" + TOM_DAY_ENG[dayidx] + "_" + (i + 1) + "=" + timeouts[i][tom_level];
+ postStr += "&" + this.prg + "ENDTIME_" + TOM_DAY_ENG[dayidx] + "_" + (i + 1) + "=" + timeouts[i][tom_endtime];
+ }
+ }
+ }
+ }
+ }
+
+ return postStr;
+ },
+
+ tom_isDirty: function () {
+
+ for (var dayidx = 0; dayidx < 7; dayidx++) {
+ if (this.weekdirty[dayidx]) return true;
+ }
+ return false;
+ },
+
+ //day: MONDAY, TUESDAY, ...
+ //endtime: 0..1440
+ setLevel: function (day, endtime, level) {
+
+ var dayidx = TOM_DAYIDX[day];
+ var timeouts = this.week[dayidx];
+ var i = 0;
+ if (!timeouts) timeouts = new Array();
+
+ while (i < timeouts.length && endtime >= timeouts[i][tom_endtime]) {
+ if (timeouts[i][tom_endtime] == endtime) {
+ return;
+ }
+
+ i++;
+ }
+
+ if (i < timeouts.length) {
+ //Es muss einsortiert werden.
+ //Platz da!!!
+ for (j = timeouts.length; j > i; j--) {
+ timeouts[j] = timeouts[j - 1];
+ }
+ }
+
+ timeouts[i] = new Array(2);
+ timeouts[i][tom_endtime] = endtime;
+ timeouts[i][tom_level] = level;
+ },
+
+ delLevel: function (day, endtime) {
+
+ var dayidx = TOM_DAYIDX[day];
+ var timeouts = this.week[dayidx];
+
+ for (var i = 0; i < timeouts.length; i++) {
+ if (timeouts[i][tom_endtime] == endtime) {
+ timeouts.splice(i, 1);
+ break;
+ }
+ }
+ },
+
+ delLevelByIdx: function (day, timeoutIdx) {
+
+ var dayidx = TOM_DAYIDX[day];
+ var timeouts = this.week[dayidx];
+ timeouts.splice(timeoutIdx, 1);
+
+ this.weekdirty[dayidx] = true;
+ },
+
+ addLevelByIdx: function (day, timeoutIdx) {
+
+ var dayidx = TOM_DAYIDX[day];
+ var timeouts = this.week[dayidx];
+
+ if (timeouts.length >= this.maxTimeOuts ) {
+ //alert('Der Zeitabschnitt kann nicht angelegt werden. Es kˆnnen nur bis zu '+this.maxTimeOuts+' Zeitabschnitte angelegt werden.');
+ alert(translateKey('errorCreateTimePeriod') + translateKey('maxTimePeriodReachedA') + this.maxTimeOuts+translateKey('maxTimePeriodReachedB'));
+ return;
+ }
+ else if (timeouts[timeoutIdx][tom_endtime] - 10 == 0) {
+ //alert('Der Zeitabschnitt kann nicht angelegt werden. Die Endzeit kann nicht 00:00 Uhr sein.');
+ alert(translateKey('errorCreateTimePeriod') + translateKey('endtimeReached'));
+ return;
+ }
+ else if (timeoutIdx > 0 && timeouts[timeoutIdx][tom_endtime] - 10 <= timeouts[timeoutIdx - 1][tom_endtime]) {
+ //alert('Der Zeitabschnitt kann nicht angelegt werden. Er existiert schon.');
+ alert(translateKey('errorCreateTimePeriod') + translateKey('timePeriodAlreadyExists'));
+ return;
+ }
+ this.setLevel(day, timeouts[timeoutIdx][tom_endtime] - 10, timeouts[timeoutIdx][tom_level]);
+
+ this.weekdirty[dayidx] = true;
+ },
+
+ OnClickPrevDay: function (day) {
+ var dayidx = TOM_DAYIDX[day];
+ var elem = $(this.prg + 'prevday_' + dayidx);
+
+ if (elem.checked) {
+ $(this.prg+'levelprofile_' + dayidx).style.display = "none";
+ $(this.prg+'levelprofile_' + dayidx).style.visibility = "hidden";
+ }
+ else {
+ $(this.prg+'levelprofile_' + dayidx).style.display = "";
+ $(this.prg+'levelprofile_' + dayidx).style.visibility = "visible";
+ }
+ this.tom_setDirty('SATURDAY', $(this.prg + 'level_0_0_tmp'), 0);
+ this.weekdirty[dayidx] = true;
+ },
+
+ tom_equals_prevday: function (day) {
+
+ var dayidx = TOM_DAYIDX[day];
+
+ if (dayidx == 0) return false; //Starttag ist immer ungleich des Vortages
+
+ var this_timeouts = this.week[dayidx ];
+ var prev_timeouts = this.week[dayidx - 1];
+
+ if (!prev_timeouts || !this_timeouts || prev_timeouts.length != this_timeouts.length) return false;
+
+ for (var i = 0; i < this_timeouts.length; i++) {
+ if (this_timeouts[i][tom_level] != prev_timeouts[i][tom_level]
+ || this_timeouts[i][tom_endtime] != prev_timeouts[i][tom_endtime]) return false;
+ }
+ return true;
+ },
+
+ checkDayTimeouts: function (dayidx) {
+ var timeouts = this.week[dayidx];
+
+ for (i = 1; i < timeouts.length; i++) {
+ if (timeouts[i][tom_endtime] <= timeouts[i - 1][tom_endtime]) {
+ alert("Der " + i + ". Zeitabschnitt hat eine ung¸ltige Dauer");
+ }
+ }
+ },
+
+ checkTimeouts: function () {
+
+ for (i = 0; i < this.week.length; i++) {
+ checkDayTimeouts(i);
+ }
+ },
+
+ writeDay: function (day) {
+
+ var prgNr = this.prg;
+
+ var dayidx = TOM_DAYIDX[day];
+ var timeouts = this.week[dayidx];
+ var endtime;
+
+ if (!timeouts) return;
+
+ var equals_prevday = this.tom_equals_prevday(day);
+
+ msg = "
";
+ msg += "";
+
+ msg += "";
+ $(this.divname[dayidx]).innerHTML = msg;
+ }
+
+});
+
+
+
/**
* ise/iseButtonsWindowHB.js
**/
diff --git a/src/addon/patch/common/ic_deviceparameters.cgi.patch b/src/addon/patch/common/ic_deviceparameters.cgi.patch
index 4f7022d5..37ff09a8 100644
--- a/src/addon/patch/common/ic_deviceparameters.cgi.patch
+++ b/src/addon/patch/common/ic_deviceparameters.cgi.patch
@@ -1,6 +1,14 @@
--- ./patchsource/www/config/ic_deviceparameters.cgi.orig
+++ ./patchsource/www/config/ic_deviceparameters.cgi
-@@ -909,7 +909,8 @@
+@@ -891,6 +891,7 @@
+ || ([string equal $ch_paramid "dw_controller_color_virt_ch_master"] == 1)
+ || ([string equal $ch_paramid "dw_controller_brightness_ch_master"] == 1)
+ || ([string equal $ch_paramid "dw_controller_brightness_virt_ch_master"] == 1)
++ || ([string equal $ch_paramid "hb_sw_tp_ch_master"] == 1)
+ } {
+ setInternalDeviceKey $ch_paramid
+ }
+@@ -909,7 +910,8 @@
global receiver_address sender_address dev_descr_sender
set sender_address $ch_address
set receiver_address $ch_address
diff --git a/src/addon/patch/common/translate.lang.extension.js.patch b/src/addon/patch/common/translate.lang.extension.js.patch
index 25b0ccac..34e21051 100644
--- a/src/addon/patch/common/translate.lang.extension.js.patch
+++ b/src/addon/patch/common/translate.lang.extension.js.patch
@@ -1,6 +1,6 @@
--- ./patchsource/www/webui/js/lang/de/translate.lang.extension.js.orig
+++ ./patchsource/www/webui/js/lang/de/translate.lang.extension.js
-@@ -634,6 +634,41 @@
+@@ -634,6 +634,42 @@
"iconOK":"Alles okay",
"iconNewMessage":"Neue Nachricht",
"iconServiceMessage":"Servicemeldung",
@@ -20,6 +20,7 @@
+ "iconChDirArrow":"Pfeil zum Taster",
+ "lblHbIterations":"Anzahl der Durchl%E4ufe",
+ "lblEffectNr":"Effekt",
++ "lblEffectOptions":"Effekt-Optionen",
+ "lblEffectSpeed":"Effektgeschwindigkeit",
+ "iconHbSprinkler":"Sprinkler",
+ "iconHbValve":"Wasserhahn",
diff --git a/src/addon/patch/common/webui.js.patch b/src/addon/patch/common/webui.js.patch
index c1dca142..bcab44a5 100644
--- a/src/addon/patch/common/webui.js.patch
+++ b/src/addon/patch/common/webui.js.patch
@@ -1,6 +1,6 @@
--- ./patchsource/www/webui/webui.js.orig
+++ ./patchsource/www/webui/webui.js
-@@ -88,6 +88,490 @@
+@@ -88,6 +88,516 @@
DEV_PATHS["HM-RC-4-3"] = new Object();
DEV_PATHS["HM-RC-4-3"]["50"] = "/config/img/devices/50/84_hm-rc-4-x_thumb.png";
DEV_PATHS["HM-RC-4-3"]["250"] = "/config/img/devices/250/84_hm-rc-4-3.png";
@@ -244,6 +244,30 @@
+DEV_PATHS['HB-UNI-DMX-Master'] = new Object();
+DEV_PATHS['HB-UNI-DMX-Master']['50'] = '/config/img/devices/50/hb-uni-dmx-master_thumb.png';
+DEV_PATHS['HB-UNI-DMX-Master']['250'] = '/config/img/devices/250/hb-uni-dmx-master.png';
++DEV_HIGHLIGHT['HB-LC-SwX-TP'] = new Object();
++DEV_LIST.push('HB-LC-SwX-TP');
++DEV_DESCRIPTION['HB-LC-SwX-TP']='radio-controlled switch actuator X-channel, with time profile';
++DEV_PATHS['HB-LC-SwX-TP'] = new Object();
++DEV_PATHS['HB-LC-SwX-TP']['50'] = '/config/img/devices/50/hb-lc-swx-tp_thumb.png';
++DEV_PATHS['HB-LC-SwX-TP']['250'] = '/config/img/devices/250/hb-lc-swx-tp.png';
++DEV_HIGHLIGHT['HB-LC-Sw1-TP'] = new Object();
++DEV_LIST.push('HB-LC-Sw1-TP');
++DEV_DESCRIPTION['HB-LC-Sw1-TP']='radio-controlled switch actuator 1-channel, with time profile';
++DEV_PATHS['HB-LC-Sw1-TP'] = new Object();
++DEV_PATHS['HB-LC-Sw1-TP']['50'] = '/config/img/devices/50/hb-lc-sw1-tp_thumb.png';
++DEV_PATHS['HB-LC-Sw1-TP']['250'] = '/config/img/devices/250/hb-lc-sw1-tp.png';
++DEV_HIGHLIGHT['HB-LC-Sw2-TP'] = new Object();
++DEV_LIST.push('HB-LC-Sw2-TP');
++DEV_DESCRIPTION['HB-LC-Sw2-TP']='radio-controlled switch actuator 2-channel, with time profile';
++DEV_PATHS['HB-LC-Sw2-TP'] = new Object();
++DEV_PATHS['HB-LC-Sw2-TP']['50'] = '/config/img/devices/50/hb-lc-sw2-tp_thumb.png';
++DEV_PATHS['HB-LC-Sw2-TP']['250'] = '/config/img/devices/250/hb-lc-sw2-tp.png';
++DEV_HIGHLIGHT['HB-LC-Sw4-TP'] = new Object();
++DEV_LIST.push('HB-LC-Sw4-TP');
++DEV_DESCRIPTION['HB-LC-Sw4-TP']='radio-controlled switch actuator 4-channel, with time profile';
++DEV_PATHS['HB-LC-Sw4-TP'] = new Object();
++DEV_PATHS['HB-LC-Sw4-TP']['50'] = '/config/img/devices/50/hb-lc-sw4-tp_thumb.png';
++DEV_PATHS['HB-LC-Sw4-TP']['250'] = '/config/img/devices/250/hb-lc-sw4-tp.png';
+DEV_HIGHLIGHT['HB-Sec-RHS-3'] = new Object();
+DEV_LIST.push('HB-Sec-RHS-3');
+DEV_DESCRIPTION['HB-Sec-RHS-3']='HB Rotary Handle Sensor with battery state';
@@ -266,7 +290,8 @@
+DEV_DESCRIPTION['HB-RC-6-PBU-LED']='6 remote channel push button with led';
+DEV_PATHS['HB-RC-6-PBU-LED'] = new Object();
+DEV_PATHS['HB-RC-6-PBU-LED']['50'] = '/config/img/devices/50/hb-rc-6-pbu-led_thumb.png';
-+DEV_PATHS['HB-RC-6-PBU-LED']['250'] = '/config/img/devices/250/hb-rc-6-pbu-led.png';DEV_HIGHLIGHT['HB-RC-6-PBU-LED'] = new Object();
++DEV_PATHS['HB-RC-6-PBU-LED']['250'] = '/config/img/devices/250/hb-rc-6-pbu-led.png';
++DEV_HIGHLIGHT['HB-RC-6-PBU-LED'] = new Object();
+DEV_HIGHLIGHT['HB-RC-6-PBU-LED']['Light_circle'] = [4, 0.8079999999999999, 0.656, 0.118, 0.112];
+DEV_HIGHLIGHT['HB-RC-6-PBU-LED']['Light_beam_1'] = [6, 0.748, 0.712, 0.776, 0.712, 0.016];
+DEV_HIGHLIGHT['HB-RC-6-PBU-LED']['Light_beam_2'] = [6, 0.776, 0.632, 0.8, 0.652, 0.016];
@@ -340,7 +365,8 @@
+DEV_DESCRIPTION['HB-OU-MP3-LED']='MP3 Player with adressable LED';
+DEV_PATHS['HB-OU-MP3-LED'] = new Object();
+DEV_PATHS['HB-OU-MP3-LED']['50'] = '/config/img/devices/50/hb-ou-mp3-led_thumb.png';
-+DEV_PATHS['HB-OU-MP3-LED']['250'] = '/config/img/devices/250/hb-ou-mp3-led.png';DEV_HIGHLIGHT['HB-OU-MP3-LED'] = new Object();
++DEV_PATHS['HB-OU-MP3-LED']['250'] = '/config/img/devices/250/hb-ou-mp3-led.png';
++DEV_HIGHLIGHT['HB-OU-MP3-LED'] = new Object();
+DEV_HIGHLIGHT['HB-OU-MP3-LED']['Light_circle'] = [4, 0.8079999999999999, 0.656, 0.118, 0.112];
+DEV_HIGHLIGHT['HB-OU-MP3-LED']['Light_beam_1'] = [6, 0.748, 0.712, 0.776, 0.712, 0.016];
+DEV_HIGHLIGHT['HB-OU-MP3-LED']['Light_beam_2'] = [6, 0.776, 0.632, 0.8, 0.652, 0.016];
@@ -491,7 +517,7 @@
DEV_HIGHLIGHT["HM-RC-4-3"] = new Object();
DEV_HIGHLIGHT["HM-RC-4-3"]["arrow_part1"] = [6, 0.312, 0.288, 0.416, 0.288, 0.012];
DEV_HIGHLIGHT["HM-RC-4-3"]["arrow_part2"] = [6, 0.312, 0.288, 0.352, 0.248, 0.012];
-@@ -3843,6 +4327,217 @@
+@@ -3843,6 +4353,217 @@
elvST['CAPACITIVE_FILLING_LEVEL_SENSOR|CASE_HIGH'] = '${stringTableCapacitiveFillingSensorCaseHeight}';
elvST['CAPACITIVE_FILLING_LEVEL_SENSOR|CASE_LENGTH'] = '${stringTableCapacitiveFillingSensorCaseLength}';
elvST['CAPACITIVE_FILLING_LEVEL_SENSOR|CASE_WIDTH'] = '${stringTableCapacitiveFillingSensorCaseWidth}';
@@ -709,7 +735,7 @@
elvST['CAPACITIVE_FILLING_LEVEL_SENSOR|CONTROLTEXT_CALC_FILLINGLEVEL'] = '${stringTableCapacitiveFillingSensorTextCalcFillingLevel}';
elvST['CAPACITIVE_FILLING_LEVEL_SENSOR|CONTROLTEXT_FILLINGLEVEL'] = '${stringTableCapacitiveFillingSensorTextFillingLevel}';
elvST['CAPACITIVE_FILLING_LEVEL_SENSOR|FILLING_LEVEL'] = '${stringTableCapacitiveFillingSensorFillingLevel}';
-@@ -13664,7 +14359,7 @@
+@@ -13664,7 +14385,7 @@
// Check each line if the free text mode is active.
// If yes switch on the appropriate text input field
// and set the variable freeTextActive to true
@@ -718,7 +744,7 @@
var jLine = jQuery("#textSelect_" + line),
jCellFreeText = jQuery("#cellFreeText_"+line);
-@@ -13680,7 +14375,7 @@
+@@ -13680,7 +14401,7 @@
// If at least one line has an active free text mode
// we have to activate the placeholder for the other lines and the header (color and icon are moving up)
if (freeTextActive) {
@@ -727,7 +753,7 @@
var jLine = jQuery("#textSelect_" + line),
jPlaceHolder = jQuery("#placeHolder_"+line);
-@@ -13692,7 +14387,7 @@
+@@ -13692,7 +14413,7 @@
}
} else {
jHeadFreeText.hide().css("display", "none");
@@ -736,7 +762,7 @@
jQuery("#placeHolder_"+line).hide().css("display", "none");
}
}
-@@ -23560,6 +24255,24 @@
+@@ -23560,6 +24281,24 @@
this.setWidth(400);
this.setFile( "/pages/msg/setOUCFMMode.htm" );
break;
@@ -755,13 +781,13 @@
+ case ID_SET_HBOURGBWLEDFX_MODE:
+ this.setTitle( translateKey("dialogEnterValue") /*"Wert eingeben" */);
+ this.addToPostBody( 'string type = "'+this.type+'";' );
-+ this.setWidth(400);
++ this.setWidth(480);
+ this.setFile( "/pages/msg/setHBOURGBWLEDFXMode.htm" );
+ break;
case ID_SET_STATUS_DISPLAY:
this.setTitle( translateKey("dialogEnterValue") /*"Wert eingeben" */);
this.addToPostBody( 'string type = "'+this.type+'";' );
-@@ -24363,6 +25076,9 @@
+@@ -24363,6 +25102,9 @@
ID_AUTO_LOGIN_CONFIG = 1018;
ID_PROGRAM_CHOOSER = 1019;
ID_EDIT_SYSVAR = 1021;
diff --git a/src/addon/www/config/easymodes/HB-UNI-Sen-CURRENT_ch_master.tcl b/src/addon/www/config/easymodes/HB-UNI-Sen-CURRENT_ch_master.tcl
index d4d0a2d5..7abc890c 100755
--- a/src/addon/www/config/easymodes/HB-UNI-Sen-CURRENT_ch_master.tcl
+++ b/src/addon/www/config/easymodes/HB-UNI-Sen-CURRENT_ch_master.tcl
@@ -119,8 +119,8 @@ proc set_htmlParams {iface address pps pps_descr special_input_id peer_type} {
set options(2) "SCT-013-030"
set options(3) "SCT-013-050"
set options(4) "SCT-013-100"
- set options(4) "INA219"
- set options(4) "ACS712 or other"
+ set options(5) "INA219"
+ set options(6) "ACS712 or other"
append HTML_PARAMS(separate_1) "\${stringTableHbGenericDistSensorType} | "
set cmb $chn
append cmb $prn
diff --git a/src/addon/www/config/easymodes/MASTER_LANG/HB-OU-RGBW-LED-FX_HELP.js b/src/addon/www/config/easymodes/MASTER_LANG/HB-OU-RGBW-LED-FX_HELP.js
new file mode 100755
index 00000000..c0c3cecd
--- /dev/null
+++ b/src/addon/www/config/easymodes/MASTER_LANG/HB-OU-RGBW-LED-FX_HELP.js
@@ -0,0 +1,14 @@
+jQuery.extend(true,langJSON, {
+ "de" : {
+ "HelpTitle" : "Hilfe",
+ "SHORT_ACT_OPTIONS" : "Optionen sind wie folgt zu berechnen: siehe WS2812FX Users Guide",
+ "SHORT_ACT_INTENS" : "Die Helligkeit bezieht sich auf den gesamten Stripe"
+ },
+
+ "en" : {
+ "HelpTitle" : "Help",
+ "SHORT_ACT_OPTIONS" : "how to calculate options: see WS2812FX Users Guide",
+ "SHORT_ACT_INTENS" : "brightness is for the whole stripe"
+ }
+});
+
diff --git a/src/addon/www/config/easymodes/MASTER_LANG/HB-SW-TP.js b/src/addon/www/config/easymodes/MASTER_LANG/HB-SW-TP.js
new file mode 100755
index 00000000..85d07a64
--- /dev/null
+++ b/src/addon/www/config/easymodes/MASTER_LANG/HB-SW-TP.js
@@ -0,0 +1,70 @@
+jQuery.extend(true,langJSON, {
+ "de" : {
+ "optionSat" : "Samstag",
+ "optionSun" : "Sonntag",
+ "optionMon" : "Montag",
+ "optionTue" : "Dienstag",
+ "optionWed" : "Mittwoch",
+ "optionThu" : "Donnerstag",
+ "optionFri" : "Freitag",
+
+ "optionWeeklyProgramStateOn" : "EIN",
+ "optionWeeklyProgramStateOff" : "AUS",
+
+ "lblProgramLevelProfile" : "Schaltprofil",
+ "lblProgramProfile" : "Profil",
+ "lblProgramTimeStart": "Startzeit",
+ "lblProgramTimeEnd": "Endzeit",
+ "lblLevel" : "Zustand",
+ "lblProgramState" : "Schaltzustand",
+ "lblProgramPeriod" : "Zeitabschnitt",
+ "lblProgramPreviousDay" : "wie am Vortag",
+ "lblProgramTimeExtension" : "Uhr",
+
+ "toolTipProgramAddPeriod" : "Zeitabschnitt einfügen",
+ "toolTipProgramDelPeriod" : "Diesen Zeitabschnitt löschen",
+
+ "errorCreateTimePeriod" : "Der Zeitabschnitt kann nicht angelegt werden. ",
+ "maxTimePeriodReachedA" : "Es k%F6nnen nur bis zu ",
+ "maxTimePeriodReachedB" : " Zeitabschnitte angelegt werden.",
+ "endtimeReached" : "Die Endzeit kann nicht 00:00 Uhr sein.",
+ "timePeriodAlreadyExists" : "Er existiert schon.",
+
+ "dummy" : ""
+ },
+
+ "en" : {
+ "optionSat" : "Saturday",
+ "optionSun" : "Sunday",
+ "optionMon" : "Monday",
+ "optionTue" : "Tuesday",
+ "optionWed" : "Wednesday",
+ "optionThu" : "Thursday",
+ "optionFri" : "Friday",
+
+ "optionWeeklyProgramStateOn" : "ON",
+ "optionWeeklyProgramStateOff" : "OFF",
+
+ "lblProgramLevelProfile" : "Switching profile",
+ "lblProgramProfile" : "Profile",
+ "lblProgramTimeStart" : "Start time",
+ "lblProgramTimeEnd" : "End time",
+ "lblLevel" : "State",
+ "lblProgramState" : "Switching status",
+ "lblProgramPeriod" : "Time period",
+ "lblProgramPreviousDay" : "apply from previous day",
+ "lblProgramTimeExtension" : "o'clock",
+ "toolTipProgramAddPeriod" : "Enter time period",
+ "toolTipProgramDelPeriod" : "Delete this time period",
+
+ "errorCreateTimePeriod" : "The period can not be created. ",
+ "maxTimePeriodReachedA" : "Only a maximum number of ",
+ "maxTimePeriodReachedB" : " periods can be created.",
+
+ "endtimeReached" : "The end time can not be set to 00:00 h.",
+ "timePeriodAlreadyExists" : "It already exits.",
+
+ "dummy" : ""
+ }
+});
+
diff --git a/src/addon/www/config/easymodes/MASTER_LANG/HB-SW-TP_HELP.js b/src/addon/www/config/easymodes/MASTER_LANG/HB-SW-TP_HELP.js
new file mode 100755
index 00000000..b9040add
--- /dev/null
+++ b/src/addon/www/config/easymodes/MASTER_LANG/HB-SW-TP_HELP.js
@@ -0,0 +1,10 @@
+jQuery.extend(true,langJSON, {
+ "de" : {
+ "HelpTitle" : "Hilfe"
+ },
+
+ "en" : {
+ "HelpTitle" : "Help"
+ }
+});
+
diff --git a/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/localization/de/GENERIC.txt b/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/localization/de/GENERIC.txt
index 98b42056..42f60deb 100755
--- a/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/localization/de/GENERIC.txt
+++ b/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/localization/de/GENERIC.txt
@@ -5,5 +5,6 @@
"signal_led_chime_on" : "Segment ein",
"signal_led_chime_off" : "Segment aus",
"signal_effect" : "Effekt",
+"signal_effectoptions" : "Effektoptionen",
"button_inactive" : "Taste deaktiviert",
diff --git a/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/localization/en/GENERIC.txt b/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/localization/en/GENERIC.txt
index f911134a..9b776dfb 100755
--- a/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/localization/en/GENERIC.txt
+++ b/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/localization/en/GENERIC.txt
@@ -5,6 +5,7 @@
"signal_led_chime_off" : "Segment off",
"signal_kind" : "Signal type",
"signal_effect" : "Effect",
+"signal_effectoptions" : "Effect options",
"signal_speed" : "Speed",
"signal_intens" : "Brightness",
"button_inactive" : "Button deactivated",
diff --git a/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/signal_type.tcl b/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/signal_type.tcl
index 7982a4c0..8e6140c5 100755
--- a/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/signal_type.tcl
+++ b/src/addon/www/config/easymodes/SIGNAL_LEDHBOURGBWLEDFX/signal_type.tcl
@@ -10,6 +10,20 @@ if {$dev_descr_sender(TYPE) != "SMOKE_DETECTOR_TEAM"} {
append HTML_PARAMS(separate_$prn) "
|
"
}
+set hlpBoxWidth 450
+set hlpBoxHeight 60
+proc getHelpIcon {topic x y} {
+ set ret ""
+ return $ret
+}
+puts ""
+
+incr pref
+set id "separate_${special_input_id}_$prn\_$pref"
+append HTML_PARAMS(separate_$prn) "\${signal_intens} ($min - $max) | "
+append HTML_PARAMS(separate_$prn) " [getHelpIcon SHORT_ACT_INTENS $hlpBoxWidth $hlpBoxHeight]"
+append HTML_PARAMS(separate_$prn) " |
"
+
incr pref
append HTML_PARAMS(separate_$prn) "\${signal_effect} | "
array_clear options
@@ -84,14 +98,14 @@ append HTML_PARAMS(separate_$prn) " |
"
incr pref
set id "separate_${special_input_id}_$prn\_$pref"
-append HTML_PARAMS(separate_$prn) "\${signal_speed} ($min - $max) | "
-append HTML_PARAMS(separate_$prn) ""
-append HTML_PARAMS(separate_$prn) " |
"
+append HTML_PARAMS(separate_$prn) "\${signal_effectoptions} ($min - $max) | "
+append HTML_PARAMS(separate_$prn) " [getHelpIcon SHORT_ACT_OPTIONS $hlpBoxWidth $hlpBoxHeight] | "
+append HTML_PARAMS(separate_$prn) "
"
incr pref
set id "separate_${special_input_id}_$prn\_$pref"
-append HTML_PARAMS(separate_$prn) "\${signal_intens} ($min - $max) | "
-append HTML_PARAMS(separate_$prn) ""
+append HTML_PARAMS(separate_$prn) " |
\${signal_speed} ($min - $max) | "
+append HTML_PARAMS(separate_$prn) ""
append HTML_PARAMS(separate_$prn) " |
"
incr pref
@@ -106,7 +120,6 @@ append HTML_PARAMS(separate_$prn) "G ($min - $max) | "
append HTML_PARAMS(separate_$prn) ""
append HTML_PARAMS(separate_$prn) " |
"
-
incr pref
set id "separate_${special_input_id}_$prn\_$pref"
append HTML_PARAMS(separate_$prn) "B ($min - $max) | "
diff --git a/src/addon/www/config/easymodes/hb_sw_tp_ch_master.tcl b/src/addon/www/config/easymodes/hb_sw_tp_ch_master.tcl
new file mode 100755
index 00000000..16b5d7dc
--- /dev/null
+++ b/src/addon/www/config/easymodes/hb_sw_tp_ch_master.tcl
@@ -0,0 +1,230 @@
+#!/bin/tclsh
+
+#Kanal-EasyMode!
+
+source [file join $env(DOCUMENT_ROOT) config/easymodes/em_common.tcl]
+source [file join $env(DOCUMENT_ROOT) config/easymodes/etc/uiElements.tcl]
+source [file join $env(DOCUMENT_ROOT) config/easymodes/etc/options.tcl]
+
+#Namen der EasyModes tauchen nicht mehr auf. Der Durchgngkeit werden sie hier noch definiert.
+set PROFILES_MAP(0) "Experte"
+set PROFILES_MAP(1) "TheOneAndOnlyEasyMode"
+
+proc getCheckBox {type param value prn} {
+ set checked ""
+ if { $value } then { set checked "checked=\"checked\"" }
+ set s ""
+ return $s
+}
+
+proc getMinValue {param} {
+ global psDescr
+ upvar psDescr descr
+ array_clear param_descr
+ array set param_descr $descr($param)
+ set min [format {%1.1f} $param_descr(MIN)]
+ return "$min"
+}
+
+proc getMaxValue {param} {
+ global psDescr
+ upvar psDescr descr
+ array_clear param_descr
+ array set param_descr $descr($param)
+ set max [format {%1.1f} $param_descr(MAX)]
+ return "$max"
+}
+
+proc getTextField {type param value prn} {
+ global psDescr
+ set elemId 'separate_$type\_$prn'
+ # Limit float to 2 decimal places
+ if {[llength [split $value "."]] == 2} {
+ set value [format {%1.2f} $value]
+ }
+ set s ""
+
+
+ return $s
+}
+
+proc getUnit {param} {
+ global psDescr
+ upvar psDescr descr
+ array_clear param_descr
+ array set param_descr $descr($param)
+ set unit $param_descr(UNIT)
+
+ if {$unit == "minutes"} {
+ set unit "\${lblMinutes}"
+ }
+
+ if {$unit == "K"} {
+ set unit "°C"
+ }
+
+ return "$unit"
+}
+
+proc getMinMaxValueDescr {param} {
+ global psDescr
+ upvar psDescr descr
+ array_clear param_descr
+ array set param_descr $descr($param)
+ set min $param_descr(MIN)
+ set max $param_descr(MAX)
+
+ # Limit float to 2 decimal places
+ if {[llength [split $min "."]] == 2} {
+ set min [format {%1.2f} $min]
+ set max [format {%1.2f} $max]
+ }
+ return "($min - $max)"
+}
+
+proc getHelpIcon {topic x y} {
+ set ret ""
+ return $ret
+}
+
+proc set_htmlParams {iface address pps pps_descr special_input_id peer_type} {
+ global env iface_url psDescr ch_ps_descr
+
+ puts ""
+
+ upvar PROFILES_MAP PROFILES_MAP
+ upvar HTML_PARAMS HTML_PARAMS
+ upvar PROFILE_PNAME PROFILE_PNAME
+ upvar $pps ps
+ upvar $pps_descr ps_descr
+
+ #upvar PROFILE_0 PROFILE_0
+ upvar PROFILE_1 PROFILE_1
+
+ set CHANNEL "CHANNEL"
+
+ set ch [lindex [split $special_input_id _] 1]
+
+
+ set hlpBoxWidth 450
+ set hlpBoxHeight 160
+
+ array set psDescr [xmlrpc $iface_url($iface) getParamsetDescription [list string $address] [list string MASTER]]
+
+ puts ""
+
+
+
+ ## Wochenprogramm ##
+
+ append HTML_PARAMS(separate_1) ""
+
+ foreach day {SATURDAY SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY} {
+ append HTML_PARAMS(separate_1) " "
+ }
+ append HTML_PARAMS(separate_1) " "
+
+ append HTML_PARAMS(separate_1) ""
+
+ ## Ende Wochenprogramm ##
+
+
+ #append HTML_PARAMS(separate_0) [cmd_link_paramset $iface $address MASTER MASTER CHANNEL]
+ append HTML_PARAMS(separate_1) ""
+ append HTML_PARAMS(separate_1) ""
+ append HTML_PARAMS(separate_1) ""
+
+ append HTML_PARAMS(separate_1) " "
+
+ append HTML_PARAMS(separate_1) ""
+ append HTML_PARAMS(separate_1) " "
+
+
+}
+
+constructor
diff --git a/src/addon/www/config/easymodes/hb_sw_tp_ch_master_intkey.tcl b/src/addon/www/config/easymodes/hb_sw_tp_ch_master_intkey.tcl
new file mode 100755
index 00000000..32df7897
--- /dev/null
+++ b/src/addon/www/config/easymodes/hb_sw_tp_ch_master_intkey.tcl
@@ -0,0 +1,16 @@
+#!/bin/tclsh
+
+# dev_descr(TYPE) enthaelt den Sendertype (KEY, WATERDETECTIONSENSOR usw.)
+
+global env dev_descr internalKey
+
+set internalKey 1
+
+set addr $dev_descr(ADDRESS)
+
+puts ""
+puts ""
+
+source [file join $env(DOCUMENT_ROOT) config/easymodes/SWITCH/SWITCH.tcl]
+
+
diff --git a/src/addon/www/config/img/devices/250/hb-lc-sw1-tp.png b/src/addon/www/config/img/devices/250/hb-lc-sw1-tp.png
new file mode 100755
index 00000000..78fc7383
Binary files /dev/null and b/src/addon/www/config/img/devices/250/hb-lc-sw1-tp.png differ
diff --git a/src/addon/www/config/img/devices/250/hb-lc-sw2-tp.png b/src/addon/www/config/img/devices/250/hb-lc-sw2-tp.png
new file mode 100755
index 00000000..ea8b531a
Binary files /dev/null and b/src/addon/www/config/img/devices/250/hb-lc-sw2-tp.png differ
diff --git a/src/addon/www/config/img/devices/250/hb-lc-sw4-tp.png b/src/addon/www/config/img/devices/250/hb-lc-sw4-tp.png
new file mode 100755
index 00000000..81cc03a8
Binary files /dev/null and b/src/addon/www/config/img/devices/250/hb-lc-sw4-tp.png differ
diff --git a/src/addon/www/config/img/devices/250/hb-lc-swx-tp.png b/src/addon/www/config/img/devices/250/hb-lc-swx-tp.png
new file mode 100755
index 00000000..96a52649
Binary files /dev/null and b/src/addon/www/config/img/devices/250/hb-lc-swx-tp.png differ
diff --git a/src/addon/www/config/img/devices/50/hb-lc-sw1-tp_thumb.png b/src/addon/www/config/img/devices/50/hb-lc-sw1-tp_thumb.png
new file mode 100755
index 00000000..f195a1ac
Binary files /dev/null and b/src/addon/www/config/img/devices/50/hb-lc-sw1-tp_thumb.png differ
diff --git a/src/addon/www/config/img/devices/50/hb-lc-sw2-tp_thumb.png b/src/addon/www/config/img/devices/50/hb-lc-sw2-tp_thumb.png
new file mode 100755
index 00000000..8255758c
Binary files /dev/null and b/src/addon/www/config/img/devices/50/hb-lc-sw2-tp_thumb.png differ
diff --git a/src/addon/www/config/img/devices/50/hb-lc-sw4-tp_thumb.png b/src/addon/www/config/img/devices/50/hb-lc-sw4-tp_thumb.png
new file mode 100755
index 00000000..77d32bea
Binary files /dev/null and b/src/addon/www/config/img/devices/50/hb-lc-sw4-tp_thumb.png differ
diff --git a/src/addon/www/config/img/devices/50/hb-lc-swx-tp_thumb.png b/src/addon/www/config/img/devices/50/hb-lc-swx-tp_thumb.png
new file mode 100755
index 00000000..f195a1ac
Binary files /dev/null and b/src/addon/www/config/img/devices/50/hb-lc-swx-tp_thumb.png differ
diff --git a/src/addon/www/rega/pages/msg/setHBOURGBWLEDFXMode.htm b/src/addon/www/rega/pages/msg/setHBOURGBWLEDFXMode.htm
index ed2795f8..59bee2ae 100755
--- a/src/addon/www/rega/pages/msg/setHBOURGBWLEDFXMode.htm
+++ b/src/addon/www/rega/pages/msg/setHBOURGBWLEDFXMode.htm
@@ -1,6 +1,8 @@
|