summaryrefslogtreecommitdiff
path: root/platformio/common/libs
diff options
context:
space:
mode:
Diffstat (limited to 'platformio/common/libs')
-rw-r--r--platformio/common/libs/mqtt/homekit/mqtt/module.h6
-rw-r--r--platformio/common/libs/mqtt/homekit/mqtt/mqtt.cpp15
-rw-r--r--platformio/common/libs/mqtt/homekit/mqtt/mqtt.h6
-rw-r--r--platformio/common/libs/mqtt/library.json2
-rw-r--r--platformio/common/libs/mqtt_module_diagnostics/homekit/mqtt/module/diagnostics.cpp6
-rw-r--r--platformio/common/libs/mqtt_module_diagnostics/library.json5
-rw-r--r--platformio/common/libs/mqtt_module_ota/library.json5
-rw-r--r--platformio/common/libs/mqtt_module_relay/homekit/mqtt/module/relay.cpp43
-rw-r--r--platformio/common/libs/mqtt_module_relay/homekit/mqtt/module/relay.h23
-rw-r--r--platformio/common/libs/mqtt_module_relay/library.json11
-rw-r--r--platformio/common/libs/mqtt_module_temphum/homekit/mqtt/module/temphum.cpp4
-rw-r--r--platformio/common/libs/mqtt_module_temphum/library.json3
-rw-r--r--platformio/common/libs/relay/homekit/relay.cpp22
-rw-r--r--platformio/common/libs/relay/homekit/relay.h13
-rw-r--r--platformio/common/libs/relay/library.json8
15 files changed, 152 insertions, 20 deletions
diff --git a/platformio/common/libs/mqtt/homekit/mqtt/module.h b/platformio/common/libs/mqtt/homekit/mqtt/module.h
index 7bf2522..e4a01f8 100644
--- a/platformio/common/libs/mqtt/homekit/mqtt/module.h
+++ b/platformio/common/libs/mqtt/homekit/mqtt/module.h
@@ -39,9 +39,13 @@ public:
initialized = true;
}
+ inline short getTickInterval() {
+ return tickInterval;
+ }
+
friend class Mqtt;
};
}
-#endif //HOMEKIT_LIB_MQTT_MODULE_H \ No newline at end of file
+#endif //HOMEKIT_LIB_MQTT_MODULE_H
diff --git a/platformio/common/libs/mqtt/homekit/mqtt/mqtt.cpp b/platformio/common/libs/mqtt/homekit/mqtt/mqtt.cpp
index 9d96f9f..cb2cea7 100644
--- a/platformio/common/libs/mqtt/homekit/mqtt/mqtt.cpp
+++ b/platformio/common/libs/mqtt/homekit/mqtt/mqtt.cpp
@@ -25,7 +25,7 @@ using namespace espMqttClientTypes;
Mqtt::Mqtt() {
auto cfg = config::read();
- homeId = String(cfg.flags.node_configured ? cfg.node_id : wifi::NODE_ID);
+ nodeId = String(cfg.flags.node_configured ? cfg.node_id : wifi::NODE_ID);
randomSeed(micros());
@@ -79,7 +79,7 @@ Mqtt::Mqtt() {
PRINTF("mqtt: message received, topic=%s, qos=%d, dup=%d, retain=%d, len=%ul, index=%ul, total=%ul\n",
topic, properties.qos, (int)properties.dup, (int)properties.retain, len, index, total);
- const char *ptr = topic + homeId.length() + 10;
+ const char *ptr = topic + nodeId.length() + 10;
String relevantTopic(ptr);
auto it = moduleSubscriptions.find(relevantTopic);
@@ -130,22 +130,24 @@ void Mqtt::disconnect() {
void Mqtt::loop() {
client.loop();
for (auto& module: modules) {
- module->tick(*this);
+ if (module->getTickInterval() != 0)
+ module->tick(*this);
}
}
uint16_t Mqtt::publish(const String& topic, uint8_t* payload, size_t length) {
- String fullTopic = "hk/" + homeId + "/temphum/" + topic;
+ String fullTopic = "hk/" + nodeId + "/" + topic;
return client.publish(fullTopic.c_str(), 1, false, payload, length);
}
uint16_t Mqtt::subscribe(const String& topic, uint8_t qos) {
- String fullTopic = "hk/" + homeId + "/temphum/" + topic;
+ String fullTopic = "hk/" + nodeId + "/" + topic;
PRINTF("mqtt: subscribing to %s...\n", fullTopic.c_str());
uint16_t packetId = client.subscribe(fullTopic.c_str(), qos);
if (!packetId)
PRINTF("error: failed to subscribe to %s\n", fullTopic.c_str());
+
return packetId;
}
@@ -157,8 +159,9 @@ void Mqtt::addModule(MqttModule* module) {
}
}
-void Mqtt::subscribeModule(String& topic, MqttModule* module) {
+void Mqtt::subscribeModule(String& topic, MqttModule* module, uint8_t qos) {
moduleSubscriptions[topic] = module;
+ subscribe(topic, qos);
}
}
diff --git a/platformio/common/libs/mqtt/homekit/mqtt/mqtt.h b/platformio/common/libs/mqtt/homekit/mqtt/mqtt.h
index 983cc5a..9e0c2be 100644
--- a/platformio/common/libs/mqtt/homekit/mqtt/mqtt.h
+++ b/platformio/common/libs/mqtt/homekit/mqtt/mqtt.h
@@ -22,7 +22,7 @@ class MqttModule;
class Mqtt {
private:
- String homeId;
+ String nodeId;
WiFiClientSecure httpsSecureClient;
espMqttClientSecure client;
Ticker reconnectTimer;
@@ -39,10 +39,10 @@ public:
void reconnect();
void loop();
void addModule(MqttModule* module);
- void subscribeModule(String& topic, MqttModule* module);
+ void subscribeModule(String& topic, MqttModule* module, uint8_t qos = 0);
uint16_t publish(const String& topic, uint8_t* payload, size_t length);
};
}
-#endif //HOMEKIT_LIB_MQTT_H \ No newline at end of file
+#endif //HOMEKIT_LIB_MQTT_H
diff --git a/platformio/common/libs/mqtt/library.json b/platformio/common/libs/mqtt/library.json
index 179b10a..d1ad420 100644
--- a/platformio/common/libs/mqtt/library.json
+++ b/platformio/common/libs/mqtt/library.json
@@ -1,6 +1,6 @@
{
"name": "homekit_mqtt",
- "version": "1.0.8",
+ "version": "1.0.9",
"build": {
"flags": "-I../../include"
}
diff --git a/platformio/common/libs/mqtt_module_diagnostics/homekit/mqtt/module/diagnostics.cpp b/platformio/common/libs/mqtt_module_diagnostics/homekit/mqtt/module/diagnostics.cpp
index f022f79..d36a7e9 100644
--- a/platformio/common/libs/mqtt_module_diagnostics/homekit/mqtt/module/diagnostics.cpp
+++ b/platformio/common/libs/mqtt_module_diagnostics/homekit/mqtt/module/diagnostics.cpp
@@ -4,8 +4,8 @@
namespace homekit::mqtt {
-static const char TOPIC_DIAGNOSTICS[] = "stat";
-static const char TOPIC_INITIAL_DIAGNOSTICS[] = "stat1";
+static const char TOPIC_DIAGNOSTICS[] = "diag";
+static const char TOPIC_INITIAL_DIAGNOSTICS[] = "d1ag";
void MqttDiagnosticsModule::init(Mqtt& mqtt) {}
@@ -44,4 +44,4 @@ void MqttDiagnosticsModule::tick(Mqtt& mqtt) {
}
}
-} \ No newline at end of file
+}
diff --git a/platformio/common/libs/mqtt_module_diagnostics/library.json b/platformio/common/libs/mqtt_module_diagnostics/library.json
index 81bf0fb..8df306d 100644
--- a/platformio/common/libs/mqtt_module_diagnostics/library.json
+++ b/platformio/common/libs/mqtt_module_diagnostics/library.json
@@ -1,7 +1,10 @@
{
"name": "homekit_mqtt_module_diagnostics",
- "version": "1.0.0",
+ "version": "1.0.1",
"build": {
"flags": "-I../../include"
+ },
+ "dependencies": {
+ "homekit_mqtt": "file://../common/libs/mqtt"
}
}
diff --git a/platformio/common/libs/mqtt_module_ota/library.json b/platformio/common/libs/mqtt_module_ota/library.json
index 1eeda1b..30db7d2 100644
--- a/platformio/common/libs/mqtt_module_ota/library.json
+++ b/platformio/common/libs/mqtt_module_ota/library.json
@@ -1,10 +1,11 @@
{
"name": "homekit_mqtt_module_ota",
- "version": "1.0.1",
+ "version": "1.0.2",
"build": {
"flags": "-I../../include"
},
"dependencies": {
- "homekit_led": "file://../common/libs/led"
+ "homekit_led": "file://../common/libs/led",
+ "homekit_mqtt": "file://../common/libs/mqtt"
}
}
diff --git a/platformio/common/libs/mqtt_module_relay/homekit/mqtt/module/relay.cpp b/platformio/common/libs/mqtt_module_relay/homekit/mqtt/module/relay.cpp
new file mode 100644
index 0000000..ab40727
--- /dev/null
+++ b/platformio/common/libs/mqtt_module_relay/homekit/mqtt/module/relay.cpp
@@ -0,0 +1,43 @@
+#include "./relay.h"
+#include <homekit/relay.h>
+#include <homekit/logging.h>
+
+namespace homekit::mqtt {
+
+static const char TOPIC_RELAY_SWITCH[] = "relay/switch";
+
+void MqttRelayModule::init(Mqtt &mqtt) {
+ String topic(TOPIC_RELAY_SWITCH);
+ mqtt.subscribeModule(topic, this, 1);
+}
+
+void MqttRelayModule::tick(homekit::mqtt::Mqtt& mqtt) {}
+
+void MqttRelayModule::handlePayload(Mqtt& mqtt, String& topic, uint16_t packetId, const uint8_t *payload, size_t length, size_t index, size_t total) {
+ if (topic != TOPIC_RELAY_SWITCH)
+ return;
+
+ if (length != sizeof(MqttRelaySwitchPayload)) {
+ PRINTF("error: size of payload (%ul) does not match expected (%ul)\n",
+ length, sizeof(MqttRelaySwitchPayload));
+ return;
+ }
+
+ auto pd = reinterpret_cast<const struct MqttRelaySwitchPayload*>(payload);
+ if (strncmp(pd->secret, MQTT_SECRET, sizeof(pd->secret)) != 0) {
+ PRINTLN("error: invalid secret");
+ return;
+ }
+
+ if (pd->state == 1) {
+ PRINTLN("mqtt: turning relay on");
+ relay::on();
+ } else if (pd->state == 0) {
+ PRINTLN("mqtt: turning relay off");
+ relay::off();
+ } else {
+ PRINTLN("error: unexpected state value");
+ }
+}
+
+}
diff --git a/platformio/common/libs/mqtt_module_relay/homekit/mqtt/module/relay.h b/platformio/common/libs/mqtt_module_relay/homekit/mqtt/module/relay.h
new file mode 100644
index 0000000..6420de1
--- /dev/null
+++ b/platformio/common/libs/mqtt_module_relay/homekit/mqtt/module/relay.h
@@ -0,0 +1,23 @@
+#ifndef HOMEKIT_LIB_MQTT_MODULE_RELAY_H
+#define HOMEKIT_LIB_MQTT_MODULE_RELAY_H
+
+#include <homekit/mqtt/module.h>
+
+namespace homekit::mqtt {
+
+struct MqttRelaySwitchPayload {
+ char secret[12];
+ uint8_t state;
+} __attribute__((packed));
+
+class MqttRelayModule : public MqttModule {
+public:
+ MqttRelayModule() : MqttModule(0) {}
+ void init(Mqtt& mqtt) override;
+ void tick(Mqtt& mqtt) override;
+ void handlePayload(Mqtt& mqtt, String& topic, uint16_t packetId, const uint8_t *payload, size_t length, size_t index, size_t total) override;
+};
+
+}
+
+#endif //HOMEKIT_LIB_MQTT_MODULE_RELAY_H
diff --git a/platformio/common/libs/mqtt_module_relay/library.json b/platformio/common/libs/mqtt_module_relay/library.json
new file mode 100644
index 0000000..e71cf95
--- /dev/null
+++ b/platformio/common/libs/mqtt_module_relay/library.json
@@ -0,0 +1,11 @@
+{
+ "name": "homekit_mqtt_module_relay",
+ "version": "1.0.3",
+ "build": {
+ "flags": "-I../../include"
+ },
+ "dependencies": {
+ "homekit_mqtt": "file://../common/libs/mqtt",
+ "homekit_relay": "file://../common/libs/relay"
+ }
+}
diff --git a/platformio/common/libs/mqtt_module_temphum/homekit/mqtt/module/temphum.cpp b/platformio/common/libs/mqtt_module_temphum/homekit/mqtt/module/temphum.cpp
index 8b7a2ef..82f1d74 100644
--- a/platformio/common/libs/mqtt_module_temphum/homekit/mqtt/module/temphum.cpp
+++ b/platformio/common/libs/mqtt_module_temphum/homekit/mqtt/module/temphum.cpp
@@ -2,7 +2,7 @@
namespace homekit::mqtt {
-static const char TOPIC_TEMPHUM_DATA[] = "data";
+static const char TOPIC_TEMPHUM_DATA[] = "temphum/data";
void MqttTemphumModule::init(Mqtt &mqtt) {}
@@ -20,4 +20,4 @@ void MqttTemphumModule::tick(homekit::mqtt::Mqtt& mqtt) {
mqtt.publish(TOPIC_TEMPHUM_DATA, reinterpret_cast<uint8_t*>(&payload), sizeof(payload));
}
-} \ No newline at end of file
+}
diff --git a/platformio/common/libs/mqtt_module_temphum/library.json b/platformio/common/libs/mqtt_module_temphum/library.json
index 30f5eb6..9bb8cf1 100644
--- a/platformio/common/libs/mqtt_module_temphum/library.json
+++ b/platformio/common/libs/mqtt_module_temphum/library.json
@@ -1,10 +1,11 @@
{
"name": "homekit_mqtt_module_temphum",
- "version": "1.0.8",
+ "version": "1.0.9",
"build": {
"flags": "-I../../include"
},
"dependencies": {
+ "homekit_mqtt": "file://../common/libs/mqtt",
"homekit_temphum": "file://../common/libs/temphum"
}
}
diff --git a/platformio/common/libs/relay/homekit/relay.cpp b/platformio/common/libs/relay/homekit/relay.cpp
new file mode 100644
index 0000000..b00a7a2
--- /dev/null
+++ b/platformio/common/libs/relay/homekit/relay.cpp
@@ -0,0 +1,22 @@
+#include <Arduino.h>
+#include "./relay.h"
+
+namespace homekit::relay {
+
+void init() {
+ pinMode(CONFIG_RELAY_GPIO, OUTPUT);
+}
+
+bool state() {
+ return digitalRead(CONFIG_RELAY_GPIO) == HIGH;
+}
+
+void on() {
+ digitalWrite(CONFIG_RELAY_GPIO, HIGH);
+}
+
+void off() {
+ digitalWrite(CONFIG_RELAY_GPIO, LOW);
+}
+
+}
diff --git a/platformio/common/libs/relay/homekit/relay.h b/platformio/common/libs/relay/homekit/relay.h
new file mode 100644
index 0000000..288cc05
--- /dev/null
+++ b/platformio/common/libs/relay/homekit/relay.h
@@ -0,0 +1,13 @@
+#ifndef HOMEKIT_LIB_RELAY_H
+#define HOMEKIT_LIB_RELAY_H
+
+namespace homekit::relay {
+
+void init();
+bool state();
+void on();
+void off();
+
+}
+
+#endif //HOMEKIT_LIB_RELAY_H
diff --git a/platformio/common/libs/relay/library.json b/platformio/common/libs/relay/library.json
new file mode 100644
index 0000000..e878248
--- /dev/null
+++ b/platformio/common/libs/relay/library.json
@@ -0,0 +1,8 @@
+{
+ "name": "homekit_relay",
+ "version": "1.0.0",
+ "build": {
+ "flags": "-I../../include"
+ }
+}
+