Mengontrol Relay USB-2REL Via Web/Internet Menggunakan Python-CGI


usb2rel_python_cgi

Mengontrol relay via web/internet tidak pernah semudah ini saya rasakan. Pada tulisan terdahulu tentang pengontrolan modul USB-2REL via web/internet menggunakan PHP, saya menggunakan program utilitas USB2R.EXE untuk mengontrol USB-2REL. Program tersebut dieksekusi oleh PHP menggunakan fungsi exec().

Dengan Python-CGI, kita tidak memerlukan lagi program USB2R.EXE karena Python memiliki library yang siap-pakai dan handal untuk mengakses port USB. Modul yang digunakan adalah PyUSB 1.0. Modul ini dapat Anda download melalui situsnya di: http://sourceforge.net/projects/pyusb/.

Langsung saja, berikut adalah listing program pyusb2rel.cgi yang selengkapnya.

# pyusb2rel.cgi
# Kontrol relay USB-2REL via web
# Chandra MDE (22/04/2013)
# Teknik Elektro Links
# http://teknikelektrolinks.com

import cgi
import usb.core
usb2rel = usb.core.find(idVendor=5824, idProduct=1500)
fields = cgi.FieldStorage()

print "Content-type: text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<h2>Kontrol USB-2REL Via Web (Python-CGI)</h2>"
print "<hr/>"
print "</head>"
print ‘<body style="font-family:Tahoma">’
print ‘<br />’
print ‘<table>’
print ‘<tr>’
print ‘  <form action="pyusb2rel.cgi" method="GET">’
print ‘  <td align="center">’
print ‘    <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-1 ON"><br /><br />’
print ‘    <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-2 ON"><br /><br />’
print ‘    <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY1,2 ON"><br /><br />’
print ‘  </td>’
print ‘  <td></td><td></td><td></td>’
print ‘  <td align="center">’
print ‘    <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-1 OFF"><br /><br />’
print ‘    <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-2 OFF"><br /><br />’
print ‘    <input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY1,2 OFF"><br /><br />’
print ‘  </td>’
print ‘  <td></td><td></td><td></td>’
print ‘  </form>’
print ‘  <td><img src="usb2rel.jpg" width="200" height="150" style="border:2px solid black"><br /><br /></td>’
print ‘</tr><tr></tr><tr></tr>’
print ‘</table>’
print ‘<hr/>’
print ‘<h4>Chandra MDE – <a href="http://teknikelektrolinks.com">http://teknikelektrolinks.com</a></h4>’
print ‘</body>’
print ‘</html>’

# proses permintaan user
if fields["BTN"].value == "RELAY-1 ON":
    usb2rel.ctrl_transfer(0x40, 1, 1, 1, None)
elif fields["BTN"].value == "RELAY-1 OFF":
    usb2rel.ctrl_transfer(0x40, 1, 0, 1, None)
elif fields["BTN"].value == "RELAY-2 ON":
    usb2rel.ctrl_transfer(0x40, 1, 1, 2, None)
elif fields["BTN"].value == "RELAY-2 OFF":
    usb2rel.ctrl_transfer(0x40, 1, 0, 2, None)
elif fields["BTN"].value == "RELAY1,2 ON":
    usb2rel.ctrl_transfer(0x40, 2, 0, 0, None)
elif fields["BTN"].value == "RELAY1,2 OFF":
    usb2rel.ctrl_transfer(0x40, 3, 0, 0, None)

Skrip mengimport modul cgi dan usb.core untuk berinteraksi dengan web browser melalui CGI dan berinteraksi dengan modul USB-2REL.

Skrip menampilkan 6 buah button submit dengan nama yang sama yakni name="BTN". Pemberian nama yang sama untuk keenam button submit ini bertujuan untuk memudahkan proses penyeleksian tombol manakah yang ditekan oleh user.

Ukuran button submit adalah 120px x 40px yang diatur menggunakan parameter style sebagai berikut:

print ‘<input type="submit" name="BTN" style="width: 120px; height: 40px;" value="RELAY-1  OFF"><br /><br />’

Parameter value diisi nilai string sesuai dengan fungsi button. Button untuk mengaktifkan RELAY-1 diberi value="RELAY-1  ON". Untuk button yang berfungsi untuk mematikan RELAY-1 diberi value="RELAY-2 OFF". Demikian seterusnya.

Untuk mengambil data yang di-submit oleh user, perintah:

fields = cgi.FieldStorage()

dan untuk menyeleksi button manakah yang ditekan oleh user programnya adalah sebagai berikut:

# proses permintaan user
if fields["BTN"].value == "RELAY-1 ON":
    usb2rel.ctrl_transfer(0x40, 1, 1, 1, None)
elif fields["BTN"].value == "RELAY-1 OFF":
    usb2rel.ctrl_transfer(0x40, 1, 0, 1, None)
elif fields["BTN"].value == "RELAY-2 ON":
    usb2rel.ctrl_transfer(0x40, 1, 1, 2, None)
elif fields["BTN"].value == "RELAY-2 OFF":
    usb2rel.ctrl_transfer(0x40, 1, 0, 2, None)
elif fields["BTN"].value == "RELAY1,2 ON":
    usb2rel.ctrl_transfer(0x40, 2, 0, 0, None)
elif fields["BTN"].value == "RELAY1,2 OFF":
    usb2rel.ctrl_transfer(0x40, 3, 0, 0, None)

Di sinilah letak keuntungan dari pemberian parameter name yang sama untuk keenam button sumbit meskipun fungsinya berbeda-beda. Dengan name yang sama kita dapat dengan mudah mengidentifikasi tombol manakah yang ditekan oleh user.

Pada awal skrip, handle untuk modul USB-2REL didapatkan dengan perintah:

usb2rel = usb.core.find(idVendor=5824, idProduct=1500)

Setelah handle didapat, maka skrip dapat mengirimkan perintah ke modul USB-2REL dengan perintah:

usb2rel.ctrl_transfer(0x40, 1, 1, 1, None)   #RELAY-1 ON

Pad eksperimen ini saya menggunakan web server Mongoose versi 3.6. Setting untuk program Mongoose pada eksperimen ini adalah sebagai berikut:

usb2rel_python_gui_mongoose

Yang terpenting adalah parameter cgi_interpreter harus diarahkan pada file python.exe yang ada pada komputer yang digunakan sebagai server. Pada komputer saya, python.exe terletak pada direktori c:\python25\python.exe.

Python itu cespleng, bukan?๐Ÿ˜€

Jika Anda berminat untuk bereksperimen dengan modul USB-2REL, Anda bisa mendapatkannya di: http://teknikelektrolinks.com.

Dan jika Anda menginginkan file-file hasil eksperimen ini, yakni yang terdiri dari file pyusb2rel.cgi lengkap dengan web server Mongoose yang siap digunakan, silakan memberikan komentar pada tulisan ini disertai alamat email yang benar.

Semoga bermanfaat. Selamat belajar dan selamat berkarya!

๐Ÿ™‚

5 comments

  1. Lukman · April 26, 2013

    Mau donk di share ilmunya.kebetulan ane punya hobby merakit elrktronik/elektrik

    • Chandra MDE · April 27, 2013

      Terima kasih atas komentarnya.
      Download link sudah kami kirim ke alamat email Anda.
      Semoga bermanfaat.๐Ÿ™‚

  2. mynameadam · April 27, 2013

    cara di atas bisa dikembangkan dengan mengendalikan peralatan usb-rel, menggunakan android dg widget webkit.
    jd alur kerjanya adaah = > aplikasi android via webkit –> konek ke server usb-rel –> usb-rel.
    (lagi dicoba) :-p

    • Chandra MDE · April 27, 2013

      Sip, langkah selanjutnya adalah mengontrol USB-2REL dengan Android.
      Semoga cepat terlaksana. Btw, download link sudah kami kirim ke alamat email Bapak.
      Thank you for using USB-2REL.๐Ÿ™‚

  3. jihat · Juli 13, 2013

    thanks pak . atas share ilmunya …….
    ini akan saya kembangkan ke tempat saya bekerja >>>>>>>>thanks

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s