0% menganggap dokumen ini bermanfaat (0 suara)
76 tayangan

Module MQTT-1

Modul ini menjelaskan tentang protokol MQTT, termasuk apa itu protokol MQTT, bagaimana sistem kerjanya yang menerapkan publish dan subscribe data, serta bagaimana broker berfungsi sebagai penghubung antara publisher dan subscriber yang terhubung melalui topik tertentu. Script Arduino dan JavaScript juga ditunjukkan untuk mengimplementasikan komunikasi IoT menggunakan protokol MQTT.

Diunggah oleh

Andika Saputra
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
76 tayangan

Module MQTT-1

Modul ini menjelaskan tentang protokol MQTT, termasuk apa itu protokol MQTT, bagaimana sistem kerjanya yang menerapkan publish dan subscribe data, serta bagaimana broker berfungsi sebagai penghubung antara publisher dan subscriber yang terhubung melalui topik tertentu. Script Arduino dan JavaScript juga ditunjukkan untuk mengimplementasikan komunikasi IoT menggunakan protokol MQTT.

Diunggah oleh

Andika Saputra
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 8

Modul Pertemuan

Apa itu protokol?


Protokol merupakan peraturan atau prosedur untuk mengirimkan sebuah data pada perangkat
elektronik. Pada sistem komputer, setiap komputer berkomunikasi dengan komputer lainnya
menggunakan sebuah protokol. Banyak sekali jenis protokol, seperti jenis protokol yang tidak
terlalu asing ditelinga seperti UDP, FTP, TCP, ICMP dan yang sering kita pakai untuk
komunikasi IoT pada artikel sebelumnya yaitu HTTP (Hyper Text Transfer Protocol). Begitu
pula dengan MQTT, MQTT merupakan salah satu protokol yang dapat digunakan untuk
komunikasi pada sistem komputer. 

Apa itu MQTT protokol?


MQTT (Message Queuing Telemetry Transport) protokol merupakan sebuah protokol yang
berjalan diatas stack TCP/IP dan dirancang khusus untuk machine to machine yang tidak
memiliki alamat khusus. Maksud dari kata tidak memiliki alamat khusus ini seperti halnya
sebuah arduino, raspi atau device lain yang tidak memiliki alamat khusus. Sistem kerja MQTT
menerapkan Publish dan Subscribe data. Dan pada penerapannya, device akan terhubung pada
sebuah Broker dan mempunyai suatu Topic tertentu.

 Apa itu Broker, Publish, Subscribe dan Topic?


Broker pada MQTT berfungsi untuk menghandle data publish dan subscribe dari berbagai
device, bisa diibaratkan sebagai server yang memiliki alamat IP khusus. Beberapa contoh dari
Broker yang ada seperti Mosquitto, HiveMQ dan Mosca.
Publish merupakan cara suatu device untuk mengirimkan datanya ke subscribers. Biasanya pada
publisher ini adalah sebuah device yang terhubung dengan sensor tertentu.
Subscribe merupakan cara suatu device untuk menerima berbagai macam data dari publisher.
Subscriber dapat berupa aplikasi monitoring sensor dan sebagainya, subscriber ini yang nantinya
akan meminta data dari publisher.
Topic seperti halnya pengelompokan data disuatu kategori tertentu. Pada sistem kerja MQTT
protokol ini, topic bersifat wajib hukumnya. Pada setiap transaksi data antara Publisher dan
Subscriber harus memiliki suatu topic tertentu.
Pada gambar desain sistem MQTT sederhana tersebut, terdapat 3 bagian penting
yaitu Publisher, Broker dan Subscriber. Setiap bagian memiliki tugas masing-masing, berikut
penjelasannya :
1. Blok Publisher
Pada blok Publisher, terdapat beberapa sensor, seperti contoh terdapat sensor A, B dan C. Setiap
sensor akan terhubung ke suatu gateway seperti Ethernet shield, ESP8266, SIM800L atau device
sejenisnya yang dapat menghubungkan kita ke MQTT Broker. Antara gateway dan sensor pasti
terdapat controller, Anda dapat menggunakan controller seperti Arduino, RaspberryPi atau
sejenisnya. Nah, tugas dari Blok Publisher ini cukup sederhana yaitu mengirim data yang
diambil dari sensor A, B dan C ke suatu MQTT Broker dengan Topic data1.

2. MQTT Broker
MQTT Broker memiliki suatu alamat yang dapat diakses oleh Publisher dan
Subscriber. Tugas dari MQTT Broker ini yaitu sebagai penghubung transaksi data antara
publisher dan subscriber. MQTT Broker juga mengenali suatu data lewat sebuah
pengelompokan atau biasa disebut topic. Ketika Publisher mengirim data sensor A, B, C dengan
topic data1, dan suatu saat terdapat Subscriber yang melakukan subscribe dengan topic yang
sama data1, maka bisa dipastikan Subscriber akan menerima data sensor A, B dan C dari
Publisher.

3. Blok Subscriber
Blok Subscriber bertugas untuk melakukan subscribe data pada topic data1. Setelah
mendapatkan data yang berupa nilai sensor A, B dan C dari publisher, kita dapat mengolah data-
data tersebut untuk dimasukkan kedalam database, dianalisis atau dapat kita proses menjadi
sebuah sistem monitoring yang terstruktur dan memiliki nilai jual.

Script Arduino Menggunakan MQTT


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

// Update these with values suitable for your network.

const char* ssid = "POCO X3 NFC";


const char* password = "satuduatiga";
const char* mqtt_server = "broker.hivemq.com";

#define DHTPIN D3
#define DHTTYPE DHT22

DHT sensor_dht( DHTPIN, DHTTYPE);

WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
char msg2[MSG_BUFFER_SIZE];
int value = 0;

void setup_wifi() {

delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {


delay(500);
Serial.print(".");
}

randomSeed(micros());

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {


Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();

// Switch on the LED if an 1 was received as first character


if ((char)payload[0] == '1') {
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage
level
// but actually the LED is on; this is because
// it is active low on the ESP-01)
} else {
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
}

void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "NodeMcu2113191141Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("outWawan2113191141", "ini dari wawan");
// ... and resubscribe
client.subscribe("outWawan2113191141");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}

void setup() {
pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output
Serial.begin(115200);
sensor_dht.begin();

setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}

void loop() {

float suhu = sensor_dht.readTemperature();


float kelembaban = sensor_dht.readHumidity();

Serial.println("Suhu :");
Serial.println(suhu);
Serial.println("Kelembaban :");
Serial.println(kelembaban);

if (!client.connected()) {
reconnect();
}
client.loop();

// unsigned long now = millis();


// if (now - lastMsg > 1000) {
// lastMsg = now;
// }
// ++value;
snprintf (msg, MSG_BUFFER_SIZE, "{\"suhu\" : %1f,\"kelembaban\" :%1f}",
suhu,kelembaban);
Serial.print("Publish message: ");
Serial.println(msg);
client.publish("outWawan2113191141", msg);
delay(500);
}

Script HTML
<!DOCTYPE html>
<html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Latiha iot</title>
<meta name="author" content="Fani Aghistiya Lestari">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js"
type="text/javascript"></script>

</head>

<body>
<h1>Hallo!!</h1>
<h3><div id="msgarr"> </div></h3>
<h3>Temperature : <div id="suhu"> </div></h3>
<h3>Humidity : <div id="humi"> </div></h3>
</body>
<script src="iot-script-conn2.js"></script>
</html>

Script JavaScript
var connected_flag = 0
var mqtt;
var reconnectTimeout = 2000;

MQTTconnect();

function onConnectionLost() {
connected_flag = 0;
console.log('Reconnecting...');
MQTTconnect();
}

function onFailure(message) {
setTimeout(MQTTconnect, reconnectTimeout);
}

function onMessageArrived(r_message) {
out_msg = "Message received " + r_message.payloadString + "<br>";
out_msg = out_msg + "Message received Topic " + r_message.destinationName;

console.log(out_msg);

const obj = JSON.parse(r_message.payloadString);


var temp = obj.suhu;
var humi = obj.kelembaban;

document.getElementById("suhu").innerHTML = (temp);
document.getElementById("humi").innerHTML = (humi);

function onConnected(recon, url) {


console.log(" in onConnected " + reconn);
}

function onConnect() {
connected_flag = 1

console.log('Connected');
sub_topics();
}

function MQTTconnect() {
var s = "broker.hivemq.com";
var p = 8000;

if (p != "") {
port = parseInt(p);
}
if (s != "") {
host = s;
}

console.log('Connecting ...');

var x = Math.floor(Math.random() * 10000);


var cname = "orderform-" + x;
mqtt = new Paho.MQTT.Client(host, port, cname);
var options = {
timeout: 3,
onSuccess: onConnect,
onFailure: onFailure,

};

mqtt.onConnectionLost = onConnectionLost;
mqtt.onMessageArrived = onMessageArrived;

mqtt.connect(options);
return false;

function sub_topics() {
if (connected_flag == 0) {
out_msg = "<b>Not Connected so can't subscribe</b>"
console.log(out_msg);
return false;
}
var stopic = 'outWawan2113191141';
mqtt.subscribe(stopic);

return false;
}

var msg = '0';


function send_message(command, aksi) {

if (connected_flag == 0) {
out_msg = "<b>Not Connected so can't send</b>"
return false;
}
if (msg == '0') {
msg = '1'
} else {
msg = '0';
}

s_msg = '{"respon":"' + command + '", "aksi":"' + aksi + '"}';

console.log(msg);

var topic = 'inWawan2113191141';


message = new Paho.MQTT.Message(s_msg);
if (topic == "")
message.destinationName = "test-topic"
else
message.destinationName = topic;
mqtt.send(message);
return false;
}

function update_history(alat, aksi) {


var npm = $('#npm').val();
if (tekan == 1) {
$.ajax({
type: 'POST',
url: $('#base-url').val() + 'users/history',
data: { npm: npm, alat: alat, aksi: aksi },
success: function (response) {
$('#info-msg').html(response);
}
});
}
}

Anda mungkin juga menyukai