Thursday, September 20, 2018

Install & Menggunakan Gammu dan Java di Windows Untuk SMS

I. Download GAMMU

Untuk mendownload aplikasi Gammu, resmi gammu https://wammu.eu/download/gammu/
Silakan pilih sesuai dengan arsitektur windows yang digunakan, 32 atau 64 bit. Pada contoh ini saya menggunakan versi 64 bit.

II. Cara Install GAMMU di Windows

Untuk menginstall Gammu, dobel klik file installer, kemudian ikuti wizard yang ada.

II.1. Pilih Add Gammu to the system PATH for All users. Pilih opsi “Add Gammu to the system PATH for All users”. Opsi ini akan menambahkan path direktori instalasi gammu ke dalam Windows Environment Variable, sehingga memungkinkan kita dapat menjalankan perintah gammu melalui command prompt termasuk menjalankan / menginstall service sms daemon.
Cara Install Gammu di Windows
II.2. Pilih direktori dimana Gammu akan diinstall atau next
II.3. Pilih nama direktori untuk start menu atau next
II.4. Pada pilihan components yang ingin diinstall, pilih full. Dengan opsi ini, Gammu akan mengcopy semua file, termasuk contoh file konfigurasi dan contoh file sql, sehingga akan memudahkan kita melakukan konfigurasi.
Tutorial Install Gammu di Windows
Klik Install dan tunggu proses instalasi selesai.

III. Mengirim SMS Dengan GAMMU Melalui Command Prompt

Terdapat dua cara untuk mengirim sms dengan Gammu, yaitu melalui command prompt dan memasukkan data pada database. Mari kita bahas cara yang pertama.

1Buat File Konfigurasi

Untuk dapat menggunakan Gammu, terlebih dahulu buat file konfigurasi dengan nama gammurc (baca gammu rc) dan tempatkan pada direktori bin yang ada pada folder instalasi, pada contoh kali ini C:\Program Files\Gammu 1.38.1\bin
Atau, sobat dapat mengcopy contoh file konfigurasi dari folder instalasi di C:\Program Files\Gammu 1.38.1\share\doc\gammu\examples\config
Selanjutnya, isi dengan konfigurasi sebagai berikut:
[gammu]
device = com6:
connection = at460800
Penjelasan:
  • com6 adalah nomor port dari modem, untuk mengetahuinya, klik kanan pada My Computer atau This PC, kemudian klik properties, selanjutnya pilih device manager dan pilih bagian modem.
    Pilih Port Modem
  • Selanjutnya, untuk connection, kita gunakan AT diikuti kecepatan dari port tersebut (seperti pada contoh gambar diatas). Kecepatan port sifatnya opsional, kita dapat mengabaikannya, misal: connection = at

2Jalankan Gammu

Sebelum melangkah lebih jauh, pertama-tama tes apakah Gammu dapat membaca modem
Jalankan command prompt, arahkan cursor ke direktori bin, kemudian ketikkan perintah gammu identify. Perintah ini untuk memastikan bahwa Gammu dapat membaca modem kita.
Mengidentifikasi Modem
Pada contoh diatas, terlihat bahwa saya menggunakan model M 150-2 (Huawei E3372). 
Perlu diperhatikan bahwa jika modem digunakan (misal: koneksi internet sedang aktif), maka kita akan mendapatkan pesan error:
C:\Program Files\Gammu 1.38.1\bin>gammu identify
Error opening device. Unknown, busy or no permissions.
Seanjutnya, mari kita tes dengan mengirim sms. Jalankan perintah
Jalankan perintah gammu --sendsms text [nomor-hp], misal gammu -sendsms text 08651360000, kemudian tulis pesan yang ingin dikirim. Setelah selesai, tekan enter, kemudian CTRL+Z (akan mencetak ^Z) kemudian tekan enter lagi. 
Hasil yang kita peroleh:
Kirim SMS Dengan GAMMU Via Command Prompt
Proses ini bisa saja gagal, misal memperoleh pesan error:
Sending SMS 1/1....waiting for network answer..error 38, message reference=-1
Unknown error.
Penyebab error bisa bermacam macam, bisa pulsa habis, kartu belum aktif, modem tidak terkoneksi  dengan baik, dll.

IV. Mengirim SMS Dengan Gammu Melalui Insert Data Pada Database

Cara kedua untuk mengirim pesan dengan Gammu adalah memasukkan data ke dalam tabel pada database tertentu. Ketika data dimasukkan, otomatis Gammu akan mengirim pesan sesuai dengan data yang ada.
Cara ini merupakan cara paling fleksibel dan banyak diterapkan oleh berbagai aplikasi pengirim sms massal, karena lebih mudah memasukkan data pada database daripada menjalankan command prompt.
Untuk keperluan tersebut, kita perlu menjalankan smsd (baca sms daemon). Daemon ini akan mendeteksi aktivitas modem dan server database, sehingga aktivitas terkait sms dapat dilakukan/disimpan pada database.
Pada contoh ini, database MySQL.

1Cek Driver Database Yang Tersedia

Sebelum menggunakan database, perlu mengecek driver database yang tersedia pada paket gammu yang diinstall. untuk mengetahuinya, jalankan perintah: gammu-smsd -v, perhatikan gambar berikut:
Driver Database Yang Disertakan Pada Installer Gammu
Pada contoh diatas, terlihat bahwa hanya driver ODBC yang tersedia, untuk itu tidak dapat menggunakan driver lain seperti native_mysql.
Sejak versi 1.33.0, driver database yang disertakan pada paket instalasi Gammu adalah ODBC, sehingga semua koneksi database harus melalui ODBC

2Buat File Konfigurasi

Selanjutnya, buat file konfigurasi smsd dengan nama smsdrc (baca smsd-rc), atau copy dari folder instalasi di C:\Program Files\Gammu 1.38.1\share\doc\gammu\examples\config
Isikan file konfigurasi berikut:
[gammu]
device = com6:
connection = at

[smsd]
service = sql
driver = odbc
sql = mysql
host = mysql_odbc
user = root
password =
database = gammu
LogFile = smsdlog.log
Penjelasan:
  • sql = mysql artinya bahasa sql yang digunakan adalah mysql
  • host diisi dengan nama odbc yang kita buat, bukan localhost seperti yang biasa kita gunakan. Untuk membuat koneksi ODBC, silakan baca tutorial: Setting ODBC MySQL Untuk Gammu
  • Pada koneksi ODBC, nama database tidak berpengaruh karena database ini ditentukan saat kita membuat koneksi ODBC. Pada contoh diatas, bagian database = gammu hanya sebagai contoh, dapat dihilangkan.
  • Logfile digunakan untuk menyimpan semua aktifitas daemon, file ini akan disimpan pada direktori bin.

3Buat Database

Selanjutnya, perlu untuk membuat database yang akan digunakan Gammu untuk menyimpan semua data. Untuk membuatnya, dump file sql yang ada di folder C:\Program Files\Gammu 1.38.1\share\doc\gammu\examples\sql
Contoh File SQL Gammu
Pada contoh kali ini saya dump menggunakan phpMyAdmin bawaan XAMPP. 
Untuk load file sql: (1) Buat database, misal gammu (2) Klik database tersebut, kemudian klik menu import yang ada di sebelah atas (3) Pilih file .sql, jika berhasil maka akan terbentuk tabel sebagai berikut:
Tabel Database Gammu
Penjelasan:
  • gammu. Tabel ini digunakan untuk menyimpan versi Gammu.
  • inbox. Tabel ini berisi SMS yang masuk.
  • outbox. Tabel ini akan menyimpan pesan yang ingin dikirim. Pengisian data pada tabel ini akan memicu gammu mengirim sms sesuai dengan data yang diisikan.
  • outboxmultipart. Secara default kita hanya dapat menyimpan pesan sebanyak 160 karakter. Untuk karakter lebih dari 160, pesan akan disimpan pada tabel ini.
  • phones. Tabel ini akan digunakan gammu untuk menyimpan  data phone / modem seperti nomor IMEI, NetCode, dll
  • sentitems. Tabel ini akan menyimpan semua pesan dari tabel outbox yang telah dikirim, baik berhasil maupun gagal.
Perlu diperhatikan bahwa pada file sql, terdapat beberapa statemen yang tidak kompatibel dengan MySQL versi 5.7.x, sehingga, jika menemui pesan error, coba turunkan versi MySQL yang digunakan

4Jalankan Service SMS Daemon

Selanjutnya, jalankan service sms daemon. Jalankan perintah:
gammu-smsd -c smsdrc
Contoh sebagai berikut:
Menjalankan Service Smsd Pada Gammu
Penjelasan:
  • -c merujuk pada file konfigurasi yang akan digunakan, dalam hal ini file smsdrc, untuk opsi lainnya, dapat dilihat dengan menjalankan perintah gammu-smsd
  • Jika berhasil, maka cursor akan berhenti, tidak kembali ke direktori awal ( C:\Program Files\Gammu 1.38.1\bin )
Penting diperhatikan bahwa untuk dapat menjalankan service, kita perlu hak akses administrator, jalankan command prompt dengan klik kanan » Run as administrator

5Kirim SMS Via Database

Selanjutnya, tes kirim SMS dengan memasukkan data ke tabel outbox.
Tabel tersebut terdiri dari banyak sekali field, namun demikian, kita hanya perlu mengisi 3 field saja, yaitu DestinationNumber berisi nomor tujuan, TextDecoded berisi pesan yang dikirim, dan CreatorID berisi ID pembuat pesan (diisi bebas)
Misal masukkan data menggunakan phpMyAdmin. Buka phpMyAdmin, klik database gammu, kemudian pilih Tab SQL dan jalankan perintah berikut:
INSERT INTO outbox (DestinationNumber, TextDecoded, CreatorID) VALUES ('085866927217', 'Tes kirim SMS dari database', 'agusph');
Gambar:
Kirim SMS dengan Gammu Melalui Database
Tunggu beberapa saat hingga data terkirim. setelah terkirim, maka data akan berpindah ke tabel sentitems.

6Install Service SMSD

Agar service smsd berjalan secara otomatis ketika widows dijalankan, maka kita perlu menginstall nya ke dalam service windows. Untuk menginstallnya, jalankan perintah:
gammu-smsd -c smsdrc -i
Jika berhasil, maka kita akan memperoleh pesan:
C:\Program Files\Gammu-1.38.1\bin>gammu-smsd -c smsdrc -i
Service GammuSMSD started sucessfully
Service yang telah diinstall dapat di cek pada windows services. Secara default nama service tersebut adalah Gammu SMSD Service (GammuSMSD)
Install Service Gammu di Windows
Secara default, service tersebut belum berjalan, untuk itu, kita perlu menjalankannya. Jalankan perintah
gammu-smsd -c smsdrc -s

Penting diperhatikan bahwa meskipun kita memperoleh pesan sukses, namun pada kenyataannya, bisa jadi service tersebut tidak berjalan, untuk itu, agar lebih yakin, kita dapat menjalankannya secara manual:
Start Service Gammu

Untuk menghapus service, kita gunakan perintah:
gammu-smsd -c smsdrc -u

V. Menjalankan Gammu dengan Java

sintax:

package smsgateway;

import java.io.IOException;

public class SmsGateway {

    public static void main(String[] args) throws IOException {

        String pathGammu="C:/Gammu/bin/gammu-smsd-inject";

        String fileKonfigurasi="C:/Gammu/bin/smsdrc";

        Runtime runtime= Runtime.getRuntime();

        runtime.exec(pathGammu+" -c "+fileKonfigurasi+" TEXT 0896677xxxxx -text \"Halo Tes Gammu Melalui Java\" ");

    }

}

Path Gammu dan file konfigurasi perlu didefinisikan terdahulu karena Windows tidak mengenalinya secara langsung kecuali ditambahkan Gammu pada Path Variable. Pada code diatas baik Path Gammu maupun file konfigurasi dibuat statis demi kesederhanaan tutorial ini. Di dunia nyata hendaknya dibuat dinamis. Begitu pula dengan nomor tujuan sms dan pesan yang dikirim dibuat statis dengan alasan yang sama.

atau bisa juga langsung dilakukan proses insert ke database dimana bisa langsung dikirimkan smsnya


VI. Install Di Linux

Instalasi Gammu Di Linux (ubuntu 11.04)

Cara install diubuntu, karena gammu telah ada dalam repository ubuntu. Sehingga cukup buka terminal dan ketik perintah berikut:
ketikan perintah
sudo apt-get install gammu
tekan Enter tunggu hingga selesai.

Setelah selesai, lakukan konfigurasi modem (Saya Menggunakan Modem Wavecom Fastrack)
Caranya:
Ketikan pada terminal:
dmesg | grep tty
Perhatikan Tulisan yang berwarna Merah, bisa dilihat bahwa modem saya di ter-identifikasi pada ttyUSB0. Ingat2 atau bisa Copy.

Ok, selanjutnya kita konfigurasikan gammu supaya dapat mengenali modem
Ketikan:
gammu-config

Masukan enter letakan pointer pada port, kemudian tekan enter pada edit, masukan /dev/ttyUSB0 (Sesuaikan dengan modem/HP yang terdeteksi pada langkah sebelumnya). pindahkan ponter pada bagian Connection, kemudian tekan edit pilih at115200.

Ok, Kemudian Save
Sekarang kita coba konfigurasi modem
ketik pada terminal:
gammu --identify
Adakadabra, instalasi gammu di ubuntu selesai .....

Gak afdol kalo belum di coba silahkan ketikan
gammu getussd *888#
Command Diatas untuk mengecek pulsa menggunakan gammu sesuaikan *888# dengan operator yang anda gunakan.

Thursday, September 13, 2018

Akses Database Using Python


Standar Interface Python untuk database adalah Python DB-API. Kebanyakan Interface database Python mematuhi standar ini.
Anda bisa memilih database yang tepat untuk aplikasi Anda. API Database Python mendukung berbagai macam server database seperti.
  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase
  • SQLite
Untuk mempelajari lebih lengkap daftar antarmuka/interface database Python - Antarmuka dan API Database Python. Anda harus mendownload modul DB API terpisah untuk setiap database yang perlu Anda akses. Sebagai contoh, jika perlu mengakses database Oracle dan juga database MySQL, Anda harus mendownload kedua modul database Oracle dan MySQL.
API DB menyediakan standar minimal untuk bekerja dengan database menggunakan struktur dan sintaks Python sedapat mungkin. API ini meliputi:
  • Mengimpor modul API.
  • Mendapatkan koneksi dengan database.
  • Menerbitkan pernyataan SQL dan prosedur tersimpan.
  • Menutup koneksi
Python memiliki dukungan built-in untuk SQLite. Pada bagian ini, akan mempelajari semua konsep menggunakan MySQL. Modul MySQLdb, antarmuka yang populer dengan MySQL tidak kompatibel dengan Python 3. Sebagai gantinya, akan menggunakan modul PyMySQL.

Apa itu PyMySQL ?

PyMySQL adalah sebuah antarmuka untuk menghubungkan ke server database MySQL dari Python. Ini mengimplementasikan API Database Python v2.0 dan berisi perpustakaan klien MySQL murni-Python. Tujuan PyMySQL adalah penggantian drop-in untuk MySQLdb.

Cara Instal PyMySQL

Sebelum melanjutka, pastikan Anda telah menginstal PyMySQL di komputer. Cukup ketik berikut ini di skrip Python dan jalankan.
import PyMySQL
Jika menghasilkan hasil berikut, berarti modul MySQLdb tidak terpasang:
Traceback (most recent call last): File "test.py", line 3, in Import PyMySQLImportError: No module named PyMySQL
Untuk menginstal modul PyMySQL silahkan gunakan command/perintah berikut di command prompt:
pip install PyMySQL

Database Connection

Sebelum terhubung ke database MySQL, pastikan beberapa hal dibawah ini :
  • telah membuat database TESTDB.
  • telah membuat tabel EMPLOYEE di TESTDB.
  • Tabel ini memiliki bidang FIRST_NAME, LAST_NAME, AGE, SEX, dan INCOME.
  • User ID “testuser” dan password “test123” diatur untuk mengakses TESTDB.
  • Python modul PyMySQL terinstal dengan benar pada mesin komputer.
  • Anda telah melalui tutorial MySQL untuk memahami Dasar-Dasar MySQL
Berikut ini adalah contoh koneksi dengan database MySQL “TESTDB”
import PyMySQL

# Open database connection
db = PyMySQL.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()

print ("Database version : %s " % data)

# disconnect from server
db.close()

Membuat Tabel Database

import PyMySQL

# Open database connection
db = PyMySQL.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
   FIRST_NAME  CHAR(20) NOT NULL,
   LAST_NAME  CHAR(20),
   AGE INT,  
   SEX CHAR(1),
   INCOME FLOAT )"""

cursor.execute(sql)

# disconnect from server
db.close()

Operasi Insert

Contoh berikut, mengeksekusi pernyataan SQL INSERT untuk membuat catatan di tabel EMPLOYEE
import PyMySQL

# Open database connection
db = PyMySQL.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
   LAST_NAME, AGE, SEX, INCOME)
   VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()
Contoh di atas bisa dituliskan sebagai berikut untuk membuat query SQL secara dinamis
import PyMySQL

# Open database connection
db = PyMySQL.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
   LAST_NAME, AGE, SEX, INCOME) \
   VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
   ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Read Operation

READ Operation pada database apapun berarti mengambil beberapa informasi berguna dari database.
Setelah koneksi database terbentuk, siap untuk membuat query ke dalam database ini. bisa menggunakan metode fetchone() untuk mengambil satu record atau fetchall() metode untuk mengambil beberapa nilai dari tabel database.
Fetchone () - Ini mengambil baris berikut dari kumpulan hasil query. Set hasil adalah objek yang dikembalikan saat objek kursor digunakan untuk query tabel.
Fetchall () - Ini menjemput semua baris dalam kumpulan hasil. Jika beberapa baris telah diekstraksi dari himpunan hasil, maka akan diambil baris yang tersisa dari kumpulan hasil.
Rowcount - Ini adalah atribut read-only dan mengembalikan jumlah baris yang dipengaruhi oleh metode execute ().
Prosedur berikut menanyakan semua catatan dari tabel EMPLOYEE yang memiliki gaji lebih dari 1000
import PyMySQL

# Open database connection
db = PyMySQL.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print ("fname = %s,lname = %s,age = %d,sex = %s,income = %d" % \
             (fname, lname, age, sex, income ))
except:
   print ("Error: unable to fetch data")

# menutup koneksi ke server
db.close()
Setelah Anda eksekusi kode diatas, akan muncul hasil seperti dibawah ini : fname = Mac, lname = Mohan, age = 20, sex = M, income = 2000

Update Operation

Operasi UPDATE pada database apapun berarti mengupdate satu atau lebih catatan, yang sudah tersedia di database. Prosedur berikut memperbarui semua catatan yang memiliki SEX sebagai ‘M’. Di sini, meningkatkan UMUR semua laki-laki satu tahun.
import PyMySQL

# Open database connection
db = PyMySQL.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Delete Operation

Operasi DELETE diperlukan bila ingin menghapus beberapa catatan dari database. Berikut ini adalah prosedur untuk menghapus semua catatan dari EMPLOYEE dimana AGE lebih dari 20
import PyMySQL

# Open database connection
db = PyMySQL.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()
Selain itu masih ada beberapa operasi sebagai berikut :
  • Commit Operation db.commit()
  • Rollback Operation db.rollback()
  • Disconnect Operation db.close()

Memunculkan Simbol & Emoji Pada OS Mac

  Memunculkan Simbol & Emoji  1. Buka aplikasi Pages / Notes pada Macbook. 2. Klik pada Menubar Edit --> Pilih Emoji and Symbols a...