-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathHomeAssistant.ino
98 lines (90 loc) · 2.63 KB
/
HomeAssistant.ino
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
void HomeAssistantCallback(char* topic, byte* payload, unsigned int length) {
if (DEBUG) Serial.print("Message arrived [");
if (DEBUG) Serial.print(topic);
if (DEBUG) Serial.print("] ");
String msgArrived = "";
for (int i = 0; i < length; i++) {
msgArrived.concat((char)payload[i]);
}
if (DEBUG) Serial.println(msgArrived);
if (msgArrived.equals(getMQTTPayloadOn())) {
turnOnRelay();
} else if (msgArrived.equals(getMQTTPayloadOff())) {
turnOffRelay();
}
}
void publishInitialStateTopic(const char *topicState, const char* topicInitalValue) {
mqttPublishMessage(topicState, topicInitalValue);
}
void subscribeSwitchTopic(const char *topicCommand) {
mqttSubscribeTopic(topicCommand);
}
void initHomeAssistant() {
initRelay();
mqttInit(HomeAssistantCallback);
mqttConnect();
createDeviceConfigTopic();
subscribeSwitchTopic(getMQTTCmd());
}
void handleHomeAssistant() {
mqttLoop();
}
void publishConfigTopic(const char *topicConfig, String topicConfigJson) {
Serial.println();
Serial.println(topicConfig);
Serial.println(topicConfigJson);
Serial.println(topicConfigJson.c_str());
mqttPublishRetainedMessage(topicConfig, topicConfigJson, 2000);
}
String createUniqueId() {
String clientId = "Aloioff-" + String(getUserConfigId());
return clientId;
}
void createDeviceConfigTopic() {
String topicConfigJson;
topicConfigJson.reserve(2000);
topicConfigJson = generateConfigJson(
createUniqueId().c_str(),
getMQTTDeviceClass(),
getDispositivo(),
getMQTTStatus(),
getMQTTCmd(),
getMQTTPayloadOn(),
getMQTTPayloadOff(),
getMQTTPayloadOn(),
getMQTTPayloadOff()
);
publishConfigTopic(getMQTTFeed(), topicConfigJson);
}
String generateConfigJson(
const char* unique_id,
const char* device_class,
const char* name,
const char* state_topic,
const char* command_topic,
const char* payload_on,
const char* payload_off,
const char* state_on,
const char* state_off
) {
String payload = "{\"unique_id\": \"";
payload.concat(unique_id);
payload.concat("\", \"device_class\": \"");
payload.concat(device_class);
payload.concat("\", \"name\": \"");
payload.concat(name);
payload.concat("\", \"state_topic\": \"");
payload.concat(state_topic);
payload.concat("\", \"command_topic\": \"");
payload.concat(command_topic);
payload.concat("\", \"payload_on\": \"");
payload.concat(payload_on);
payload.concat("\", \"payload_off\": \"");
payload.concat(payload_off);
payload.concat("\", \"state_on\": \"");
payload.concat(state_on);
payload.concat("\", \"state_off\": \"");
payload.concat(state_off);
payload.concat("\" }");
return payload;
}