"Kembali Ke Dasar Elektronika Digital ... "

  • 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

  • Animasi LED Dengan IC 4017

    IC 4017 adalah IC 16-pin CMOS dekade counter dari seri IC CMOS 4000. Sangat berguna jika ingin membuat animasi lampu atau LED secara sederhana seperti led berjalan, tulisan berjalan , counter/timer dan masih banyak kegunaan lainnya

  • 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

  • BIKIN PCB SEDERHANA TAPI GA MURAHAN

    Bikin PCB itu ga susah kok..dengan software EAGLE CAD dan teknik sterika kamu dapat membuat PCB untuk berbagai project elektronika mu ...

Tampilkan postingan dengan label antares. Tampilkan semua postingan
Tampilkan postingan dengan label antares. Tampilkan semua postingan

Selasa, 04 Agustus 2020

[Mudah Belajar RasPi] Terhubung ke antares semakin mudah dengan python library siap pakai




Dengan library python antares-http maka semua urusan kirim terima pesan http menuju antares menjadi semakin gampang saja. Perhatikan hasil capture dari websitenya pip / pypi maka saking simpelnya anda bisa membuat aplikasi antares melalui raspberry pi dalam hitungan menit saja.


Sehingga praktek penekanan tombol yang sudah kita buat pada penjelasan sebelumnya disini menjadi makin mudah dengan mengarahkannya ke antares :


Dan script untuk membuat tombol penghitung survey seperti ini :






import RPi.GPIO as GPIO
import time
import json
from antares_http import antares #library antares

antares.setDebug(True)
antares.setAccessKey('ACCESS:KEY') #sesuaikan

GPIO.setmode(GPIO.BCM)

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO17
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO27
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO22

def update_antares(pilihan):
    latestData = antares.get('Project name', 'device name') #Sesuaikan
    isi = latestData['content'] #parsing pertama
    satu= isi['satu'] #parsing kedua
    dua= isi['dua']
    tiga= isi['tiga']
    #pilhan dari penekanan tombol satu, dua, tiga
    if pilihan == 'satu':
       myData = {'satu':int(satu)+1,'dua':int(dua),'tiga':int(tiga)}
    elif  pilihan == 'dua':
       myData = {'satu':int(satu),'dua':int(dua)+1,'tiga':int(tiga)} 
    elif  pilihan == 'tiga':
       myData = {'satu':int(satu),'dua':int(dua),'tiga':int(tiga)+1}

    antares.send(myData,'Project name', 'device name') #Sesuaikan

try:
    while True:
         button_state1 = GPIO.input(17) #baca tombol
         button_state2 = GPIO.input(27)
         button_state3 = GPIO.input(22)
         if button_state1 == False:
             print('Button 1 is Pressed...')
             update_antares('satu')
         elif button_state2 == False:
             print('Button 2 is Pressed...')
             update_antares('dua')
         elif button_state3 == False:
             print('Button 3 is Pressed...')
             update_antares('tiga')
         time.sleep(0.2)
         
except:
    GPIO.cleanup()

    

Sangat simple dan selanjutnya bisa dilihat pada video berikut ini :




Share:

Kamis, 25 Juni 2020

[IOT Itu Gampang] Bug Fatal Pada Mqtt Subscription - Library AntaresESP8266Mqtt - Part 2



[versi youtube dapat dilihat disini]

Kegatalan akibat "kutu" pada library AntaresEsp8266Mqtt berlanjut padahal telah diobati makan siang yang lumayan maknyus di sebual mall surabaya ( sekalian survey apa cafe sudah buka setelah psbb). Selama makan siang, saya beberapa kali ditegur tidak fokus sama kawan, ya iyalah karena pada tulisan sebelumnya http://www.aisi555.com/2020/06/solution-bug-pada-library-antares-mqtt.html , saya hanya berhasil melakukan proses PUB atau kirim dari esp8266 menuju server serta dibaca oleh client pc MQTT.FX. Kenapa tidak lanjut ke proses SUB atau menerima data ? Sebelumnya untuk mendapatkan konsep MQTT dan rangkaian yg saya gunakan sebaiknya lihat video youtube saya di https://www.youtube.com/watch?v=2o9JRb1FGEc .




Konsep yang berbeda ternyata ditemui pada proses PUBSUB apabila terbiasa menggunakan broker berbasis Mosquitto. Dari manual pada website antares.id dinyatakan bahwa proses Menyimpan dan Mengambil data baik secara http maupun mqtt berpola sama seperti ini :

PUSH/PUB  : /oneM2M/req/your-access-key/antares-cse/choose-a-serialization-format 
GET/SUB   : /oneM2M/resp/antares-cse/your-access-key/choose-a-serialization-format 

Dari keduanya ditemukan "oneM2M" yg merupakan standar IOT platform yg digunakan oleh antares, jadi data akan dikirim dan diolah menggunakan REST API dengan serialization berformat XML ata JSON. Pada library antares yg kita bahas kali ini yg karena library oprekan dari pubsubclient maka digunakan format JSON yang saya sangat sukai. Jadi dalam library ini dicopas juga berbagai file library ArduinoJSON untuk melakukan parsing data seperti contoh payload MQTT berikut:

{
   "m2m:rsp" : {
      "rsc" : 2001,
      "rqi" : "123456",
      "pc" : {
         "m2m:cin" : {
            "rn" : "cin_702783788",
            "ty" : 4,
            "ri" : "/antares-cse/cin-702783788",
            "pi" : "/antares-cse/cnt-682859183",
            "ct" : "20200625T172017",
            "lt" : "20200625T172017",
            "st" : 0,
            "cnf" : "message",
            "cs" : 24,
            "con" : "{\"ledstatus\":\"hijau on\"}"
         }
      },
      "to" : "Accesskey:Password",
      "fr" : "/antares-cse"
   }
}


Nah, kini sudah jelas data yg di kirim-terima pada antares berformat json dan kita akan melakukan parsing untuk mendapatkan nilai pada bagian "con", dan saya oprek dulu tambahan  script untuk SUB sebuah topik yg akan menunggu perintah menyalakan atau mematikan LED. Gunakan saja script contoh subscribe yang ada pada LIBRARY ...dan ternyata hasilnya tidak bisa membaca respon SUB apapun ...kesalahan fatalnya ada dibagian ini  antares.checkMqttConnection(); dan kita check dulu


void AntaresESP8266MQTT::checkMqttConnection() {
    

_subscriptionTopic = "/oneM2M/req/" + _accessKey + "/antares-cse/json";

    if(!client.connected()) {
        while(!client.connected()) {
            printDebug("[ANTARES] Attempting MQTT connection...\n");

            String clientId = "ESP8266-" + _accessKey;

            char clientIdChar[clientId.length() + 1];
            clientId.toCharArray(clientIdChar, clientId.length() + 1);

            if(client.connect(clientIdChar)) {
                printDebug("[ANTARES] Connected! Client ID:");
                printDebug(clientIdChar);
                printDebug("\n");
                char subscriptionTopicChar[_subscriptionTopic.length() + 1];
                _subscriptionTopic.toCharArray(subscriptionTopicChar, _subscriptionTopic.length() + 1);

                Serial.println();
                Serial.print("[ANTARES] Topic: ");
                Serial.println(subscriptionTopicChar);

                client.publish(subscriptionTopicChar, "connect!");
                client.subscribe(subscriptionTopicChar);
            }
            else {
                printDebug("[ANTARES] Failed, rc=" + String(client.state()) + ", Will try again in 5 secs.\n");
                delay(5000);
            }
        }
    }
    client.loop();
}

Yang berwarna merah pada library antaresEsp8266mqtt.cpp merupakan KESALAHAN FATAL karena seharusnya pada proses SUBSCRIBE scriptnya seperti ini :

   _subscriptionTopic = "/oneM2M/resp/antares-cse/" + _accessKey + "/json";

Setelah dicoba..ehhh ternyata salah juga..pesan diterima tapi payloadnya kosong ..


Usut-punya usut setelah melakukan debug satu persatu kesalahn FATAL mengikuti kesalahan sebelumnya yaitu parsing JSON "rqp" vs "rsp", sehingga harus diubah pada bagian ini :

String AntaresESP8266MQTT::get(char* topic, byte* payload, unsigned int length) {
    _receivedTopic = String(topic);

    String payloadString;
    for(int i = 0; i < length; i++) {
        payloadString += char(payload[i]);
    }

    DynamicJsonBuffer jsonBuffer;
    JsonObject& object = jsonBuffer.parseObject(payloadString);
    //ASLINYA SALAH
    //String parsedString = object["m2m:rqp"]["pc"]["m2m:cin"]["con"];
    //BENAR NYA SEPERTI INI
    String parsedString = object["m2m:rsp"]["pc"]["m2m:cin"]["con"];
    
    
    _jsonSubDataString = parsedString;
    
    return _jsonSubDataString;
}


Dan ketika saya publish payload json dengan message con: "{\"hijau\":\"on\"} " dari MQTT.FX , saya sukses menyalakan LED pada Wemos D1 saya .




Karena penulis lagi bergembira dapat sukses mengoprek ANTARES yang terlihat cacat, maka saya share script lengkap untuk mengirim PUB tombol dan SUB led pada Wemos D1



#include <AntaresESP8266MQTT.h>

//gunakan acces key antares kamu
#define ACCESSKEY "access:key"

#define WIFISSID "myIOT" //wifi ssid
#define PASSWORD "selaluterhubung" //wifi pass

//Nama project dan device antares
#define projectName "AHOCOOL_IOT"
#define deviceName "test_pubsub"

AntaresESP8266MQTT antares(ACCESSKEY);

int counter=0;


void setup() {
  pinMode(16, INPUT); //Tombol pada port GPIO 16
  pinMode(4, OUTPUT); //LED pada port GPIO 4
  Serial.begin(9600);//Serial monitor
  //koneksi antares
  antares.setDebug(true);
  antares.wifiConnection(WIFISSID, PASSWORD);
  antares.setMqttServer();
  //set function callback yg akan mendeteksi pesan masuk
  antares.setCallback(callback);
}

void loop() {
  
  // ngecek koneksi
  antares.checkMqttConnection();
  
  //tombol ditekan = 0, pin GPIO pullup
  if( digitalRead(16) == 0 ){
  //tambah counter
  counter++;
  //kirim mqtt ke antares
  antares.add("counter", counter);
  antares.publish(projectName, deviceName);
  delay(300);
  }
}

void callback(char* topic, byte* payload, unsigned int length) {
  /*
   Function ini di panggil saat ada pesan masuk
   pada topic : "/oneM2M/resp/antares-cse/" + _accessKey + "/json" 
*/
antares.get(topic, payload, length); Serial.println("New Message!"); // Print topic and payload Serial.println("Topic: " + antares.getTopic()); Serial.println("Payload: " + antares.getPayload()); // Print individual data Serial.println("Lednya: " + antares.getString("ledstatus")); //nyala dan matikan LED if( antares.getString("ledstatus") == "hijau on" ) digitalWrite(4,HIGH); if( antares.getString("ledstatus") == "hijau off" ) digitalWrite(4,LOW); }
Untuk mengirim pada MQTT.FX maka ikuti aturan berikut :

TOPIK PUB :  /oneM2M/req/ACCESS:KEY/antares-cse/json
 
dengan format payload :

{"m2m:rqp": {"fr": "ACCESS:KEY","to": "/antares-cse/antares-id/AHOCOOL_IOT/test_pubsub","op": 1,"rqi": 123456,"pc": {"m2m:cin": {"cnf": "message","con": "{\"ledstatus\":\"hijau off\"}"}},"ty": 4}}

Sedangkan untuk menerima data pada MQTT.FX seperti berikut:

TOPIK SUB :  /oneM2M/resp/antares-cse/ACCESS:KEY/json


Bagaimana sudah puyeng kah ? yang penting ..

[CASE CLOSED and SOLVED]
Share:

[IOT Itu Gampang] BUG pada Library antares Mqtt ESP8266 - part1



[youtube version dapat klik disini]

Antares merupakan sebuah entitas IOT yang dikembangkan oleh PT TELKOM INDONESIA untuk menjawab tantangan teknologi terbaru jaman now. Penulis yang pernah 10 tahun berhubungan dengan perusahaan BUMN ini  sangat memahami bahwa telkom merupakan pelopor banyak teknologi mutahir di negeri ini. Jadi setiap ada tren baru diluar sana maka telkom dan groupnya dengan RnD yang kelas wahid akan segera mempelajari dan selanjutnya  mendeploy layanannya. Dari laman web antares.id, perkenalan dari antares seperti yg saya baca :

ANTARES merupakan sebuah Horizontal IoT Platform, yang berarti kami mencoba untuk menjadikan layanan kami se-umum mungkin agar solusi vertikal IoT anda dapat menyesuaikan dengan arsitektur yang umumnya digunakan. Banyak kasus-kasus IoT yang dapat dipecahkan dengan menggunakan layanan kami, contohnya adalah smart home, smart metering, asset tracking, smart building, dan lain-lain.

Kebutuhan akan platform IOT dalam negeri memang sangat saya dukung agar kita tidak hanya menjadi pengguna tapi juga bisa menjadi penyedianya. Lawan berat dari luar sana seperti AWS, Google IOT, ThingSpeak dll. dan  memang akan membuat ciut nyali dengan nama besar itu apalagi  melihat prospek meng "uang" kan belum secepat jualan fiber optik ke pelanggan indihome. 


Perkenalan penulis dengan antares terjadi sekitar tahun 2019, saat penulis kembali menekuni dunia 8 bit. Dari saran beberapa teman menujulah ke platform iot lokal ini dan terkejutnya karena terlalu banyak sisi IT nya dan menyoldernya hampir sedikit sekali, dan otak serta otot solderan saya berontak ketika melihat perintah pengiriman data melalui REST API seperti dibawah ini:




Bingung dan terkesan sulit dan saya beralih ke MQTT berbasis Mosquitto yang sangat mudah bagi tukang solder ini. Saya tinggalkan menggunakan antares sampai ada request dari seorang pembaca blog dan kebetulan saya sudah sedikit paham mengenai mqtt dengan esp8266. Apalagi pada sketch arduino, library ANTARES sudah terpampang dengan gagahnya di library manager.


Kita akan mencoba mencontoh example pada libraries ini dengan sedikit modifikasi mengirimkan counter penekanan tombol, scriptnya sederhana saja , saya gunakan wemos d1 r1:



#include <AntaresESP8266MQTT.h>

//gunakan acces key antares kamu
#define ACCESSKEY "access:key"

#define WIFISSID "myIOT" //wifi ssid
#define PASSWORD "selaluterhubung" //wifi pass

//Nama project dan device antares
#define projectName "AHOCOOL_IOT"
#define deviceName "test_pubsub"

AntaresESP8266MQTT antares(ACCESSKEY);

int counter=0;


void setup() {
  pinMode(16, INPUT); //Tombol pada wemos
  Serial.begin(9600);//Serial monitor
  //koneksi antares
  antares.setDebug(true);
  antares.wifiConnection(WIFISSID, PASSWORD);
  antares.setMqttServer();
}

void loop() {
  
  // ngecek koneksi
  antares.checkMqttConnection();
  
  //tombol ditekan = 0, pin pullup
  if( digitalRead(16) == 0 ){
  //tambah counter
  counter++;
  //kirim mqtt ke antares
  antares.add("counter", counter);
  antares.publish(projectName, deviceName);
  delay(300);
  }
}



Dan hasil yg saya dapatkan sedikit mengecewakan..


Seperti kembali ketahun lalu dan saya kembali membaca manual pada website antares dan de-ja-vu dengan bahasa Inggris yg di paksakan menjadi Bahasa Indonesia. Jadi maaf sepertinya developer antares hanya berusaha menterjemahkan manual ke bahasa Indonesia tapi bukan berusaha menjelaskan secara teknisnya. Ayo kita perhatikan debug diatas, saya menemukan bahwa yg belum konek WIFI NYA ! ESP saya rusak? Oooo tidak ketika saya mencoba script mqtt lain lancar saja, berarti ada salah di library antaresesp8266mqtt, dan saya coba buka script library AntaresESP8266MQTT.cpp


bool AntaresESP8266MQTT::wifiConnection(String SSID, String wifiPassword) {
    char ssidChar[sizeof(SSID)];
    char wifiPasswordChar[sizeof(wifiPassword)];

    SSID.toCharArray(ssidChar, sizeof(SSID));
    wifiPassword.toCharArray(wifiPasswordChar, sizeof(wifiPassword) );

    int count = 0;
    _wifiSSID = ssidChar;
    _wifiPass = wifiPasswordChar;
   
    WiFi.begin(_wifiSSID, _wifiPass);
    

   
    printDebug("[ANTARES] Trying to connect to " + SSID + "...\n"); 
    //saya tambahkan debug wifi name dan password disini
    printDebug("ssid dan password setelah di char array:  "); 
    printDebug(String(_wifiSSID) +" : " + String(_wifiPass));
    
 for (count=0;count<20;count++)
    {
      delay(500);
      printDebug(".");
    }

    if(WiFi.status() != WL_CONNECTED) {
        printDebug("[ANTARES] Could not connect to " + SSID + ".\n");
        return false;
    }
    else {
        WiFi.setAutoReconnect(true);
        printDebug("\n[ANTARES] WiFi Connected!\n");
        printDebug("[ANTARES] IP Address: " + ipToString(WiFi.localIP()) + "\n");
        return true;
    }
}
Dan benar saja librarynya hanya merupakan penyesuaian dari library yang sudah banyak beredar yaitu pub sub client milik knoleary, tapi tidak mengapa namanya juga library OPEN SOURCE sah sah aja bikin, tapi dari hasil penambahan debug saya dapatkan kenyataan wifi saya tidak konek sesuai gambar berikut:



Ternyata ohh ternyata..terjadi lagi permasalahan classic pada C++ yaitu passing string ke function, dimana banyak yg mengeluh sampe ada yg pindah coding ke micropython. Password saya terpotong hampir 4 char array...jadi solusinya gampang saja..kita tambahkan panjang arraynya + 5.



Dan console Antares saya di website antares.id pun pertama kalinya merasakan data masuk...wkwkwkwkw


Yeahhhh...berhasil ...dan yg bikin saya geleng-geleng ada output pada layar sub MQTT.FX yang biasa saya gunakan untuk mencoba pub sub, awalnya saya sebelum menggunakan esp8266 saya gunakan mqtt.fx, lalu frustasi gak ada data masuk. Ehhhh nongol dia...


Ternyata memang data yg dikirim masih berupa JSON REST API ..ckkcckkkckkk , jadi cicak deh saya

Baiklah..demikian penelusuran BUG PADA ANTARES MQTT , semoga pihak antares bisa memperbaiki librarynya..

PS: BUG yang lebih gatel ternyata muncul juga..silahkan baca lanjutannya di :
Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

Site View

Categories

555 (6) 7 segmen (3) adc (4) amplifier (2) analog (10) android (11) antares (3) arduino (14) attiny (1) attiny2313 (17) blog (1) bluetooth (1) cmos (2) crypto (2) dasar (35) display (3) esp8266 (3) gcc (1) iklan (1) infrared (2) Input Output (3) iot (16) jam (6) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (12) komputer (3) komunikasi (1) kontrol (4) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (55) mikrokontroller (7) mikrotik (5) ninmedia (2) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (38) pcb (2) praktek (2) project (33) proyek (1) python (1) radio (3) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (3) signage (1) sinyal (1) sms (6) software (18) tachometer (2) telepon (7) televisi (72) television (5) transistor (1) troubleshoot (3) tulisan (59) tutorial (78) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika