{"id":31,"date":"2008-03-26T10:44:22","date_gmt":"2008-03-26T03:44:22","guid":{"rendered":"http:\/\/arif.unpad.ac.id\/?p=31"},"modified":"2008-03-26T10:44:22","modified_gmt":"2008-03-26T03:44:22","slug":"gammu-and-sqlserver","status":"publish","type":"post","link":"https:\/\/blogs.unpad.ac.id\/arif\/2008\/03\/26\/gammu-and-sqlserver\/","title":{"rendered":"GAMMU and SQLServer"},"content":{"rendered":"<p>GAMMU merupakan software sms gateway yang cukup bagus dan terkenal . Selain mudah penggunaannya, perangkat modem gsm yang support cukup banyak mulai dari nokia, siemen dan Sonny ericsson. Untuk sony ericsson saya dah nyoba dan penggunaannya sangat mudah. Selain itu perangkat lain yang lebih cocok untuk dijadikan sms gateway dengan software gammu seperti modem gsm itegno. GAMMU bahkan sudah menyediakan service online untuk proses update data sms ke database. Database yang di support GAMMU adalah MySQL.<\/p>\n<p>Ada beberapa pihak yang menginginkan program SMSgateway nya menggunakan database yang lain seperti SQLserver, Oracle dll. Apakah bisa?\u00a0 Jawabnya bisa,\u00a0 dengan menggunkan sediki program tambahan (delphi atau vb) kita bisa membuat service atau program yang memanfaatkan gammu dan sqlserver sebagai databasenya.<\/p>\n<p><!--more--><\/p>\n<p>Sebenarnya kita bisa membuat software sms gateway sendiri tanpa harus menggunakan GAMMU, syaratnya kita harus mengetahui terlebih dahulu instruksi atau perintah yang dikirim dari pc ke perangkat modem gsm dan sebaliknya. Perintah itu diberi istilah AT-Command. Jika sudah memiliki AT-Command , kita bisa membuat aplikasinya dengan menggunakan bahasa pemrograman apapun yang penting program tersebut telah menyediakan fungsi untuk komunikasi baik ke port RS232 atau pun USB. Tapi jika terlalu pusing untuk membuatnya, gammu masih dapat dimanfaatkan untuk dipadukan dengan program khusus yang kita buat, sehingga kita dapat memanfaatkan database lain selain MySQL.<\/p>\n<p>Algoritma pemrograman<\/p>\n<p>Logic dari program ini adalah bagai mana kita mengeksekusi program gammu dengan parameter yang kita sediakan dan selanjutnya output dari program gammu tangkap dan ditrace. Hasil dari tracing selanjutnya dimasukan ke database yang kita inginkan.<\/p>\n<p>Salah satu fungsi yang dibutuhkan adalah kita harus membuat fungsi atau procedure yang dapat mengeksekusi perintah dos dan outputnya kita simpan di objek teks misalkan untuk didelpi ke objek stringlist. Berikut ini adalah kode nya :<\/p>\n<pre>\nprocedure GetConsoleLineOutput(const CommandLine:string;stoutput:TStringList);\nvar\u00a0 SA: TSecurityAttributes;\n\n\u00a0 SI: TStartupInfo; \n\n\u00a0 PI: TProcessInformation; \n\n\u00a0 StdOutFile, AppProcess, AppThread : THandle; \n\n\u00a0 RootDir, WorkDir, StdOutFileName:string; \n\nconst \n\n\u00a0 FUNC_NAME = 'GetConsoleOuput'; \n\nbegin \n\n\u00a0 try \n\n\u00a0   StdOutFile:=0; \n\n\u00a0   AppProcess:=0; \n\n\u00a0   AppThread:=0;    \n\/\/ Initialize dirs \n\n\u00a0   RootDir:=ExtractFilePath(ParamStr(0)); \n\n\u00a0   WorkDir:=ExtractFilePath(CommandLine); \n\n\/\/ Check WorkDir \n\n\u00a0   if not (FileSearch(ExtractFileName(CommandLine),WorkDir)&lt;&gt;'') then \n\nWorkDir:=RootDir; \n\n\/\/ Initialize output file security attributes \n\n\u00a0   FillChar(SA,SizeOf(SA),#0); \n\n\u00a0   SA.nLength:=SizeOf(SA); \n\n\u00a0   SA.lpSecurityDescriptor:=nil; \n\n\u00a0   SA.bInheritHandle:=True; \n\n\/\/ Create Output File \n\n\u00a0   StdOutFileName:=RootDir+'output.tmp'; \n\n\u00a0   StdOutFile:=CreateFile(PChar(StdOutFileName), \n\n\u00a0                  GENERIC_READ or GENERIC_WRITE, \n\n\u00a0                  FILE_SHARE_READ or FILE_SHARE_WRITE, \n\n\u00a0                  @SA, \n\n\u00a0                  CREATE_ALWAYS, \/\/ Always create it \n\n\u00a0                  FILE_ATTRIBUTE_TEMPORARY or \/\/ Will cache in memory \n\n\u00a0                                              \/\/ if possible \n\n\u00a0                  FILE_FLAG_WRITE_THROUGH, \n\n\u00a0                  0); \n\n\/\/ Check Output Handle \n\n\u00a0   if StdOutFile = INVALID_HANDLE_VALUE then \n\n\u00a0     raise Exception.CreateFmt('Function %s() failed!' + #10#13 + \n\n\u00a0       'Command line = %s',[FUNC_NAME,CommandLine]); \n\n\/\/ Initialize Startup Info \n\n\u00a0   FillChar(SI,SizeOf(SI),#0);\n\n\u00a0   with SI do begin \n\n\u00a0     cb:=SizeOf(SI); \n\n\u00a0     dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; \n\n\u00a0     wShowWindow:=SW_HIDE; \n\n\u00a0     hStdInput:=GetStdHandle(STD_INPUT_HANDLE); \n\n\u00a0     hStdError:=StdOutFile; \n\n\u00a0     hStdOutput:=StdOutFile; \n\n\u00a0   end; \n\n\/\/ Create the process \n\n\u00a0   if CreateProcess(nil, PChar(CommandLine), nil, nil, \n\n\u00a0                    True, 0, nil, \n\n\u00a0                    PChar(WorkDir), SI, PI) then begin \n\n\u00a0     WaitForSingleObject(PI.hProcess,INFINITE); \n\n\u00a0     AppProcess:=PI.hProcess; \n\n\u00a0     AppThread:=PI.hThread;  \n\n    end \n\n   else \n\n\u00a0     raise Exception.CreateFmt('CreateProcess() in function %s() failed!' \n\n\u00a0                  + #10#13 + 'Command line = %s',[FUNC_NAME,CommandLine]); \n\nCloseHandle(StdOutFile); \n\n\u00a0   StdOutFile:=0; \n\nfinally \n\n\u00a0   \/\/ Close handles \n\n\u00a0   if StdOutFile &lt;&gt; 0 then CloseHandle(StdOutFile); \n\n\u00a0   if AppProcess &lt;&gt; 0 then CloseHandle(AppProcess);\n\n\u00a0   if AppThread &lt;&gt; 0 then CloseHandle(AppThread); \n\/\/ Delete Output file\n\u00a0   if FileExists(StdOutFileName) then DeleteFile(StdOutFileName); \n\u00a0 end; \nend; \n\n\u00a0<\/pre>\n<p>Prosedure pembacaan SMS<\/p>\n<p>untuk membaca SMS\u00a0 dari Modem GSM atau Handphone , dengan memanfaatkan prosedur di atas menggunakan GAMMU adalah sebagai berikut :<\/p>\n<pre>\nvar st:string; \ni,k:integer; \nstlines:tstringlist; \nbegin \n{ \ntry \n  stlines:= tstringlist.Create; \n  GetConsoleLineOutput('gammu --geteachsms',stlines); \n  if stlines.count&gt;0 then \n  begin \n    k:=stlines.IndexOf('SMS message'); \n    if k&gt;1 then \n    begin \n    dec(k); \n    for i:=k to stlines.count-5 do \n    begin \n      lblog.Items.Add(stlines[i]); \n    end; \n    end; \n  end; \nfinally \nstlines.Free; \nend; \nreadsmssavetoinbox; \nend;<\/pre>\n<p>Selanjutnya untuk penyimpanan data ke database disediakan procedure readsmssavetoinbox :<\/p>\n<pre>\nprocedure Tfmmain.readsmssavetoinbox; \nvar strsql,sender,msg:string; \nsmslines : tstringlist; \ntgl:string; \ni,beginpos,k:integer; \nbegin \ntry \n  smslines:= tstringlist.Create; \n  GetConsoleLineOutput('gammu --geteachsms',smslines); \n  if smslines.Count&gt;0  then \n  begin \n    beginpos:=smslines.IndexOf('SMS message'); \n    if beginpos&gt;1 then \n    begin \n      dec(beginpos); \n      \/\/for i:=beginpos to smslines.count-1 do \n      i:=beginpos; \n      while not i&lt;=smslines.count-5 do \n      begin \n            if i&gt;=smslines.count-5 then break; \n            if pos('\"Inbox\"',smslines[i])&gt;0 then \n            begin \n            sender:= copy(smslines[i+5],20,length(smslines[i+5])); \n            if sender&lt;&gt;'' then sender:= StringReplace(sender,'\"','',[rfReplaceAll, rfIgnoreCase]); \n            sender:= StringReplace(sender,'''','''''',[rfReplaceAll, rfIgnoreCase]); \n            msg:=smslines[i+8]; \n            tgl:= trim(copy(smslines[i+3],pos(',',smslines[i+3])+1,pos('+',smslines[i+3])-2-(pos(',',smslines[i+3])))); \n            strsql:='insert into inbox(inbox_sender,inbox_message,inbox_date) values (''' + sender + ''',''' + msg + ''','''+ tgl + ''')'; \n            execsql(strsql); \n            end; \n            i:=i+10; \n      end; \n      delsms; \n    end; \n\n  end; \nfinally \n  smslines.Free; \nend; \nend;<\/pre>\n<p>Execsql adalah procedure untuk mengeksekusi sql yang ada.<\/p>\n<p>Simpan prosedure diatas diprogram looping dengan memanfaatkan timer atau mebuat program services.<br \/>\nSelamat mencoba.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GAMMU merupakan software sms gateway yang cukup bagus dan terkenal . Selain mudah penggunaannya, perangkat modem gsm yang support cukup banyak mulai dari nokia, siemen dan Sonny ericsson. Untuk sony ericsson saya dah nyoba dan penggunaannya sangat mudah. Selain itu perangkat lain yang lebih cocok untuk dijadikan sms gateway dengan software gammu seperti modem gsm [&hellip;]<\/p>\n","protected":false},"author":53,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,1],"tags":[],"class_list":["post-31","post","type-post","status-publish","format-standard","hentry","category-delphi","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.unpad.ac.id\/arif\/wp-json\/wp\/v2\/posts\/31","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.unpad.ac.id\/arif\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.unpad.ac.id\/arif\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.unpad.ac.id\/arif\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.unpad.ac.id\/arif\/wp-json\/wp\/v2\/comments?post=31"}],"version-history":[{"count":0,"href":"https:\/\/blogs.unpad.ac.id\/arif\/wp-json\/wp\/v2\/posts\/31\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.unpad.ac.id\/arif\/wp-json\/wp\/v2\/media?parent=31"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.unpad.ac.id\/arif\/wp-json\/wp\/v2\/categories?post=31"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.unpad.ac.id\/arif\/wp-json\/wp\/v2\/tags?post=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}