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