#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
//setting network
byte mac[] = { 0x0A, 0x00, 0x27, 0x00, 0x00, 0x1B };
byte ip[] = { 192, 168, 100, 2 };
byte dns[] = {8,8,8,8};
byte gateway[] = { 192, 168, 100, 1 };
int led = 13;
int sensorPIR = A0;
int sensorLDR = A1;
int kondisiLDR = 0;
String aksi;
char perintah[200];
char pengiriman[200];
char* geeknesia_deviceid = "device-id";
char* geeknesia_credential = "username:password";
char* geeknesia_topic = "topic-publish";
EthernetClient ethClient;
//pubsubclient object
PubSubClient client("geeknesia.com",1883, callback,ethClient);
//call back
void setup()
{
delay(10000);
Serial.begin(115200);
pinMode(led,OUTPUT);
pinMode(sensorPIR,INPUT);
pinMode(sensorLDR,INPUT);
digitalWrite(led,LOW);
Serial.println("memulai untuk koneksi");
//koneksi DHCP
if(Ethernet.begin(mac) != 1)
{ // koneksi manual
Ethernet.begin(mac, ip, dns, gateway);
}
Serial.print("IP address : ");
Serial.println(Ethernet.localIP());
Serial.println("sudah konek gan");
}
void loop()
{
if(!client.connected())
{
if(client.connect(geeknesia_deviceid,"iot/will",2,64,geeknesia_deviceid))
{
client.setCallback(callback);
client.subscribe(geeknesia_topic);
}
}
String hasilLDR = pengukuranLDR();
String hasilPIR = pembacaanPIR();
action(aksi);
senddata(geeknesia_deviceid,geeknesia_credential,"P1",hasilPIR,"A1",hasilLDR);
if(client.connected())
client.loop();
delay(2);
}
void callback(char* topic,byte* payload, unsigned int length)
{
int i;
for(i=0;i<length;i++)
{
perintah[i]=payload[i];
}
perintah[i]='\0';
String kirim = String(perintah);
Serial.println(kirim);
aksi = kirim;
}
void senddata(char* topic,char* credential,String variabel1,String nilai1,String variabel2,String nilai2)
{
String pubString = "{\"code\":\"";
pubString += credential;
pubString +="\",";
pubString +="\"attributes\":{\"";
pubString +=String(variabel1)+"\":\""+nilai1+"\",\"";
pubString +=String(variabel2)+"\":\""+nilai2+"\"";
pubString +="}}";
char pengiriman[pubString.length()+1];
pubString.toCharArray(pengiriman, pubString.length()+1);
int panjang
= strlen(pengiriman
); Serial.print("panjang karakter : ");
Serial.println(panjang);
Serial.println(pengiriman);
int hasilpublish = client.publish_P("iot/data",PROGMEM (byte*)pengiriman,panjang,true);
Serial.print("hasil publish : ");
Serial.println(hasilpublish);
Serial.println("akhir dari pengiriman");
}
void action(String perintah)
{
if(perintah.equals("on") || kondisiLDR == 1)
{
Serial.println("perintah lampu on");
digitalWrite(led,HIGH);
}
else if(kondisiLDR == 0 && perintah!="on")
{
Serial.println("perintah lampu off");
digitalWrite(led,LOW);
}
else if(perintah.equals("off") )
{
Serial.println("perintah lampu off");
digitalWrite(led,LOW);
}
}
String pengukuranLDR()
{
int bacaLDR = analogRead(sensorLDR);
int hasilLDR = bacaLDR;
hasilLDR = map(hasilLDR,0,1023,0,100);
if(hasilLDR > 50)
kondisiLDR = 1;
else
kondisiLDR = 0;
String strLDR = String(hasilLDR);
return strLDR;
}
String pembacaanPIR()
{
int bacaPIR = digitalRead(sensorPIR);
if(bacaPIR == 1)
{
return "ada";
}
else if(bacaPIR == 0)
{
return "tidak";
}
}
I2luY2x1ZGUgPFNQSS5oPgojaW5jbHVkZSA8RXRoZXJuZXQuaD4KI2luY2x1ZGUgPFB1YlN1YkNsaWVudC5oPgoKLy9zZXR0aW5nIG5ldHdvcmsKYnl0ZSBtYWNbXSAgICAgICAgID0geyAweDBBLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDFCIH07CmJ5dGUgaXBbXSAgICAgICAgICA9IHsgMTkyLCAxNjgsIDEwMCwgMiB9OwpieXRlIGRuc1tdICAgICAgICAgPSB7OCw4LDgsOH07CmJ5dGUgZ2F0ZXdheVtdICAgICA9IHsgMTkyLCAxNjgsIDEwMCwgMSB9OwogCmludCBsZWQgPSAxMzsKaW50IHNlbnNvclBJUiA9IEEwOwppbnQgc2Vuc29yTERSID0gQTE7CmludCBrb25kaXNpTERSID0gMDsKU3RyaW5nIGFrc2k7CmNoYXIgcGVyaW50YWhbMjAwXTsKY2hhciBwZW5naXJpbWFuWzIwMF07CmNoYXIqIGdlZWtuZXNpYV9kZXZpY2VpZCA9ICJkZXZpY2UtaWQiOwpjaGFyKiBnZWVrbmVzaWFfY3JlZGVudGlhbCA9ICJ1c2VybmFtZTpwYXNzd29yZCI7CmNoYXIqIGdlZWtuZXNpYV90b3BpYyA9ICJ0b3BpYy1wdWJsaXNoIjsKCkV0aGVybmV0Q2xpZW50IGV0aENsaWVudDsKCi8vcHVic3ViY2xpZW50IG9iamVjdApQdWJTdWJDbGllbnQgY2xpZW50KCJnZWVrbmVzaWEuY29tIiwxODgzLCBjYWxsYmFjayxldGhDbGllbnQpOwoKLy9jYWxsIGJhY2sKCgoKdm9pZCBzZXR1cCgpCnsKICBzeXN0ZW0oImlmZG93biBldGgwIik7CiAgc3lzdGVtKCJpZnVwIGV0aDAiKTsKICBkZWxheSgxMDAwMCk7CiAgU2VyaWFsLmJlZ2luKDExNTIwMCk7CiAgcGluTW9kZShsZWQsT1VUUFVUKTsKICBwaW5Nb2RlKHNlbnNvclBJUixJTlBVVCk7CiAgcGluTW9kZShzZW5zb3JMRFIsSU5QVVQpOwogIGRpZ2l0YWxXcml0ZShsZWQsTE9XKTsKICBTZXJpYWwucHJpbnRsbigibWVtdWxhaSB1bnR1ayBrb25la3NpIik7CiAgLy9rb25la3NpIERIQ1AKICBpZihFdGhlcm5ldC5iZWdpbihtYWMpICE9IDEpCiAgeyAvLyBrb25la3NpIG1hbnVhbAogICAgRXRoZXJuZXQuYmVnaW4obWFjLCBpcCwgZG5zLCBnYXRld2F5KTsKICB9CiAgCiAgU2VyaWFsLnByaW50KCJJUCBhZGRyZXNzIDogIik7CiAgU2VyaWFsLnByaW50bG4oRXRoZXJuZXQubG9jYWxJUCgpKTsKICBTZXJpYWwucHJpbnRsbigic3VkYWgga29uZWsgZ2FuIik7CiAgCgp9Cgp2b2lkIGxvb3AoKQp7CiAgaWYoIWNsaWVudC5jb25uZWN0ZWQoKSkKICB7CiAgICBpZihjbGllbnQuY29ubmVjdChnZWVrbmVzaWFfZGV2aWNlaWQsImlvdC93aWxsIiwyLDY0LGdlZWtuZXNpYV9kZXZpY2VpZCkpCiAgICB7CiAgICAgIGNsaWVudC5zZXRDYWxsYmFjayhjYWxsYmFjayk7CiAgICAgIGNsaWVudC5zdWJzY3JpYmUoZ2Vla25lc2lhX3RvcGljKTsKICAgIH0gIAogIH0KICAKICBTdHJpbmcgaGFzaWxMRFIgPSBwZW5ndWt1cmFuTERSKCk7CiAgU3RyaW5nIGhhc2lsUElSID0gcGVtYmFjYWFuUElSKCk7CiAgCiAgYWN0aW9uKGFrc2kpOwogCiAgCiAgc2VuZGRhdGEoZ2Vla25lc2lhX2RldmljZWlkLGdlZWtuZXNpYV9jcmVkZW50aWFsLCJQMSIsaGFzaWxQSVIsIkExIixoYXNpbExEUik7CiAgCiAgCiAgaWYoY2xpZW50LmNvbm5lY3RlZCgpKQogICAgY2xpZW50Lmxvb3AoKTsKICAgCiAgCiAgZGVsYXkoMik7Cn0KCnZvaWQgY2FsbGJhY2soY2hhciogdG9waWMsYnl0ZSogcGF5bG9hZCwgdW5zaWduZWQgaW50IGxlbmd0aCkKewogIGludCBpOwogIGZvcihpPTA7aTxsZW5ndGg7aSsrKQogIHsKICAgIHBlcmludGFoW2ldPXBheWxvYWRbaV07CiAgfQogIHBlcmludGFoW2ldPSdcMCc7CiAgU3RyaW5nIGtpcmltID0gU3RyaW5nKHBlcmludGFoKTsKICBTZXJpYWwucHJpbnRsbihraXJpbSk7CiAgYWtzaSA9IGtpcmltOwp9Cgp2b2lkIHNlbmRkYXRhKGNoYXIqIHRvcGljLGNoYXIqIGNyZWRlbnRpYWwsU3RyaW5nIHZhcmlhYmVsMSxTdHJpbmcgbmlsYWkxLFN0cmluZyB2YXJpYWJlbDIsU3RyaW5nIG5pbGFpMikKewogIFN0cmluZyBwdWJTdHJpbmcgPSAie1wiY29kZVwiOlwiIjsKICBwdWJTdHJpbmcgKz0gY3JlZGVudGlhbDsKICBwdWJTdHJpbmcgKz0iXCIsIjsKICBwdWJTdHJpbmcgKz0iXCJhdHRyaWJ1dGVzXCI6e1wiIjsKICBwdWJTdHJpbmcgKz1TdHJpbmcodmFyaWFiZWwxKSsiXCI6XCIiK25pbGFpMSsiXCIsXCIiOyAKICBwdWJTdHJpbmcgKz1TdHJpbmcodmFyaWFiZWwyKSsiXCI6XCIiK25pbGFpMisiXCIiOwogIHB1YlN0cmluZyArPSJ9fSI7CiAgY2hhciBwZW5naXJpbWFuW3B1YlN0cmluZy5sZW5ndGgoKSsxXTsKICBwdWJTdHJpbmcudG9DaGFyQXJyYXkocGVuZ2lyaW1hbiwgcHViU3RyaW5nLmxlbmd0aCgpKzEpOwogIGludCBwYW5qYW5nID0gc3RybGVuKHBlbmdpcmltYW4pOwogIFNlcmlhbC5wcmludCgicGFuamFuZyBrYXJha3RlciA6ICIpOwogIFNlcmlhbC5wcmludGxuKHBhbmphbmcpOwogIFNlcmlhbC5wcmludGxuKHBlbmdpcmltYW4pOwogIGludCBoYXNpbHB1Ymxpc2ggPSBjbGllbnQucHVibGlzaF9QKCJpb3QvZGF0YSIsUFJPR01FTSAoYnl0ZSopcGVuZ2lyaW1hbixwYW5qYW5nLHRydWUpOwogIFNlcmlhbC5wcmludCgiaGFzaWwgcHVibGlzaCA6ICIpOwogIFNlcmlhbC5wcmludGxuKGhhc2lscHVibGlzaCk7CiAgU2VyaWFsLnByaW50bG4oImFraGlyIGRhcmkgcGVuZ2lyaW1hbiIpOwp9Cgp2b2lkIGFjdGlvbihTdHJpbmcgcGVyaW50YWgpCnsKICBpZihwZXJpbnRhaC5lcXVhbHMoIm9uIikgfHwga29uZGlzaUxEUiA9PSAxKQogIHsKICAgIFNlcmlhbC5wcmludGxuKCJwZXJpbnRhaCBsYW1wdSBvbiIpOwogICAgZGlnaXRhbFdyaXRlKGxlZCxISUdIKTsKICB9CiAgZWxzZSBpZihrb25kaXNpTERSID09IDAgJiYgcGVyaW50YWghPSJvbiIpCiAgewogICAgU2VyaWFsLnByaW50bG4oInBlcmludGFoIGxhbXB1IG9mZiIpOwogICAgZGlnaXRhbFdyaXRlKGxlZCxMT1cpOwogIH0KICBlbHNlIGlmKHBlcmludGFoLmVxdWFscygib2ZmIikgKQogIHsKICAgIFNlcmlhbC5wcmludGxuKCJwZXJpbnRhaCBsYW1wdSBvZmYiKTsKICAgIGRpZ2l0YWxXcml0ZShsZWQsTE9XKTsKICB9CiAgICAKfQoKU3RyaW5nIHBlbmd1a3VyYW5MRFIoKQp7CiAgaW50IGJhY2FMRFIgPSBhbmFsb2dSZWFkKHNlbnNvckxEUik7CiAgaW50IGhhc2lsTERSID0gYmFjYUxEUjsKICBoYXNpbExEUiA9IG1hcChoYXNpbExEUiwwLDEwMjMsMCwxMDApOwogIAogIGlmKGhhc2lsTERSID4gNTApCiAgICBrb25kaXNpTERSID0gMTsKICBlbHNlIAogICAga29uZGlzaUxEUiA9IDA7CiAgCiAKICBTdHJpbmcgc3RyTERSID0gU3RyaW5nKGhhc2lsTERSKTsKICByZXR1cm4gc3RyTERSOwp9CgoKClN0cmluZyBwZW1iYWNhYW5QSVIoKQp7CiAgaW50IGJhY2FQSVIgPSBkaWdpdGFsUmVhZChzZW5zb3JQSVIpOwogIGlmKGJhY2FQSVIgPT0gMSkKICB7CiAgICByZXR1cm4gImFkYSI7CiAgfQogIGVsc2UgaWYoYmFjYVBJUiA9PSAwKQogIHsKICAgcmV0dXJuICJ0aWRhayI7CiAgfQp9
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
//setting network
byte mac[] = { 0x0A, 0x00, 0x27, 0x00, 0x00, 0x1B };
byte ip[] = { 192, 168, 100, 2 };
byte dns[] = {8,8,8,8};
byte gateway[] = { 192, 168, 100, 1 };
int led = 13;
int sensorPIR = A0;
int sensorLDR = A1;
int kondisiLDR = 0;
String aksi;
char perintah[200];
char pengiriman[200];
char* geeknesia_deviceid = "device-id";
char* geeknesia_credential = "username:password";
char* geeknesia_topic = "topic-publish";
EthernetClient ethClient;
//pubsubclient object
PubSubClient client("geeknesia.com",1883, callback,ethClient);
//call back
void setup()
{
system("ifdown eth0");
system("ifup eth0");
delay(10000);
Serial.begin(115200);
pinMode(led,OUTPUT);
pinMode(sensorPIR,INPUT);
pinMode(sensorLDR,INPUT);
digitalWrite(led,LOW);
Serial.println("memulai untuk koneksi");
//koneksi DHCP
if(Ethernet.begin(mac) != 1)
{ // koneksi manual
Ethernet.begin(mac, ip, dns, gateway);
}
Serial.print("IP address : ");
Serial.println(Ethernet.localIP());
Serial.println("sudah konek gan");
}
void loop()
{
if(!client.connected())
{
if(client.connect(geeknesia_deviceid,"iot/will",2,64,geeknesia_deviceid))
{
client.setCallback(callback);
client.subscribe(geeknesia_topic);
}
}
String hasilLDR = pengukuranLDR();
String hasilPIR = pembacaanPIR();
action(aksi);
senddata(geeknesia_deviceid,geeknesia_credential,"P1",hasilPIR,"A1",hasilLDR);
if(client.connected())
client.loop();
delay(2);
}
void callback(char* topic,byte* payload, unsigned int length)
{
int i;
for(i=0;i<length;i++)
{
perintah[i]=payload[i];
}
perintah[i]='\0';
String kirim = String(perintah);
Serial.println(kirim);
aksi = kirim;
}
void senddata(char* topic,char* credential,String variabel1,String nilai1,String variabel2,String nilai2)
{
String pubString = "{\"code\":\"";
pubString += credential;
pubString +="\",";
pubString +="\"attributes\":{\"";
pubString +=String(variabel1)+"\":\""+nilai1+"\",\"";
pubString +=String(variabel2)+"\":\""+nilai2+"\"";
pubString +="}}";
char pengiriman[pubString.length()+1];
pubString.toCharArray(pengiriman, pubString.length()+1);
int panjang = strlen(pengiriman);
Serial.print("panjang karakter : ");
Serial.println(panjang);
Serial.println(pengiriman);
int hasilpublish = client.publish_P("iot/data",PROGMEM (byte*)pengiriman,panjang,true);
Serial.print("hasil publish : ");
Serial.println(hasilpublish);
Serial.println("akhir dari pengiriman");
}
void action(String perintah)
{
if(perintah.equals("on") || kondisiLDR == 1)
{
Serial.println("perintah lampu on");
digitalWrite(led,HIGH);
}
else if(kondisiLDR == 0 && perintah!="on")
{
Serial.println("perintah lampu off");
digitalWrite(led,LOW);
}
else if(perintah.equals("off") )
{
Serial.println("perintah lampu off");
digitalWrite(led,LOW);
}
}
String pengukuranLDR()
{
int bacaLDR = analogRead(sensorLDR);
int hasilLDR = bacaLDR;
hasilLDR = map(hasilLDR,0,1023,0,100);
if(hasilLDR > 50)
kondisiLDR = 1;
else
kondisiLDR = 0;
String strLDR = String(hasilLDR);
return strLDR;
}
String pembacaanPIR()
{
int bacaPIR = digitalRead(sensorPIR);
if(bacaPIR == 1)
{
return "ada";
}
else if(bacaPIR == 0)
{
return "tidak";
}
}