function processModulePacket(state, packet){ //process the packet data. //break; //console.log(packet) //try { var objPacket = JSON.parse(packet); var mObj = Object.assign({}, state.moduleData); for(var packetType in objPacket) { //if (packetType == "2") { for(var gateway in objPacket[packetType]) { //console.log("gateway") gatewayID = Object.keys(objPacket[packetType]); for(var module in objPacket[packetType][gateway]) { //console.log("module") for(var feedType in objPacket[packetType][gateway][module]) { //console.log("feedtype") for(var feedID in objPacket[packetType][gateway][module][feedType]) { //console.log("feedid" + feedID) //feedID = Object.keys(objPacket[packetType][gateway][module][feedType]); moduleID = Object.keys(objPacket[packetType][gateway][module]); if (Object.keys(objPacket[packetType][gateway][module]) == state.moduleUSBID) { switch (feedID) { //case "129": case "129": // Alarm 129 for(var alarms in objPacket[packetType][gateway][module][feedType][feedID]) { //console.log("loop 7") severityNumber = 0; severityID = 0; alarmString = ''; var alarmCounter = 0 for(var alarm in objPacket[packetType][gateway][module][feedType][feedID]) { //console.log("loop 8") // Get alarm severity. severityID = JSON.stringify(objPacket[packetType][gateway][module][feedType][feedID][alarm].severityID); alarmID = alarm; alarmString = objPacket[packetType][gateway][module][feedType][feedID][alarm].string; severityNumber = lookupSeverityNumber(severityID) mObj.key = "1"; alarmFound = false; // Check if this module has alarms. if (JSON.stringify(mObj.alarms) == undefined) { // add to the array if the severity is > 1. if ( severityNumber > 1) { var alarmData = []; alarmData.push({ "alarmID" : alarmID, "severityNumber" : severityNumber, "severityID" : severityID, "string" : alarmString, }); alarmFound = true; mObj.alarms = alarmData; state.updateModuleFlatlist = Math.floor(Math.random() * 1000) + 1; //state.updateLEDFlatlist = Math.floor(Math.random() * 1000) + 1; } } else { for(var i3 = 0; i3 <(Object.keys(mObj.alarms).length); i3++) { // Iterate through the alarms for the module and try to find the current alarm from packet. if (JSON.stringify(mObj.alarms[i3].alarmID) === JSON.stringify(alarmID)){ alarmFound = true; mObj.alarms[i3].severityNumber = severityNumber; mObj.alarms[i3].severityID = severityID; } } if (alarmFound == false) { // Add a new alarm. if (severityNumber > 1) { mObj.alarms.push({ "alarmID" : alarmID, "severityNumber" : severityNumber, "severityID" : severityID, "string" : alarmString, }); } } } instrumentFound = false // Reset the alarm severity to what was delivered in the packet. severityID = JSON.stringify(objPacket[packetType][gateway][module][feedType][feedID][alarm].severityID) //console.log(mObj.tabs) // Process the alarm for the alarms widget. severityNumber = 0; severityID = 0; alarmString = ''; } } break; // Status case "136": for(var machineState in objPacket[packetType][gateway][module][feedType][feedID]) { moduleID = Object.keys(objPacket[packetType][gateway][module]); // Feed 130 machineStatus = Object.values(objPacket[packetType][gateway][module][feedType][feedID])[0] mObj.key = "1"; // Update the status. mObj.module.machineState = lookupMachineStateNew(machineStatus) mObj.module.state = mObj.module.machineState mObj.module.color = getStatusColor(mObj.module.state); //console.log( mObj.module.status) //state.updateModuleFlatlist = Math.floor(Math.random() * 1000) + 1; //state.updateLEDFlatlist = Math.floor(Math.random() * 1000) + 1; } break; case "130": // Update state machines for(var machineState in objPacket[packetType][gateway][module][feedType][feedID]) { // machineStateID = parseInt(Object.keys(objPacket[packetType][gateway][module][feedType][feedID])[0]) machineStatus = objPacket[packetType][gateway][module][feedType][feedID][machineState]; // Only process 130 if 130 is sent through with other packets. //if (machineState == "130") { // Loop through the packets keys (state id's) and store the text against mObj.key = "1"; if (machineState < 6) { // Set the stateMachines in Module data source. if (mObj.stateMachines != undefined) { // Loop through stateMachines and update the correct state. //debugger for (var machineStateItem in mObj.stateMachines){ //console.log("loop 18") if (mObj.stateMachines[machineStateItem].id == Object.keys(objPacket[packetType][gateway][module][feedType][feedID])[0] ) { mObj.stateMachines[machineStateItem].state = machineStatus; } } } } //} } break; // Instruments case "131": for(var key in objPacket[packetType][gateway][module][feedType][feedID]) { //console.log("loop 23") instrumentFound = false; //for (var key in objPacket[packetType][gateway][module][feedType][machineState]){ // console.log("loop 24") if (mObj.tabs != undefined) { for(var i3 = 0; i3 <(Object.keys(mObj.tabs).length); i3++) { // check selected tab if (mObj.tabs[i3].id == state.currentTabId) { if (instrumentFound == true) { break; } for(var i4 = 0; i4 <(Object.keys(mObj.tabs[i3].groups).length); i4++) { //console.log("loop 26") if (mObj.tabs[i3].groups[i4].type === "instruments") { for(var i5 = 0; i5 <(Object.keys(mObj.tabs[i3].groups[i4].items).length); i5++) { //console.log("loop 27") // if the instrument ID matches the packet, then // push data to the instrument. if (mObj.tabs[i3].groups[i4].items[i5].id == key) { // Append data if array exists. // Set y value for chart. if (typeof objPacket[packetType][gateway][module][feedType][feedID][key].value === 'string') { yval = 0 } else { yval = objPacket[packetType][gateway][module][feedType][feedID][key].value } if (mObj.tabs[i3].groups[i4].items[i5].data != undefined){ mObj.tabs[i3].groups[i4].items[i5].data.unshift({ y : yval, x : new Date().toLocaleString(), "value" : objPacket[packetType][gateway][module][feedType][feedID][key].value, "units" : objPacket[packetType][gateway][module][feedType][feedID][key].units, "time" : new Date().toLocaleString(), }); instrumentFound = true; // Restrict number of values stored for realtime data to 10 data points. mObj.tabs[i3].groups[i4].items[i5].data = mObj.tabs[i3].groups[i4].items[i5].data.slice(0, 10) } else { var instrumentData = []; instrumentData.push({ y : yval, x : new Date().toLocaleString(), "value" : objPacket[packetType][gateway][module][feedType][feedID][key].value, "units" : objPacket[packetType][gateway][module][feedType][feedID][key].units, "time" : new Date().toLocaleString(), }); instrumentFound = true; mObj.tabs[i3].groups[i4].items[i5].data = instrumentData; } //state.updateModuleFlatlist = Math.floor(Math.random() * 1000) + 1; //state.updateLEDFlatlist = Math.floor(Math.random() * 1000) + 1; break; } if (instrumentFound == true) { break } } if (instrumentFound == true) { break } } if (instrumentFound == true) { break } } if (instrumentFound == true) { break } } } if (instrumentFound == true) { break } } //} //} } break; // Inputs case "133": //for(var machineState in objPacket[packetType][gateway][module][feedType][feedID]) { //console.log("loop 28") instrumentFound = false; for (var key in objPacket[packetType][gateway][module][feedType][feedID]){ //console.log("loop 29") //for (var i9 = 0; i9 < (Object.keys(objPacket[packetType][gateway][module][feedType][machineState]).length); i9++) { if (mObj.tabs != undefined) { for(var i3 = 0; i3 <(Object.keys(mObj.tabs).length); i3++) { if (mObj.tabs[i3].id == state.currentTabId) { // console.log("loop 30") if (instrumentFound == true) { break; } for(var i4 = 0; i4 <(Object.keys(mObj.tabs[i3].groups).length); i4++) { //console.log("loop 31") switch (mObj.tabs[i3].groups[i4].type) { case "moduleInputs": for(var i5 = 0; i5 <(Object.keys(mObj.tabs[i3].groups[i4].items).length); i5++) { // if the instrument ID matches the packet, then // push data to the instrument. if (mObj.tabs[i3].groups[i4].items[i5].id == key) { // Append data if array exists. // Rename input mObj.tabs[i3].groups[i4].items[i5].name = objPacket[packetType][gateway][module][feedType][feedID][key].shortName + ': ' + objPacket[packetType][gateway][module][feedType][feedID][key].string if (objPacket[packetType][gateway][module][feedType][feedID][key].active == true) { var strActive = true } else { var strActive = false } if (objPacket[packetType][gateway][module][feedType][feedID][key].defaultState == true) { if (objPacket[packetType][gateway][module][feedType][feedID][key].active == false) { var ioDisplay = false yval = 0 } else { var ioDisplay = true yval = 1 } } else { if (objPacket[packetType][gateway][module][feedType][feedID][key].active == false) { var ioDisplay = true yval = 1 } else { var ioDisplay = false yval = 0 } } if (mObj.tabs[i3].groups[i4].items[i5].data != undefined){ mObj.tabs[i3].groups[i4].items[i5].data.unshift({ y : yval, x : new Date().toLocaleString(), "value" : strActive, "units" : ioDisplay, "time" : new Date().toLocaleString(), }); // Restrict number of values stored for realtime data to 10 data points. mObj.tabs[i3].groups[i4].items[i5].data = mObj.tabs[i3].groups[i4].items[i5].data.slice(0, 10) } else { var instrumentData = []; instrumentData.push({ y : yval, x : new Date().toLocaleString(), "value" : strActive, "units" : ioDisplay, "time" : new Date().toLocaleString(), }); instrumentFound = true; mObj.tabs[i3].groups[i4].items[i5].data = instrumentData; } //state.updateModuleFlatlist = Math.floor(Math.random() * 1000) + 1; //state.updateLEDFlatlist = Math.floor(Math.random() * 1000) + 1; break; } } break; default: break; } ////console.log(mObj) } } } } //} } //} break; // Outputs case "134": //for(var machineState in objPacket[packetType][gateway][module][feedType]) { //console.log("loop 32") instrumentFound = false; for (var key in objPacket[packetType][gateway][module][feedType][feedID]){ if (mObj.tabs != undefined) { for(var i3 = 0; i3 <(Object.keys(mObj.tabs).length); i3++) { if (mObj.tabs[i3].id == state.currentTabId) { //console.log("loop 34") if (instrumentFound == true) { break; } for(var i4 = 0; i4 <(Object.keys(mObj.tabs[i3].groups).length); i4++) { //console.log("loop 35") switch (mObj.tabs[i3].groups[i4].type) { case "moduleOutputs": for(var i5 = 0; i5 <(Object.keys(mObj.tabs[i3].groups[i4].items).length); i5++) { //console.log("loop 36") // if the instrument ID matches the packet, then // push data to the instrument. if (mObj.tabs[i3].groups[i4].items[i5].id == key) { // Append data if array exists. // Rename input mObj.tabs[i3].groups[i4].items[i5].name = objPacket[packetType][gateway][module][feedType][feedID][key].shortName + ': ' + objPacket[packetType][gateway][module][feedType][feedID][key].string if (objPacket[packetType][gateway][module][feedType][feedID][key].active == true) { var strActive = true } else { var strActive = false } if (objPacket[packetType][gateway][module][feedType][feedID][key].defaultState == true) { if (objPacket[packetType][gateway][module][feedType][feedID][key].active == false) { var ioDisplay = false yval = 0 } else { var ioDisplay = true yval = 1 } } else { if (objPacket[packetType][gateway][module][feedType][feedID][key].active == false) { var ioDisplay = true yval = 1 } else { var ioDisplay = false yval = 0 } } if (mObj.tabs[i3].groups[i4].items[i5].data != undefined){ mObj.tabs[i3].groups[i4].items[i5].data.unshift({ y : yval, x : new Date().toLocaleString(), "value" : strActive, "units" : ioDisplay, "time" : new Date().toLocaleString(), }); // Restrict number of values stored for realtime data to 10 data points. mObj.tabs[i3].groups[i4].items[i5].data = mObj.tabs[i3].groups[i4].items[i5].data.slice(0, 10) } else { var instrumentData = []; instrumentData.push({ y : yval, x : new Date().toLocaleString(), "value" : strActive, "units" : ioDisplay, "time" : new Date().toLocaleString(), }); instrumentFound = true; mObj.tabs[i3].groups[i4].items[i5].data = instrumentData; } //state.updateModuleFlatlist = Math.floor(Math.random() * 1000) + 1; //state.updateLEDFlatlist = Math.floor(Math.random() * 1000) + 1; break; } } break; default: break; } } } } } } //} break; } } } } } } //} } state.updateModuleFlatlist = Math.floor(Math.random() * 1000) + 1; state.updateLEDFlatlist = Math.floor(Math.random() * 1000) + 1; return mObj; //state.moduleData = Object.assign({}, mObj); //console.log("state.moduleData" + state.moduleData) //} catch(err) { // console.log(err) //} }