Add support for TEMPERATURE_SENSOR
This commit is contained in:
parent
7f5357dadf
commit
8a1d862d56
5 changed files with 108 additions and 13 deletions
67
examples/tempSensor.cpp
Normal file
67
examples/tempSensor.cpp
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
#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();
|
||||||
|
}
|
||||||
31
readme.md
31
readme.md
|
|
@ -1,22 +1,30 @@
|
||||||
# Alex2ESP
|
# Alex2ESP
|
||||||
|
|
||||||
Alex2ESP is a lightweight C++ library for integrating ESP8266 and ESP32 microcontrollers with Amazon Alexa smart home APIs. The library simplifies the process of creating Alexa-compatible devices using MQTT.
|
Alex2ESP is a lightweight Arduino/PlatformIO library for integrating ESP8266 and ESP32 microcontrollers with Amazon Alexa smart home APIs. The library simplifies the process of creating Alexa-compatible devices using MQTT.
|
||||||
|
|
||||||
For more details on how to configure Alex2ESP, visit [Alex2ESP Documentation](https://alex2mqtt.stormysdream.club/).
|
For more details on how to configure Alex2ESP, visit [Alex2MQTT Documentation](https://alex2mqtt.stormysdream.club/).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
- Supports various Alexa smart home capabilities.
|
- Supports "All" Alexa smart home capabilities.
|
||||||
- Provides action mapping for advanced customization.
|
- Provides action mapping for advanced directive customization including Open,Close,Raise,and Lower commands.
|
||||||
- Simple integration with Wi-Fi and MQTT.
|
- Allows custom JSON injection in both discovery and state reporting to allow for unsupported devices.
|
||||||
- Event-driven architecture for handling Alexa directives.
|
- Event-driven architecture for handling Alexa directives.
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives
|
||||||
|
|
||||||
|
one of the most popular library for controlling esp like devices using alexa is [FauxmoESP]{https://github.com/vintlabs/fauxmoESP}
|
||||||
|
however FauxmoESP works by emulating a light bulb so it is limited in what commands it accepts.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
### Installation
|
### Installation
|
||||||
Download the library and include it in your Arduino IDE project:
|
Download the library as zip or via PlatformIO and include it in your project:
|
||||||
```cpp
|
```cpp
|
||||||
#include <Alex2ESP.h>
|
#include <Alex2ESP.h>
|
||||||
```
|
```
|
||||||
|
|
@ -96,15 +104,17 @@ toggleController->addActionMapping(openMapping);
|
||||||
## Interface Types
|
## Interface Types
|
||||||
| Alexa Interface Type | Status |
|
| Alexa Interface Type | Status |
|
||||||
|-----------------------------------------------------|-------------|
|
|-----------------------------------------------------|-------------|
|
||||||
| AlexaInterfaceType::AUTOMATION_MANAGEMENT | Supported* |
|
| AlexaInterfaceType::ENDPOINT_HEALTH | Fully Supported |
|
||||||
|
| AlexaInterfaceType::POWER_CONTROLLER | Fully Supported |
|
||||||
| AlexaInterfaceType::BRIGHTNESS_CONTROLLER | Fully Supported |
|
| AlexaInterfaceType::BRIGHTNESS_CONTROLLER | Fully Supported |
|
||||||
|
| AlexaInterfaceType::TOGGLE_CONTROLLER | Fully Supported |
|
||||||
|
| AlexaInterfaceType::TEMPERATURE_SENSOR | Fully Supported |
|
||||||
|
|
||||||
|
| AlexaInterfaceType::AUTOMATION_MANAGEMENT | Supported* |
|
||||||
| AlexaInterfaceType::CHANNEL_CONTROLLER | Supported* |
|
| AlexaInterfaceType::CHANNEL_CONTROLLER | Supported* |
|
||||||
| AlexaInterfaceType::COLOR_CONTROLLER | Supported* |
|
| AlexaInterfaceType::COLOR_CONTROLLER | Supported* |
|
||||||
| AlexaInterfaceType::COLOR_TEMPERATURE_CONTROLLER | Supported* |
|
| AlexaInterfaceType::COLOR_TEMPERATURE_CONTROLLER | Supported* |
|
||||||
| AlexaInterfaceType::CONTACT_SENSOR | Supported* |
|
| AlexaInterfaceType::CONTACT_SENSOR | Supported* |
|
||||||
| AlexaInterfaceType::POWER_CONTROLLER | Fully Supported |
|
|
||||||
| AlexaInterfaceType::ENDPOINT_HEALTH | Supported* |
|
|
||||||
| AlexaInterfaceType::TOGGLE_CONTROLLER | Fully Supported |
|
|
||||||
| AlexaInterfaceType::APPLICATION_STATE_REPORTER | Supported* |
|
| AlexaInterfaceType::APPLICATION_STATE_REPORTER | Supported* |
|
||||||
| AlexaInterfaceType::AUDIO_PLAY_QUEUE | Supported* |
|
| AlexaInterfaceType::AUDIO_PLAY_QUEUE | Supported* |
|
||||||
| AlexaInterfaceType::AUTHORIZATION_CONTROLLER | Supported* |
|
| AlexaInterfaceType::AUTHORIZATION_CONTROLLER | Supported* |
|
||||||
|
|
@ -146,7 +156,6 @@ toggleController->addActionMapping(openMapping);
|
||||||
| AlexaInterfaceType::SMART_VISION_SNAPSHOT_PROVIDER | Supported* |
|
| AlexaInterfaceType::SMART_VISION_SNAPSHOT_PROVIDER | Supported* |
|
||||||
| AlexaInterfaceType::SPEAKER | Supported* |
|
| AlexaInterfaceType::SPEAKER | Supported* |
|
||||||
| AlexaInterfaceType::STEP_SPEAKER | Supported* |
|
| AlexaInterfaceType::STEP_SPEAKER | Supported* |
|
||||||
| AlexaInterfaceType::TEMPERATURE_SENSOR | Supported* |
|
|
||||||
| AlexaInterfaceType::THERMOSTAT_CONTROLLER | Supported* |
|
| AlexaInterfaceType::THERMOSTAT_CONTROLLER | Supported* |
|
||||||
| AlexaInterfaceType::THERMOSTAT_CONTROLLER_CONFIGURATION | Supported* |
|
| AlexaInterfaceType::THERMOSTAT_CONTROLLER_CONFIGURATION | Supported* |
|
||||||
| AlexaInterfaceType::THERMOSTAT_CONTROLLER_HVAC_COMPONENTS | Supported* |
|
| AlexaInterfaceType::THERMOSTAT_CONTROLLER_HVAC_COMPONENTS | Supported* |
|
||||||
|
|
|
||||||
|
|
@ -481,6 +481,9 @@ case AlexaInterfaceType::ENDPOINT_HEALTH:
|
||||||
return {"connectivity"};
|
return {"connectivity"};
|
||||||
case AlexaInterfaceType::TOGGLE_CONTROLLER:
|
case AlexaInterfaceType::TOGGLE_CONTROLLER:
|
||||||
return {"toggleState"};
|
return {"toggleState"};
|
||||||
|
case AlexaInterfaceType::TEMPERATURE_SENSOR:
|
||||||
|
return {"temperature"};
|
||||||
|
|
||||||
case AlexaInterfaceType::APPLICATION_STATE_REPORTER:
|
case AlexaInterfaceType::APPLICATION_STATE_REPORTER:
|
||||||
case AlexaInterfaceType::AUDIO_PLAY_QUEUE:
|
case AlexaInterfaceType::AUDIO_PLAY_QUEUE:
|
||||||
case AlexaInterfaceType::AUTHORIZATION_CONTROLLER:
|
case AlexaInterfaceType::AUTHORIZATION_CONTROLLER:
|
||||||
|
|
@ -522,7 +525,6 @@ case AlexaInterfaceType::SMART_VISION_OBJECT_DETECTION_SENSOR:
|
||||||
case AlexaInterfaceType::SMART_VISION_SNAPSHOT_PROVIDER:
|
case AlexaInterfaceType::SMART_VISION_SNAPSHOT_PROVIDER:
|
||||||
case AlexaInterfaceType::SPEAKER:
|
case AlexaInterfaceType::SPEAKER:
|
||||||
case AlexaInterfaceType::STEP_SPEAKER:
|
case AlexaInterfaceType::STEP_SPEAKER:
|
||||||
case AlexaInterfaceType::TEMPERATURE_SENSOR:
|
|
||||||
case AlexaInterfaceType::THERMOSTAT_CONTROLLER:
|
case AlexaInterfaceType::THERMOSTAT_CONTROLLER:
|
||||||
case AlexaInterfaceType::THERMOSTAT_CONTROLLER_CONFIGURATION:
|
case AlexaInterfaceType::THERMOSTAT_CONTROLLER_CONFIGURATION:
|
||||||
case AlexaInterfaceType::THERMOSTAT_CONTROLLER_HVAC_COMPONENTS:
|
case AlexaInterfaceType::THERMOSTAT_CONTROLLER_HVAC_COMPONENTS:
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,11 @@ enum class PowerController
|
||||||
ON,
|
ON,
|
||||||
OFF
|
OFF
|
||||||
};
|
};
|
||||||
|
enum class TemperatureSensorScale
|
||||||
|
{
|
||||||
|
CELSIUS,
|
||||||
|
FAHRENHEIT
|
||||||
|
};
|
||||||
|
|
||||||
class AlexaStatusMessage
|
class AlexaStatusMessage
|
||||||
{
|
{
|
||||||
|
|
@ -65,6 +70,18 @@ public:
|
||||||
String value = (powerController == PowerController::ON) ? "ON" : "OFF";
|
String value = (powerController == PowerController::ON) ? "ON" : "OFF";
|
||||||
return AddProperty(AlexaInterfaceType::POWER_CONTROLLER, "powerState", value, uncertaintyInMs);
|
return AddProperty(AlexaInterfaceType::POWER_CONTROLLER, "powerState", value, uncertaintyInMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AlexaStatusMessage &AddTemperatureSensorProp(TemperatureSensorScale tempSensor,float value, unsigned int uncertaintyInMs = 0)
|
||||||
|
{
|
||||||
|
JsonDocument tempValue;
|
||||||
|
tempValue["scale"] = "CELSIUS";
|
||||||
|
tempValue["value"] = value;
|
||||||
|
if((tempSensor == TemperatureSensorScale::FAHRENHEIT)){
|
||||||
|
tempValue["value"] = (value - 32) * 5.0 / 9.0;
|
||||||
|
}
|
||||||
|
return AddProperty(AlexaInterfaceType::TEMPERATURE_SENSOR, "temperature", tempValue.as<JsonObject>(), uncertaintyInMs);
|
||||||
|
}
|
||||||
|
|
||||||
AlexaStatusMessage &AddBrightnessControllerProp(unsigned int brightness, unsigned int uncertaintyInMs = 0)
|
AlexaStatusMessage &AddBrightnessControllerProp(unsigned int brightness, unsigned int uncertaintyInMs = 0)
|
||||||
{
|
{
|
||||||
return AddProperty(AlexaInterfaceType::BRIGHTNESS_CONTROLLER, "brightness", brightness, uncertaintyInMs);
|
return AddProperty(AlexaInterfaceType::BRIGHTNESS_CONTROLLER, "brightness", brightness, uncertaintyInMs);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#include "AlexaUtils.h"
|
#include "AlexaUtils.h"
|
||||||
|
|
||||||
#define Alex2ESP_DEBUG
|
// #define Alex2ESP_DEBUG
|
||||||
|
|
||||||
uint8_t AlexaUtils::nextMessageId = 0;
|
uint8_t AlexaUtils::nextMessageId = 0;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue