Commit fd38186c59a64c771de01703ca1ab52ad88dbca1

Authored by Nur Fajar Wibowo
1 parent bf525c786b
Exists in master

remove development in config & merapikan code index.js

Showing 2 changed files with 186 additions and 204 deletions Inline Diff

1 { 1 {
2 "development": { 2 "core": {
3 "usb_port": "please change me",//tty/USB2 3 "usb_port": "/tty/USB2",
4 "node_port": "please change me",//2112 4 "node_port": "2112",
5 "url_post": "please change me",//http://ip:port 5 "url_post": "http://ip:port",
6 "api_key": "746573206D6F64656D2074656C6D6F73656C20666C617368" 6 "api_key": "746573206D6F64656D2074656C6D6F73656C20666C617368"
7 } 7 }
8 } 8 }
9
10 9
1 "use strict"; 1 "use strict";
2 2
3 const express = require('express'); 3 const express = require('express');
4 const app = express(); 4 const app = express();
5 const SerialPort = require("serialport"); 5 const SerialPort = require("serialport");
6 const config = require('./config.json'); 6 const config = require('./config.json');
7 const request = require('request'); 7 const request = require('request');
8 const Readline = require('@serialport/parser-readline'); 8 const Readline = require('@serialport/parser-readline');
9 const Delimiter = require('@serialport/parser-delimiter'); 9 const Delimiter = require('@serialport/parser-delimiter');
10 10
11 var count = 1; 11 let count = 1;
12 var statusModem = "0K"; 12 let statusModem = "0K";
13 var errorMessageModem= ""; 13 let errorMessageModem= "";
14 var node_port = config.development.node_port;
15 var usb_port = config.development.usb_port;
16 var url_post = config.development.url_post;
17 var api_key = config.development.api_key;
18 14
19 //set serialport 15 //set serialport
20 const serialPort = new SerialPort(usb_port, { 16 const serialPort = new SerialPort(config.core.usb_port, {
21 baudRate: 115200 17 baudRate: 115200
22 }); 18 });
23 19
24 const parser = serialPort.pipe(new Readline()); 20 const parser = serialPort.pipe(new Readline());
25 21
26 serialPort.on("open", function () { 22 serialPort.on("open", function () {
27 console.log('Serial communication open'); 23 console.log('Serial communication open');
28 // 24 //
29 serialPort.write("AT+CNMI?"); 25 serialPort.write("AT+CNMI?");
30 serialPort.write("\r"); 26 serialPort.write("\r");
31 //serialPort.write("AT+CNMI=1,1,2,1,1"); 27 //serialPort.write("AT+CNMI=1,1,2,1,1");
32 //serialPort.write("\r"); 28 //serialPort.write("\r");
33 console.log('receive sms ON'); 29 console.log('receive sms ON');
34
35 }); 30 });
36 31
37 serialPort.on('error', function(err) { 32 serialPort.on('error', function(err) {
38 statusModem = "NOT OK"; 33 statusModem = "NOT OK";
39 errorMessageModem = err.message; 34 errorMessageModem = err.message;
40 console.log('Error!: ', err.message); 35 console.log('Error!: ', err.message);
41 process.exit(1); 36 process.exit(1);
42 }); 37 });
43 38
44 parser.on('data', function(data) { 39 parser.on('data', function(data) {
45 console.log("incoming data: " + data); 40 console.log("incoming data: " + data);
46 var lastData = data.toString(); 41 let lastData = data.toString();
47 if (lastData.match(/\+CMTI:/)){ 42 if (lastData.match(/\+CMTI:/)){
48 var numberPattern = /(\d+)/g; 43 let numberPattern = /(\d+)/g;
49 var slot = lastData.match(numberPattern); 44 let slot = lastData.match(numberPattern);
50 console.log("slot "+slot); 45 console.log("slot "+slot);
51 console.log("ada message baru"); 46 console.log("ada message baru");
52 readSmsAuto(serialPort, slot); 47 readSmsAuto(serialPort, slot);
53 } 48 }
54 }); 49 });
55 50
56 //------------------function 2 000000000000 -----------------
57 //helloWorld
58 function helloWorld(req, res, next){
59 console.log("hello world call!??");
60 res.send('hello world');
61
62 }
63 //function delete message slot ke? 51 //function delete message slot ke?
64 function deleteMessage(serialPort, slot){ 52 function deleteMessage(serialPort, slot){
65 serialPort.write("AT+CMGD="+slot); 53 serialPort.write("AT+CMGD="+slot);
66 serialPort.write("\r"); 54 serialPort.write("\r");
67 console.log("delete pesan slot "+slot+" done!"); 55 console.log("delete pesan slot "+slot+" done!");
68
69 } 56 }
70 //post to end point url 57 //post to end point url
71 function postIncomingMessage(nomor, pesan){ 58 function postIncomingMessage(nomor, pesan){
72 console.log("----------------------------post incoming message-------------------------"); 59 console.log("----------------------------post incoming message-------------------------");
73 pesan = pesan.replace(/\s+$/, ''); 60 pesan = pesan.replace(/\s+$/, '');
74 //post to URL end Point 61 let encodePesan = encodeURIComponent(pesan);
75 request(url_post+"?msg="+pesan+"&number="+nomor, function (error, response, body) { 62 let newUrl = config.core.url_post+"?msg="+encodePesan+"&number="+nomor;
76 if (error) { console.log("error post! "+nomor+" msg; \""+pesan+"\" errornya; "+error.message); } 63 //post to URL end Point
77 else if (!error && response.statusCode == 200) {console.log("success post "+nomor+" msg; \""+pesan+"\" resp; "+body);} 64 request(newUrl, function (error, response, body) {
78 }); 65 if (error) {
79 //delete incoming message after send to komod 66 console.log("error post! "+nomor+" msg; \""+pesan+"\" errornya; "+error.message);
80 } 67 } else if (!error && response.statusCode == 200) {
68 console.log("success post "+nomor+" msg; \""+pesan+"\" resp; "+body);
69 }
70 });
71 }
81 //sendSms 72 //sendSms
82 function sendSms (req, res, next){ 73 function sendSms (req, res, next){
83 var msg = req.query.msg; 74 let msg = req.query.msg;
84 var number = req.query.number; 75 let number = req.query.number;
85 var reqid = req.query.reqid; 76 let reqid = req.query.reqid;
86 var apikey = req.query.apikey; 77 let apiKey = req.query.apikey;
87 //api_key="746573206D6F64656D2074656C6D6F73656C20666C617368"; 78 //apiKey="746573206D6F64656D2074656C6D6F73656C20666C617368";
88 if(!reqid||!apikey){ 79 if(!reqid||!apiKey){
89 console.log("invalid reqid or apikey;msg "+msg+" number "+number); 80 console.log("invalid reqid or apikey;msg "+msg+" number "+number);
90 res.json({"status": "invalid parameter", "msg": msg, "number": number, "apikey" : apikey, "reqid": reqid}); 81 res.json({"status": "invalid parameter", "msg": msg, "number": number, "apikey" : apikey, "reqid": reqid});
91 return; 82 return;
92 } else if (apikey !== api_key){ 83 } else if (apiKey !== config.core.api_key){
93 console.log("invalid api_key;msg \""+msg+"\" number \""+number+"\" reqid \""+reqid); 84 console.log("invalid apiKey;msg \""+msg+"\" number \""+number+"\" reqid \""+reqid);
94 res.json({"status": "invalid parameter", "msg": msg, "number": number, "apikey" : apikey, "reqid": reqid}); 85 res.json({"status": "invalid parameter", "msg": msg, "number": number, "apikey" : apikey, "reqid": reqid});
95 return; 86 return;
96 87 }
97 } 88 console.log("msg "+ msg + " number " +number);
98 console.log("msg "+ msg + " number " +number); 89 //----------------
99 //---------------- 90 serialPort.write("AT+CMGF=1");
100 serialPort.write("AT+CMGF=1"); 91 serialPort.write('\r');
101 serialPort.write('\r'); 92
102 93 sendingSMS(serialPort, msg, "+"+number, reqid);
103 sendingSMS(serialPort, msg, "+"+number, reqid); 94 console.log('resp; status '+statusModem+" reqid "+reqid);
104 console.log('resp; status '+statusModem+" reqid "+reqid); 95 //---------------
105 //--------------- 96 res.json({"status": statusModem+" "+errorMessageModem, "msg": msg, "number": number});
106 res.json({"status": statusModem+" "+errorMessageModem, "msg": msg, "number": number});
107 } 97 }
108 //send ussd 98 //send ussd
109 function sendUSSD (req, res, next){ 99 function sendUSSD (req, res, next){
110 var msg = req.query.msg; 100 let msg = req.query.msg;
111 var reqid = req.query.reqid; 101 let reqid = req.query.reqid;
112 var apikey = req.query.apikey; 102 let apiKey = req.query.apikey;
113 //api_key="746573206D6F64656D2074656C6D6F73656C20666C617368"; 103 //apiKey="746573206D6F64656D2074656C6D6F73656C20666C617368";
114 if(!reqid||!apikey){ 104 if(!reqid||!apiKey){
115 console.log("invalid reqid or apikey;msg "+msg); 105 console.log("invalid reqid or apikey;msg "+msg);
116 res.json({"status": "invalid parameter", "msg": msg, "apikey" : apikey, "reqid": reqid}); 106 res.json({"status": "invalid parameter", "msg": msg, "apikey" : apikey, "reqid": reqid});
117 return; 107 return;
118 } else if (apikey !== api_key){ 108 } else if (apiKey !== config.core.api_key){
119 console.log("invalid api_key;msg \""+msg+"\"reqid \""+reqid); 109 console.log("invalid apiKey;msg \""+msg+"\"reqid \""+reqid);
120 res.json({"status": "invalid parameter", "msg": msg, "apikey" : apikey, "reqid": reqid}); 110 res.json({"status": "invalid parameter", "msg": msg, "apikey" : apikey, "reqid": reqid});
121 return; 111 return;
122 112 }
123 } 113 console.log("msg "+ msg+" - "+reqid);
124 console.log("msg "+ msg+" - "+reqid); 114
125 115 count++;
126 count++; 116 console.log("count "+ count);
127 console.log("count "+ count); 117 if (count > 2){
128 if (count > 2){ 118 console.log("modem busy!");
129 console.log("modem busy!"); 119 count--;
130 count--; 120 res.json({status: "reject", msg: "modem busy,try a few second"});
131 res.json({status: "reject", msg: "modem busy,try a few second"}); 121 return;
132 return; 122 }
133 } 123
134 124 //----------------
135 //---------------- 125 serialPort.write("AT+CUSD=1,\""+msg+"\"");
136 serialPort.write("AT+CUSD=1,\""+msg+"\""); 126 serialPort.write('\r');
137 serialPort.write('\r'); 127
138 128 //parse response USSD
139 //parse response USSD 129 const parserUSSD = serialPort.pipe(new Delimiter({ delimiter: '\",0'}));
140 const parserUSSD = serialPort.pipe(new Delimiter({ delimiter: '\",0'})); 130 let respUssd = null;
141 var respUssd = null; 131 parserUSSD.on('data',function(dataUSSD){
142 parserUSSD.on('data',function(dataUSSD){ 132 //console.log("incoming datad "+dataD);
143 //console.log("incoming datad "+dataD); 133 let lastData = dataUSSD.toString();
144 var lastData = dataUSSD.toString(); 134 console.log("incoming dataUSSD "+lastData);
145 console.log("incoming dataUSSD "+lastData); 135 respUssd = lastData;
146 respUssd = lastData; 136 serialPort.unpipe(parserUSSD);
147 serialPort.unpipe(parserUSSD); 137 });
148 }); 138
149 139 console.log('resp; status '+statusModem+" reqid "+reqid);
150 console.log('resp; status '+statusModem+" reqid "+reqid); 140 //---------------
151 //--------------- 141 let countDown = 8;// max witing response USSD 8 detik
152 let countDown = 8;// max witing response USSD 8 detik 142 let waitingRespUssd = setInterval (() => {
153 var waitingRespUssd = setInterval (() => { 143 console.log(countDown+" second for reqid "+reqid);
154 console.log(countDown+" second for reqid "+reqid); 144 countDown--;
155 countDown--; 145 if (respUssd || countDown < 2){
156 if (respUssd || countDown < 2){ 146 let new_respUssd = null;
157 var new_respUssd = null; 147 //console.log("response USSD; "+respUssd);
158 //console.log("response USSD; "+respUssd); 148 if (respUssd){
159 if (respUssd){ 149 new_respUssd = respUssd.replace(/^[^ ]+\+CUSD:/, '\+CUSD:');
160 new_respUssd = respUssd.replace(/^[^ ]+\+CUSD:/, '\+CUSD:'); 150 console.log('n_resp '+new_respUssd);
161 console.log('n_resp '+new_respUssd); 151 }
162 } 152 count--;
163 count--; 153 res.json({
164 res.json({ 154 "response_ussd": new_respUssd,
165 "response_ussd": new_respUssd, 155 "status": statusModem+" "+errorMessageModem,
166 "status": statusModem+" "+errorMessageModem, 156 "msg": msg,
167 "msg": msg, 157 "reqid": reqid
168 "reqid": reqid 158 });
169 }); 159 clearInterval(waitingRespUssd);
170 clearInterval(waitingRespUssd); 160 }
171 } 161 },1000);
172 },1000);
173 } 162 }
174 163
175
176
177 function readSmsAuto(serialPort, slot){ 164 function readSmsAuto(serialPort, slot){
178 165
179 serialPort.write("AT+CMGR="+slot);// read only slot 1 166 serialPort.write("AT+CMGR="+slot);// read only slot 1
180 serialPort.write('\r'); 167 serialPort.write('\r');
181 168
182 const parserD = serialPort.pipe(new Delimiter({ delimiter: '\r\nOK\r\n' })); 169 const parserD = serialPort.pipe(new Delimiter({ delimiter: '\r\nOK\r\n' }));
183 parserD.on('data',function(dataD){ 170 parserD.on('data',function(dataD){
184 //console.log("incoming datad "+dataD); 171 //console.log("incoming datad "+dataD);
185 var lastData = dataD.toString(); 172 let lastData = dataD.toString();
186 console.log("incoming datad "+lastData); 173 console.log("incoming datad "+lastData);
187 if (lastData.match(/\+CMGR:/)){ 174 if (lastData.match(/\+CMGR:/)){
188 console.log("incoming SMS "+lastData); 175 console.log("incoming SMS "+lastData);
189 // try to parse dataD 176 // try to parse dataD
190 const lines = lastData.split(/\n/); 177 const lines = lastData.split(/\n/);
191 console.log("lines1 "+lines[1]); 178 console.log("lines1 "+lines[1]);
192 console.log("lines2 "+lines[2]); 179 console.log("lines2 "+lines[2]);
193 const content = lines[1].split(','); 180 const content = lines[1].split(',');
194 console.log("content0 "+content[0]); 181 console.log("content0 "+content[0]);
195 console.log("content1 "+content[1]); 182 console.log("content1 "+content[1]);
196 console.log("content2 "+content[2]); 183 console.log("content2 "+content[2]);
197 console.log("content3 "+content[3]); 184 console.log("content3 "+content[3]);
198 console.log("content4 "+content[4]); 185 console.log("content4 "+content[4]);
199 var nomor = content[1].toString(); 186 let nomor = content[1].toString();
200 nomor = nomor.replace(/"/g,''); 187 nomor = nomor.replace(/"/g,'');
201 nomor = nomor.replace(/\+/g,''); 188 nomor = nomor.replace(/\+/g,'');
202 var pesan = lines[2].toString(); 189 let pesan = lines[2].toString();
203 console.log("nomor nya "+nomor); 190 console.log("nomor nya "+nomor);
204 serialPort.unpipe(parserD); 191 serialPort.unpipe(parserD);
205 postIncomingMessage(nomor, pesan); 192 postIncomingMessage(nomor, pesan);
206 } 193 }
207 }); 194 });
208 195
209 console.log("pesan slot "+slot+" sudah di baca"); 196 console.log("pesan slot "+slot+" sudah di baca");
210 197
211 setTimeout(function(){ 198 setTimeout(function(){
212 serialPort.write("AT+CMGD="+slot); 199 serialPort.write("AT+CMGD="+slot);
213 serialPort.write("\r"); 200 serialPort.write("\r");
214 console.log("delete pesan slot "+slot+" done!"); 201 console.log("delete pesan slot "+slot+" done!");
215 }, 2000); 202 }, 2000);
216 } 203 }
217 204
218
219 function readSms(req, res, next){ 205 function readSms(req, res, next){
220 206 serialPort.write("AT+CMGF=1");
221 serialPort.write("AT+CMGF=1"); 207 serialPort.write('\r');
222 serialPort.write('\r'); 208 serialPort.write('AT+CMGR=0');// read only slot 1
223 serialPort.write('AT+CMGR=0');// read only slot 1 209 serialPort.write('\r');
224 serialPort.write('\r'); 210 res.send('sms readed');
225 res.send('sms readed');
226
227 } 211 }
228 212
229 function sendingSMS(serial, message, phone_no) { 213 function sendingSMS(serial, message, phone_no) {
230 if (statusModem === "NOT OK"){ 214 if (statusModem === "NOT OK"){
231 console.log('send sms gagal'); 215 console.log('send sms gagal');
232 return statusModem; 216 return statusModem;
233 } 217 }
234 console.log('number '+phone_no); 218 console.log('number '+phone_no);
235 serial.write("AT+CMGS=\"" + phone_no + "\""); 219 serial.write("AT+CMGS=\"" + phone_no + "\"");
236 serial.write('\r'); 220 serial.write('\r');
237 serial.write(message); 221 serial.write(message);
238 console.log(message); 222 console.log(message);
239 serial.write(Buffer([0x1A])); 223 serial.write(Buffer([0x1A]));
240 serial.write('^z'); 224 serial.write('^z');
241 } 225 }
242 226
243 app.get('/', helloWorld);
244 app.get('/sms', sendSms); 227 app.get('/sms', sendSms);
245 app.get('/ussd', sendUSSD); 228 app.get('/ussd', sendUSSD);