-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHomeassistantRelay.ino
More file actions
74 lines (68 loc) · 1.88 KB
/
HomeassistantRelay.ino
File metadata and controls
74 lines (68 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <WiFi.h>
#include <PubSubClient.h>
#define ssid F("Redacted")
#define password F("Redacted")
#define RELAY_PIN 15
#define LED 2
#define mqttPort 1883
#define mqttServer "Redacted"
#define mqttUser "mqtt_user"
#define mqttPassword "Redacted"
#define mqttRelayStatusTopic "home/electrical/relay1/get"
const char *topic = "home/electrical/relay1/set";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(921600);
delay(200);
Serial.println(F("Home assistant integrated Relay - Welcome!"));
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
pinMode(LED, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED, LOW);
while (WiFi.status() != WL_CONNECTED) {
Serial.println(F("no wifi"));
delay(200);
}
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
client.setKeepAlive(60);
connectMqtt();
}
void connectMqtt() {
while (!client.connected()) {
String client_id = "esp32-client-";
client_id += String(WiFi.macAddress());
if (client.connect(client_id.c_str(), mqttUser, mqttPassword)) {
Serial.println(F("Reconnected to MQTT broker"));
client.subscribe(topic);
} else {
Serial.print(F("Failed to connect, state "));
Serial.print(client.state());
delay(5000); // wait for 5 seconds before retrying
}
}
}
void loop() {
if (!client.connected()) {
connectMqtt();
}
client.loop();
}
void callback(char *topic, byte *payload, unsigned int length) {
for (int i = 0; i < length; i++) {
if ((char)payload[i] == '1') {
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED, LOW);
Serial.println("Turn Off");
client.publish(mqttRelayStatusTopic, "1");
} else {
digitalWrite(LED, HIGH);
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Turn On");
client.publish(mqttRelayStatusTopic, "0");
}
}
}