@@ -220,6 +220,7 @@ var types = {
220
220
221
221
//mysgw: Client 0: 0;0;3;0;18;PING
222
222
var rprefix = "(?:\\d+ )?(?:mysgw: )?(?:Client 0: )?" ;
223
+ var prefilter = / (? = [ ! ? ] ? ( M C O | T S M | T S F | T H A | S G N ) ) (?< result > .* ) / ;
223
224
var match = [
224
225
225
226
// MySensors core
@@ -460,8 +461,9 @@ var match = [
460
461
461
462
// Init regexes
462
463
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 ) ;
464
465
}
466
+
465
467
var stripPrefix = new RegExp ( "^" + rprefix + "(.*)" ) ;
466
468
467
469
function getQueryVariable ( variable )
@@ -538,18 +540,25 @@ new Vue({
538
540
var t = types [ this . selector ( cmd ) ]
539
541
return t !== undefined ? t [ type ] || "Undefined" : "Undefined" ;
540
542
} ,
541
- match : function ( msg ) {
543
+ decodeLog : function ( msg ) {
542
544
var self = this ;
543
545
var found = false ;
546
+
547
+ filtered = msg . match ( prefilter ) ;
548
+ if ( filtered ) {
549
+ msg = filtered . groups . result ;
550
+ } else {
551
+ return ;
552
+ }
544
553
for ( var i = 0 , len = match . length ; ! found && i < len ; i ++ ) {
545
554
var r = match [ i ] ;
546
555
if ( r . re . test ( msg ) ) {
547
556
msg = msg . replace ( r . re , r . d ) ;
557
+ // lookup and replace numerical constants with their symbols
548
558
msg = msg . replace ( / { c o m m a n d : ( \d + ) } / g, function ( match , m1 ) { return types . command [ m1 ] } ) ;
549
559
msg = msg . replace ( / { p t : ( \d + ) } / g, function ( match , m1 ) { return types . payloadtype [ m1 ] } ) ;
550
- return msg . replace ( / { t y p e : ( \d + ) : ( \d + ) } / g, function ( match , cmd , type ) {
551
- return self . type ( cmd , type ) ;
552
- } ) ;
560
+ msg = msg . replace ( / { t y p e : ( \d + ) : ( \d + ) } / g, function ( match , cmd , type ) { return self . type ( cmd , type ) } ) ;
561
+ return msg ;
553
562
}
554
563
}
555
564
} ,
@@ -558,17 +567,17 @@ new Vue({
558
567
var self = this ;
559
568
var rows = this . source . split ( "\n" ) ;
560
569
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`)
562
571
var p = splitWithTail ( r , ";" , 6 ) ;
563
572
if ( p . length !== 6 ) {
564
- var desc = self . match ( r ) ;
565
-
573
+ // probably not serial protocol, maybe debug log?
574
+ var desc = self . decodeLog ( r ) ;
566
575
return [ "" , "" , "" , "" , desc ?"" :"Unknown" , r , desc ] ;
567
576
}
568
577
var sel = self . selector ( p [ 2 ] ) ;
569
578
var desc = "" ;
570
579
if ( p [ 2 ] == "3" && p [ 4 ] == "9" ) {
571
- desc = self . match ( p [ 5 ] ) ;
580
+ desc = self . decodeLog ( p [ 5 ] ) ;
572
581
573
582
}
574
583
var node = stripPrefix . exec ( p [ 0 ] ) ;
0 commit comments