Banyak library MQTT client untuk arduino termasuk ESP8266. Namun saya pilih library “home-assitant-integration“. Pada library ini sudah diterapkan auto discovery pada Home Assistant sehingga mudah dipakai oleh pemula. Namun kita bisa juga membuat “topic” yang baru (tidak auto discovery) dan untuk pemakaiannya kita harus mengedit file configuration.yaml pada Home Assistant. Di kesempatan lain akan kita bahas tentang hal ini.
Pada kali ini kita akan membuat pengaturan LED internal ESP8266 dan dua sensor integer dengan nilai tetap karena tidak ada sensor yang dihubungkan ke ESP8266. Jadi ini hanya sebagai contoh agar device kita tertampil pada Home Assistant.
#include <ESP8266WiFi.h>
#include <ArduinoHA.h>
#define LED_PIN 2
#define BROKER_ADDR IPAddress(192,168,11,90) //IP address dari MQTT broker
#define WIFI_SSID "..." //isi dengan SSID WIFI yang kita gunakan
#define WIFI_PASSWORD "..." //isi dengan PASSWORD WIFI yang kita gunakan
#define BROKER_USERNAME "..." // isi dengan username dari MQTT broker
#define BROKER_PASSWORD "..." // isi dengan password dari MQTT broker
WiFiClient client;
HADevice device;
HAMqtt mqtt(client, device);
// "led" is unique ID of the switch. You should define your own ID.
HASwitch led("led");
HASensorNumber tempSensor("temperature1");
HASensorNumber humiSensor("humiditiy1");
unsigned long lastUpdateAt = 0;
void onSwitchCommand(bool state, HASwitch* sender)
{
digitalWrite(LED_PIN, (state ? HIGH : LOW));
sender->setState(state); // report state back to the Home Assistant
}
void setup() {
Serial.begin(9600);
Serial.println("Starting...");
// Unique ID must be set!
byte mac[WL_MAC_ADDR_LENGTH];
WiFi.macAddress(mac);
device.setUniqueId(mac, sizeof(mac));
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// connect to wifi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500); // waiting for the connection
}
Serial.println();
Serial.println("Connected to the network");
// set device's details (optional)
device.setName("NodeMCU");
device.setSoftwareVersion("1.0.0");
// handle switch state
led.onCommand(onSwitchCommand);
led.setName("My LED"); // optional
tempSensor.setIcon("mdi:home");
tempSensor.setName("Temperature");
tempSensor.setUnitOfMeasurement("C");
humiSensor.setIcon("mdi:home");
humiSensor.setName("Humidity");
humiSensor.setUnitOfMeasurement("%");
//mqtt.begin(BROKER_ADDR);
mqtt.begin(BROKER_ADDR, BROKER_USERNAME, BROKER_PASSWORD);
}
void loop() {
unsigned int temp = 25; // temp adalah nilai dari sensor suhu misalnya DHT22
unsigned int hum = 70; //hum adalah nilai dari sensor kelembaban udara misalnya DHT22
mqtt.loop();
if ((millis() - lastUpdateAt) > 2000) { // update in 2s interval
tempSensor.setValue(temp);
humiSensor.setValue(hum);
lastUpdateAt = millis();
}
}
Setelah kita upload ke ESP8266, maka pada Home Assitant akan tertampil 1 device dengan 3 entities.
Klik pada 3 entities tersebut. Klik satu persatu dan kita atur Settings-nya. Klik Avanced settings Pada Change Area kita isi area yang kita inginkan, contohnya: ESP8266. Lalu klik UPDATE. Kita lakukan semuanya pada ketiga entities tersebut. Maka ketiganya akan tertampil di Overview menu.