Bahasan kali ini sempat tertunda akibat gejolak politik Indonesia sebelum pelantikan presiden. "Sombong Amat" hehehe...ya tertundanya secara tidak langsung sih karena coba deh perhatikan penampakan alat saya dibawah ini yg saya bawa keliling-keliling surabaya di awal oktober 2019.
Ngeri kali bukan? apalagi saat kasus penusukan pak wiranto saya jadi was-was membawa keliling alatnya ntar dikira mau sabotase kali...hehehe...ngelanturnya kejauhan kali ya ? Balik yuk ke topik utama dan kali ini IOT nya semakin lebih jauh dimana sensor akan dibawa berkeliling dan tiap pembacaan akan disimpan pembacaan GPS nya. Seperti ini loo pesan mqtt berformat JSON yg dikirim oleh arduino...
Dari pesan MQTT diatas maka jika ingin mengolah data ber "GEO" atau memiliki data koordinat GPS maka tiap pembacaan sensor perlu disimpan ke dalam database. Arduino secara kemampuan nya yg 8 bit tentunya megap-megap kalau dihubungkan ke SQL, lalu berpikir apasih yg digunakan orang-orang diluar sana untuk database IOT ? Jawabanya adalah PYTHON + MONGODB
Jadilah saya belajar bahasa asing lagi nih...ya untung saja sukses dan langkah belajarnya seperti ini untuk membantu pembaca memahami lebih mudah.
PYTHON + MQTT
Masih ingat tulisan terdahulu tentang ESP dan MQTT ? Sekarang dengan python ada library khusus menangani pesan PUBLISH dan SUBSCRIBE dengan nama pahomqtt. Jadi setelah berhasil mempelajari dasar-dasar python tidak lama kemudian saya berhasil menguasai pahomqtt seperti script berikut ini :
import paho.mqtt.client as mqtt #import lib mqtt
led = 0
segmen = 0
############jika ada mqtt yg di sub masuk#########
def on_message(client, userdata, message):
print("message received " ,str(message.payload.decode("utf-8")))
print("message topic=",message.topic)
print("message qos=",message.qos)
print("message retain flag=",message.retain)
global led
global segmen
client.publish("/test/seg","SEG"+ str(segmen))
print("Publishing message to topic LED & 7 SEG")
print("7 SEGMEN : " + str(segmen))
segmen+=1
if segmen == 10:
segmen = 0
if led == 0:
print("LED ON")
client.publish("/test/led","ON")
led = 1
else :
print("LED OFF")
client.publish("/test/led","OFF")
led = 0
print('')
print('')
########################################
broker_address="soldier.cloudmqtt.com"
broker_port=146xx
broker_user="xxxxxx"
broker_pass="xxxxxx"
print("creating new instance")
client = mqtt.Client("P1") #create new instance
client.on_message=on_message #attach function to callback
client.username_pw_set(broker_user,broker_pass)
print("connecting to broker")
client.connect(broker_address,broker_port) #connect to broker
#start the loop
print("Subscribing to topic","/test/DHT")
client.subscribe("/test/DHT")
client.loop_forever()
Script diatas merupakan koding python yg akan men SUB topik /test/DHT dan kemudian akan melakukan PUB terhadap LED dan 7 Segmen. oo iya jangan salah paham ya script python nya saya jalankan di PC yg terhubung ke internet bukan di ARDUINO.
PYTHON + MONGODB
Database umum yg digunakan saat ini pasti gak jauh dari SQL deh...tapi saya menemukan yg lebih simple dan ada GRATISAN nya yaitu MONGODB . Benar saja mongodb mungkin masih awam ditelinga orang tapi diluar sana bisa dilihat penggunaan mongobd cukup intensif mungkin dikarenakan karena data IOT yg bersifat tidak atau cenderung kurang relational dan tentunya datanya sederhana. Untuk itu kita bisa menggunakan mongodb gratis dengan nama MONGODB ATLAS dan bersifat cloud based.
Jika anda pengguna SQL maka record dan field pada mongodb diistilahkan sebagai collection . Python sendiri tidak mempunyai fasilitas khusus untuk mongodb sehingga dibutuhkan library PYMONGO sebagai bahasa dasar untuk simpan-hapus-filter-update database. Secara singkat hasil pembelajaran saya membaca suhu dan kemudian menyimpannya pada MONGODB seperti script berikut ini :
import pymongo
import json
from datetime import datetime
myclient = pymongo.MongoClient("mongodb+srv://user:pwd@cluster0-jb06l.mongodb.net/test?retryWrites=true&w=majority")
mydb = myclient["humitemp"]
mycol = mydb["data_humitemp"]
##########simpan DB###########
def save_db(isi):
dateTimeObj = datetime.now()
print('')
print("<===SAVE TO MONGODB===>")
print(dateTimeObj)
x=json.loads(isi)
y={"waktu":dateTimeObj , "suhu": x["suhu"] , "humi": x["humi"] }
z = mycol.insert_one(y)
#print list of the _id values of the inserted documents:
print("database masuk dengan id : ")
print(z.inserted_id)
print("========================")
print('')
###############BACA SUB MESSAGE#################
def on_message(client, userdata, message):
print("message received " ,str(message.payload.decode("utf-8")))
print("message topic=",message.topic)
print("message qos=",message.qos)
print("message retain flag=",message.retain)
save_db(str(message.payload.decode("utf-8")))
################################
broker_address="soldier.cloudmqtt.com"
broker_port=146xx
broker_user="xxxx"
broker_pass="xxxxxx"
print("creating new instance")
client = mqtt.Client("P1") #create new instance
client.on_message=on_message #attach function to callback
client.username_pw_set(broker_user,broker_pass)
print("connecting to broker")
client.connect(broker_address,broker_port) #connect to broker
#start the loop
print("Subscribing to topic","/test/DHT")
client.subscribe("/test/DHT")
client.loop_forever()
Hasilnya tidak mengecewakan pada MONGODB atlas karena ada fasilitas report CHART grafik sehingga sangat menyingkat waktu coding
Yang menjadi titik menariknya adalah data GEOSPATIAL juga bisa ditampilkan melalui MONGODB ATLAS.
Nanti deh kita bahas kapan-kapan setelah pembaca mahir di PYTHON vs ARDUINO...selamat mumet kawan...
mantap Pak, kebetulan saya juga ada project seperti ini, cukup membantu sekali,
BalasHapussayangnya ndak bisa pake python, jikalau menggunakan php apakah bisa ya Pak?
segeralah beralih ke python karena lebih lengkap dan lebih banyak yg mengembangkan ke arah bahasa pemrograman masa depan
Hapus