Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit dc562a2

Browse files
zerog2kJens Jensen
and
Jens Jensen
authored
Improve logparser compatibility (mysensors#1469)
Co-authored-by: Jens Jensen <jjensen@verizonmedia.com>
1 parent 05fe075 commit dc562a2

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

‎Logparser/logparser.html‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<link rel="stylesheet" href="logparser.css" />
66
</head>
77
<body>
8-
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
9-
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
8+
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js"></script>
9+
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.12.0/underscore-min.js"></script>
1010
<div id="parser">
1111
<h4>Paste log from gateway or node here:</h4>
1212
<textarea class="form-control" @change="parse" rows="10" v-model="source"></textarea>
@@ -25,8 +25,8 @@ <h4>Human readable output:</h4>
2525
<th>Payload</th>
2626
<th>Description</th>
2727
</tr>
28-
<tr v-for="r in parsed">
29-
<td v-for="c in r" v-html="c"></td>
28+
<tr style="font-family: monospace;" v-for="row in parsed">
29+
<td v-for="col in row" v-html="col"></td>
3030
</tr>
3131
</table>
3232
</div>

‎Logparser/logparser.js‎

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ var types = {
220220

221221
//mysgw: Client 0: 0;0;3;0;18;PING
222222
var rprefix = "(?:\\d+ )?(?:mysgw: )?(?:Client 0: )?";
223+
var prefilter = /(?=[!?]?(MCO|TSM|TSF|THA|SGN))(?<result>.*)/;
223224
var match = [
224225

225226
// MySensors core
@@ -460,8 +461,9 @@ var match = [
460461

461462
// Init regexes
462463
for (var i=0, len=match.length;i<len; i++) {
463-
match[i].re = new RegExp("^" + rprefix+match[i].re);
464+
match[i].re = new RegExp("^" + match[i].re);
464465
}
466+
465467
var stripPrefix = new RegExp("^" + rprefix + "(.*)");
466468

467469
function getQueryVariable(variable)
@@ -538,18 +540,25 @@ new Vue({
538540
var t = types[this.selector(cmd)]
539541
return t !== undefined ? t[type] || "Undefined" : "Undefined";
540542
},
541-
match: function(msg) {
543+
decodeLog: function(msg) {
542544
var self = this;
543545
var found = false;
546+
547+
filtered = msg.match(prefilter);
548+
if (filtered) {
549+
msg = filtered.groups.result;
550+
} else {
551+
return;
552+
}
544553
for (var i=0, len=match.length;!found && i<len; i++) {
545554
var r = match[i];
546555
if (r.re.test(msg)) {
547556
msg = msg.replace(r.re, r.d);
557+
// lookup and replace numerical constants with their symbols
548558
msg = msg.replace(/{command:(\d+)}/g, function(match, m1) { return types.command[m1] });
549559
msg = msg.replace(/{pt:(\d+)}/g, function(match, m1) { return types.payloadtype[m1] });
550-
return msg.replace(/{type:(\d+):(\d+)}/g, function(match, cmd, type) {
551-
return self.type(cmd, type);
552-
});
560+
msg = msg.replace(/{type:(\d+):(\d+)}/g, function(match, cmd, type) { return self.type(cmd, type) });
561+
return msg;
553562
}
554563
}
555564
},
@@ -558,17 +567,17 @@ new Vue({
558567
var self = this;
559568
var rows = this.source.split("\n");
560569
this.parsed = _.map(rows, function(r) {
561-
//var p = r.split(";");
570+
// attempt decode of serial protocol (e.g. `12;6;0;0;3;My Light\n`)
562571
var p = splitWithTail(r, ";", 6);
563572
if (p.length !== 6) {
564-
vardesc=self.match(r);
565-
573+
// probably not serial protocol, maybe debug log?
574+
vardesc=self.decodeLog(r);
566575
return ["","","","",desc?"":"Unknown", r, desc];
567576
}
568577
var sel = self.selector(p[2]);
569578
var desc = "";
570579
if (p[2] == "3" && p[4] == "9") {
571-
desc = self.match(p[5]);
580+
desc = self.decodeLog(p[5]);
572581

573582
}
574583
var node = stripPrefix.exec(p[0]);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /