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