@@ -220,6 +220,7 @@ var types = {
220220
221221//mysgw: Client 0: 0;0;3;0;18;PING
222222var rprefix = "(?:\\d+ )?(?:mysgw: )?(?:Client 0: )?" ;
223+ var prefilter = / (? = [ ! ? ] ? ( M C O | T S M | T S F | T H A | S G N ) ) (?< result > .* ) / ;
223224var match = [
224225
225226 // MySensors core
@@ -460,8 +461,9 @@ var match = [
460461
461462// Init regexes
462463for ( 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+ 465467var stripPrefix = new RegExp ( "^" + rprefix + "(.*)" ) ;
466468
467469function 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 ( / { c o m m a n d : ( \d + ) } / g, function ( match , m1 ) { return types . command [ m1 ] } ) ;
549559 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 ;
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- var desc = self . match ( r ) ;
565- 573+ // probably not serial protocol, maybe debug log?
574+ var desc = 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