Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Minggu, 21 Juli 2024

[telkomiot.id] Pengolahan Data Lorawan Menjadi Grafik Dengan Python

 


Setelah berhasil menggunakan API dengan benar pada tulisan sebelumnya, kini saya lanjutkan pengolahan data yang dikirimkan menggunakan LoRaWan pada telkomIOT. Alat yang saya gunakan masih yang lama ketika 3 tahun lalu berkenalan dengan lorawan yaitu hardware mikrokontroler berbasis arduino nano dengan modul lora sx1276 - 915Mhz.



Jadi jika pembaca baru berkenalan dengan lorawan, silahkan baca dulu klik disini karena scriptnya masih sama hanya beda di authentifikasi lorawannya saja kini menuju ke telkomiot. Dan juga yang mencolok adalah antenanya yaitu setelah saya dan anak-anak magang serta tugas akhir dari Unesa Surabaya - prodi D4 teknik listrik berhasil meneliti antena dipole + yagi sederhana (pake antena tv) sebagai pengirim sinyal lebih baik (baca disini). Hasilnya kini dalam rumah yang dulunya sangat susah kirim data akibat pembangunan gedung tinggi di sebelah rumah, kini dapat mengirimkan dengan lancar sekali





Dan sesuai contoh di tulisan sebelumnya maka dapat diolah data yang diterima menjadi widget seperti gambar dibawah ini.



Untuk pengolahan data diluar telkomiot sayangnya tidak bisa terlalu realtime dikarenakan mqtt yang belum jalan, yang disediakan hanya berupa REST API secara GET yang dinamakan API Integration seperti gambar dibawah.




Dan kalau kita coba pada postman atau Talend API Tester hasilnya berupa 10 data terakhir dari data lorawan yang berhasil di UPLINK ke database telkomiot.




Karena datanya berjumlah 10 maka sangat terbantu untuk membuat grafik menggunakan platform apapun baik java (node.js), php atau kesukaan saya menggunakan python seperti script berikut ini:


# Script Untuk Mengambil Data Lorawan TelkomIot
# by Nyoman yudi - www.aisi555.com
# ahocool@gmail.com 08155737755


import requests
import json
import base64
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from dateutil import parser
from datetime import datetime
import signal
import sys

# Telkom IoT API details , sesuaikan
API_URL = 'https://api-data.telkomiot.id/api/v2.0/APPxxxxxxxxxxxxx/DEVxxxxxxxxxxxx/lasthistory'
ACCESS_KEY = 'aaaaaaaaaaaaaaaa'
TOKEN_KEY = 'bbbbbbbbbbbnnnnnn'

# Encode accesskey:tokenkey to Base64
auth_string = f'{ACCESS_KEY}:{TOKEN_KEY}'
auth_bytes = auth_string.encode('utf-8')
auth_base64 = base64.b64encode(auth_bytes).decode('utf-8')

HEADERS = {
'Authorization': f'Basic {auth_base64}',
'Content-Type': 'application/json'
}

# Lists to store timestamps, temperature, and humidity data
timestamps = []
temperature_data = []
humidity_data = []

# Function to fetch data from Telkom IoT API
def fetch_data():
try:
response = requests.get(API_URL, headers=HEADERS)
if response.status_code == 200:
data = response.json()
timestamps.clear()
temperature_data.clear()
humidity_data.clear()
for entry in data:
timestamp = parser.isoparse(entry['time'])
sensor_data = json.loads(entry['data'])
temperature = sensor_data['suhu']
humidity = sensor_data['humi']
timestamps.append(timestamp)
temperature_data.append(temperature)
humidity_data.append(humidity)
else:
print(f"Failed to fetch data: {response.status_code}")
except Exception as e:
print(f"Error fetching data: {e}")


# Function to update the graph
def update_graph(i):
fetch_data()
ax.clear()
width = 0.4 # Width of the bars
indices = range(len(timestamps))

# Create bars for temperature and humidity
bars1 = ax.bar([x - width / 2 for x in indices], temperature_data, width, label='Temperature (°C)')
bars2 = ax.bar([x + width / 2 for x in indices], humidity_data, width, label='Humidity (%)')

# Set the labels
ax.set_xlabel('Time')
ax.set_ylabel('Value')
ax.set_xticks(indices)
ax.set_xticklabels([ts.strftime('%H:%M:%S') for ts in timestamps], rotation=45)
ax.legend(loc='upper left')


# Function to handle graceful shutdown
def signal_handler(sig, frame):
print('Stopping the script...')
sys.exit(0)


# Set up the plot
fig, ax = plt.subplots()

# Animate the plot
ani = animation.FuncAnimation(fig, update_graph, interval=10000, cache_frame_data=False) # Update every 10 seconds

# Register the signal handler
signal.signal(signal.SIGINT, signal_handler)

# Display the plot
plt.show()

Dan hasilnya cukup dapat dihandalkan lhooo....



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