//Import library dan deklarasi program.
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
// Settingan network(IP Address).
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte ip[] = { 192, 168, 100, 2 };
byte dns[] = {8,8,8,8};
byte gateway[] = { 192, 168, 100, 1 };
char pubschar [20];
char message_buff[250];
char message_buff_call[200];
int ledPin = 13;
EthernetClient ethClient;
// Fungsi ini yang akan dipanggil oleh MQTT jika menerima data
// Pesan yang dikirim melalui MQTT tersimpan pada payload
// Oleh karena itupayload lah yang akan menampung perintah
// untuk device tersebut
void callback(char* topic, byte* payload, unsigned int length)
{
int i = 0; for(i=0; i<length; i++)
{
message_buff_call[i] = payload[i];
}
message_buff_call[i] = '\0';
String msgString = String(message_buff_call);
Serial.println(msgString);
if(msgString.equals("on"))
{
Serial.println("ON");
digitalWrite(ledPin,HIGH);
}
if(msgString.equals("off"))
{
Serial.println("OFF");
digitalWrite(ledPin,LOW);
}
}
// Tambahkan PubSubClient object
PubSubClient client("geeknesia.com", 1883, callback, ethClient);
//Dibagian ini adalah bagian setup pada program, setup baud rate
// serial,setupEthernet,atau menambahkan serial print debugging
// program.
void setup() {
// reset network
system("ifdown eth0");
system("ifup eth0");
// wait for accessing sensor
delay(2000);
Serial.begin(9600);
// Koneksi DHCP
if (Ethernet.begin(mac) != 1) {
// Jika gagal, maka koneksi manual
Ethernet.begin(mac, ip, dns, gateway);
}
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
pinMode(ledPin,OUTPUT);
digitalWrite(ledPin,LOW);
}
// Jika mqtt client belum terkoneksi maka harus menjalankan fungsi
// connect dengan parameter device id yang ada pada detail device
// dan melakukan subscribe pada topic khusus untuk menerima pesan
// perintah untuk device tersebut
// perintah client.loop digunakan untuk memeriksa koneksi mqtt secara
// berkala dan mengubah return value dari fungsi client.connected
void loop() {
if (!client.connected())
{
client.connect("DEVICE-ID");
client.subscribe("PUBLISHED TOPIC");
}
client.loop();
}
Ly9JbXBvcnQgbGlicmFyeSBkYW4gZGVrbGFyYXNpIHByb2dyYW0uCiNpbmNsdWRlIDxTUEkuaD4KI2luY2x1ZGUgPEV0aGVybmV0Lmg+CiNpbmNsdWRlIDxQdWJTdWJDbGllbnQuaD4KCi8vIFNldHRpbmdhbiBuZXR3b3JrKElQIEFkZHJlc3MpLgpieXRlIG1hY1tdICAgICAgICAgPSB7IDB4REUsIDB4RUQsIDB4QkEsIDB4RkUsIDB4RkUsIDB4RUQgfTsKYnl0ZSBpcFtdICAgICAgICAgID0geyAxOTIsIDE2OCwgMTAwLCAyIH07CmJ5dGUgZG5zW10gICAgICAgICA9IHs4LDgsOCw4fTsKYnl0ZSBnYXRld2F5W10gICAgID0geyAxOTIsIDE2OCwgMTAwLCAxIH07CgpjaGFyIHB1YnNjaGFyIFsyMF07CmNoYXIgbWVzc2FnZV9idWZmWzI1MF07CmNoYXIgbWVzc2FnZV9idWZmX2NhbGxbMjAwXTsKaW50IGxlZFBpbiA9IDEzOwpFdGhlcm5ldENsaWVudCBldGhDbGllbnQ7CgovLyBGdW5nc2kgaW5pIHlhbmcgYWthbiBkaXBhbmdnaWwgb2xlaCBNUVRUIGppa2EgbWVuZXJpbWEgZGF0YQovLyBQZXNhbiB5YW5nIGRpa2lyaW0gbWVsYWx1aSBNUVRUIHRlcnNpbXBhbiBwYWRhIHBheWxvYWQKLy8gT2xlaCBrYXJlbmEgaXR1cGF5bG9hZCBsYWggeWFuZyBha2FuIG1lbmFtcHVuZyBwZXJpbnRhaAovLyB1bnR1ayBkZXZpY2UgdGVyc2VidXQKIAp2b2lkIGNhbGxiYWNrKGNoYXIqIHRvcGljLCBieXRlKiBwYXlsb2FkLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKSAKeyAKICAgIGludCBpID0gMDsgZm9yKGk9MDsgaTxsZW5ndGg7IGkrKykgCiAgICB7CiAgICAgICAgbWVzc2FnZV9idWZmX2NhbGxbaV0gPSBwYXlsb2FkW2ldOwogICAgfQogICAgbWVzc2FnZV9idWZmX2NhbGxbaV0gPSAnXDAnOwogICAgU3RyaW5nIG1zZ1N0cmluZyA9IFN0cmluZyhtZXNzYWdlX2J1ZmZfY2FsbCk7CiAgICBTZXJpYWwucHJpbnRsbihtc2dTdHJpbmcpOwogCiAgICBpZihtc2dTdHJpbmcuZXF1YWxzKCJvbiIpKSAKICAgIHsgCiAgICAgICAgU2VyaWFsLnByaW50bG4oIk9OIik7CiAgICAgICAgZGlnaXRhbFdyaXRlKGxlZFBpbixISUdIKTsKICAgIH0gCiAgICBpZihtc2dTdHJpbmcuZXF1YWxzKCJvZmYiKSkgCiAgICB7CiAgICAgICAgU2VyaWFsLnByaW50bG4oIk9GRiIpOwogICAgICAgIGRpZ2l0YWxXcml0ZShsZWRQaW4sTE9XKTsKICAgIH0KfQoKLy8gVGFtYmFoa2FuIFB1YlN1YkNsaWVudCBvYmplY3QKUHViU3ViQ2xpZW50IGNsaWVudCgiZ2Vla25lc2lhLmNvbSIsIDE4ODMsIGNhbGxiYWNrLCBldGhDbGllbnQpOwogCi8vRGliYWdpYW4gaW5pIGFkYWxhaCBiYWdpYW4gc2V0dXAgcGFkYSBwcm9ncmFtLCBzZXR1cCBiYXVkIHJhdGUgCi8vIHNlcmlhbCxzZXR1cEV0aGVybmV0LGF0YXUgbWVuYW1iYWhrYW4gc2VyaWFsIHByaW50IGRlYnVnZ2luZyAKLy8gcHJvZ3JhbS4KIAp2b2lkIHNldHVwKCkgewogICAgLy8gcmVzZXQgbmV0d29yawogICAgc3lzdGVtKCJpZmRvd24gZXRoMCIpOwogICAgc3lzdGVtKCJpZnVwIGV0aDAiKTsKICAgIAogICAgLy8gd2FpdCBmb3IgYWNjZXNzaW5nIHNlbnNvcgogICAgZGVsYXkoMjAwMCk7CiAgICBTZXJpYWwuYmVnaW4oOTYwMCk7CiAgCQogIAkvLyBLb25la3NpIERIQ1AKICAJaWYgKEV0aGVybmV0LmJlZ2luKG1hYykgIT0gMSkgewogICAgCS8vIEppa2EgZ2FnYWwsIG1ha2Ega29uZWtzaSBtYW51YWwKICAgIAlFdGhlcm5ldC5iZWdpbihtYWMsIGlwLCBkbnMsIGdhdGV3YXkpOwogIAl9ICAgIAogICAgCiAgICBTZXJpYWwucHJpbnQoIk15IElQIGFkZHJlc3M6ICIpOwogICAgU2VyaWFsLnByaW50bG4oRXRoZXJuZXQubG9jYWxJUCgpKTsKICAgIHBpbk1vZGUobGVkUGluLE9VVFBVVCk7CiAgICBkaWdpdGFsV3JpdGUobGVkUGluLExPVyk7Cn0KIAovLyBKaWthIG1xdHQgY2xpZW50IGJlbHVtIHRlcmtvbmVrc2kgbWFrYSBoYXJ1cyBtZW5qYWxhbmthbiBmdW5nc2kKLy8gY29ubmVjdCBkZW5nYW4gcGFyYW1ldGVyIGRldmljZSBpZCB5YW5nIGFkYSBwYWRhIGRldGFpbCBkZXZpY2UKLy8gZGFuIG1lbGFrdWthbiBzdWJzY3JpYmUgcGFkYSB0b3BpYyBraHVzdXMgdW50dWsgbWVuZXJpbWEgcGVzYW4KLy8gcGVyaW50YWggdW50dWsgZGV2aWNlIHRlcnNlYnV0Ci8vIHBlcmludGFoIGNsaWVudC5sb29wIGRpZ3VuYWthbiB1bnR1ayBtZW1lcmlrc2Ega29uZWtzaSBtcXR0IHNlY2FyYQovLyBiZXJrYWxhIGRhbiBtZW5ndWJhaCByZXR1cm4gdmFsdWUgZGFyaSBmdW5nc2kgY2xpZW50LmNvbm5lY3RlZAogCnZvaWQgbG9vcCgpIHsKICAgIGlmICghY2xpZW50LmNvbm5lY3RlZCgpKQogICAgewogICAgICAgIGNsaWVudC5jb25uZWN0KCJERVZJQ0UtSUQiKTsKICAgICAgICBjbGllbnQuc3Vic2NyaWJlKCJQVUJMSVNIRUQgVE9QSUMiKTsKICAgICB9CiAgICBjbGllbnQubG9vcCgpOwp9