1.1.0: begin(username, password, rootTopic) - the library signature now matches every example, the readme and the website (as published since 2024 no sketch could authenticate: the 64-hex password became the MQTT username). Discovery answers go out over MQTT directly, every device, resumed from loop() under heap pressure within the backend's 5 s window, instead of the 5-slot HTTP queue that silently dropped the rest (which the backend's reconcile then deleted from Alexa). JSON aligned with Alexa / alex2node: event.payload present, ActionMapping payload an object, semantics only when a capability has mappings. Pointer-stable device/capability containers (std::deque), the MQTT payload is copied by length before parsing (no write past the buffer), fragmented directive ids are ignored (a Discover is answered on its first fragment), deprecated ArduinoJson 7 calls replaced, credential Serial prints removed, ESP32 include guards (untested; the ESP8266 is the target). Examples: WIFI_PASSWORD, LED_BUILTIN fallback, string+int print fixes. library.json + library.properties restored (1.1.0; AsyncMqttClient, ArduinoJson 7, ESP Async TCP), LICENSE (MIT), a real keywords.txt, .gitattributes text=auto eol=lf (tree normalised to LF). readme: Forgejo URLs, platformio.ini snippet, Library Manager install, begin() order, INTERIOR_BLIND for blinds, 1.1.0 changelog. All five examples compile warning-free for d1_mini (PlatformIO 6.2, espressif8266) on pve-B450.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
1313f47856
commit
87caad25be
20 changed files with 3117 additions and 2782 deletions
|
|
@ -1,67 +1,68 @@
|
|||
#include <Arduino.h>
|
||||
|
||||
#ifdef ESP32
|
||||
#include <WiFi.h>
|
||||
#else
|
||||
#include <ESP8266WiFi.h>
|
||||
#endif
|
||||
|
||||
#include <Alex2ESP.h>
|
||||
|
||||
// Define constants for WiFi and Alexa Client configuration
|
||||
const char *WIFI_SSID = "";
|
||||
|
||||
const char *ALEXA_USERNAME = "";
|
||||
const char *ALEXA_PASSWORD = "";
|
||||
const char *ALEXA_ROOT_TOPIC = "";
|
||||
|
||||
// Create the Alexa client object
|
||||
Alex2ESP alexClient;
|
||||
AlexaDevice* device1;
|
||||
|
||||
void setup() {
|
||||
|
||||
// Initialize serial communication for debugging
|
||||
Serial.begin(74880);
|
||||
|
||||
// Connect to Wi-Fi
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(WIFI_SSID);
|
||||
|
||||
Serial.print("[WIFI] Connecting to WiFi");
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
Serial.print(".");
|
||||
delay(100);
|
||||
}
|
||||
|
||||
Serial.println();
|
||||
Serial.printf("[WIFI] Connected to SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
|
||||
|
||||
// Initialize the Alexa client
|
||||
alexClient.begin(ALEXA_USERNAME, ALEXA_PASSWORD, ALEXA_ROOT_TOPIC);
|
||||
|
||||
// Register a new device with a unique ID and name
|
||||
device1 = alexClient.getDevice("ESP Temp", "ESP-01");
|
||||
|
||||
// Set the device's display category to TEMPERATURE_SENSOR
|
||||
device1->setDisplayCategory(DisplayCategory::TEMPERATURE_SENSOR);
|
||||
|
||||
// Add a temperature sensor capability to the device
|
||||
device1->addCapability(AlexaInterfaceType::TEMPERATURE_SENSOR);
|
||||
|
||||
// Register event listener for "ReportState" directive
|
||||
device1->registerEvent("ReportState", [](const JsonDocument& directive, const AlexaInterfaceType& type) {
|
||||
// Build and send status report
|
||||
device1->buildStatusMessage(directive["header"]["correlationToken"])
|
||||
.AddHealthProp(EndpointHealth::OK)
|
||||
.AddTemperatureSensorProp(TemperatureSensorScale::FAHRENHEIT,69)
|
||||
.send();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Process Alexa client communication
|
||||
alexClient.loop();
|
||||
}
|
||||
#include <Arduino.h>
|
||||
|
||||
#ifdef ESP32
|
||||
#include <WiFi.h>
|
||||
#else
|
||||
#include <ESP8266WiFi.h>
|
||||
#endif
|
||||
|
||||
#include <Alex2ESP.h>
|
||||
|
||||
// Define constants for WiFi and Alexa Client configuration
|
||||
const char *WIFI_SSID = "";
|
||||
const char *WIFI_PASSWORD = "";
|
||||
|
||||
const char *ALEXA_USERNAME = "";
|
||||
const char *ALEXA_PASSWORD = "";
|
||||
const char *ALEXA_ROOT_TOPIC = "";
|
||||
|
||||
// Create the Alexa client object
|
||||
Alex2ESP alexClient;
|
||||
AlexaDevice* device1;
|
||||
|
||||
void setup() {
|
||||
|
||||
// Initialize serial communication for debugging
|
||||
Serial.begin(74880);
|
||||
|
||||
// Connect to Wi-Fi
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
||||
|
||||
Serial.print("[WIFI] Connecting to WiFi");
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
Serial.print(".");
|
||||
delay(100);
|
||||
}
|
||||
|
||||
Serial.println();
|
||||
Serial.printf("[WIFI] Connected to SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
|
||||
|
||||
// Initialize the Alexa client (MQTT username, MQTT password, root topic)
|
||||
alexClient.begin(ALEXA_USERNAME, ALEXA_PASSWORD, ALEXA_ROOT_TOPIC);
|
||||
|
||||
// Register a new device with a unique ID and name
|
||||
device1 = alexClient.getDevice("ESP Temp", "ESP-01");
|
||||
|
||||
// Set the device's display category to TEMPERATURE_SENSOR
|
||||
device1->setDisplayCategory(DisplayCategory::TEMPERATURE_SENSOR);
|
||||
|
||||
// Add a temperature sensor capability to the device
|
||||
device1->addCapability(AlexaInterfaceType::TEMPERATURE_SENSOR);
|
||||
|
||||
// Register event listener for "ReportState" directive
|
||||
device1->registerEvent("ReportState", [](const JsonDocument& directive, const AlexaInterfaceType& type) {
|
||||
// Build and send status report
|
||||
device1->buildStatusMessage(directive["header"]["correlationToken"])
|
||||
.AddHealthProp(EndpointHealth::OK)
|
||||
.AddTemperatureSensorProp(TemperatureSensorScale::FAHRENHEIT,69)
|
||||
.send();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Process Alexa client communication
|
||||
alexClient.loop();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue