Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Minggu, 22 Agustus 2021

Wemos ESP8266 - Part 6 - Visualisasi Data Ke Excel

 


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
*) jangan lupa saat menjalankan script python diatas file excel terbuka pada desktop dengan nama file xls dan nama sheet yg sesuai.


Sedangkan untuk data dari wemos yg sudah sampai pada broker MQTT kita akan sisipkan ke cell dari spreadsheet diatas melalui library PUBSUB pada python bernama PAHO-MQTT


>>> pip install paho-mqtt

Sesuai praktek PART5 , kita akan menggunakan broker gratis : broker.hivemq.com port 1883, dan ada dua topik yg di subscribe yaitu : /testyuk/suhu dan /testyuk/humi . Untuk itu perhatikan script python dibawah ini untuk melakukan proses Subscribe pada topik dan menampilkannya di layar :

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()

Hasilnya jika kita run sebagai berikut :





Nah..selanjutnya tinggal memberikan perintah untuk menulis ke kolom excel tiap kali kedua pesan lengkap terkirim. Atau jika mau satu persatu tipa juga boleh, tapi karena jarak antara tiap kali pesan yg di PUB oleh wemos beriringan antara suhu lalu humi dan jeda 10 detik, maka ada kemungkinan proses satu-persatu bisa kacau kalau function menulis ke excel nya belum selesai dikerjakan. Kecuali script pada Wemosnya diberikan jeda yg cukup antara suhu dan humi nya. Saya tidak mau ubah script wemos karena sudah terpasang jauhhhhh di tambak saya (berhayal dikit boleh kan), jadi saya kreasikan pada script python nya seperti berikut :



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 kelembaban
datanya=[]

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()

Hasilnya jika disandingkan antara python dan excel sepertti ini :




Cara ini sangat primitive namun tepat guna, dapat memuaskan klien saya yg memang sudah berumur. Jadi kadang kita harus bisa menyesuaikan dengan berbagai kemungkinan walaupun terlihat sedikit mubazir karena pada python sudah ada fasilitas canggih untuk pengolahan data dan grafik. Namun ini adalah pilihan yg bisa dipakai solusi juga sekiranya anda masih bekerja sebagai "excel engineer" di kantor. Selamat mencoba...

Mau lanjut ke kesimpulan akhir praktek wemos? Lanjut klik disini ya...
Share:

0 komentar:

Posting Komentar

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (14) antares (11) arduino (28) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (76) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (2) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (8) radio (28) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (94) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika