Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Senin, 27 Mei 2024

LoRaWan Antares - Menampilkan Grafik di Aplikasi Android IOT MQTT PANEL

 



Kesulitan mendasar kembali ditemukan saat menggunakan LoRaWan telkom ber platform Antares, padahal ini merupakan ujung "raja terakhir" dari setiap kali bermain IOT. Bagian ini adalah membuat tampilan menarik dari hanya sekedar teks uplink dari console antares, namun beberapa kali saya menemukan anak-anak mahasiswa kesulitan juga dibagian awal. Jadi library yang saya gunakan mungkin satu-satunya solusi yang berhasil mengirimkan LoRaWan ke antares (Guaya puoooll). Heheheh... baca dulu deh disini ya...

Lalu ada lagi sambungan setelah mereka (pembaca blog) saya ajari kirim-kiriman, ehhh pengolahan datanya menjadi grafik belum bisa, jadi nanggung banget ! Kalau dilihat dari fasilitas chart di antares pada menu widget...yakkk ampunnn..coba deh lihat..



Belum dapat dinamakan grafik kalau seperti ini, karena data lorawan yang masuk belum sama sekali diparsing. Kesusahan kali ya membuat json parser data seperti ini di php ? Ingat dulu pembahasan saya disini ? baca dulu deh.. 

Akses data antares yang di subscribe via MQTT selalu ada pada 1 topic :  /oneM2M/resp/antares-cse/access:key/json  

Uplink perangkat LoRaWan akan menghasilkan output mqtt seperti berikut ini :


{
   "m2m:rsp" : {
      "rsc" : 2001,
      "rqi" : "123456",
      "pc" : {
         "m2m:cin" : {
            "rn" : "cin_tuYp3j-bTIy5fUm4",
            "ty" : 4,
            "ri" : "/antares-cse/cin-tuYp3j-bTIy5fUm4",
            "pi" : "/antares-cse/cnt-661860573",
            "ct" : "20240527T095651",
            "lt" : "20240527T095651",
            "st" : 0,
            "cnf" : "message",
            "cs" : 296,
            "con" : "{\"type\": \"uplink\",\"port\": 1,\"data\": { \"suhu\": 27.81,\"humi\": 75},\"counter\": 2,\"devEui\": \"4fd4a31429711655\",\"radio\": {\"gps_time\": 1400813829,\"hardware\": {\"snr\": -17.6,\"rssi\": -116},\"datarate\": 0,\"modulation\": {\"bandwidth\": 125000,\"spreading\": 12},\"delay\": 0.060113125618098,\"freq\": 922,\"size\": 40}}"
         }
      },
      "to" : "",
      "fr" : "/antares-cse"
   }
}

Data yang berguna ada di "con" sehingga harus parsing json dulu ...nah dari pada bingung, kita belajar dulu menerima data yg masuk dari LoRaWan menggunakan python sebagai penerima MQTT nya. Jangan lupa untuk menginstall library Paho-Mqtt, dimana kalau menggunakan google colab bisa install versi 1.6.0 saja yang lebih sederhana. Script ini secara realtime akan menerima data masuk jika LoRaWan menerima uplink dari device.


!pip install paho-mqtt==1.6.0



from paho.mqtt import client as mqtt_client
import time
from time import sleep
from random import randrange


# Inisialisasi broker antares
broker_address="mqtt.antares.id"
broker_port=1883

#sesuaikan dengan acces key antares kamu
antareskey= "access:key"
antaresdevice = "aplikasi/device"

#topik subscribe hanya 1 saja untuk tiap akun
topicsubantares = f'/oneM2M/resp/antares-cse/{antareskey}/json'


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(f'aisi555-client-{randrange(0,1000)}') 
    client.on_connect = on_connect
    client.connect(broker_address, 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")

    client.subscribe(topicsubantares)
    client.on_message = on_message


def run():
    client = connect_mqtt()
    subscribe(client)
    client.loop_forever()


if __name__ == '__main__':
    run()


Hasil dari script diatas akan menampilkan semua data yang masuk, memang ini kekurangan oneM2M dimana tidak melayani sub mqtt per device. Hasilnya kita harus parsing per device di "pi:" lalu di bandingkan dengan device yang sedang kita olah datanya.



Sekalian saja saya kemudian akan parsing "con" dan mengambil beberapa data seperti suhu, humi, snr dan rssi. Scriptnya seperti ini :


from paho.mqtt import client as mqtt_client
import time
from time import sleep
from random import randrange
import json


# Inisialisasi broker
broker_address="mqtt.antares.id"
broker_port=1883

antareskey= "access:key"
antaresdevice = "/antares-cse/device-uri" 

topicsubantares = f'/oneM2M/resp/antares-cse/{antareskey}/json'


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(f'aisi555-client-{randrange(0,1000)}') 
    client.on_connect = on_connect
    client.connect(broker_address, 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")
        olah_data(msg.payload.decode())
    client.subscribe(topicsubantares)
    client.on_message = on_message

def olah_data(datanya):
  # Parsing json
  data = json.loads(datanya)
  penerima = data["m2m:rsp"]["pc"]["m2m:cin"]["pi"] 
  # ambil con untuk data
  con_json_str = data["m2m:rsp"]["pc"]["m2m:cin"]["con"]  
  # Parse the JSON string inside "con"
  con_data = json.loads(con_json_str)
  
  print(f"Terima dari device : {penerima}")
  print("Suhu:", con_data["data"]["suhu"], " Celcius")
  print("kelembaban:", con_data["data"]["humi"], " %")
  print("Radio SNR:", con_data["radio"]["hardware"]["snr"])
  print("Radio RSSI:", con_data["radio"]["hardware"]["rssi"]) 


def run():
    client = connect_mqtt()
    subscribe(client)
    client.loop_forever()


if __name__ == '__main__':
    run()
	


Tapi masih belum juga bisa menampilkan grafik ke IOT MQTT PANEL seperti yang sering saya bahas setiap membuat proyek IOT disini.  Untuk itu saya membuat bridge untuk menjembatani MQTT diantara antares dan aplikasi melalui broker mqtt gratisan HIVEMQ. Wahh benar-benar script python saya berfungsu jadi bridge ini, dimana saya melakukan koneksi ke 2 buah broker, antares saya sub dan hivemq saya pub.  Saya kutipkan beberapa  potongan penting:




def olah_data(datanya):
  # Parsing json
  data = json.loads(datanya)
  penerima = data["m2m:rsp"]["pc"]["m2m:cin"]["pi"] 
  # ambil con untuk data
  con_json_str = data["m2m:rsp"]["pc"]["m2m:cin"]["con"]  
  # Parse the JSON string inside "con"
  con_data = json.loads(con_json_str)
  
 
  if(penerima == antaresdevice):
    print(f"Terima dari device : {penerima}")
    print("Suhu:", con_data["data"]["suhu"], " Celcius")
    print("Kelembaban:", con_data["data"]["humi"], " %")
    print("Radio SNR:", con_data["radio"]["hardware"]["snr"])
    print("Radio RSSI:", con_data["radio"]["hardware"]["snr"]) 
    print("Kirim ke HiveMQ !")
    hivemq.publish("/aisi555/suhu", con_data["data"]["suhu"])
    hivemq.publish("/aisi555/humi", con_data["data"]["humi"])
    hivemq.publish("/aisi555/snr", con_data["radio"]["hardware"]["snr"])
    hivemq.publish("/aisi555/rssi", con_data["radio"]["hardware"]["snr"])


def run():
    #konek ke antares
    client = connect_mqtt()
    #konek ke Hivemq
	global hivemq
    hivemq = connect_hivemq()
    #subscribe ke antares
	subscribe(client)
    client.loop_forever()


Hasilnya seperti ini, langsung bisa dari Sensor ==> LoRaWan Antares ==> google colab ==> grafik apk IOT MQTT PANEL (gambar paling atas) secara real time. Script saya potong dan seperti biasa kontak saya jika berminat belajar lebih dalam lagi. 








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 (12) antares (11) arduino (26) 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) iklan (1) infrared (2) Input Output (3) iot (63) 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) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) 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 (7) radio (28) raspberry pi (4) 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) transistor (2) troubleshoot (3) tulisan (93) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika