diff --git a/fhem/www/pgm2/console.js b/fhem/www/pgm2/console.js
index 87099056f..b0611b41d 100644
--- a/fhem/www/pgm2/console.js
+++ b/fhem/www/pgm2/console.js
@@ -175,7 +175,22 @@ function
consAddRegexpPart()
{
$("").insertAfter("button#eventReset");
+ "Create/Modify Device").insertAfter("button#eventReset");
+
+ var knownTypes = {
+ "notify": { modify: "set modDev addRegexpPart evtDev event",
+ createArg: "evtDev:event {}" },
+ "FileLog":{ modify: "set modDev addRegexpPart evtDev event",
+ createArg: "./log/modDev.log evtDev:event" },
+ "watchdog":{createArg: "evtDev:event 00:15 SAME {}" },
+ "sequence":{createArg: "evtDev:event 00:15 evtDev:event" }
+ };
+
+ var modDev, devList, devHash = {};
+ var creates = [];
+ for(var t in knownTypes)
+ if(knownTypes[t].createArg)
+ creates.push(t);
$("button#addRegexpPart").click(function(){
// get selection, build regexp from event
@@ -187,50 +202,95 @@ consAddRegexpPart()
var ret = txt.match(re);
if(!ret)
return FW_okDialog(hlp);
- var dev=ret[3], evt=ret[4];
- evt = evt.replace(/\s/g, ".");
- re1 = dev+" "+evt;
- evt = evt.replace(/\b-?\d*\.?\d+\b/g, '.*').replace(/\.\* \.\*/g, '.*');
- re2 = dev+" "+evt;
- // build dialog
+ var evtDev=ret[3];
+ var evt1 = ret[4].replace(/\s/g, ".")
+ .replace(/[\^\$\[\]\(\)\\]/g, function(s){return"\\"+s});
+ var evt2 = evt1.replace(/\b-?\d*\.?\d+\b/g,'.*').replace(/\.\* \.\*/g,'.*');
+
+ // build the dialog
var txt = '\n';
- txt += "Extend the regular expression of the device
";
- txt += "
";
- txt += "
"+
- ""+
- "
";
- if(re1 != re2)
- txt += ""+
- ""+
- "
";
- $('body').append(''+txt+'
');
- $('#addReP').dialog(
+ var inputPrf=""+
+ inputPrf+"'defmod' id='mod'/>
"
+ txt += "";
+ txt += "
";
+
+ if(evt1 != evt2) {
+ txt += ""+inputPrf+"'evtType' id='rdEx' checked/>"+
+ "
";
+ txt += ""+inputPrf+"'evtType' id='rdNum'/>"+
+ "
";
+ }
+ txt += " ";
+
+ $('body').append('
'+txt+'
');
+ $('#evtCoM').dialog(
{ modal:true, closeOnEscape:true, width:"auto",
- close:function(){ $('#addReP').remove(); },
+ close:function(){ $('#evtCoM').remove(); },
buttons:[
{ text:"Cancel", click:function(){ $(this).dialog('close'); }},
{ text:"OK", click:function(){
- var dev = $("select#evtDev").val();
- var cmd = "set "+dev+" addRegexpPart "+
- ($('input[name=evtType]:checked').attr("id")=='rdEx' ? re1 : re2);
- FW_cmd(FW_root+"?cmd="+cmd+"&XHR=1");
+ FW_cmd(FW_root+"?cmd="+$("#evtCoM #cmd").html()+"&XHR=1");
$(this).dialog('close');
- location = FW_root+'?detail='+dev;
- }}]
- });
+ location = FW_root+'?detail='+modDev;
+ }}],
+ open:function(){
+ $("#evtCoM #newType").val("notify");
+ $("#evtCoM input,#evtCoM select").change(optChanged);
+ }
+ });
+
+ function
+ optChanged()
+ {
+ var event = evt1;
+ if(evt1 != evt2 && $("#evtCoM #rdNum").is(":checked"))
+ event = evt2;
+ var cmd;
+
+ if($("#evtCoM #def").is(":checked")) { // define
+ $("#evtCoM #newType").show();
+ $("#evtCoM #modDev").hide();
+ var type = $("#evtCoM #newType").val(), num=1;
+ var nRe = new RegExp(evtDev+"_"+type+"_(\\d+)");
+ for(var i1=0; i1
= num)
+ num = parseInt(m[1])+1;
+ }
+ modDev = evtDev+"_"+type+"_"+num;
+ cmd = "define "+modDev+" "+type+" "+knownTypes[type].createArg;
+
+ } else {
+ $("#evtCoM #newType").hide();
+ $("#evtCoM #modDev").show();
+ modDev = $("#evtCoM #modDev").val();
+ cmd = knownTypes[devHash[modDev].Internals.TYPE].modify;
- FW_cmd(FW_root+"?cmd=jsonlist2&XHR=1", function(data){
- var devList = JSON.parse(data);
- for(var i1=0; i1= 0)
- $("select#evtDev").append('');
}
+
+ $("#evtCoM #cmd").text(cmd
+ .replace(/modDev/g,modDev)
+ .replace(/evtDev/g,evtDev)
+ .replace(/event/g,event));
+ }
+
+ FW_cmd(FW_root+"?cmd=jsonlist2 .* TYPE&XHR=1", function(data){
+ devList = JSON.parse(data).Results;
+ for(var i1=0; i1'+dev.Name+'');
+ devHash[dev.Name] = dev;
+ }
+ optChanged();
});
});
}