Kategori
IoT

Home Automation dengan Google Asisstant

Google assistant merupakan platform yang di buat oleh google untuk mempermudah pengguna smartphone dalam mencari sesuatu baik lokal (di ponselnya saja) ataupun global (internet).

Untuk membuat projek ini kita memerlukan IFTTT dan IO Adafruit untuk dapat terhubung ke google assistant. singkatnya IFTTT digunakan sebagai jembatan untuk menghubungkan antara google assistant dengan IO adafruit, dan IO adafruit berfungsi menjadi penghubung antara ESP8266 dengan IFTTT sehingga ESP8266 dapat saling terhubung dengan perintah yang diberikan dari google assistant.

Alat yang dibutuhkan

  1. NodeMCU
  2. LED

Setting IO Adafruit

Buat akun pada IO Adafruit Sign Up dan Login

Login, setelah itu pilih dasboards, pilih new dashboard

pilih dashboard “led”, Create New Block, dan pilih yang model Toggle

Sampai tahap ini sudah selesai untuk adafruit

(sampai tahap ini sudah bisa berkomunikasi antara nodemcu dengan adafruit dengan perintah menjalankan LED nyala dan mati

Setting IFTTT

Buat akun terlebih dahulu IFTTT Sign Up setelah berhasil membuat akun dan berhasil masuk silahkan klik profil kamu lalu pilih menu create dan akan tampil halaman seperti gambar berikut kemudian klik icon + this.

Untuk “If This”, ketikan kata kunci google, lalu pilh Google Assistant

untuk “Then That” pilih Adafruit

untuk Turn ON

Untuk Turn Off

Pada Applet, nanti akan terdiri dari 2 applet yaitu

Pastikan, Google Assistant pada smartphone/laptop sudah sesuai dengan akun pada saat mendaftar

Pada tahap sudah ada komunikasi antara Google Assistant dengan Adafruit. Pastikan Toggle sudah berubah ketika memasukan perintah Turn on/off the lamp

Kode Program

Sebelum memasukkan kode program, tambahkan library terlebih dahulu

Wemos D1 mini google Assistant

dan berikut code ESP8266 NodeMCU google assistant dari example yang ada dab hubungkan dengan akun google. silahkan ubah AIO username dan AIO key jika ingin menggunakan akun google sendiri.

#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

#define led            D2

#define WIFI_SSID       "your_ssid"             // Your SSID
#define WIFI_PASS       "your_password"        // Your password

/************************* Adafruit.io Setup *********************************/

//#define AIO_SERVER      "https://io.adafruit.com/api/v2/xepatan/feeds/led1"
#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883                   // use 8883 for SSL
#define AIO_USERNAME    "xepatan"            // Replace it with your username
#define AIO_KEY         "aio_JYgf58bt81v8OfS70UKSReFTrh64"   // Replace with your Project Auth Key

/************ Global State (you don't need to change this!) ******************/

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
//WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

/****************************** Feeds ***************************************/


// Setup a feed called 'onoff' for subscribing to changes.

Adafruit_MQTT_Subscribe Light1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME"/feeds/led1"); // FeedName

void MQTT_connect();

void setup() {
  Serial.begin(115200);

  pinMode(led, OUTPUT);

  // Connect to WiFi access point.
  Serial.println(); Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WIFI_SSID);

  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  
  Serial.println("WiFi connected");
  Serial.println("IP address: "); 
  Serial.println(WiFi.localIP());
 

  // Setup MQTT subscription for onoff feed.
  mqtt.subscribe(&Light1);
}

void loop() {
 
  MQTT_connect();
  
  Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(5000))) {
    if (subscription == &Light1) {
      Serial.print(F("Got: "));
      Serial.println((char *)Light1.lastread);
      int Light1_State = atoi((char *)Light1.lastread);
      digitalWrite(led, !(Light1_State));
      }
  }
}

void MQTT_connect() {
  int8_t ret;

  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }

  Serial.print("Connecting to MQTT... ");

  uint8_t retries = 3;
  
  while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retrying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000);  // wait 5 seconds
    retries--;
    if (retries == 0) {
      // basically die and wait for WDT to reset me
      while (1);
    }
  }
  Serial.println("MQTT Connected!");
  
}

Selamat mencoba

Jika mengalami kegagalan, sebaiknya lakukan langkah troubleshooting dari nodemcu ke adafruit, atau dari adafruit ke ifttt.

Ref : [1]