Jumat, Mei 30, 2014

Menggunakan Gammu-smsd untuk manipulasi SMS

Untuk Siapa artikel ini :
Level pengguna : medium - advance
OS : Linux (ubuntu 14.04)

Asumsi :

  1. User sudah mahir menggunakan MySQL
  2. User sudah mengenal dengan baik struktur file Linux
  3. user sudah mengetahui cara koneksi modem dengan Linux. Jika belum lihat posting saya lainnya dalam blog ini
  4. MySQL server, Apache2, PHP sudah terinstall (jika belum gunakan perintah berikut

Cara menginstall lamp Linux apache, mySQL and PHP


sudo apt-get install ubuntu-restricted-extras
sudo apt-get install lamp-server^  ( Saya sangat suka ini karena hanya satu perintah akan menginstall paket PHP, MySQL, dan Apache sekaligus)
sudo apt-get install phpmyadmin (Hanya jika anda menginginkan paket ini_


Mari kita mulai


Setelah cukup lama vakum dari aktifitas blogging, kali ini saya akan membahas tentang salah satu fasilitas yang sebenarnya sudah lama ada dan sudah lama saya gunakan yaitu Gammu. Gammu adalah command Line tools yang dapat digunakan untuk mengirim dan menerima SMS dan MMS. Namun demikian sampai saat ini kelihatannya gammu hanya mendukung operator GSM.
Seperti biasa saya menggunakan Linux Ubuntu 14.04 LTS. Karena paket gammu ini tidak termasuk paket default maka perlu di install terlebih dahulu. Pastikan anda terhubung dengan internet.
Buka Terminal dengan

Ctrl+Alt+T
sudo apt-get install gammu


setelah selesai install juga gammu-smsd dengan cara

sudo apt-get install gammu-smsd


Selanjutnya gammu sudah siap digunakan.
Pada tulisan ini saya akan fokus ke gammu-smsd, yaitu aplikasi untuk menjalankan gammu di background (sementara anda dapat melakukan hal lain dengan komputer anda). Dan saya juga akan menggunakan database MySQL sebagai backbonenya karena saya ingin memanfaatkan sms ini ke dalam banyak hal antara lain :
  • Melakukan registrasi dengan cara ketik REG dst..
  • Melakukan ujian dengan sms untuk mahasiswa
  • Mengirim feedback ujian secara otomatis..
  • Mengirim Bulk SMS kepada banyak orang sekaligus
  • Mengirim SMS yang dipersonalisasi, misalnya dengan menyebutkan nama dalam sekali ketik dst...
Tentu saja anda harus mengembangkan sendiri software untuk komunikasi dengan database, atau anda bisa menggunakan sebuah web based application yaitu kalkun yang merupakan hasil karya anak negeri. Saya sendiri menciptakan interface khusus untuk keperluan saya sendiri dengan menggunakan web based application , PHP dan MySQL
Untuk saat ini saya hanya akan membahas cara menyambungkan gammu dengan modem/ HP anda. Cara mendeteksi HP/Modem sudah saya tulis di bagian lain di blog ini, silahkan di search

Kembali ke bahasan
Pada saat gammu-sms dijalankan, file konfigurasi yang dibaca pertama kali adalah sebuah file gammu-smsdrc yang ada di folder etc. jadi hal pertama yang harus anda modifikasi adalah file configurasi tersebut
saya menggunakan geany sebagai text editor saya. Tentu saja anda bisa pilih text editor yang lain.
Cara mengedit

sudo geany ./etc/gammu-smsdrc

perhatikan baris di bawah [gammu] dan [smsd] keduanya adalah bagian terpenting untuk mengakses HP / Modem anda

Konfigurasi saya tampak seperti ini


[gammu]

port = /dev/ttyUSB2
connection = at

[smsd]

service = sql
driver = native_mysql
host = localhost
LogFile = syslog
User = namaPengguna
Password = sangatrahasia
PC = localhost
Database = smsd

debuglevel = 0



port adalah port tempat modem / HP anda di colokkan di Komputer. Untuk colokan ke USB biasanya akan terdeteksi di /dev/ttUSB di tambah nomor. pada contoh di atas portnya ada di USB2
connection adalah mode koneksi. Standar koneksi modem/HP dapat menggunakan at. anda juga dapat menggunakan koneksi bluetooth untuk komunikasi dengan komputer. Pada konfigurasi inilah yang harus disesuiakan

service = sql berarti mengarahkan sms keluar masuk ke dalam database. Secara default gammu akan meletakkan sebagai teks dan disimpan di

inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

Oleh karenanya option ini harus diarahkan ke database untuk keperluan manipulasi

driver = native_mysql adalah mengarahkan gammu-smsd untuk menggunakan database MySQL. tentu anda harus menginstall MySQL server terlebih dahulu
host = localhost artinya menggunakan localhost (komputer ini) sebagai host
user dan password adalah nama dan password untuk pengguna data base smsd. Database yang digunakan secara default adalah database smsd. adapun struktur database smsd adalah sebagai berikut


-- phpMyAdmin SQL Dump
-- version 2.8.0.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jun 10, 2006 at 11:08 PM
-- Server version: 5.0.18
-- PHP Version: 5.1.3
--
-- Database: `smsd`
--

-- --------------------------------------------------------

--
-- Table structure for table `daemons`
--

CREATE TABLE `daemons` (
  `Start` text NOT NULL,
  `Info` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `daemons`
--


-- --------------------------------------------------------

--
-- Table structure for table `gammu`
--

CREATE TABLE `gammu` (
  `Version` integer NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `gammu`
--

INSERT INTO `gammu` (`Version`) VALUES (14);

-- --------------------------------------------------------

--
-- Table structure for table `inbox`
--

CREATE TABLE `inbox` (
  `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `ReceivingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
  `Text` text NOT NULL,
  `SenderNumber` varchar(20) NOT NULL default '',
  `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
  `UDH` text NOT NULL,
  `SMSCNumber` varchar(20) NOT NULL default '',
  `Class` integer NOT NULL default '-1',
  `TextDecoded` text NOT NULL default '',
  `ID` integer unsigned NOT NULL auto_increment,
  `RecipientID` text NOT NULL,
  `Processed` enum('false','true') NOT NULL default 'false',
  PRIMARY KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- Dumping data for table `inbox`
--


-- --------------------------------------------------------

--
-- Table structure for table `outbox`
--

CREATE TABLE `outbox` (
  `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00',
  `SendingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
  `SendBefore` time NOT NULL DEFAULT '23:59:59',
  `SendAfter` time NOT NULL DEFAULT '00:00:00',
  `Text` text,
  `DestinationNumber` varchar(20) NOT NULL default '',
  `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
  `UDH` text,
  `Class` integer default '-1',
  `TextDecoded` text NOT NULL default '',
  `ID` integer unsigned NOT NULL auto_increment,
  `MultiPart` enum('false','true') default 'false',
  `RelativeValidity` integer default '-1',
  `SenderID` varchar(255),
  `SendingTimeOut` timestamp NULL default '0000-00-00 00:00:00',
  `DeliveryReport` enum('default','yes','no') default 'default',
  `CreatorID` text NOT NULL,
  PRIMARY KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE INDEX outbox_date ON outbox(SendingDateTime, SendingTimeOut);
CREATE INDEX outbox_sender ON outbox(SenderID);

--
-- Dumping data for table `outbox`
--


-- --------------------------------------------------------

--
-- Table structure for table `outbox_multipart`
--

CREATE TABLE `outbox_multipart` (
  `Text` text,
  `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
  `UDH` text,
  `Class` integer default '-1',
  `TextDecoded` text default NULL,
  `ID` integer unsigned NOT NULL default '0',
  `SequencePosition` integer NOT NULL default '1',
  PRIMARY KEY (`ID`, `SequencePosition`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `outbox_multipart`
--


-- --------------------------------------------------------

--
-- Table structure for table `pbk`
--

CREATE TABLE `pbk` (
  `ID` integer NOT NULL auto_increment,
  `GroupID` integer NOT NULL default '-1',
  `Name` text NOT NULL,
  `Number` text NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `pbk`
--


-- --------------------------------------------------------

--
-- Table structure for table `pbk_groups`
--

CREATE TABLE `pbk_groups` (
  `Name` text NOT NULL,
  `ID` integer NOT NULL auto_increment,
  PRIMARY KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- Dumping data for table `pbk_groups`
--


-- --------------------------------------------------------

--
-- Table structure for table `phones`
--

CREATE TABLE `phones` (
  `ID` text NOT NULL,
  `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00',
  `TimeOut` timestamp NOT NULL default '0000-00-00 00:00:00',
  `Send` enum('yes','no') NOT NULL default 'no',
  `Receive` enum('yes','no') NOT NULL default 'no',
  `IMEI` varchar(35) NOT NULL,
  `NetCode` varchar(10) default 'ERROR',
  `NetName` varchar(35) default 'ERROR',
  `Client` text NOT NULL,
  `Battery` integer NOT NULL DEFAULT -1,
  `Signal` integer NOT NULL DEFAULT -1,
  `Sent` int NOT NULL DEFAULT 0,
  `Received` int NOT NULL DEFAULT 0,
  PRIMARY KEY (`IMEI`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `phones`
--

-- --------------------------------------------------------

--
-- Table structure for table `sentitems`
--

CREATE TABLE `sentitems` (
  `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00',
  `SendingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
  `DeliveryDateTime` timestamp NULL,
  `Text` text NOT NULL,
  `DestinationNumber` varchar(20) NOT NULL default '',
  `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL default 'Default_No_Compression',
  `UDH` text NOT NULL,
  `SMSCNumber` varchar(20) NOT NULL default '',
  `Class` integer NOT NULL default '-1',
  `TextDecoded` text NOT NULL default '',
  `ID` integer unsigned NOT NULL default '0',
  `SenderID` varchar(255) NOT NULL,
  `SequencePosition` integer NOT NULL default '1',
  `Status` enum('SendingOK','SendingOKNoReport','SendingError','DeliveryOK','DeliveryFailed','DeliveryPending','DeliveryUnknown','Error') NOT NULL default 'SendingOK',
  `StatusError` integer NOT NULL default '-1',
  `TPMR` integer NOT NULL default '-1',
  `RelativeValidity` integer NOT NULL default '-1',
  `CreatorID` text NOT NULL,
  PRIMARY KEY (`ID`, `SequencePosition`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE INDEX sentitems_date ON sentitems(DeliveryDateTime);
CREATE INDEX sentitems_tpmr ON sentitems(TPMR);
CREATE INDEX sentitems_dest ON sentitems(DestinationNumber);
CREATE INDEX sentitems_sender ON sentitems(SenderID);

--
-- Dumping data for table `sentitems`
--


--
-- Triggers for setting default timestamps
--

DELIMITER //

CREATE TRIGGER inbox_timestamp BEFORE INSERT ON inbox
FOR EACH ROW
BEGIN
    IF NEW.ReceivingDateTime = '0000-00-00 00:00:00' THEN
        SET NEW.ReceivingDateTime = CURRENT_TIMESTAMP();
    END IF;
END;//

CREATE TRIGGER outbox_timestamp BEFORE INSERT ON outbox
FOR EACH ROW
BEGIN
    IF NEW.InsertIntoDB = '0000-00-00 00:00:00' THEN
        SET NEW.InsertIntoDB = CURRENT_TIMESTAMP();
    END IF;
    IF NEW.SendingDateTime = '0000-00-00 00:00:00' THEN
        SET NEW.SendingDateTime = CURRENT_TIMESTAMP();
    END IF;
    IF NEW.SendingTimeOut = '0000-00-00 00:00:00' THEN
        SET NEW.SendingTimeOut = CURRENT_TIMESTAMP();
    END IF;
END;//

CREATE TRIGGER phones_timestamp BEFORE INSERT ON phones
FOR EACH ROW
BEGIN
    IF NEW.InsertIntoDB = '0000-00-00 00:00:00' THEN
        SET NEW.InsertIntoDB = CURRENT_TIMESTAMP();
    END IF;
    IF NEW.TimeOut = '0000-00-00 00:00:00' THEN
        SET NEW.TimeOut = CURRENT_TIMESTAMP();
    END IF;
END;//

CREATE TRIGGER sentitems_timestamp BEFORE INSERT ON sentitems
FOR EACH ROW
BEGIN
    IF NEW.InsertIntoDB = '0000-00-00 00:00:00' THEN
        SET NEW.InsertIntoDB = CURRENT_TIMESTAMP();
    END IF;
    IF NEW.SendingDateTime = '0000-00-00 00:00:00' THEN
        SET NEW.SendingDateTime = CURRENT_TIMESTAMP();
    END IF;
END;//

DELIMITER ;


Untuk mengirim sms, anda tinggal memasukkan data ke tabel outbox. tabel inbox adalah berisis semua sms masuk. tabel sent berisi semua sms yang berhasil dikirim.

Sedikit tentang gammu

Berbeda dengan gammu-smsd, gammu memiliki konfigurasi yang harus dibuat sendiri dan diletakkan di salah satu dari folder berikut ini



$XDG_CONFIG_HOME/gammu/config
~/.config/gammu/config
~/.gammurc
/etc/gammurc


pada intinya, hanya configurasi [gammu] yang perlu dimodifikasi, yaitu connection dan devicenya saja.
Salah satu software siap pakai yang dikembangkan berdasarkan gammu adalan wammu. silahkan search di internet.

0 comments:

Posting Komentar

Write your comment here