EiyaElang / Rumah-Kaca-Elangnesia-

0 stars 4 forks source link

Satukan Pasukan, Serangan Pertama! #7

Open iwas108 opened 5 months ago

iwas108 commented 5 months ago

Instruksi

Sampai di sini, pasukan UrusanWiFi dan pasukan UrusanIoT sudah siap di depan gerbang, mereka tinggal kita perintah untuk maju. Pasukan UrusanWiFi akan maju pertama untuk mengamankan jalur tempur. Setelah masuk dan terhubung, pasukan UrusanIoT akan menerjang menembus belukar dan rintangan hingga tembus ke Broker. Setelah masuk ke broker, kita bisa berkomunikasi dengan semua pasukan lain dari divisi lain yang terhubung ke topik yang sama. Bayangkan seberapa besar kekuatan ketika kita semua terhubung!

Step 1: Persiapkan Kode Akses File secret.h dan secret.h.ori

secret.h

const char* ssid = "Ingat Tuhan";
const char* pass = "bukanbudakai";
const char* id = "tld.organizationname.divisionname";
const char* broker = "broker.hivemq.com";
const char* brokerUsername = "public";
const char* brokerPassword = "public";
const int port = 1883;

Pastikan id kalian ganti dengan tld = top level domain (org, com, id, net, dll). organizationname = nama PT tanpa spasi, divisionname = nama divisi tanpa spasi.

secret.h.ori

const char* ssid = "";
const char* pass = "";
const char* id = "com.company.division";
const char* broker = "broker.hivemq.com";
const char* brokerUsername = "public";
const char* brokerPassword = "public";
const int port = 1883;

Step 2: Kode Pada File main.cpp

#include <Arduino.h>
#include <MQTT.h>
#include <UrusanWiFi.h>
#include <UrusanIoT.h>
#include "secret.h"
#include <TaskScheduler.h>

void penangkapPesan(String topic, String message);
void task1DetailTugas();

UrusanWiFi urusanWiFi(ssid, pass);
UrusanIoT urusanIoT(broker, port, id, brokerUsername, brokerPassword);
Scheduler penjadwal;

Task task1(3000, TASK_FOREVER, &task1DetailTugas);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);

  urusanWiFi.konek();
  urusanIoT.konek();
  urusanIoT.penangkapPesan(penangkapPesan);
  urusanIoT.subscribe("tld/namaorganisasi/namadivisi");

  penjadwal.init();
  penjadwal.addTask(task1);
  task1.enable();
}

void loop() {
  // put your main code here, to run repeatedly:
  urusanIoT.proses();

  if(urusanWiFi.apakahKonek() == 1 && urusanIoT.apakahKonek() == 0){
    urusanIoT.konek();
  }

  penjadwal.execute();
}

/// @brief Fungsi callback dari fungsi subscribe objek urusanIoT
/// @param topic 
/// @param message 
void penangkapPesan(String topic, String message){
  Serial.printf("penangkapPesan: topic: %s | message: %s\n", topic.c_str(), message.c_str());
}

/// @brief Fungsi callback dari task1
void task1DetailTugas(){
  if(urusanIoT.apakahKonek() == 1){
    urusanIoT.publish("tld/namaorganisasi", "namadivisi");
  }
}

Pastikan kalian menyesuaikan nama tld, namaorganisasi, namadivisi di kode program main.cpp

Step 3. Build the Code

Kompile kode tersebut, dan pastikan tidak ada yang error dengan menekan tombol centang di taskbar bagian bawah Visual Studio Code.

Cara Submit Misi

Setelah selesai melakukan misi ini, commit dan push kembali ke github, para leader divisi harus konfirm ke Signal Group dengan format NamaOrganisasi-NamaDivisi-URLBranch.

What Do You Have To Learn

Pada bagian paling atas file main.cpp, perhatikan bagaimana pasukan-pasukan dan senjata-senjata yang tadi kita buat kita import dan kita gunakan pada misi. Perhatikan pada bagian ini:

UrusanWiFi urusanWiFi(ssid, pass);
UrusanIoT urusanIoT(broker, port, id, brokerUsername, brokerPassword);
Scheduler penjadwal;

ini adalah kode untuk mewujudkan objek (instansiasi) dari kelas UrusanWiFi, UrusanIoT dan Scheduler. Dari namanya kalian bisa tebak apa kesaktian yang di miliki oleh objek-objek itu.

Selain itu, juga ada beberapa fungsi callback, fungsi callback adalah fungsi yang dipanggil ketika sesuatu terjadi, misal ada pesan datang, maka fungsi penangkapPesan akan dipanggil untuk mengolah pesan itu.

Ada juga objek penjadwal, ini bisa kita perintah untuk membantu kita menjalankan tugas-tugas repetitif/berulang, misalnya mengirim data ke broker.