From 2a4dadf7146a127f5467588cbda42a83b09eaf78 Mon Sep 17 00:00:00 2001 From: MyungHwa Hong Date: Fri, 25 Oct 2024 13:12:59 +0900 Subject: [PATCH 1/8] Add new Hardware(IOT SmartFarm) --- app/modules/iotsmartfarm.js | 318 ++++++++++++++++++++++++++++++++++ app/modules/iotsmartfarm.json | 22 +++ app/modules/iotsmartfarm.png | Bin 0 -> 77308 bytes 3 files changed, 340 insertions(+) create mode 100644 app/modules/iotsmartfarm.js create mode 100644 app/modules/iotsmartfarm.json create mode 100644 app/modules/iotsmartfarm.png diff --git a/app/modules/iotsmartfarm.js b/app/modules/iotsmartfarm.js new file mode 100644 index 000000000..be89615b8 --- /dev/null +++ b/app/modules/iotsmartfarm.js @@ -0,0 +1,318 @@ +function Module() { + this.tx_d = new Array(22); + this.rx_d = new Array(22); + this.timeCheck = null; + + this.sensordata = { + hum: 0, + heatertemp: 0, + temp: 0, + soil: 0, + cds: 0, + switch1: 0, + switch2: 0, + switch3: 0 + }; + + + this.motordata = { + control: 0, + led1: 0, + led2: 0, + led3: 0, + led4: 0, + led5: 0, + led6: 0, + display1: 0, + display2: 0, + display3: 0, + display4: 0, + display5: 0, + display6: 0, + display7: 0, + display8: 0, + display9: 0, + isSend: 0, + switch: 0 + }; +} + +var IOTSMARTFARM = { + CONTROL: 'control', + LED1: 'led1', + LED2: 'led2', + LED3: 'led3', + LED4: 'led4', + LED5: 'led5', + LED6: 'led6', + DISPLAY1: 'display1', + DISPLAY2: 'display2', + DISPLAY3: 'display3', + DISPLAY4: 'display4', + DISPLAY5: 'display5', + DISPLAY6: 'display6', + DISPLAY7: 'display7', + DISPLAY8: 'display8', + DISPLAY9: 'display9', + SWITCH: 'switch' +}; + +Module.prototype.init = function(handler, config) { + //console.log(this.motoring.lcdTxt); +}; + +Module.prototype.lostController = function() {} + +Module.prototype.eventController = function(state) { + if (state === 'connected') { + clearInterval(this.sensing); + } +} + +Module.prototype.setSerialPort = function(sp) { + this.sp = sp; +}; + + +Module.prototype.requestInitialData = function(sp) { + var tx_d = this.tx_d; + tx_d[0] = 0x02; // Start + tx_d[1] = 16; // Data length + tx_d[2] = 0; // Checksum + tx_d[3] = 0; // Comm ID H + tx_d[4] = 0; // Comm ID L + tx_d[5] = 0; // Control Field + tx_d[6] = 0; // bit 0~3 : LED 1 R, bit 4~7 : LED 1 G + tx_d[7] = 0; // bit 0~3 : LED 1 B, bit 4~7 : LED 2 R + tx_d[8] = 0; // bit 0~3 : LED 2 G, bit 4~7 : LED 2 B + tx_d[9] = 0; // bit 0~3 : LED 3 R, bit 4~7 : LED 3 G + tx_d[10] = 0; // bit 0~3 : LED 3 B, bit 4~7 : LED 4 R + tx_d[11] = 0; // bit 0~3 : LED 4 G, bit 4~7 : LED 4 B + tx_d[12] = 0; // Display + tx_d[13] = 0; // Display + tx_d[14] = 0; // Display + tx_d[15] = 0; // Display + tx_d[16] = 0; // Display + tx_d[17] = 0; // Display + tx_d[18] = 0; // Display + tx_d[19] = 0; // Display + tx_d[20] = 0; // Display + tx_d[21] = 0x03; // End + return tx_d; +}; + +Module.prototype.checkInitialData = function(data, config) { + return true; +}; + + +// 하드웨어 데이터 처리 +Module.prototype.handleLocalData = function(data) { // data: Native Buffer + var sensordata = this.sensordata; + var motordata = this.motordata; + + for (var i = 0; i < data.length; i++) { + var str = data[i]; + this.rx_d[i] = parseInt(str, 10); + } + + if(this.rx_d[1] == 16) { + if((this.rx_d[17] == 0) && (this.rx_d[18] == 0) && (this.rx_d[19] == 0) && (this.rx_d[20] == 0)) { + if((this.rx_d[0] == 0x02) && (this.rx_d[21] == 0x03)) + { + if((this.rx_d[3] == 0x01) && (this.rx_d[4] == 0x01)) { + sensordata.hum = ((this.rx_d[6] << 8) | this.rx_d[5]) / 100; + sensordata.heatertemp = ((this.rx_d[8] << 8) | this.rx_d[7]) / 100; + sensordata.temp = ((this.rx_d[10] << 8) | this.rx_d[9]) / 100; + sensordata.soil = ((this.rx_d[12] << 8) | this.rx_d[11]); + sensordata.cds = ((this.rx_d[14] << 8) | this.rx_d[13]); + sensordata.switch1 = (this.rx_d[16] & 0x01) == 0x01 ? 1 : 0; + sensordata.switch2 = (this.rx_d[16] & 0x02) == 0x02 ? 1 : 0; + sensordata.switch3 = (this.rx_d[16] & 0x04) == 0x04 ? 1 : 0; + } + } + } + } +}; + +// Web Socket(엔트리)에 전달할 데이터 +Module.prototype.requestRemoteData = function(handler) { + var sensordata = this.sensordata; + for (var key in sensordata) { + handler.write(key, sensordata[key]); + } +}; + +// Web Socket 데이터 처리 +Module.prototype.handleRemoteData = function(handler) { + var motordata = this.motordata; + var newValue; + + if (handler.e(IOTSMARTFARM.CONTROL)) { + newValue = handler.read(IOTSMARTFARM.CONTROL); + + if (motordata.control != newValue) { + motordata.control = newValue; + } + } + + if (handler.e(IOTSMARTFARM.LED1)) { + newValue = handler.read(IOTSMARTFARM.LED1); + + if (motordata.led1 != newValue) { + motordata.led1 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.LED2)) { + newValue = handler.read(IOTSMARTFARM.LED2); + + if (motordata.led2 != newValue) { + motordata.led2 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.LED3)) { + newValue = handler.read(IOTSMARTFARM.LED3); + if (motordata.led3 != newValue) { + motordata.led3 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.LED4)) { + newValue = handler.read(IOTSMARTFARM.LED4); + + if (motordata.led4 != newValue) { + motordata.led4 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.LED5)) { + newValue = handler.read(IOTSMARTFARM.LED5); + + if (motordata.led5 != newValue) { + motordata.led5 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.LED6)) { + newValue = handler.read(IOTSMARTFARM.LED6); + + if (motordata.led6 != newValue) { + motordata.led6 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.DISPLAY1)) { + newValue = handler.read(IOTSMARTFARM.DISPLAY1); + if (motordata.display1 != newValue) { + motordata.display1 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.DISPLAY2)) { + newValue = handler.read(IOTSMARTFARM.DISPLAY2); + + if (motordata.display2 != newValue) { + motordata.display2 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.DISPLAY3)) { + newValue = handler.read(IOTSMARTFARM.DISPLAY3); + + if (motordata.display3 != newValue) { + motordata.display3 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.DISPLAY4)) { + newValue = handler.read(IOTSMARTFARM.DISPLAY4); + + if (motordata.display4 != newValue) { + motordata.display4 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.DISPLAY5)) { + newValue = handler.read(IOTSMARTFARM.DISPLAY5); + + if (motordata.display5 != newValue) { + motordata.display5 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.DISPLAY6)) { + newValue = handler.read(IOTSMARTFARM.DISPLAY6); + + if (motordata.display6 != newValue) { + motordata.display6 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.DISPLAY7)) { + newValue = handler.read(IOTSMARTFARM.DISPLAY7); + + if (motordata.display7 != newValue) { + motordata.display7 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.DISPLAY8)) { + newValue = handler.read(IOTSMARTFARM.DISPLAY8); + + if (motordata.display8 != newValue) { + motordata.display8 = newValue; + } + } + + if (handler.e(IOTSMARTFARM.DISPLAY9)) { + newValue = handler.read(IOTSMARTFARM.DISPLAY9); + + if (motordata.display9 != newValue) { + motordata.display9 = newValue; + } + } +}; + +// 하드웨어에 전달할 데이터 +Module.prototype.requestLocalData = function() { + var motordata = this.motordata; + var tx_d = this.tx_d; + + tx_d[0] = 0x02; // Start + tx_d[1] = 16; // Data length + tx_d[2] = 0; // Checksum + tx_d[3] = 0x01; // Comm ID H + tx_d[4] = 0x01; // Comm ID L + tx_d[5] = motordata.control; // Control Field + tx_d[6] = motordata.led1; // bit 0~3 : LED 1 R, bit 4~7 : LED 1 G + tx_d[7] = motordata.led2; // bit 0~3 : LED 1 B, bit 4~7 : LED 2 R + tx_d[8] = motordata.led3; // bit 0~3 : LED 2 G, bit 4~7 : LED 2 B + tx_d[9] = motordata.led4; // bit 0~3 : LED 3 R, bit 4~7 : LED 3 G + tx_d[10] = motordata.led5; // bit 0~3 : LED 3 B, bit 4~7 : LED 4 R + tx_d[11] = motordata.led6; // bit 0~3 : LED 4 G, bit 4~7 : LED 4 B + tx_d[12] = motordata.display1; // Display + tx_d[13] = motordata.display2; // Display + tx_d[14] = motordata.display3; // Display + tx_d[15] = motordata.display4; // Display + tx_d[16] = motordata.display5; // Display + tx_d[17] = motordata.display6; // Display + tx_d[18] = motordata.display7; // Display + tx_d[19] = motordata.display8; // Display + tx_d[20] = motordata.display9; // Display + tx_d[21] = 0x03; // End + + var checksum = 0; + for(var i = 3; i < 21; i++){ + checksum += tx_d[i]; + } + + tx_d[2] = checksum & 0xFF; + return tx_d; +}; + +Module.prototype.reset = function () { +}; + +module.exports = new Module(); diff --git a/app/modules/iotsmartfarm.json b/app/modules/iotsmartfarm.json new file mode 100644 index 000000000..8f34e8619 --- /dev/null +++ b/app/modules/iotsmartfarm.json @@ -0,0 +1,22 @@ +{ + "id": "180301", + "name": { + "en": "IOT SmartFarm", + "ko": "IOT스마트팜" + }, + "category": "robot", + "platform": ["win32", "darwin"], + "icon": "iotsmartfarm.png", + "module": "iotsmartfarm.js", + "url": "http://saeon.co.kr/", + "email": "saeon@saeon.co.kr", + "reconnect": true, + "selectPort": true, + "hardware": { + "type": "serial", + "control": "slave", + "vendor": "Microsoft", + "duration": 100, + "baudRate": 115200 + } +} diff --git a/app/modules/iotsmartfarm.png b/app/modules/iotsmartfarm.png new file mode 100644 index 0000000000000000000000000000000000000000..25d8294a7707c60113167e63f5682196e7f34d4d GIT binary patch literal 77308 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%0D!U+^`~l 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

WmJJuzvG;e*1NovuF1ZkM9~`>GCdJcM$t3 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 Date: Tue, 12 Nov 2024 10:55:27 +0700 Subject: [PATCH 2/8] change workflow, start when hit when-run button --- app/modules/whalesbot_eagle_1001.js | 113 +++++++++++++++------------- 1 file changed, 59 insertions(+), 54 deletions(-) diff --git a/app/modules/whalesbot_eagle_1001.js b/app/modules/whalesbot_eagle_1001.js index bda48fae1..3bf0e6a48 100644 --- a/app/modules/whalesbot_eagle_1001.js +++ b/app/modules/whalesbot_eagle_1001.js @@ -5,7 +5,7 @@ class WhalebotsEagle1001 extends BaseModule { // Declare the fields to be used inside the class. constructor() { super(); - + this.sp = null; this.isConnect = false; @@ -38,18 +38,18 @@ class WhalebotsEagle1001 extends BaseModule { 'Stop': 2, } this.runCode = [ - 0x77,0x78,0x66,0x1,0x2,0x2,0x3,0x3,0x4,0x4,0x5,0x5, - 0x6,0x6,0x7,0x7,0x8,0x8,0x9,0x9,0xa,0xa,0xb,0xb,0xc,0xc, + 0x77,0x78,0x66,0x1,0x2,0x2,0x3,0x3,0x4,0x4,0x5,0x5, + 0x6,0x6,0x7,0x7,0x8,0x8,0x9,0x9,0xa,0xa,0xb,0xb,0xc,0xc, 0xd,0xd,0xe,0xe,0xf,0xf,0x10,0x10,0x11,0x11,0x12,0x12,0x13, - 0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x17,0x17,0x18,0x18, - 0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e, - 0x1f,0x1f,0x20,0x20,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x24, - 0x25,0x25,0x26,0x26,0x27,0x27,0x28,0x28,0x29,0x29,0x2a,0x2a, - 0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x30,0x30, - 0x31,0x31,0x32,0x32,0x33,0x33,0x34,0x34,0x35,0x35,0x36,0x36, - 0x37,0x37,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c, - 0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x40,0x40,0x41,0x41,0x42,0x42, - 0x43,0x43,0x44,0x44,0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x48, + 0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x17,0x17,0x18,0x18, + 0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e, + 0x1f,0x1f,0x20,0x20,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x24, + 0x25,0x25,0x26,0x26,0x27,0x27,0x28,0x28,0x29,0x29,0x2a,0x2a, + 0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x30,0x30, + 0x31,0x31,0x32,0x32,0x33,0x33,0x34,0x34,0x35,0x35,0x36,0x36, + 0x37,0x37,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c, + 0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x40,0x40,0x41,0x41,0x42,0x42, + 0x43,0x43,0x44,0x44,0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x48, 0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x0,0x56 ]; @@ -278,7 +278,7 @@ class WhalebotsEagle1001 extends BaseModule { requestLocalData() { return null; } - + // Data processing from hardware handleLocalData(data) { // console.log("data received: ",data); @@ -287,7 +287,7 @@ class WhalebotsEagle1001 extends BaseModule { this.checkGetState(data) return; } - + this.waitRevData(data); } @@ -303,7 +303,7 @@ class WhalebotsEagle1001 extends BaseModule { isLockGetState(){ return this.lock; } - + connectDrone(){ this.getStateInterval = setInterval(()=>{ if(this.countDroneConnectionAttempt == 0 || !this.isLockGetState()){ @@ -313,7 +313,7 @@ class WhalebotsEagle1001 extends BaseModule { if( this.countDroneConnectionAttempt == 4){ // console.log("Connection failed"); this.countDroneConnectionAttempt = 0 ; - clearInterval(this.getStateInterval); + clearInterval(this.getStateInterval); return } } @@ -322,7 +322,7 @@ class WhalebotsEagle1001 extends BaseModule { // console.log("Drone is connected") this.isDroneConnection = true; this.countDroneConnectionAttempt = 0 ; - clearInterval(this.getStateInterval); + clearInterval(this.getStateInterval); } } },this.getStateTimeSleep) @@ -430,8 +430,8 @@ class WhalebotsEagle1001 extends BaseModule { { for(let i=0;i<=chunkData.length-1;i++) { - if(chunkData[i] == 0xff - && chunkData[i+1] == 0x42 + if(chunkData[i] == 0xff + && chunkData[i+1] == 0x42 && chunkData[i+2] == 0x43 && chunkData[i+3] == 0x43 && chunkData[i+4] == 0x44 @@ -460,7 +460,7 @@ class WhalebotsEagle1001 extends BaseModule { ret[this.BT_INDEX_CMD_SEND] = this.BT_CMD_DOWNLOAD; ret[this.BT_INDEX_DATA_SEND] = nowdwpack & 0x000000ff; ret[this.BT_INDEX_DATA_SEND + 1] = ((nowdwpack & 0x0000ff00) / 256) | 0; - + if (nowdwpack * this.packlen > Picocode.length) { ret[this.BT_INDEX_CMD_SEND] = this.BT_CMD_DOWNLOAD_END; } @@ -499,16 +499,16 @@ class WhalebotsEagle1001 extends BaseModule { Errcode2Msg(ErrorCode) { return this.errorMessages[ErrorCode] || "" } - + ErrFly2String(ErrFly) { let msg="" - const ERR_NONE =0 - const ERR_LOWBATT =this.BIT0 - const ERR_CODE =this.BIT1 - const ERR_TEMP =this.BIT3 - const ERR_SENSORS =this.BIT4 - const ERR_LOADER =this.BIT5 - const ERR_ANGLE =this.BIT6 + const ERR_NONE =0 + const ERR_LOWBATT =this.BIT0 + const ERR_CODE =this.BIT1 + const ERR_TEMP =this.BIT3 + const ERR_SENSORS =this.BIT4 + const ERR_LOADER =this.BIT5 + const ERR_ANGLE =this.BIT6 if (ErrFly == ERR_NONE){ msg=msg +"NO_Error" @@ -536,25 +536,25 @@ class WhalebotsEagle1001 extends BaseModule { Sensor2String() { let SPLIT_STRING = "------------------------------------\n" - let msg = "STATE_PITCH= " + (Math.round(this.sensor.Pitch, 3)).toString() + "\n" - msg = msg + "STATE_ROLL= " + (Math.round(this.sensor.Roll, 3)).toString() + "\n" - msg = msg + "STATE_YAW= " + (Math.round(this.sensor.Yaw, 3)).toString() + "\n" + let msg = "STATE_PITCH= " + (Math.round(this.sensor.Pitch, 3)).toString() + "\n" + msg = msg + "STATE_ROLL= " + (Math.round(this.sensor.Roll, 3)).toString() + "\n" + msg = msg + "STATE_YAW= " + (Math.round(this.sensor.Yaw, 3)).toString() + "\n" msg = msg + SPLIT_STRING - - msg = msg + "STATE_TEMP= " + (Math.round(this.sensor.SPL06_temp, 3)).toString() + "\n" - - msg = msg + "FusedHeight= " + (Math.round(this.sensor.FusedHeight, 3)).toString() + "\n" - - msg = msg + "BATTERY= " + (Math.round(this.sensor.Battery, 3)).toString() + "\n" - - msg = msg + "VER= " + this.VERSTR() + "\n" + + msg = msg + "STATE_TEMP= " + (Math.round(this.sensor.SPL06_temp, 3)).toString() + "\n" + + msg = msg + "FusedHeight= " + (Math.round(this.sensor.FusedHeight, 3)).toString() + "\n" + + msg = msg + "BATTERY= " + (Math.round(this.sensor.Battery, 3)).toString() + "\n" + + msg = msg + "VER= " + this.VERSTR() + "\n" msg = msg + SPLIT_STRING - msg = msg + "FLY_ERR= " + this.ErrFly2String(parseInt(this.sensor.ErrFly)) + "\n" - msg = msg + "LINE_NO= " + (this.sensor.LineNo) + "\n" - msg = msg + "ERROR_NO= " + (this.sensor.LineError) + "\n" - msg = msg + "ERROR_MSG= " + this.Errcode2Msg(this.sensor.ErrorCode) + "\n" - - msg = msg + "DEBUG1= " + (Math.round(this.sensor.Debug_0, 6)).toString() + "\n" + msg = msg + "FLY_ERR= " + this.ErrFly2String(parseInt(this.sensor.ErrFly)) + "\n" + msg = msg + "LINE_NO= " + (this.sensor.LineNo) + "\n" + msg = msg + "ERROR_NO= " + (this.sensor.LineError) + "\n" + msg = msg + "ERROR_MSG= " + this.Errcode2Msg(this.sensor.ErrorCode) + "\n" + + msg = msg + "DEBUG1= " + (Math.round(this.sensor.Debug_0, 6)).toString() + "\n" msg = msg + "DEBUG2= " + (Math.round(this.sensor.Debug_1, 6)).toString() + "\n" msg = msg + "DEBUG3= " + (Math.round(this.sensor.Debug_2, 6)).toString() + "\n" msg = msg + "DEBUG4= " + (Math.round(this.sensor.Debug_3, 6)).toString() + "\n" @@ -566,12 +566,12 @@ class WhalebotsEagle1001 extends BaseModule { byte2float(offset) { let buffer = new ArrayBuffer(4); let view = new DataView(buffer); - + view.setUint8(3, this.revdata[offset + 0]); view.setUint8(2, this.revdata[offset + 1]); view.setUint8(1, this.revdata[offset + 2]); view.setUint8(0, this.revdata[offset + 3]); - + return view.getFloat32(0, false); } @@ -588,7 +588,7 @@ class WhalebotsEagle1001 extends BaseModule { } } } - } + } if (revdata[this.BT_INDEX_CMD_REV] === this.BT_CMD_DOWNLOAD || revdata[this.BT_INDEX_CMD_REV] === this.BT_CMD_DOWNLOAD_END) { let isrevsame = true; @@ -634,11 +634,11 @@ class WhalebotsEagle1001 extends BaseModule { this.sensor.M2 = parseInt(revdata[this.BT_INDEX_DATA_REV + 17 * 4 + 1]) this.sensor.M3 = parseInt(revdata[this.BT_INDEX_DATA_REV + 17 * 4 + 2]) this.sensor.M4 = parseInt(revdata[this.BT_INDEX_DATA_REV + 17 * 4 + 3]) - + this.sensor.state_velocity_x = this.byte2float(this.BT_INDEX_DATA_REV + 18 * 4) this.sensor.state_velocity_y = this.byte2float(this.BT_INDEX_DATA_REV + 19 * 4) this.sensor.state_velocity_z = this.byte2float(this.BT_INDEX_DATA_REV + 20 * 4) - + this.sensor.Debug_0 = this.byte2float(this.BT_INDEX_DATA_REV + 21 * 4) this.sensor.Debug_1 = this.byte2float(this.BT_INDEX_DATA_REV + 22 * 4) this.sensor.Debug_2 = this.byte2float(this.BT_INDEX_DATA_REV + 23 * 4) @@ -646,9 +646,9 @@ class WhalebotsEagle1001 extends BaseModule { this.sensor.Debug_4 = this.byte2float(this.BT_INDEX_DATA_REV + 25 * 4) this.sensor.Debug_5 = this.byte2float(this.BT_INDEX_DATA_REV + 26 * 4) this.sensor.FusedHeight = this.byte2float(this.BT_INDEX_DATA_REV + 27 * 4) - + this.sensor.VER = parseInt(revdata[this.BT_INDEX_DATA_REV + 28 * 4 + 0]) - this.sensor.ErrFly = parseInt(revdata[this.BT_INDEX_DATA_REV + 28 * 4 + 1]) + this.sensor.ErrFly = parseInt(revdata[this.BT_INDEX_DATA_REV + 28 * 4 + 1]) let msg = this.Sensor2String(); // console.log(msg); } @@ -706,7 +706,7 @@ class WhalebotsEagle1001 extends BaseModule { } // processing of data received from the entry - handleRemoteData(handler) { + async handleRemoteData(handler) { const cmd = handler.serverData.cmd; if (!cmd) { @@ -728,7 +728,12 @@ class WhalebotsEagle1001 extends BaseModule { this.HandleRun(); break; default: - this.downloadCode(cmd); + await this.handleClean(); + await this.sleep(3000); + await this.downloadCode(cmd); + await this.sleep(4000); + await this.HandleRun(); + await this.sleep(3000); break; } } catch (error) { From dd42c6cadf690598c6f5683a63ae6a5ecaf9df20 Mon Sep 17 00:00:00 2001 From: hksong Date: Thu, 14 Nov 2024 14:53:12 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EB=93=9C=EB=9D=BC=EC=9D=B4=EB=B2=84=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EB=AC=B8=EA=B5=AC=20=EB=B3=80=EA=B2=BD,?= =?UTF-8?q?=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/alux_connect.json | 46 ++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/app/modules/alux_connect.json b/app/modules/alux_connect.json index 8cbfe19dd..836b56c5c 100644 --- a/app/modules/alux_connect.json +++ b/app/modules/alux_connect.json @@ -7,32 +7,34 @@ "platform": ["win32"], "icon" : "alux_connect.png", "module": "alux_connect.js", - "driver": [{ - "win32-ia32": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.exe", - "win32-x64": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.exe", - "translate": "드라이버 설치1"}, + "driver": [ { - "win32-ia32": "Easy_Down_Entry/PROBO Easy Down Entry ver8.41.msi", - "win32-x64": "Easy_Down_Entry/PROBO Easy Down Entry ver8.41.msi", - "translate": "드라이버 설치2"} - ], + "win32-ia32": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.exe", + "win32-x64": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.exe", + "translate": "CH34x 드라이버" + }, + { + "win32-ia32": "Easy_Down_Entry/PROBO Easy Down Entry ver8.41.msi", + "win32-x64": "Easy_Down_Entry/PROBO Easy Down Entry ver8.41.msi", + "translate": "Easy Down Entry 드라이버" + } + ], "url": "https://www.probo.kr/", - "email": "tkddnjs10@naver.com", + "email": " contact@imssam.me", "reconnect": true, "selectPort": true, "hardware": { - "type": "serial", - "control": "slave", - "duration": 32, - "baudRate": 115200 , - "vendor": "Probo", - "firmwarecheck": true, - "parity" : "none", - "dataBits" : 8, - "stopBits" : 1, - "bufferSize" : 255, - "delimiter" : "", - "flowControl" : "Connect" + "type": "serial", + "control": "slave", + "duration": 32, + "baudRate": 115200, + "vendor": "Probo", + "firmwarecheck": true, + "parity" : "none", + "dataBits" : 8, + "stopBits" : 1, + "bufferSize" : 255, + "delimiter" : "", + "flowControl" : "Connect" } - } \ No newline at end of file From d2b7c88ba43fe800defe7b142dc64f5c490891ab Mon Sep 17 00:00:00 2001 From: Hagwon <50008047+hagwon@users.noreply.github.com> Date: Fri, 15 Nov 2024 09:33:53 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=ED=85=8C=ED=81=AC=EB=8B=89=20=EC=9D=BC?= =?UTF-8?q?=EB=B0=98=20=EB=93=9C=EB=9D=BC=EC=9D=B4=EB=B2=84=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EB=AC=B8=EA=B5=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/alux_technic_normal.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/modules/alux_technic_normal.json b/app/modules/alux_technic_normal.json index f99c1660e..99bb73eb5 100644 --- a/app/modules/alux_technic_normal.json +++ b/app/modules/alux_technic_normal.json @@ -11,12 +11,12 @@ { "win32-ia32": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.exe", "win32-x64": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.exe", - "translate": "드라이버 설치1" + "translate": "CH34x 드라이버" }, { "win32-ia32": "Easy_Down_Entry/PROBO Easy Down Entry ver8.41.msi", "win32-x64": "Easy_Down_Entry/PROBO Easy Down Entry ver8.41.msi", - "translate": "드라이버 설치2" + "translate": "Easy Down Entry 드라이버" } ], "url": "https://www.aluxonline.com/", @@ -32,4 +32,4 @@ "softwareReset": false, "firmwarecheck": false } -} \ No newline at end of file +} From 3fe6ade9c0f7c4a329463f21da4f6e48bf78b103 Mon Sep 17 00:00:00 2001 From: Hagwon <50008047+hagwon@users.noreply.github.com> Date: Fri, 15 Nov 2024 09:34:24 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=ED=85=8C=ED=81=AC=EB=8B=89=20=ED=8C=8C?= =?UTF-8?q?=EC=9B=8C=20=EB=93=9C=EB=9D=BC=EC=9D=B4=EB=B2=84=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EB=AC=B8=EA=B5=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/alux_technic_power.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/modules/alux_technic_power.json b/app/modules/alux_technic_power.json index 393f91db3..da937d1d6 100644 --- a/app/modules/alux_technic_power.json +++ b/app/modules/alux_technic_power.json @@ -11,12 +11,12 @@ { "win32-ia32": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.exe", "win32-x64": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.exe", - "translate": "드라이버 설치1" + "translate": "CH34x 드라이버" }, { "win32-ia32": "Easy_Down_Entry/PROBO Easy Down Entry ver8.41.msi", "win32-x64": "Easy_Down_Entry/PROBO Easy Down Entry ver8.41.msi", - "translate": "드라이버 설치2" + "translate": "Easy Down Entry 드라이버" } ], "url": "https://www.aluxonline.com/", @@ -32,4 +32,4 @@ "softwareReset": false, "firmwarecheck": false } -} \ No newline at end of file +} From 30507f3fd5cfce9b7ae82a86266871741ab55fcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=B1=EC=A7=84=ED=98=B8?= <140678689+jinbaekho@users.noreply.github.com> Date: Tue, 19 Nov 2024 15:59:10 +0900 Subject: [PATCH 6/8] =?UTF-8?q?lostTimer=20=EC=8B=9C=EA=B0=84=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/pingpong_g1.json | 2 +- app/modules/pingpong_g2.json | 2 +- app/modules/pingpong_g3.json | 2 +- app/modules/pingpong_g4.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/modules/pingpong_g1.json b/app/modules/pingpong_g1.json index 55309e917..2534d6c0d 100644 --- a/app/modules/pingpong_g1.json +++ b/app/modules/pingpong_g1.json @@ -29,7 +29,7 @@ "type": "bluetooth", "control": "slave", "duration": 50, - "lostTimer": 1000, + "lostTimer": 4000, "vendor": "Microsoft", "firmwarecheck": false, "baudRate": 115200 diff --git a/app/modules/pingpong_g2.json b/app/modules/pingpong_g2.json index 056b216fc..b8d42c2c3 100644 --- a/app/modules/pingpong_g2.json +++ b/app/modules/pingpong_g2.json @@ -29,7 +29,7 @@ "type": "bluetooth", "control": "slave", "duration": 50, - "lostTimer": 1000, + "lostTimer": 4000, "vendor": "Microsoft", "baudRate": 115200 } diff --git a/app/modules/pingpong_g3.json b/app/modules/pingpong_g3.json index 0c210f479..3398ea5c6 100644 --- a/app/modules/pingpong_g3.json +++ b/app/modules/pingpong_g3.json @@ -29,7 +29,7 @@ "type": "bluetooth", "control": "slave", "duration": 50, - "lostTimer": 1000, + "lostTimer": 4000, "vendor": "Microsoft", "baudRate": 115200 } diff --git a/app/modules/pingpong_g4.json b/app/modules/pingpong_g4.json index c6a57cd74..fb62c9aa4 100644 --- a/app/modules/pingpong_g4.json +++ b/app/modules/pingpong_g4.json @@ -29,7 +29,7 @@ "type": "bluetooth", "control": "slave", "duration": 50, - "lostTimer": 1000, + "lostTimer": 4000, "vendor": "Microsoft", "baudRate": 115200 } From f3935f15a7dc0b7d49068b4fecb817ab2921ee6b Mon Sep 17 00:00:00 2001 From: truedo Date: Wed, 20 Nov 2024 19:26:01 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=EB=A1=9C=EB=B3=B4=EB=A7=81=ED=81=AC=20?= =?UTF-8?q?=EC=A3=BC=EB=AF=B8=20=EB=AF=B8=EB=8B=88=20=ED=94=8C=EB=9E=AB?= =?UTF-8?q?=ED=8F=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/robolink_ZumiMini.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/modules/robolink_ZumiMini.json b/app/modules/robolink_ZumiMini.json index df5911abd..c30036100 100644 --- a/app/modules/robolink_ZumiMini.json +++ b/app/modules/robolink_ZumiMini.json @@ -5,12 +5,13 @@ "ko": "로보링크 주미 미니" }, "category": "robot", - "platform": ["win32"], + "platform": ["win32", "darwin"], "icon": "robolink_ZumiMini.png", "module": "robolink_ZumiMini.js", "driver": { "win32-ia32": "CH34x_install_Windows_v3_4/CH34x_install_Windows_v3_4.EXE", - "win32-x64": "CH34x_install_Windows_v3_4/CH34x_install_Windows_v3_4.EXE" + "win32-x64": "CH34x_install_Windows_v3_4/CH34x_install_Windows_v3_4.EXE", + "darwin-x64": "https://entrylabs.github.io/docs/files/drivers/CH34x_Install_MAC_10_9_AND_ABOVE/CH34x_Install_V1.3.pkg" }, "url": "https://www.robolink.co.kr/", "email": "asteam@robolink.co.kr", From 7ee2a51b2847933f403c19a1178b4435c6316a61 Mon Sep 17 00:00:00 2001 From: Tnks2U Date: Thu, 21 Nov 2024 17:17:53 +0900 Subject: [PATCH 8/8] version up : 1.9.60 --- build/entry-hw.nsi | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/entry-hw.nsi b/build/entry-hw.nsi index 571e71774..530a9a8e1 100644 --- a/build/entry-hw.nsi +++ b/build/entry-hw.nsi @@ -14,7 +14,7 @@ !define PRODUCT_NAME "Entry_HW" !define PROTOCOL_NAME "entryhw" !define APP_NAME "Entry_HW.exe" -!define PRODUCT_VERSION "1.9.59" +!define PRODUCT_VERSION "1.9.60" !define PRODUCT_PUBLISHER "EntryLabs" !define PRODUCT_WEB_SITE "https://www.playentry.org/" diff --git a/package.json b/package.json index f4c8ca1f6..5c8bcbc06 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "entry-hw", - "version": "1.9.59", + "version": "1.9.60", "description": "엔트리 하드웨어 연결 프로그램", "author": "EntryLabs", "main": "./app/src/index.bundle.js",