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

Kamis, 02 Juli 2020

[IOT Itu Gampang] Komunikasi 2 Arah Dari Arduino Langsung ke Excel



Semakin asyik dan mudah, kini kita dapat menulis grafik menggunakan arduino langsung ke microsoft excel dengan bantuan library python xlwings. Tapi ada kendala kalau menggunakan MQTT maka jalur akan sedikit kepanjangan seperti yang telah dibahas sebelumnya disini. Seorang teman menyebut kalau pada dunia industri masih belum digalakkan penggunaan jalur internet pada  mesin industri  alasannya rawan di jahili para opreker Indonesia yang terkenal jago. Untuk itu kali ini kita akan bahas menggunakan komunikasi langsung serial UART dari arduino ke PC dan selanjutnya menulis ke Excel.




Karena komunikasi serial langsung ke PC maka kita dapat sedikit berkreasi dengan mengirim balik data dari excel ke Arduino. Jadi perintah paling sakti dari library python xlwings yang kita gunakan pada tutorial kali ini adalah :


sheets.range('cellname').value=?? 
 

Jadi dapat dilakukan 2 arah perlakuan yaitu penulisan cell dan pengambilan nilai/isi cell , sehingga selain menulis data dari pembacaan DHT11, kita juga dapat mengambil nilai cell untuk mengatur nyala mati led. Bagaimana scriptnya ? Sangat mudah kok ...


#include "DHT.h" // Library DHT11

#define DHTPIN 5 //PIN DHT
#define DHTTYPE DHT11

#define MERAH 4   //PIN LED
#define HIJAU 14
  
DHT dht(DHTPIN, DHTTYPE); 

unsigned long previousMillis = 0; //Timer
const long interval = 2000; //2 detik


void setup() {
pinMode(MERAH, OUTPUT);
pinMode(HIJAU, OUTPUT);
Serial.begin(9600); //serial ke usb com
dht.begin();

}



void loop() {

  unsigned long currentMillis = millis();
  //cek timer 
  if(currentMillis - previousMillis >= interval) {
  previousMillis = currentMillis;  
  float h = dht.readHumidity();
  float t = dht.readTemperature();
 
  // cek pembacaan dht benar
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
  }
  else{
    
   //lempar langsung ke serial
   Serial.println( String(t) + ","+ String(h) );
    }

  }

}

Kalau hanya mengirim data serial maka akan se-simpel itu, sedangkan pada python cukup ditambahkan library pyserial untuk meng-capture data serial yang dikirim oleh arduino.


import serial
import xlwings as xw

wb = xw.Book('Book1.xlsx')
sht = wb.sheets['data']
row = 1

serialPort = serial.Serial(port = "COM4", baudrate=9600,
                           bytesize=8, timeout=2, 
                           stopbits=serial.STOPBITS_ONE)
                           
serialString = ""       


while(1):
    if(serialPort.in_waiting > 0):
        serialString = serialPort.readline()
        data=serialString.decode('utf-8')     
        print(data)	
        datae=data.split(',')
        if row == 51:
           row=2 
        else: 
          row=row+1
        rowsuhu='A'+str(row)
        rowhumi='B'+str(row)
        sht.range(rowsuhu).value= float(datae[0])
        sht.range(rowhumi).value= float(datae[1])

Jadi kalau anda sudah memahami pembahasan pada tulisan sebelumnya di : http://www.aisi555.com/2020/07/tutorial-menggambar-grafik-data-arduino.html ,maka tidak akan mengalami kesulitan yang berarti.



Bagaimana dengan proses mengirim data balik dari excel ke arduino ? kita reverse aja script tambahannya seperti berikut :


def kirim():
    if(sht.range('J27').value =='ON' and sht.range('N27').value =='ON' ):
       serialPort.write(b'1')
    elif(sht.range('J27').value =='OFF' and sht.range('N27').value =='OFF' ):
      serialPort.write(b'2')    
    elif(sht.range('J27').value =='ON' and sht.range('N27').value =='OFF' ):
      serialPort.write(b'3')       
    elif(sht.range('J27').value =='OFF' and sht.range('N27').value =='ON' ):
      serialPort.write(b'4')   

Function / routine diatas akan dipanggil setiap selesai data DHT11 dibaca dan memiliki 4 buah kondisi yang diwakili oleh string '1' , '2' , '3' dan '4' yang memiliki terjemah sendiri terhadap kondisi LED yang diinginkan berdasarkan isian dari CELL yang dimaksud. Jadi pada script arduinonya akan ditunggu pada loop utama adakah data serial masuk seperti script berikut:


if (Serial.available() >0) { 
  // baca data masuk: 
  byte incomingByte = Serial.read(); 
  //pilihan konsidi led sesuai script python
 if( incomingByte == '1') {
     digitalWrite(MERAH,HIGH);
     digitalWrite(HIJAU,HIGH);
     }
 else if( incomingByte == '2') {
     digitalWrite(MERAH,LOW);
     digitalWrite(HIJAU,LOW);
     }
 
 else if( incomingByte == '3') {
     digitalWrite(MERAH,HIGH);
     digitalWrite(HIJAU,LOW);
     }
  else if( incomingByte == '4') {
     digitalWrite(MERAH,LOW);
     digitalWrite(HIJAU,HIGH);
     }
   } 

Sesingkat itu scriptnya dan selengkapnya dapat dilihat pada video dibawah ini, selamat mencoba ..


 


#daring #daringadalah daring adalah mpls #sekolah #guru #google classroom google classroom sekolah online guru kelas zoom webcam 
Share:

[IOT Itu Gampang] Menggambar Grafik Data Arduino ke Excel



Sangat jarang saya menulis blog setelah youtube nya duluan saya upload, jadi mungkin terbawa perasaan kehilangan teman yang sering bikin vlog, jadi beberapa hari belakangan saya rajin mengunggah video tutorial. Bahasan yg di tampilkan adalah mengenai cara menulis data dan menampilkan grafik dari Arduino ke microsoft excel, walau diluaran sana sudah ada tools langsung jadi tapi kini saya bahas lebih mudah menggunakan bantuan python / xlwings. Jadi dengan tutorial kali ini maka tidak susah-susah lagi menggunakan mysql+php pada windows (xamp) cukup excel aja.




Sensor sejuta umat DHT11 mungkin paling sering dibahas dimana-mana termasuk pada blog ini dimana untuk DHT11 vs MQTT sudah pernah saya bahas di :http://www.aisi555.com/2019/10/iot-lebih-lanjut-dengan-mqtt.html , jadi kali ini saya anggap pembaca sudah paham cara mengirim data MQTT nya. Kita akan lebih ke library python nya yang saya gunakan yaitu XLWINGS.



import xlwings as xw   #library

wb = xw.Book('Book1.xlsx') #nama file excel
sht = wb.sheets['coba']  #nama sheets

sht.range('C1').value= 10
sht.range('C2:C10').value='aku menulis'


for x in range(1,50): 
    a='A'+str(x)
    b='B'+str(x)
    sht.range(a).value= x*3
    sht.range(b).value= x*2

Sangat jelas dan singkat script python diatas jadi tidak perlu dibahas lagi dan jika dijalankan hasilnya akan seperti berikut:


xlwings merupakan library paling bagus menurut saya kalau dilihat dari segi metode penulisannya yang langsung saat excel terbuka, jadi sangat cocok untuk menampilkan grafik realtime dari pengukuran DHT11. Script dari wemos-esp8266-wifi-mqtt yang saya gunakan seperti berikut :

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"

const char *ssid =  "myIOT";  //ubah sesuai wifi anda
const char *pass =  "selaluterhubung";  
//broker gratisan hivemq.com
const char *mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char *mqtt_user = "";
const char *mqtt_pass = "";
const char *mqtt_client_name = "ahocool445566"; 
//inisialisasi DHT
#define DHTPIN 5
#define DHTTYPE DHT11
  
DHT dht(DHTPIN, DHTTYPE); 

WiFiClient wclient;
PubSubClient client(wclient);

#define TOPIKDHT "/test/dht11" //topik yang digunakan


//koneksi wifi
void setupwifi()
{
   if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Connecting to Wifi:  ");
    Serial.print(ssid);
    Serial.println("...");
    WiFi.begin(ssid, pass);

    if (WiFi.waitForConnectResult() != WL_CONNECTED)
      return;
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
}

void setup() {
Serial.begin(9600); //serial monitoring
setupwifi();
client.setServer(mqtt_server, mqtt_port); // server mqtt
dht.begin();  //mulai dht

}

void kirim(String kata) //publish ke topik
{

    Serial.println("publish to topic: " );
    Serial.print(TOPIKDHT);
    Serial.print(" : ");
    Serial.println(kata);
    char message_buff[kata.length() + 1];
    kata.toCharArray(message_buff, kata.length() + 1);
    client.publish(TOPIKDHT,message_buff);
  
}

void reconnectmqtt() //konek mqtt lagi jika putus
{

      Serial.println("Connecting to MQTT server..");
     
      if (client.connect(mqtt_client_name,mqtt_user, mqtt_pass)) {
        Serial.println("Connected to MQTT server");
      } else {
        Serial.println("Could not connect to MQTT server");   
      }
   
}


void loop() {

  if (!client.connected()) //cek koneksi mqtt
   {
    reconnectmqtt();
   }
 //baca suhu dan kelembaban
  float h = dht.readHumidity();
  float t = dht.readTemperature();
 
  // Cek jika pembacaan sensor benar lalu kirim
  if (isnan(h) || isnan(t)) {
      Serial.println(F("Failed to read from DHT sensor!"));
  }
  else{
    
  //kirim ke serial monitoring
      Serial.print(F("Humidity: "));
      Serial.print(h);
      Serial.print(F("%  Temperature: "));
      Serial.print(t);
      Serial.print(F("°C "));
  //kirim ke mqtt data "suhu,kelembaban"
      kirim( String(t) + ","+ String(h) );
    }

 delay(5000); //delay pengiriman mqtt
}

Sangat sederhana tujuan script diatas berupa pengiriman ke sebuah TOPIK MQTT yaitu : "/test/dht11" berupa data string "suhu , kelembaban" (contoh :  "30.5,70.00") lalu oleh python akan di subscribe dan jika ada data masuk akan ditulis oleh library python XLWINGS seperti script berikut:


import paho.mqtt.client as mqtt #library mqtt
import xlwings as xw #library menulis excel

wb = xw.Book('Book1.xlsx') #nama book/file excel
sht = wb.sheets['data'] #nama sheets
row = 1
########## menulis ke excel #########
def to_excel(data):
    print(data)
    datae = data.split(",") #bikin list delim koma
    global row  #ini reset row kembali ke 2
    if row == 51:
       row=2 
    else:
      row=row+1 #increment row tiap ada data masuk
    rowsuhu='A'+str(row) #kolom suhu
    rowhumi='B'+str(row) #kolom kelembaban
    sht.range(rowsuhu).value= float(datae[0]) #tulis suhu
    sht.range(rowhumi).value= float(datae[1]) #tulis kelembaban
############ call back pesan mqtt masuk ##########
def on_message(client, userdata, message):
    print("message received " ,str(message.payload.decode("utf-8")))
    print("message topic=",message.topic)
    print("message qos=",message.qos)
    print("message retain flag=",message.retain)
    to_excel(str(message.payload.decode("utf-8"))) #tulis ke excel  
########################################
broker_address="broker.hivemq.com" #broker mqtt
broker_port=1883
broker_user=""
broker_pass=""
print("creating new instance")
client = mqtt.Client("P1") #create new instance
client.on_message=on_message #attach function to callback
client.username_pw_set(broker_user,broker_pass)
print("connecting to broker")
client.connect(broker_address,broker_port) #connect to broker
 #start the loop
print("Subscribing to topic","/test/dht")
client.subscribe("/test/dht11")
client.loop_forever()
Jadi jika kita run script pythonnya dan data kemudian akan ditulis ke excel sehingga grafik terupdate.


Ini cocok digunakan untuk sensor yang jarak jauh dan ingin ditampilkan sebagai monitoring langsung dan karena excel  umum digunakan maka pengaturan tampilannya dapat disesuaikan dengan mudah. Jika alat yang dimonitoring letaknya dekat maka cukup menggunakan serial port dan akan dibahas pada tulisan selanjutnya.




#daring #daringadalah daring adalah mpls #sekolah #guru #google classroom google classroom sekolah online guru kelas zoom webcam 
Share:

Senin, 29 Juni 2020

[Rest In Peace] Mengenang kawan yang hebat dan "inspiring" Dr. Istas Pratomo ST MT


 .... A person, when dies, his soul leaves the body only, the mortal world and then enters the immortal one .....

Pada suatu minggu pagi  di awal juni 2020 saya diminta oleh kawan saya yg hebat, dengan kualitas pertemanan dari level duta besar - Menteri - Gubernur hingga rakyat jelata seperti saya seorang tukang solder, untuk mengisi podcast yang sedang dia gandrungi. Entah kenapa tukang solder ini diminta untuk menjadi narasumber mengingat sebelumnya kaliber yang diwawancarai  membuat tukang solder ini minder. Ya beliau adalah Dr. Istas Pratomo ST MT pengajar handal di bidang telekomunikasi dari Elektro ITS dan juga merangkap Dekan Fakultas Teknik UNUSA surabaya. Kita berbicara membahas algoritma medsos dan efeknya pada kehidupan.

Tak menyangka di akhir bulan yang sama dan sedang dihebohkan dengan meningkatnya kasus  covid 19, dengan posisi duduk saya yg sama (saat beliau mengundang saya) setelah rutinitas nyapu halaman, tercenganglah saya mendengar berita dari group WA bahwa beliau telah dipanggil yg maha kuasa. Tak kuasa menahan keheranan sampai kopi dihadapan saya dingin karena tatapan mata saya, ter-ngiang bagaimana keceriaan beberapa minggu yg lalu saat meminta menjadi narasumber. Ahhh saya terlalu baper dan menghubungi teman-teman sejawat untuk memastikan berita dan benar beliau sakit dan telah tiada. Sangat sedih dan saya akan membagi pengalaman saya untuk mengenang jiwa beliau. Mungkin beberapa rekan dari "Orang Baik" ini  juga menulis pengalaman yg lebih hebat, tapi ini versi saya untuk mengenang kawan yang bagi saya sangat Inspiring ! 


Kami diikat oleh persaudaraan angkatan 98 yang disebut e-38 atau Elektro ITS angkatan ke-38, dimana pada masa reformasi itu banyak di warnai dengan demo mahasiswa dan sedikit ketidakpastian. Tapi saya dan mungkin teman saya seangkatan tidak merasakan sama sekali kesulitan diluar sana, maklum masih bau kencur dan kebanyakan perantauan yang diutus ortu hanya untuk menuntut ilmu. Jadi kami santai saja walau ajakan berdemo sering muncul dari kakak kelas, apalagi ketika kakak di Fakultas Teknik ITS sempat berorasi : " Kalian Bayi - Bayi FTI ..ayo lekaslah besar agar bisa meneruskan estafet kami yg akan segera lulus ini  !" .....Salah satu teman berkelakar sambil berbisik : "...tas..istas..awakmu ta sing sing jenenge bayi FTI ? " Sejak itulah kami sering berkelakar kepada rekan kami yang bertubuh mungil dan bulat ini sebagai BAYI FTI. 


Ingatan penulis saat kuliah dulu tidak terlalu sering mengerjakan tugas kuliah bersama beliau karena mungkin beda "genk", beliau  sering kumpul dirumah salah satu teman untuk membahas tugas, mereka umumnya arek suroboyo alumni SMA 5, namun saya tetap akrab karena kadang ketemu di acara kampus seperti saat menjadi panitia reuni home coming elektro ITS di foto diatas. Jangan kaget kalau penulis sempat berambut gondrong dan dengan jailnya teman kami ini menarik rambut saya saat berfoto bersama.


Tukang solder ini sangat idealis tetap pada jalurnya masuk elektro karena ingin melanjutkan kecintaannya pada dunia solder menyolder, beliau masuk bidang telekomunikasi bersama genk yang sama, sangat solidnya mereka dan benar saja sekarang rata-rata mempunyai karir yang moncer. Pernah suatu hari beliau datang ke LAB B202 tempat penulis sering nongkrong dan dengan gayanya membuka tutup flip HP MOTOROLA , penulis bertanya : " wihhh sugihe rek..isok duwe hp" . Penulis memang bermimpi memiliki HP seperti teman lainnya, apa daya uang kiriman cukupnya buat beli tempe penyet dan sesekali nasi goreng + telor ceplok (seminggu sekali). Berbeda 180 derajat dengan penulis,  beliau ini mandiri sejak kuliah seingat saya dan dia menjawab nyinyiran saya : " yo kerjo rek...nge-lesi arek2 SMA - SMP , utowo awakmu kan pinter nyolder, golek'o monitor bekas2 nang loak trus dipermak isok didol dadi duwik !" kalau diterjemahkan " ya kerja dong, bikin les anak smp-sma atau kamu kan pinter nyolder cari aja monitor bekas di loak trus di perbaiki lalu dijual dan jadi uang ! " Ternyata kata seorang teman pernah menyebut, kalau beliau menjadi makelar komputer bekas yang di refurbish dan dijual ulang. 

Naifnya tukang solder ini langsung ingin mengikuti jejak beliau menjadi guru LES, kebetulan ada kakak kelas guru les  ( mahasiswa juga dari Singaraja ) yang penuh jadwalnya dan yang di beri les ternyata adik sepupu teman sekolah dari SMP s/d SMA. Karena sepertinya gayung bersambut deal di harga 17.500 per jam, dengan seminggu 4 jam, jadi sebulan 280rb dikantong lumayan buat nambah jajan dan harapannya jam ditambah bisa deh buat beli HP. Untung tak boleh diraih, sang anak SMP tidak naik kelas, yah karena memang niat belajarnya kurang, dalam waktu 2 bulan saya di pesangoni 500rb dan di minta jangan datang lagi. Sepupunya si anak didik yang teman lama saya langsung cemberut dan sampe sekarang tidak pernah kontak saya lagi. Hehehehe mungkin takdirnya saya disuruh ortu hanya untuk belajar gak boleh cari uang dulu.

Beliau terkenal lucu dan energic..tapi cerdas tentunya


Setelah 4 tahun menempuh kuliah, beliau lulus cepat bersama  kuartet arek pintar yang juga teman akrab beliau, penulis harus menambah masa bertapa di LAB elektronika karena sesuai rencana harus belajar microcontroller dulu baru sah lulusnya. Beliau menjadi asisten dosen termuda di lab telekomunikasi bersama pak Dr Afandi dan kemudian menjadi dosen tunggu. Suatu malam saat kuliah malam mau buyar , dilorong LAB saya bertemu beliau dan ber-keluh kesah kalau gaji nya jadi dosen tunggu sangat kecil dan seingat saya ada beberapa rekan kakak kelas yg ikut nimbrung menyarankan kalau ingin cepat jadi dosen tetap, segeralah S2 dan dengan ajaibnya saat saya lulus kuliah beliau mengabari kalau akan berangkat ke ITB Bandung untuk kuliah S2. Luar biasa kegigihannya..

Setelah itu kami berpisah ke dunia kerja masing-masing, hanya terdengar kabar kalau beliau ikut juga pada proyek telco bersama dosen-dosen telekomunikasi ITS, saya kebetulan juga melenceng pekerjaan dari tukang solder ke dunia CDMA kala itu. Jadi ketika bertemu sub-kontraktor tukang panjat tower maka nama beliau sering dibicarakan. Fast forward ke masa saat medsos facebook mendekatkan kami lagi walau dia jauh di Perancis mengambil Doctoral, kadang masih juga saling stalking sampe dia tahu kalau saya balik nyolder lagi. Hasilnya tahun 2012 saat beliau balik ke tanah air sempat menawari beberapa project sensor dan yang paling ingat adalah kegusarannya karena anaknya yg sejak kecil di prancis gak mau nonton upin ipin. Dimintalah saran ke saya harus pasang parabola apa untuk menonton TV perancis. Youtubenya kenapa kan ada?  Dia bilang gak mau, yang biasa ditonton di  ch 1,2,3 prancis dan sayangnya parabola yg sampe di Indonesia hanya menampilkan sedikit saluran prancis dan kebanyakan saluran berita. Ujungnya saya sarankan memakai STB Android dan menginstall aplikasi streaming , hasilnya sukses !



Saat kembali ke Indonesia nama beliau semakin sering terdengar di media apalagi ketika menjadi dekan Fakultas Teknik di Universitas NU Surabaya (UNUSA), pada tahun 2017 sempat diajak menjadi peserta workshop FGD  kompetensi, dan tahun 2019 diminta membantu mobile data UNUSA untuk merancang hardware pengambil data kualitas udara secara IOT. Senang sekali penulis mendapatkan kepercayaan ini karena mengembalikan "ROH" solder ke tangan saya dan percaya diri bahwa dunia saya adalah solder-microcontroller-IOT.




Kesibukan beliau yang luar biasa menyebabkan proyek ini sedikit terbengkalai, apalagi sekitar desember 2019 beliau dikirim menjadi dosen tamu di Guilin China. Mungkin ini menjadi jalan-jalan paling heboh sebelum covid menyerang daratan china dan benar saja tahun 2020 beliau kembali ke Indonesia dan menghadapi situasi pandemi memaksa semua kuliah dari rumah. Semua yg beliau pelopori sejak dulu yaitu ONLINE CLASS - VIDEO LEARNING - ZOOM dan kelakarnya tahun 2018 saat kami reuni di kampus tercinta " Dunia pendidikan sekarang sudah berbeda dari jaman kita, sekarang cukup bikin video, upload youtube, konsultasi lewat whatsapp dan diskusi via skype. Gak ada lagi mahasiswa yg tidur di LAB demi internet gratis ". Beliau adalah pelopor penggunaan zoom untuk pendidikan dimana sejak awal 2019 sudah beliau gunakan mengajar di lab Telekomunikasi Elektro ITS terutama saat kesibukan beliau keliling negeri maupun luar negeri. 



Nyambung ke alat mobile data yang sempat tertunda,  beliau kontak lagi kesaya sekitar mei 2020 dan menyerahkan sepenuhnya ke saya untuk menyelesaikan alatnya dan sesuai gambar diatas saya telah berhasil menyelesaikan dan melakukan test keliling surabaya sesuai map diatas yang lengkapnya bisa dilihat (klik disini). 




Ternyata legacy dan amal jariyah berupa ilmu dan "video" yang beberapa waktu terakhir makin sering beliau upload di berbagai macam platform medsos menjadi pertanda halus kalau beliau akan pergi untuk selamanya. Kadang kita tertawa oleh tingkah laku beliau di app "smule" yang terlihat begitu riang gembira sampai di grup WA angkatan kami sering meminta beliau untuk nyanyi atau request lagu tertentu. Pertemuan terakhir bersama angkatan merupakan inisiasi beliau saat lebaran melalui zoom dan kami merasa dipersatukan oleh beliau. 


Akhirnya ...kamipun berdoa melepas kawan saudara sejawat kami melalui aplikasi yang beliau pelopori penggunaanya. Semua yang berbicara pada acara tahlilan online via zoom merasa kehilangan, mulai dari mantan rektor dan menteri era SBY prof M Nuh hingga rekan akademisi ITS utamanya elektro ITS merasakan kesedihan ditinggalkan putra terbaiknya. Bapak Dedet yg mewakili elektro mengenang sosok beliau sebagai salah satu diantara mereka yang "Larinya Sangat Cepat ".  Saya pun  sangat kehilangan teman yang luar biasa baiknya tidak membedakan pertemanan dengan kalangan atas maupun bawah, dengan keluwesannya dan persistensi kegigihannya mencapai tujuan yang diinginkan. Semangat nya menginspirasi bahwa tiada yang tidak mungkin kalau kita terus berusaha , membekas di hati saya dan menjadi pecut buat lebih maju kedepan.



Dr. Istas Pratomo, ST., MT.
Lahir tgl. 25/03/1979
Wafat tgl. 28/06/2020
Pendidikan :
S1 ITS (elits 38)
 S2 ITB
S3 Univ. Rennes 1, France
Pekerjaan:
Dosen ITS sejak 2002 di Dep Teknik Elektro, Bid studi Telekomunikasi Multimedia
Sejak 2015 Ketua LPPM UNUSA & Sejak 2017 Dekan Fak Teknik UNUSA



Selamat Jalan Kawan...
suatu hari kita akan PODCAST lagi 
di sana...di keabadian...
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

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (8) 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 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (58) 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 (7) 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 (24) 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