Javascript-based gcode parser for grbl
npm install grbl-parser 
Grbl machine parser library written in javascript
Provides an event-based callbacks to parse any strings grbl may output.
Supports Grbl 0.9, 1.0, and 1.1 (untested with grbl 0.8)
``bash`
npm install grbl-parser --save
`javascript
var GrblParser = require("grbl-parser")
var parser = new GrblParser()
var myCallback = function(parsedData) {
// do stuff with parsed data (see example status output in Examples section)
}
var myString = "
parser.addListener("status", myCallback) // bind myCallback to grbl status reports
parser.parseData(myString)
`
Use these to bind to specific message types
`javascript`
"status",
"success",
"initialize",
"alarm",
"error",
"setting",
"feedbackMessage",
"buildVersion",
"buildOptions",
"gcodeState",
"helpMessage",
"gcodeSystem",
"probeResult",
"echoMessage",
"gcodeStartup",
"unknown"
You can get all message types:
`javascript`
console.log(new GrblParser().messageTypes)
// [ status: "status", alarm: "alarm", ... ]
`javascript`
parser.addListener("status", myStatusCallback)
parser.addListener("alarm", myAlarmCallback)
parser.addToAllListeners(myEverythingCallback)
`javascript
parser.parseData("
{
data: {
machinePosition: {
x: 0,
y: 0,
z: 0
},
buffer: {
availableBlocks: 15,
availableRXBytes: 128
},
realtimeFeed: {
realtimeFeedrate: 675.5,
realtimeSpindle: 24000
},
workcoordinateOffset: {
x: 0,
y: -5.2,
z: 306.351
},
status: {
code: 0,
message: "Hold complete. Ready to resume.",
state: 'Hold'
},
override: {
feeds: 120,
rapids: 100,
spindle: 100
},
accessories: {
flood: true,
mist: true,
spindleDirection: 'clockwise'
}
},
type: "status",
input: "
}
`
`javascript
parser.parseData("error:20")
{
data: {
code: "20",
message: "Unsupported or invalid g-code command found in block."
},
input: "error:20",
type: "error"
}
``