Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Ayo Migrasi TV Digital

    Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

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:

[telkomiot.id] Mengirim Data DHT11 - ESP8266 via REST API dan Menampilkan di Widget & Notif Ke Email

 


Walau sempat galau karena MQTT gagal dikirimkan ke platform Telkomiot.id, tidak usah nyinyir berlebihan karena ada satu cara yang umum dilakukan untuk kirim-terima data yaitu via REST API / HTTP/ POST . Langsung aja yuk kita mencoba menggunakan software semacam postman untuk mengirimkan data secara HTTP, dan saya pilihkan yang lebih mudah yaitu chrome extension bernama "Talend API Tester". Langkah-langkahnya cukup straight forward, kita cek dulu alamat endpoint dari REST API nya pada console :application/device di website telkomiot.




Sesuai petunjuk bapak presiden...ehhh salah..dokumentasi yang sangat sedikit, saya menerka bahwa akan ada authentification /authorization berdasarkan access key dan token key untuk access  api dan biasanya ditambahkan pada header berupa "authorization". Lanjutkan aja dengan memasukkan pasangan key yang benar



Header yang gak kalah penting adalah "Content-Type" : "application/json" dan langsung saja saya coba dan berhasil mengirimkan data suhu dan humi ke telkomiot....yeahhh



Bagaimana dengan mengirimkan secara hardware? saya pilihkan microcontroller + sensor sejuta umat paling murah meriah : Wemos + DHT11.



Bagi yang masih awam dengan wemos/esp8266 untuk mengukur suhu dengan DHT11, dapat belajar dulu seri tulisan IOT yang full menggunakan rangkaian seperti diatas ( baca dulu klik disini )


*/telkomiot.id testing from www.aisi555.com
  by nyoman yudi kurniawan ahocool@gmail.com
  08155737755 - surabaya 2024
*/
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include "DHT.h"
#include <base64.h>

// wifi kamu sesuaikan
const char* ssid = "hotspothp";
const char* password = "tanyasebelah";

// Domain http publish dari device DHT11 ditelkomiot, sesuaikan
const char* serverName = "http://publish-data.telkomiot.id/v2.0/pubs/APP1111111111/DEV222222222223";

// account key dari telkomiot
String AccessKey   = "aaaaaaaaaaaaaaaa";
String AccessToken = "bbbbbbbbbbbbbbbb";
String auth;
String authHeader;

const int dhtPin = D3; //Sesuaikan pin DHT
#define DHTTYPE DHT11  //Sensor DHT11
DHT dht(dhtPin, DHTTYPE); 

//timer untuk membaca DHT11 tiap 10 detik
unsigned long lastTime = 0;
unsigned long timerDelay = 10000;

WiFiClient client;
HTTPClient http;

void setup() {
  Serial.begin(9600);
  delay(1000);
  Serial.println("www.aisi555.com ==> telkomiot.id testing");
  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Terhubung wifi : ");
  Serial.print(ssid);
  Serial.print("  IP : ");
  Serial.println(WiFi.localIP());


   //auth header untuk POST
  auth = AccessKey+ ":" + AccessToken;
  authHeader = "Basic " + base64::encode(auth);
 
}

String SendTempHumid(){ // pengukuran DHT
   
 
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
    }
    
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" °C ");
  //yang dikirim data berupa string JSON
  
  return( "{\"suhu\":" + String(t) + ",\"humi\":" + String(h) +"}"); 
  }


void loop() {
  //Send HTTP POST request tiap 10 detik
  if ((millis() - lastTime) > timerDelay) {
    //Check WiFi connection status
    if(WiFi.status()== WL_CONNECTED){

      
      // server untuk kirim REST API
      http.begin(client, serverName);
      
      // Specify content-type header
      http.addHeader("Authorization", authHeader);
      http.addHeader("Content-Type", "application/json");
      // Data to send with HTTP POST
      String httpRequestData = SendTempHumid();           
      // Send HTTP POST request
      int httpResponseCode = http.POST(httpRequestData);
      

      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
        
      // Free resources
      http.end();
    }
    else {
      Serial.println("WiFi terputus");
    }
    lastTime = millis();
  }
}


Hasilnya bagaimana  ?




Penjabarannya seperti berikut :


Library :

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include "DHT.h"
#include <base64.h>


Yang digunakan library standar ESP8266 untuk kirim terima data via http dan sudah tersedia semua secara default. Yang mungkin berbeda adalah base64.h yang jarang digunakan, kali ini tujuannya untuk meng-enkripsi auth key sebagai standar auth pada REST API.


Rest API endpoint + auth:

// Domain http publish dari device DHT11 ditelkomiot, sesuaikan
const char* serverName = "http://publish-data.telkomiot.id/v2.0/pubs/APP1111111111111111/DEV222222222222222";

// account key dari telkomiot
String AccessKey   = "aaaaaaaaaaaaaaaa";
String AccessToken = "bbbbbbbbbbbbbbbb";
String auth;
String authHeader;

WiFiClient client;
HTTPClient http;


Base 64 auth Header :

   //auth header untuk POST
  auth = AccessKey+ ":" + AccessToken;
  authHeader = "Basic " + base64::encode(auth);


Baca DHT 11 :

String SendTempHumid(){ // pengukuran DHT
   
 
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
    }
    
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" °C ");
  //yang dikirim data berupa string JSON
  
  return( "{\"suhu\":" + String(t) + ",\"humi\":" + String(h) +"}"); 
  }

Kirim secara post :

      // server untuk kirim REST API
      http.begin(client, serverName);
      
      // Specify content-type header
      http.addHeader("Authorization", authHeader);
      http.addHeader("Content-Type", "application/json");
      // Data to send with HTTP POST
      String httpRequestData = SendTempHumid();           
      // Send HTTP POST request
      int httpResponseCode = http.POST(httpRequestData);
      

      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
        
      // Free resources
      http.end();


Lumayan straight forward, hanya meniru apa yang sudah dilakukan pada aplikasi testing REST API sebelumnya, dan jika data json / dht11 benar maka pada monitor terminal muncul ini.


Http response 200 artinya data diterima dengan benar, sedangkan jika 400 berarti json pengambilan data dht11 nya salah.

Lalu bagaimana cara menampilkan gauge dan grafik seperti gambar paling diatas? tinggal menuju menu personal dashboard , lalu buat dashboard kamu serta tambahkan widget yang dihubungkan ke device kamu.



Dan jika benar, maka akan muncul widget berupa gauge-line chart-bar chart sesuai yang kamu pilih. Dan tiap widget ini dapat ditempelkan pada website kamu lhoo..



Dan bisa kirim alarm lewat  event trigger ke email lhooo ...






Walau kekecewaan masih tersirat pada saya yang pencinta MQTT ini, namun dengan praktek diatas agak sedikit terobati, dan semoga kalian bisa mencobanya sendiri

Share:

Sabtu, 20 Juli 2024

[telkomiot.id] Mengirim / Terima (PUB-SUB) Data Menggunakan MQTT - Ketemu BUG !

 


Platform IOT terbaru milik telkom ini memang masih terbilang baru dan versi beta, saya kenal sekitar bulan mei dari pembaca blog yang kebetulan mahasiswa yg mendapatkan skripsi membahas telkomiot-lorawan. Sebelumnya telkom memiliki platform Antares yang sudah lama saya bahas, silahkan coba baca disini dulu. Pada dasarnya platform ini seperti menjiplak plek antares di web-ui nya, namun saya menemukan beberapa perbedaan saat mencoba kirim  terima data melalui MQTT, HTTP maupun lorawan.

Pada tulisan kali ini saya akan berbagi mengenai "keanehan" MQTT pada platform ini, yah seperti dejavu rasanya ketika ketemu  bug dulu saat saya belajar antares dulu. Kok gak kapok ya saya? maklum versi beta mungkin ya atau mungkin karena masih trial (GRATIS 1 tahun booo). Oh iya saya sebenernya mencoba ini hampir 2 bulan lalu, namun saya diemkan aja sampai kemudian gatel akibat 2 bulan hanya ada progress di lorawan nya saja (yang bikin antares ngadat, baca disini), jadi seperti biasa saya mengacu dokumentasi yang bisa dibaca pada halaman yang disediakan telkomiot.


Dokumentasi MQTT via Node-red bisa dilihat di https://console.telkomiot.id/documentation#421


Yang menjadi alamat broker mqtt adalah : mqtt.telkomiot.id port 1883, dan jangan lupa ada user credential berupa access key dan access token sebagai username dan password untuk masuk ke broker. Keduanya bisa didapat pada console menu access key, dan langsung saja saya masukkan untuk setup broker pada node-red serta mqtt.fx di pc saya.

Setup MQTT di Nodered :


 

Setup MQTT di MQTT.FX



Selanjutnya kita akan melanjutkan seting pada topik MQTT sesuai pada console dan petunjuk dokumentasi.



Jadi seperti pada umumnya akan ada 2 topik pubs dan subs sesuai pola yg biasa diberikan platform iot manapun dan juga telah ditulis dipetunjuk, lalu kita kirimkan data secara publish melalui mqtt.fx dan node-red,  dan apa yang terjadi ?








JENG JENG !!!




KOSONG pada console ! Bolak balik saya mencoba dengan berbagai kombinasi seting, hasilnya malah membagongkan ketika saya subscribe topik "pubs" di mqtt.fx dan mengirimkan data mqtt melalui node-red.



 

Waduh...kok bisa begitu ? Bagaimana kalau kita coba gunakan topik sembarangan, apa akan masuk datanya?



Wahhh akhirnya saya menemukan sebuah broker MQTT yang bebas mengirim dan menerima data kawan ! Bahkan saking bagusnya saya masih menerima data MQTT yang saya retain 2 bulan yang lalu. Ayo dong diperbaiki kawan-kawan di telkom, dan saya rasa ini tidaklah susah ....



Share:

Jumat, 19 Juli 2024

Breaking News : LoRaWan Antares Migrasi Ke Telkomiot.id

 



Betapa galaunya beberapa mahasiswa yang mengambil topik skripsi LoRawan di 15 juli 2024 ...Pak..gak bisa kirim data !! Gak cuman mahasiswa bimbingan saya, namun dari kampus lain pun mengalami hal serupa dan memenuhi whatsapp saya.


Jadi ingat beberapa bulan yang lalu ada mahasiswa dari mataram yang bertanya namun menggunakan console bukan antares, dan mengaku diberikan oleh dosennya yang baru pulang dari pelatihan di telkom bandung. Dan console itu berupa tampilan dari web telkomiot.id



BTS LoRaWan di Telkom Mataram


Oprek-oprek lah saya dan sempat berkeliling melakukan test apakah lorawan-nya sudah bisa konek seperti antares, dan hasilnya di bulan mei itu masih zonk. Begitu juga dengan beberapa koneksi MQTT - Rest API dll masih mengalami error yang sangat fundamental. Jadi saat itu saya menemukan topik MQTT nya masih ngawur dan data bisa dikirimkan kemana saja asal topiknya berupa alamat dari device. Setelah itu saya tinggalkan aja karena sepertinya belum di configure dengan bagus. Mau men-review ujungnya saya jadi kepo dan nyinyir gak karuan.

Kembali ke Lorawan di pertengahan juli 2024, dimana antares mulai ngaco, akhirnya saya teringat akan telkomiot.id ini, mungkin firasat saya tepat karena dinihari 19 juli setelah mumet bersama beberapa mahasiswa di siang nya, saya entah kenapa kembali mengambil alat lorawan yang tadi saya pake keliling dan mengganti parameter lorawan nya ke telkomiot. Hasilnya terdapat uplink data berupa ini:



   

Datanya yang diterima ternyata berupa hexa padahal yg saya kirim tulisan, sehingga harus di terjemahkan dulu di hexa to ascii via web:




Dan jika ingin mengirimkan data yg benar, maka data dikirim dalam format json {"key": value} seperti contoh script oprekan saya disini :


void LoRa_sendMessage()
{
  String text = "{\"cobafrek\":" + String(LoRa_frek_INA_923) +"}";
  LoRa_TxMode();
  LoRaWanPacket.clear();
  
  LoRaWanPacket.print(text);
  
  if (LoRaWanPacket.encode()) 
  {
    LoRa.beginPacket();
    LoRa.write(LoRaWanPacket.buffer(), LoRaWanPacket.length());
    LoRa.endPacket();
  }

  if( LoRa_frek_INA_923 >= LoRa_frek_INA_923_end ) LoRa_frek_INA_923 = LoRa_frek_INA_923_start;
  else LoRa_frek_INA_923 += LoRa_frek_step;
}


Hasilnya lumayan benar deh sekarang





Telkomiot ini masih gratis sejak bulan mei dan meng-claim memberikan trial 1 tahun GRATIS. Wahhh ayo dicoba saja deh mumpung kayaknya habis migrasi ini akan mulai berbayar. Selanjutnya saya akan mencoba kirim-kiriman data menggunakan LoRaWan telkom ini karena sepertinya saya tertarik untuk DOWNLINK data..Mumpung masih free tidak terbatas kayak antares dulu ! Tunggu yaa...

Share:

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