Mengirim Perintah ke Raspberry Pi dengan Email

Seperti yang sudah saya ceritakan, koneksi internet rumah hanya memakai modem 3G yang tidak bisa dihubungi dari luar jaringan internet. Karena itu saya mencari-cari cara bagaimana supaya saya bisa melihat CCTV itu waktu di luar kantor.

Solusi yang straightforward adalah mengupload gambar yang tercapture ke web server melalui FTP. Cukup berhasil tetapi menghabiskan kuota internet karena cukup banyak gambar yang harus diupload. Jadi, saya harus memikirkan cara supaya saya bisa meminta gambar tersebut. Dengan cara apa saya bisa menghubungi si Raspberry? Saya pikir email merupakan solusi yang cukup praktis.

Idenya begini, saya akan mengirimkan email ke alamat tertentu. Raspberry Pi akan memonitor email tersebut kalau-kalau ada pesan yang masuk. Raspberry akan membaca email tersebut, menerjemahkan pesan itu dengan respon yang telah ditentukan sebelumnya.

Saya menulis beberapa baris program untuk melakukan ini. Saya menulis dengan bahasa Python — bukan bahasa yang saya kuasai. Saya memilih Python karena saya pikir Python sudah tersedia di Raspberry Pi (Raspbmc). Saya pikir akan terlalu berat kalau pakai Java. Saya mencari beberapa snippet¬†kode program untuk membaca email dengan protokol IMAP, lalu mengirimkan balasan ke si pengirim dengan SMTP. Email account yang saya pakai adalah GMail.


import imaplib
import email
import smtplib
from email.parser import Parser
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart


from subprocess import call
from os import listdir

USERNAME="username@gmail.com"
PASSWORD="emailpassword"

# fetch email using IMAP
mail = imaplib.IMAP4_SSL("imap.gmail.com")
mail.login(USERNAME, PASSWORD)
mail.select("inbox")

result, data = mail.uid('search', None, "ALL")
latestid = data[0].split()[-1]
result, data = mail.uid('fetch', latestid, '(RFC822)')
rawemail = data[0][1]

Baris ini mengambil email terakhir yang masuk. Ini memang bukan listener murni, jadi kita harus menjalankan program ini secara periodik kalau mau mendengarkan email secara terus menerus. Makanya saya pakai scheduler yang ada di Linux, yaitu cron.

headers = Parser().parsestr(rawemail)
mailsubject = headers['subject']
mailfrom = headers['from']

title = mailsubject

if title.find("[RUN]") == 0 :
print "Running shell command: " + title[6:]
call([title[6:]])

motiondir = "/home/pi/motion/"
if title.find("[WEBCAM]") == 0 :

Kalau yang ini, menerjemahkan isi email berdasarkan subject-nya. Jika subject diawali kata [RUN], maka server akan menjalankan shell command yang ditulis setelahnya. Jadi dengan begini saya bisa restart server melalui email, kalau mau.

print "Running Webcam Upload!"
motionfiles = sorted(listdir(motiondir))
latestfile = motionfiles[len(motionfiles)-3]
# reply email with attached file
newmessage = MIMEMultipart()
newmessage['subject'] = "[Galih Home CCTV] Latest View Image"
newmessage['from'] = "Galih Home Gateway newmessage['to'] = mailfrom
newmessage.preamble = "Ini adalah situasi terakhir yang ditangkap Webcam"
#file open
fp = open(motiondir + latestfile, 'rb')
img = MIMEImage(fp.read())
fp.close()
newmessage.attach(img)
#session smtp
session = smtplib.SMTP("smtp.gmail.com", 587)
session.ehlo()
session.starttls()
session.ehlo()
session.login(USERNAME, PASSWORD)

Langkah terakhir adalah membalas email jika subject email berawalan [WEBCAM]. Di sini yang dilakukan adalah membuat email baru dengan tujuan si pengirim email. Kemudian mengambil gambar dari folder yang telah ditentukan. Di sini yang diambil adalah file terakhir (sorted by file name). Kemudian di-attach ke emailnya. Setelah itu server menghubungi GMail untuk mengirimkan email tersebut dengan protokol SMTP.

Nah, folder dan image tersebut harus diupdate terus oleh CCTV Webcam. Setiap kali ada objek bergerak, dia akan menyimpan gambar di lokasi folder tersebut untuk kemudian diangkat oleh program email kalau ada yang meminta. Operasi ini cukup dilakukan oleh software Motion, software pendeteksi gerakan.

Begitu saja sih. Hambatan utamanya selama ini ya di koneksi internet yang payah. Jadi kalau saya kirim email, bisa jadi email saya tidak dibalas (di-PHP-i server) sampai internetnya hidup.

Tapi cara komunikasi seperti ini bisa dimanfaatkan untuk hal-hal apa saja. Misalnya diterjemahkan untuk menghidupkan lampu, memasak air, menyalakan TV, dsb. Caranya dengan memanfaatkan GPIO yang ada di Raspberry Pi. Seperti apa, mudah-mudahan saya masih tertarik untuk melanjutkan project home automation ini, hehehe…

Author: Galih Satriaji

Bookaholic, Workaholic. Chubby. That's me!

5 thoughts

    1. Lha itu yang saya ga kepikiran gimana caranya mengirim perintah itu mas. Modem saya ada di router 3G/WiFi yang sebenarnya sudah memiliki fitur auto connect ketika terputus. Masalahnya seringkali kalau udah beberapa kali reconnect, modem-nya tidak terdeteksi dan harus minta restart router. Maklum, what can we expect dari router murah kayak TP-LINK hehehe…

  1. Master Kalau Buat Progam itu buat Sensor Suhu bisa?
    soalnya progam saya kalau tidak sesuai dengan suhu yg di ingikan, nanti Raspberry akan mengirim pesan email ke admin

Leave a Reply

Your email address will not be published. Required fields are marked *