Bagian terpenting dan paling diminta oleh para pengguna perangkat IOT (yang kebanyakan ribet di hardware) adalah penyampaian data kedalam bentuk visual. Para penikmat data ini biasanya tidak mau tahu cerita apa yg terjadi dibelakang layar sebelum grafik seperti diatas tersaji didepan laptop mereka. Namun karena visualisasi umumnya menentukan "invoice proyek" turun dan cair dari bagian akunting, maka jangan sampai terlupakan ilmu yang sebenarnya susah-susah gampang ini.
Mungkin yg terbesit kala membayangkan visualisasi data sesuai praktek wemos - esp8266 yg saya tulis sampai serinya ada 5, pasti terbayang database mysql, phpchart, javaFX dan sebagainya. Wahhh..itu membikin minder mereka yg kurang paham koding panjang-panjang.
Hasil googling ada yg menyarankan matplotlib di python, dan memang saja python merupakan bahasa coding yg to the point dan lumayan mudah dipelajari. Namun kendalanya matplotlib mungkin kurang bisa dipahami jika anda baru belajar dasar python.
Teringat pada sebuah project tahun lalu dimana saya dan teman diminta menampilkan data dari sebuah data realtime, langsung tampil di excel. Kenapa excel ? Ya karena pelaporannya memang menggunakan excel agar si bos yg sudah 'berumur' tidak menginstal laptopnya dengan tools lainnya. Bagaimana dengan Web ? Pokoknya excel aja, dan berujung pada sebuah library python xlwings, yg ketika saya coba dengan script dibawah ini maka data apapun akan bisa ditampilkan pada kolom excel.
import xlwings as xw #library
wb = xw.Book('Book1.xlsx') #nama file excel
sht = wb.sheets['coba'] #nama sheets
sht.range('C1').value= 10
sht.range('C2:C10').value='aku menulis'
for x in range(1,50):
a='A'+str(x)
b='B'+str(x)
sht.range(a).value= x*3
sht.range(b).value= x*2
>>> pip install paho-mqtt
import random
from paho.mqtt import client as mqtt_client
#server/broker mqtt
broker = 'broker.hivemq.com'
port = 1883
topicsuhu = "/testyuk/suhu" #sesuaikan topic di praktek sebelumnya
topichumi = "/testyuk/humi"
# client id random karena gak boleh sama antar client
client_id = f'python-mqtt-{random.randint(0, 100)}'
username = ''
password = ''
#koneksi
def connect_mqtt() -> mqtt_client:
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
client = mqtt_client.Client(client_id)
client.username_pw_set(username, password)
client.on_connect = on_connect
client.connect(broker, port)
return client
#subscribe ke mqtt broker
def subscribe(client: mqtt_client):
def on_message(client, userdata, msg):
print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
# daftar pada kedua topic
client.subscribe(topicsuhu)
client.subscribe(topichumi)
client.on_message = on_message
def run():
client = connect_mqtt()
subscribe(client)
client.loop_forever()
if __name__ == '__main__':
run()
import random
from datetime import datetime
from paho.mqtt import client as mqtt_client
import xlwings as xw
#file excel nama dan sheetnya harus sama, jangan lupa dibuka
wb = xw.Book('Book1.xlsx')
sht = wb.sheets['data']
row = 1 #global var buat awal row
broker = 'broker.hivemq.com'
port = 1883
topicsuhu = "/testyuk/suhu"
topichumi = "/testyuk/humi"
# random client
client_id = f'python-mqtt-{random.randint(0, 100)}'
username = ''
password = ''#list isi data suhu dan kelembabandatanya=[]
def to_excel(data):
print(data)
datae = data.split(",")
global row #kembali ke atas kalau sampai baris 51
if row == 51:
row = 2
else:
row = row + 1
#menulis ke kolom excel
rowsuhu = 'A' + str(row)
rowhumi = 'B' + str(row)
sht.range(rowsuhu).value = float(datae[0])
sht.range(rowhumi).value = float(datae[1])
sht.range('C' + str(row)).value = datetime.now().strftime("%H:%M:%S")
def connect_mqtt() -> mqtt_client:
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
#konek ke broker
client = mqtt_client.Client(client_id)
client.username_pw_set(username, password)
client.on_connect = on_connect
client.connect(broker, port)
return client
def subscribe(client: mqtt_client):
def on_message(client, userdata, msg):
print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
if msg.topic == topicsuhu:
datanya.append(msg.payload.decode()) #tambahkan suhu ke list
else :
datanya.append(msg.payload.decode()) #tambahkan humi ke list
#ini buat mengatasi data telat atau hanya 1 yg nyampe
if len(datanya) == 2 :
to_excel(','.join(datanya))
datanya.clear()
client.subscribe(topicsuhu)
client.subscribe(topichumi)
client.on_message = on_message
def run():
client = connect_mqtt()
subscribe(client)
client.loop_forever()
if __name__ == '__main__':
run()
0 komentar:
Posting Komentar