#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
// Update these with values suitable for your network.
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 };
const int analogInPin = A0;
int sensorValue = 0; // value read from the pot
int sendMQTT = 0;
bool conn_ok;
char message_buff[200];
char* geeknesia_deviceid = "DEVICE-ID";
char* geeknesia_credential = "USERNAME:PASSWORD";
EthernetClient ethClient;
void callback(char* topic, byte* payload, unsigned int length) {}
PubSubClient client("geeknesia.com", 1883, callback, ethClient); //Address geeknesia
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("Running on: ");
Serial.println(Ethernet.localIP());
Serial.println("connecting...");
while (client.connect(geeknesia_deviceid,"iot/live",0,0,geeknesia_deviceid) != 1)
{
Serial.println("Error connecting to MQTT");
delay(2000);
}
}
void senddata(char* topic,char* credential, char *var1, int nilai1 ){
String pubString = "{\"code\":\"";
pubString += credential;
pubString +="\",";
pubString +="\"attributes\":{\"";
pubString +=String(var1)+"\":\""+nilai1+"\"";
pubString +="}}";
char message_buff[pubString.length()+1];
pubString.toCharArray(message_buff, pubString.length()+1);
Serial.println(message_buff);
client.publish("iot/data",message_buff);
}
void loop() {
if (!client.connected()){
client.connect(geeknesia_deviceid,NULL,NULL,"iot/live",2,64,geeknesia_deviceid);
}
// read the analog in value:
sensorValue = analogRead(analogInPin);
// Sending data to Geeknesia
senddata(geeknesia_deviceid, geeknesia_credential,"Analog",sensorValue);
// print the results to the serial monitor:
Serial.print("sensor = ");
Serial.print(sensorValue);
if(sendMQTT == 1){
conn_ok = client.connected();
}
if (conn_ok == 0){ //no connection, reconnect
client.disconnect();
}
// wait 2 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading:
delay(2);
}
I2luY2x1ZGUgPFNQSS5oPgojaW5jbHVkZSA8RXRoZXJuZXQuaD4KI2luY2x1ZGUgPFB1YlN1YkNsaWVudC5oPgogCi8vIFVwZGF0ZSB0aGVzZSB3aXRoIHZhbHVlcyBzdWl0YWJsZSBmb3IgeW91ciBuZXR3b3JrLgpieXRlIG1hY1tdICAgICAgICAgPSB7IDB4REUsIDB4RUQsIDB4QkEsIDB4RkUsIDB4RkUsIDB4RUQgfTsKYnl0ZSBpcFtdICAgICAgICAgID0geyAxOTIsIDE2OCwgMTAwLCAyIH07CmJ5dGUgZG5zW10gICAgICAgICA9IHs4LDgsOCw4fTsKYnl0ZSBnYXRld2F5W10gICAgID0geyAxOTIsIDE2OCwgMTAwLCAxIH07CiAKY29uc3QgaW50ICAgICAgYW5hbG9nSW5QaW4gPSBBMDsKaW50ICAgICAgICAgICAgc2Vuc29yVmFsdWUgPSAwOyAgICAgICAgLy8gdmFsdWUgcmVhZCBmcm9tIHRoZSBwb3QKaW50ICAgICAgICAgICAgc2VuZE1RVFQgPSAwOwpib29sICAgICAgICAgICBjb25uX29rOwpjaGFyICAgICAgICAgICBtZXNzYWdlX2J1ZmZbMjAwXTsgCmNoYXIqICAgICAgICAgIGdlZWtuZXNpYV9kZXZpY2VpZCAgID0gIkRFVklDRS1JRCI7CmNoYXIqICAgICAgICAgIGdlZWtuZXNpYV9jcmVkZW50aWFsID0gIlVTRVJOQU1FOlBBU1NXT1JEIjsKCkV0aGVybmV0Q2xpZW50IGV0aENsaWVudDsKdm9pZCBjYWxsYmFjayhjaGFyKiB0b3BpYywgYnl0ZSogcGF5bG9hZCwgdW5zaWduZWQgaW50IGxlbmd0aCkge30KUHViU3ViQ2xpZW50ICAgY2xpZW50KCJnZWVrbmVzaWEuY29tIiwgMTg4MywgY2FsbGJhY2ssIGV0aENsaWVudCk7ICAvL0FkZHJlc3MgZ2Vla25lc2lhCgp2b2lkIHNldHVwKCkgewogICAgLy8gcmVzZXQgbmV0d29yawogICAgc3lzdGVtKCJpZmRvd24gZXRoMCIpOwogICAgc3lzdGVtKCJpZnVwIGV0aDAiKTsKIAogICAgLy8gd2FpdCBmb3IgYWNjZXNzaW5nIHNlbnNvcgogICAgZGVsYXkoMjAwMCk7CiAgICBTZXJpYWwuYmVnaW4oOTYwMCk7CiAgICAKICAJLy8gS29uZWtzaSBESENQCiAgCWlmIChFdGhlcm5ldC5iZWdpbihtYWMpICE9IDEpIHsKICAgIAkvLyBKaWthIGdhZ2FsLCBtYWthIGtvbmVrc2kgbWFudWFsCiAgICAJRXRoZXJuZXQuYmVnaW4obWFjLCBpcCwgZG5zLCBnYXRld2F5KTsKICAJfQogIAkKCVNlcmlhbC5wcmludCgiUnVubmluZyBvbjogIik7CglTZXJpYWwucHJpbnRsbihFdGhlcm5ldC5sb2NhbElQKCkpOyAgCgkKCVNlcmlhbC5wcmludGxuKCJjb25uZWN0aW5nLi4uIik7Cgl3aGlsZSAoY2xpZW50LmNvbm5lY3QoZ2Vla25lc2lhX2RldmljZWlkLCJpb3QvbGl2ZSIsMCwwLGdlZWtuZXNpYV9kZXZpY2VpZCkgIT0gMSkgCgl7CgkJU2VyaWFsLnByaW50bG4oIkVycm9yIGNvbm5lY3RpbmcgdG8gTVFUVCIpOwoJCWRlbGF5KDIwMDApOwoJfQp9Cgp2b2lkIHNlbmRkYXRhKGNoYXIqIHRvcGljLGNoYXIqIGNyZWRlbnRpYWwsIGNoYXIgKnZhcjEsIGludCBuaWxhaTEgKXsKICBTdHJpbmcgcHViU3RyaW5nID0gIntcImNvZGVcIjpcIiI7CiAgcHViU3RyaW5nICs9IGNyZWRlbnRpYWw7CiAgcHViU3RyaW5nICs9IlwiLCI7CiAgcHViU3RyaW5nICs9IlwiYXR0cmlidXRlc1wiOntcIiI7CiAgcHViU3RyaW5nICs9U3RyaW5nKHZhcjEpKyJcIjpcIiIrbmlsYWkxKyJcIiI7CiAgcHViU3RyaW5nICs9In19IjsKICBjaGFyIG1lc3NhZ2VfYnVmZltwdWJTdHJpbmcubGVuZ3RoKCkrMV07CiAgcHViU3RyaW5nLnRvQ2hhckFycmF5KG1lc3NhZ2VfYnVmZiwgcHViU3RyaW5nLmxlbmd0aCgpKzEpOwogIFNlcmlhbC5wcmludGxuKG1lc3NhZ2VfYnVmZik7CiAgY2xpZW50LnB1Ymxpc2goImlvdC9kYXRhIixtZXNzYWdlX2J1ZmYpOwp9Cgp2b2lkIGxvb3AoKSB7CiAgaWYgKCFjbGllbnQuY29ubmVjdGVkKCkpewogICAgIGNsaWVudC5jb25uZWN0KGdlZWtuZXNpYV9kZXZpY2VpZCxOVUxMLE5VTEwsImlvdC9saXZlIiwyLDY0LGdlZWtuZXNpYV9kZXZpY2VpZCk7CiAgfQogIC8vIHJlYWQgdGhlIGFuYWxvZyBpbiB2YWx1ZToKICBzZW5zb3JWYWx1ZSA9IGFuYWxvZ1JlYWQoYW5hbG9nSW5QaW4pOwoKICAvLyBTZW5kaW5nIGRhdGEgdG8gR2Vla25lc2lhCiAgc2VuZGRhdGEoZ2Vla25lc2lhX2RldmljZWlkLCBnZWVrbmVzaWFfY3JlZGVudGlhbCwiQW5hbG9nIixzZW5zb3JWYWx1ZSk7CiAgICAKICAvLyBwcmludCB0aGUgcmVzdWx0cyB0byB0aGUgc2VyaWFsIG1vbml0b3I6CiAgU2VyaWFsLnByaW50KCJzZW5zb3IgPSAiKTsKICBTZXJpYWwucHJpbnQoc2Vuc29yVmFsdWUpOwoKICBpZihzZW5kTVFUVCA9PSAxKXsKICAgICAgY29ubl9vayA9IGNsaWVudC5jb25uZWN0ZWQoKTsKICB9CiAgaWYgKGNvbm5fb2sgPT0gMCl7ICAgICAgICAgICAgLy9ubyBjb25uZWN0aW9uLCByZWNvbm5lY3QKICAgICAgY2xpZW50LmRpc2Nvbm5lY3QoKTsKICB9CgogIC8vIHdhaXQgMiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBuZXh0IGxvb3AKICAvLyBmb3IgdGhlIGFuYWxvZy10by1kaWdpdGFsIGNvbnZlcnRlciB0byBzZXR0bGUKICAvLyBhZnRlciB0aGUgbGFzdCByZWFkaW5nOgogIGRlbGF5KDIpOyAgCn0=