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] 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:

Senin, 15 Juli 2024

[raspi - yolo] Pendeteksi Orang Pada CCTV Menggunakan Raspi-Yolov5

 


Wah ternyata yolov5 sangat cocok digunakan pada raspberry pi 3 (baca disini dulu), jadi semangat nihh berbagi kegembiraan bersama pembaca. Jadi seperti yang dulu saat saya belajar yolo v3, ujungnya adalah deteksi orang pada cctv yang bisa dibaca disini. Langsung aja kita akan buat script untuk mengetestnya melalui cctv yang ada di kota malang yang lebih ringan daripada di jogja, alamat untuk memilih titiknya di: http://cctv.malangkota.go.id/




Dan script gabungan dari beberapa tulisan sebelumnya saya bagikan seperti berikut :


import sys
import time
import json
import torch
import cv2
import os
import contextlib
from pathlib import Path

os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = '/usr/lib/x86_64-linux-gnu/qt5/plugins'


def draw_boxes(frame, results):
    # Get the bounding boxes, labels, and confidence scores
    bboxes = results.xyxyn[0][:, :-1].numpy()
    labels = results.xyxyn[0][:, -1].numpy()
    confidences = results.xyxyn[0][:, -2].numpy()

    # Define the COCO class label for 'person'
    PERSON_LABEL = 0

    # Draw boxes for persons only
    for bbox, label, confidence in zip(bboxes, labels, confidences):
        if label == PERSON_LABEL:
            x1, y1, x2, y2 = bbox[:4]
            x1 = int(x1 * frame.shape[1])
            y1 = int(y1 * frame.shape[0])
            x2 = int(x2 * frame.shape[1])
            y2 = int(y2 * frame.shape[0])
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(frame, f'Orang {confidence:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (200, 255, 0), 2)


def main(stream_source):
    start_time = time.time()
    # Load YOLOv5 model
    model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

    # Open the video stream
    cap = cv2.VideoCapture(stream_source)
    if not cap.isOpened():
        print(f"Error: Could not open video stream {stream_source}")
        return

   # start_time = time.time()
    ret, frame = cap.read()
    if not ret:
        print("Error: Could not read frame")
        cap.release()
        return

    # Perform inference
    results = model(frame)

    # Extract bounding boxes and labels
    labels = results.xyxyn[0][:, -1].numpy()
    n_persons = sum(1 for label in labels if label == 0)  # label '0' typically corresponds to 'person' in COCO dataset

    # Calculate processing time
    processing_time = time.time() - start_time

    # Output results as JSON
    output = {
        "orang": n_persons,
        "time": round(processing_time, 2)
    }
    print(json.dumps(output))

    # Save the frame with bounding boxes as JPEG
   
    draw_boxes(frame, results)
    output_image_path = "/home/lampuku/yolov5/output.jpg"
    #results.render()  # This function draws bounding boxes on the frame
    cv2.imwrite(output_image_path, frame)

    cap.release()

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python single_detect.py <stream_source>")
    else:
        stream_source = sys.argv[1]
        main(stream_source)

Hasilnya seperti berikut :



Waktu processing memang terlihat lama 23 detik, namun ini adalah waktu yg menunjukkan proses awal fusing layer dari yolov5. Namun jika melakukan deteksi selanjutnya cukup cepat ketika saya mencoba loop detect seperti berikut ini :




Wow dibawah 5 detik, cukup cepat deteksinya lhooo...Kalau ada yg berminat bisa menggabungkannya dengan node-red untuk membuat webui seperti gambar paling atas.




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 (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 (72) 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 (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 (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 (3) 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) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika