Using the Alexa integration
These sections show the websocket JSON sent to the device for the supported Alexa directives together with matching Arduino device examples from microcontroller-examples.
set brightness
{
"adjustBrightnessPercent" : 59,
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaBrightnessPercent(const char* endpointId, long brightnessPercent) {
Serial.print("Set brightness percent on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(brightnessPercent);
Serial.print("BRIGHTNESS_PERCENT=");
Serial.println(brightnessPercent);
}
void applyAlexaBrightnessWeight(const char* endpointId, long brightnessWeight) {
Serial.print("Adjust brightness weight on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(brightnessWeight);
Serial.print("BRIGHTNESS_WEIGHT=");
Serial.println(brightnessWeight);
}
void handleAlexaBrightnessCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa brightness command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst brightnessPercent = root[offbeat::alexa::examples::kAdjustBrightnessPercentKey];
JsonVariantConst brightnessWeight = root[offbeat::alexa::examples::kAdjustBrightnessWeightKey];
if (!brightnessPercent.isNull()) {
applyAlexaBrightnessPercent(endpointId, offbeat::alexa::examples::readLong(brightnessPercent));
} else if (!brightnessWeight.isNull()) {
applyAlexaBrightnessWeight(endpointId, offbeat::alexa::examples::readLong(brightnessWeight));
} else {
Serial.println("No Alexa brightness payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
adjust brightness
{
"endpointId" : "the endpoint id",
"adjustBrightnessWeight" : -3
}
Arduino device example
void applyAlexaBrightnessPercent(const char* endpointId, long brightnessPercent) {
Serial.print("Set brightness percent on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(brightnessPercent);
Serial.print("BRIGHTNESS_PERCENT=");
Serial.println(brightnessPercent);
}
void applyAlexaBrightnessWeight(const char* endpointId, long brightnessWeight) {
Serial.print("Adjust brightness weight on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(brightnessWeight);
Serial.print("BRIGHTNESS_WEIGHT=");
Serial.println(brightnessWeight);
}
void handleAlexaBrightnessCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa brightness command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst brightnessPercent = root[offbeat::alexa::examples::kAdjustBrightnessPercentKey];
JsonVariantConst brightnessWeight = root[offbeat::alexa::examples::kAdjustBrightnessWeightKey];
if (!brightnessPercent.isNull()) {
applyAlexaBrightnessPercent(endpointId, offbeat::alexa::examples::readLong(brightnessPercent));
} else if (!brightnessWeight.isNull()) {
applyAlexaBrightnessWeight(endpointId, offbeat::alexa::examples::readLong(brightnessWeight));
} else {
Serial.println("No Alexa brightness payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
set color
{
"saturation" : 0.7138,
"brightness" : 0.6524,
"endpointId" : "the endpoint id",
"hue" : 350.5
}
Arduino device example
void applyAlexaColorCommand(const char* endpointId, double hue, double saturation, double brightness) {
Serial.print("Set color on ");
Serial.println(endpointId);
offbeat::alexa::examples::printLine("Hue: ", hue, 4);
offbeat::alexa::examples::printLine("Saturation: ", saturation, 4);
offbeat::alexa::examples::printLine("Brightness: ", brightness, 4);
Serial.print("HUE=");
Serial.println(hue, 4);
Serial.print("SATURATION=");
Serial.println(saturation, 4);
Serial.print("BRIGHTNESS=");
Serial.println(brightness, 4);
}
void handleAlexaColorCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa color command");
return;
}
JsonVariantConst hueValue = root[offbeat::alexa::examples::kHueKey];
JsonVariantConst saturationValue = root[offbeat::alexa::examples::kSaturationKey];
JsonVariantConst brightnessValue = root[offbeat::alexa::examples::kBrightnessKey];
if (hueValue.isNull() || saturationValue.isNull() || brightnessValue.isNull()) {
Serial.println("Incomplete Alexa color payload");
return;
}
applyAlexaColorCommand(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readDouble(hueValue),
offbeat::alexa::examples::readDouble(saturationValue),
offbeat::alexa::examples::readDouble(brightnessValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
turn on
{
"endpointId" : "the endpoint id",
"powerstate" : "TurnOn"
}
Arduino device example
void applyAlexaPowerState(const char* endpointId, const char* powerState) {
Serial.print("Apply Alexa power command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(powerState);
if (strcmp(powerState, "TurnOn") == 0) {
Serial.println("Turn your relay or transistor on here");
} else if (strcmp(powerState, "TurnOff") == 0) {
Serial.println("Turn your relay or transistor off here");
} else {
Serial.println("Unsupported Alexa power command");
return;
}
Serial.print("POWERSTATE=");
Serial.println(powerState);
}
void handleAlexaPowerCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa power command");
return;
}
JsonVariantConst powerStateValue = root[offbeat::alexa::examples::kPowerStateKey];
if (powerStateValue.isNull()) {
Serial.println("No Alexa powerstate payload");
return;
}
applyAlexaPowerState(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(powerStateValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
turn off
{
"endpointId" : "the endpoint id",
"powerstate" : "TurnOff"
}
Arduino device example
void applyAlexaPowerState(const char* endpointId, const char* powerState) {
Serial.print("Apply Alexa power command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(powerState);
if (strcmp(powerState, "TurnOn") == 0) {
Serial.println("Turn your relay or transistor on here");
} else if (strcmp(powerState, "TurnOff") == 0) {
Serial.println("Turn your relay or transistor off here");
} else {
Serial.println("Unsupported Alexa power command");
return;
}
Serial.print("POWERSTATE=");
Serial.println(powerState);
}
void handleAlexaPowerCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa power command");
return;
}
JsonVariantConst powerStateValue = root[offbeat::alexa::examples::kPowerStateKey];
if (powerStateValue.isNull()) {
Serial.println("No Alexa powerstate payload");
return;
}
applyAlexaPowerState(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(powerStateValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
adjust speaker volume using Alexa.StepSpeaker
{
"endpointId" : "the endpoint id",
"volumesteps" : 20
}
Arduino device example
void applyAlexaSpeakerVolume(const char* endpointId, long volumePercent) {
Serial.print("Set speaker volume on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(volumePercent);
Serial.print("VOLUME=");
Serial.println(volumePercent);
}
void applyAlexaSpeakerVolumeSteps(const char* endpointId, long volumeSteps) {
Serial.print("Adjust speaker volume steps on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(volumeSteps);
Serial.print("VOLUME_STEPS=");
Serial.println(volumeSteps);
}
void applyAlexaSpeakerMute(const char* endpointId, bool muted) {
Serial.print("Set mute on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(muted ? "true" : "false");
Serial.print("MUTE=");
Serial.println(muted ? "true" : "false");
}
void handleAlexaSpeakerCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa speaker command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst volumeValue = root[offbeat::alexa::examples::kVolumeKey];
JsonVariantConst volumeStepsValue = root[offbeat::alexa::examples::kVolumeStepsKey];
JsonVariantConst muteValue = root[offbeat::alexa::examples::kMuteKey];
if (!volumeValue.isNull()) {
applyAlexaSpeakerVolume(endpointId, offbeat::alexa::examples::readLong(volumeValue));
} else if (!volumeStepsValue.isNull()) {
applyAlexaSpeakerVolumeSteps(endpointId, offbeat::alexa::examples::readLong(volumeStepsValue));
} else if (!muteValue.isNull()) {
applyAlexaSpeakerMute(endpointId, offbeat::alexa::examples::readBool(muteValue));
} else {
Serial.println("No Alexa speaker payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
adjust speaker volume using Alexa.Speaker
{
"endpointId" : "the endpoint id",
"volumesteps" : 20
}
Arduino device example
void applyAlexaSpeakerVolume(const char* endpointId, long volumePercent) {
Serial.print("Set speaker volume on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(volumePercent);
Serial.print("VOLUME=");
Serial.println(volumePercent);
}
void applyAlexaSpeakerVolumeSteps(const char* endpointId, long volumeSteps) {
Serial.print("Adjust speaker volume steps on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(volumeSteps);
Serial.print("VOLUME_STEPS=");
Serial.println(volumeSteps);
}
void applyAlexaSpeakerMute(const char* endpointId, bool muted) {
Serial.print("Set mute on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(muted ? "true" : "false");
Serial.print("MUTE=");
Serial.println(muted ? "true" : "false");
}
void handleAlexaSpeakerCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa speaker command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst volumeValue = root[offbeat::alexa::examples::kVolumeKey];
JsonVariantConst volumeStepsValue = root[offbeat::alexa::examples::kVolumeStepsKey];
JsonVariantConst muteValue = root[offbeat::alexa::examples::kMuteKey];
if (!volumeValue.isNull()) {
applyAlexaSpeakerVolume(endpointId, offbeat::alexa::examples::readLong(volumeValue));
} else if (!volumeStepsValue.isNull()) {
applyAlexaSpeakerVolumeSteps(endpointId, offbeat::alexa::examples::readLong(volumeStepsValue));
} else if (!muteValue.isNull()) {
applyAlexaSpeakerMute(endpointId, offbeat::alexa::examples::readBool(muteValue));
} else {
Serial.println("No Alexa speaker payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
mute speaker using Alexa.StepSpeaker
{
"endpointId" : "the endpoint id",
"mute" : false
}
Arduino device example
void applyAlexaSpeakerVolume(const char* endpointId, long volumePercent) {
Serial.print("Set speaker volume on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(volumePercent);
Serial.print("VOLUME=");
Serial.println(volumePercent);
}
void applyAlexaSpeakerVolumeSteps(const char* endpointId, long volumeSteps) {
Serial.print("Adjust speaker volume steps on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(volumeSteps);
Serial.print("VOLUME_STEPS=");
Serial.println(volumeSteps);
}
void applyAlexaSpeakerMute(const char* endpointId, bool muted) {
Serial.print("Set mute on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(muted ? "true" : "false");
Serial.print("MUTE=");
Serial.println(muted ? "true" : "false");
}
void handleAlexaSpeakerCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa speaker command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst volumeValue = root[offbeat::alexa::examples::kVolumeKey];
JsonVariantConst volumeStepsValue = root[offbeat::alexa::examples::kVolumeStepsKey];
JsonVariantConst muteValue = root[offbeat::alexa::examples::kMuteKey];
if (!volumeValue.isNull()) {
applyAlexaSpeakerVolume(endpointId, offbeat::alexa::examples::readLong(volumeValue));
} else if (!volumeStepsValue.isNull()) {
applyAlexaSpeakerVolumeSteps(endpointId, offbeat::alexa::examples::readLong(volumeStepsValue));
} else if (!muteValue.isNull()) {
applyAlexaSpeakerMute(endpointId, offbeat::alexa::examples::readBool(muteValue));
} else {
Serial.println("No Alexa speaker payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
set speaker volume
{
"volume" : 30,
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaSpeakerVolume(const char* endpointId, long volumePercent) {
Serial.print("Set speaker volume on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(volumePercent);
Serial.print("VOLUME=");
Serial.println(volumePercent);
}
void applyAlexaSpeakerVolumeSteps(const char* endpointId, long volumeSteps) {
Serial.print("Adjust speaker volume steps on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(volumeSteps);
Serial.print("VOLUME_STEPS=");
Serial.println(volumeSteps);
}
void applyAlexaSpeakerMute(const char* endpointId, bool muted) {
Serial.print("Set mute on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(muted ? "true" : "false");
Serial.print("MUTE=");
Serial.println(muted ? "true" : "false");
}
void handleAlexaSpeakerCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa speaker command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst volumeValue = root[offbeat::alexa::examples::kVolumeKey];
JsonVariantConst volumeStepsValue = root[offbeat::alexa::examples::kVolumeStepsKey];
JsonVariantConst muteValue = root[offbeat::alexa::examples::kMuteKey];
if (!volumeValue.isNull()) {
applyAlexaSpeakerVolume(endpointId, offbeat::alexa::examples::readLong(volumeValue));
} else if (!volumeStepsValue.isNull()) {
applyAlexaSpeakerVolumeSteps(endpointId, offbeat::alexa::examples::readLong(volumeStepsValue));
} else if (!muteValue.isNull()) {
applyAlexaSpeakerMute(endpointId, offbeat::alexa::examples::readBool(muteValue));
} else {
Serial.println("No Alexa speaker payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
adjust speaker volume using Alexa.Speaker volume
{
"endpointId" : "the endpoint id",
"volumesteps" : 30
}
Arduino device example
void applyAlexaSpeakerVolume(const char* endpointId, long volumePercent) {
Serial.print("Set speaker volume on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(volumePercent);
Serial.print("VOLUME=");
Serial.println(volumePercent);
}
void applyAlexaSpeakerVolumeSteps(const char* endpointId, long volumeSteps) {
Serial.print("Adjust speaker volume steps on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(volumeSteps);
Serial.print("VOLUME_STEPS=");
Serial.println(volumeSteps);
}
void applyAlexaSpeakerMute(const char* endpointId, bool muted) {
Serial.print("Set mute on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(muted ? "true" : "false");
Serial.print("MUTE=");
Serial.println(muted ? "true" : "false");
}
void handleAlexaSpeakerCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa speaker command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst volumeValue = root[offbeat::alexa::examples::kVolumeKey];
JsonVariantConst volumeStepsValue = root[offbeat::alexa::examples::kVolumeStepsKey];
JsonVariantConst muteValue = root[offbeat::alexa::examples::kMuteKey];
if (!volumeValue.isNull()) {
applyAlexaSpeakerVolume(endpointId, offbeat::alexa::examples::readLong(volumeValue));
} else if (!volumeStepsValue.isNull()) {
applyAlexaSpeakerVolumeSteps(endpointId, offbeat::alexa::examples::readLong(volumeStepsValue));
} else if (!muteValue.isNull()) {
applyAlexaSpeakerMute(endpointId, offbeat::alexa::examples::readBool(muteValue));
} else {
Serial.println("No Alexa speaker payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
mute speaker using Alexa.Speaker
{
"endpointId" : "the endpoint id",
"mute" : false
}
Arduino device example
void applyAlexaSpeakerVolume(const char* endpointId, long volumePercent) {
Serial.print("Set speaker volume on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(volumePercent);
Serial.print("VOLUME=");
Serial.println(volumePercent);
}
void applyAlexaSpeakerVolumeSteps(const char* endpointId, long volumeSteps) {
Serial.print("Adjust speaker volume steps on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(volumeSteps);
Serial.print("VOLUME_STEPS=");
Serial.println(volumeSteps);
}
void applyAlexaSpeakerMute(const char* endpointId, bool muted) {
Serial.print("Set mute on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(muted ? "true" : "false");
Serial.print("MUTE=");
Serial.println(muted ? "true" : "false");
}
void handleAlexaSpeakerCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa speaker command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst volumeValue = root[offbeat::alexa::examples::kVolumeKey];
JsonVariantConst volumeStepsValue = root[offbeat::alexa::examples::kVolumeStepsKey];
JsonVariantConst muteValue = root[offbeat::alexa::examples::kMuteKey];
if (!volumeValue.isNull()) {
applyAlexaSpeakerVolume(endpointId, offbeat::alexa::examples::readLong(volumeValue));
} else if (!volumeStepsValue.isNull()) {
applyAlexaSpeakerVolumeSteps(endpointId, offbeat::alexa::examples::readLong(volumeStepsValue));
} else if (!muteValue.isNull()) {
applyAlexaSpeakerMute(endpointId, offbeat::alexa::examples::readBool(muteValue));
} else {
Serial.println("No Alexa speaker payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
playback fast forward
{
"playerControl" : "Next",
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaPlaybackCommand(const char* endpointId, const char* playerControl) {
Serial.print("Apply playback command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(playerControl);
if (strcmp(playerControl, "Play") == 0) {
Serial.println("Start playback here");
} else if (strcmp(playerControl, "Pause") == 0) {
Serial.println("Pause playback here");
} else if (strcmp(playerControl, "Stop") == 0) {
Serial.println("Stop playback here");
} else if (strcmp(playerControl, "Next") == 0) {
Serial.println("Skip to the next item here");
} else if (strcmp(playerControl, "Prev") == 0) {
Serial.println("Go to the previous item here");
} else {
Serial.println("Unsupported Alexa playback command");
return;
}
Serial.print("PLAYER_CONTROL=");
Serial.println(playerControl);
}
void handleAlexaPlaybackCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa playback command");
return;
}
JsonVariantConst playerControlValue = root[offbeat::alexa::examples::kPlayerControlKey];
if (playerControlValue.isNull()) {
Serial.println("No Alexa playback payload");
return;
}
applyAlexaPlaybackCommand(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(playerControlValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
playback next
{
"playerControl" : "Next",
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaPlaybackCommand(const char* endpointId, const char* playerControl) {
Serial.print("Apply playback command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(playerControl);
if (strcmp(playerControl, "Play") == 0) {
Serial.println("Start playback here");
} else if (strcmp(playerControl, "Pause") == 0) {
Serial.println("Pause playback here");
} else if (strcmp(playerControl, "Stop") == 0) {
Serial.println("Stop playback here");
} else if (strcmp(playerControl, "Next") == 0) {
Serial.println("Skip to the next item here");
} else if (strcmp(playerControl, "Prev") == 0) {
Serial.println("Go to the previous item here");
} else {
Serial.println("Unsupported Alexa playback command");
return;
}
Serial.print("PLAYER_CONTROL=");
Serial.println(playerControl);
}
void handleAlexaPlaybackCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa playback command");
return;
}
JsonVariantConst playerControlValue = root[offbeat::alexa::examples::kPlayerControlKey];
if (playerControlValue.isNull()) {
Serial.println("No Alexa playback payload");
return;
}
applyAlexaPlaybackCommand(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(playerControlValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
playback pause
{
"playerControl" : "Pause",
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaPlaybackCommand(const char* endpointId, const char* playerControl) {
Serial.print("Apply playback command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(playerControl);
if (strcmp(playerControl, "Play") == 0) {
Serial.println("Start playback here");
} else if (strcmp(playerControl, "Pause") == 0) {
Serial.println("Pause playback here");
} else if (strcmp(playerControl, "Stop") == 0) {
Serial.println("Stop playback here");
} else if (strcmp(playerControl, "Next") == 0) {
Serial.println("Skip to the next item here");
} else if (strcmp(playerControl, "Prev") == 0) {
Serial.println("Go to the previous item here");
} else {
Serial.println("Unsupported Alexa playback command");
return;
}
Serial.print("PLAYER_CONTROL=");
Serial.println(playerControl);
}
void handleAlexaPlaybackCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa playback command");
return;
}
JsonVariantConst playerControlValue = root[offbeat::alexa::examples::kPlayerControlKey];
if (playerControlValue.isNull()) {
Serial.println("No Alexa playback payload");
return;
}
applyAlexaPlaybackCommand(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(playerControlValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
playback play
{
"playerControl" : "Play",
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaPlaybackCommand(const char* endpointId, const char* playerControl) {
Serial.print("Apply playback command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(playerControl);
if (strcmp(playerControl, "Play") == 0) {
Serial.println("Start playback here");
} else if (strcmp(playerControl, "Pause") == 0) {
Serial.println("Pause playback here");
} else if (strcmp(playerControl, "Stop") == 0) {
Serial.println("Stop playback here");
} else if (strcmp(playerControl, "Next") == 0) {
Serial.println("Skip to the next item here");
} else if (strcmp(playerControl, "Prev") == 0) {
Serial.println("Go to the previous item here");
} else {
Serial.println("Unsupported Alexa playback command");
return;
}
Serial.print("PLAYER_CONTROL=");
Serial.println(playerControl);
}
void handleAlexaPlaybackCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa playback command");
return;
}
JsonVariantConst playerControlValue = root[offbeat::alexa::examples::kPlayerControlKey];
if (playerControlValue.isNull()) {
Serial.println("No Alexa playback payload");
return;
}
applyAlexaPlaybackCommand(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(playerControlValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
playback previous
{
"playerControl" : "Prev",
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaPlaybackCommand(const char* endpointId, const char* playerControl) {
Serial.print("Apply playback command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(playerControl);
if (strcmp(playerControl, "Play") == 0) {
Serial.println("Start playback here");
} else if (strcmp(playerControl, "Pause") == 0) {
Serial.println("Pause playback here");
} else if (strcmp(playerControl, "Stop") == 0) {
Serial.println("Stop playback here");
} else if (strcmp(playerControl, "Next") == 0) {
Serial.println("Skip to the next item here");
} else if (strcmp(playerControl, "Prev") == 0) {
Serial.println("Go to the previous item here");
} else {
Serial.println("Unsupported Alexa playback command");
return;
}
Serial.print("PLAYER_CONTROL=");
Serial.println(playerControl);
}
void handleAlexaPlaybackCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa playback command");
return;
}
JsonVariantConst playerControlValue = root[offbeat::alexa::examples::kPlayerControlKey];
if (playerControlValue.isNull()) {
Serial.println("No Alexa playback payload");
return;
}
applyAlexaPlaybackCommand(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(playerControlValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
playback rewind
{
"playerControl" : "Prev",
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaPlaybackCommand(const char* endpointId, const char* playerControl) {
Serial.print("Apply playback command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(playerControl);
if (strcmp(playerControl, "Play") == 0) {
Serial.println("Start playback here");
} else if (strcmp(playerControl, "Pause") == 0) {
Serial.println("Pause playback here");
} else if (strcmp(playerControl, "Stop") == 0) {
Serial.println("Stop playback here");
} else if (strcmp(playerControl, "Next") == 0) {
Serial.println("Skip to the next item here");
} else if (strcmp(playerControl, "Prev") == 0) {
Serial.println("Go to the previous item here");
} else {
Serial.println("Unsupported Alexa playback command");
return;
}
Serial.print("PLAYER_CONTROL=");
Serial.println(playerControl);
}
void handleAlexaPlaybackCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa playback command");
return;
}
JsonVariantConst playerControlValue = root[offbeat::alexa::examples::kPlayerControlKey];
if (playerControlValue.isNull()) {
Serial.println("No Alexa playback payload");
return;
}
applyAlexaPlaybackCommand(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(playerControlValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
playback start over
{
"playerControl" : "Prev",
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaPlaybackCommand(const char* endpointId, const char* playerControl) {
Serial.print("Apply playback command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(playerControl);
if (strcmp(playerControl, "Play") == 0) {
Serial.println("Start playback here");
} else if (strcmp(playerControl, "Pause") == 0) {
Serial.println("Pause playback here");
} else if (strcmp(playerControl, "Stop") == 0) {
Serial.println("Stop playback here");
} else if (strcmp(playerControl, "Next") == 0) {
Serial.println("Skip to the next item here");
} else if (strcmp(playerControl, "Prev") == 0) {
Serial.println("Go to the previous item here");
} else {
Serial.println("Unsupported Alexa playback command");
return;
}
Serial.print("PLAYER_CONTROL=");
Serial.println(playerControl);
}
void handleAlexaPlaybackCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa playback command");
return;
}
JsonVariantConst playerControlValue = root[offbeat::alexa::examples::kPlayerControlKey];
if (playerControlValue.isNull()) {
Serial.println("No Alexa playback payload");
return;
}
applyAlexaPlaybackCommand(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(playerControlValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
playback stop
{
"playerControl" : "Stop",
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaPlaybackCommand(const char* endpointId, const char* playerControl) {
Serial.print("Apply playback command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(playerControl);
if (strcmp(playerControl, "Play") == 0) {
Serial.println("Start playback here");
} else if (strcmp(playerControl, "Pause") == 0) {
Serial.println("Pause playback here");
} else if (strcmp(playerControl, "Stop") == 0) {
Serial.println("Stop playback here");
} else if (strcmp(playerControl, "Next") == 0) {
Serial.println("Skip to the next item here");
} else if (strcmp(playerControl, "Prev") == 0) {
Serial.println("Go to the previous item here");
} else {
Serial.println("Unsupported Alexa playback command");
return;
}
Serial.print("PLAYER_CONTROL=");
Serial.println(playerControl);
}
void handleAlexaPlaybackCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa playback command");
return;
}
JsonVariantConst playerControlValue = root[offbeat::alexa::examples::kPlayerControlKey];
if (playerControlValue.isNull()) {
Serial.println("No Alexa playback payload");
return;
}
applyAlexaPlaybackCommand(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(playerControlValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
skip channels
{
"skipChannel" : 1,
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaSetChannel(const char* endpointId, long channelNumber) {
Serial.print("Set channel on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(channelNumber);
Serial.print("SET_CHANNEL=");
Serial.println(channelNumber);
}
void applyAlexaSkipChannel(const char* endpointId, long channelOffset) {
Serial.print("Skip channel on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(channelOffset);
Serial.print("SKIP_CHANNEL=");
Serial.println(channelOffset);
}
void handleAlexaChannelCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa channel command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst setChannelValue = root[offbeat::alexa::examples::kSetChannelKey];
JsonVariantConst skipChannelValue = root[offbeat::alexa::examples::kSkipChannelKey];
if (!setChannelValue.isNull()) {
applyAlexaSetChannel(endpointId, offbeat::alexa::examples::readLong(setChannelValue));
} else if (!skipChannelValue.isNull()) {
applyAlexaSkipChannel(endpointId, offbeat::alexa::examples::readLong(skipChannelValue));
} else {
Serial.println("No Alexa channel payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
change channel
{
"endpointId" : "the endpoint id",
"SetChannel" : 1
}
Arduino device example
void applyAlexaSetChannel(const char* endpointId, long channelNumber) {
Serial.print("Set channel on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.println(channelNumber);
Serial.print("SET_CHANNEL=");
Serial.println(channelNumber);
}
void applyAlexaSkipChannel(const char* endpointId, long channelOffset) {
Serial.print("Skip channel on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.println(channelOffset);
Serial.print("SKIP_CHANNEL=");
Serial.println(channelOffset);
}
void handleAlexaChannelCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa channel command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst setChannelValue = root[offbeat::alexa::examples::kSetChannelKey];
JsonVariantConst skipChannelValue = root[offbeat::alexa::examples::kSkipChannelKey];
if (!setChannelValue.isNull()) {
applyAlexaSetChannel(endpointId, offbeat::alexa::examples::readLong(setChannelValue));
} else if (!skipChannelValue.isNull()) {
applyAlexaSkipChannel(endpointId, offbeat::alexa::examples::readLong(skipChannelValue));
} else {
Serial.println("No Alexa channel payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
set blind tilt
{
"setTiltPercent" : 60,
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaBlindTiltPercent(const char* endpointId, long tiltPercent) {
long clampedTiltPercent = clampPercent(tiltPercent);
long tiltDegrees = percentToDegrees(clampedTiltPercent);
Serial.print("Set blind tilt on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.print(clampedTiltPercent);
Serial.println("%");
Serial.print("TILT_PERCENT=");
Serial.println(clampedTiltPercent);
Serial.print("TILT_DEGREES=");
Serial.println(tiltDegrees);
}
void adjustAlexaBlindTiltPercent(const char* endpointId, long tiltPercentDelta) {
Serial.print("Adjust blind tilt on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.print(tiltPercentDelta);
Serial.println("%");
Serial.print("TILT_DELTA_PERCENT=");
Serial.println(tiltPercentDelta);
Serial.println("Update your tracked tilt state before driving the motor.");
}
void handleAlexaBlindTiltCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa blind tilt command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst rangeValue = root[offbeat::alexa::examples::kRangeValueKey];
JsonVariantConst rangeValueDelta = root[offbeat::alexa::examples::kRangeValueDeltaKey];
if (!rangeValue.isNull()) {
applyAlexaBlindTiltPercent(
endpointId, offbeat::alexa::examples::readLong(rangeValue));
} else if (!rangeValueDelta.isNull()) {
adjustAlexaBlindTiltPercent(
endpointId, offbeat::alexa::examples::readLong(rangeValueDelta));
} else {
Serial.println("No Alexa blind tilt payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
adjust blind tilt
{
"adjustTiltPercent" : 10,
"endpointId" : "the endpoint id"
}
Arduino device example
void applyAlexaBlindTiltPercent(const char* endpointId, long tiltPercent) {
long clampedTiltPercent = clampPercent(tiltPercent);
long tiltDegrees = percentToDegrees(clampedTiltPercent);
Serial.print("Set blind tilt on ");
Serial.print(endpointId);
Serial.print(" to ");
Serial.print(clampedTiltPercent);
Serial.println("%");
Serial.print("TILT_PERCENT=");
Serial.println(clampedTiltPercent);
Serial.print("TILT_DEGREES=");
Serial.println(tiltDegrees);
}
void adjustAlexaBlindTiltPercent(const char* endpointId, long tiltPercentDelta) {
Serial.print("Adjust blind tilt on ");
Serial.print(endpointId);
Serial.print(" by ");
Serial.print(tiltPercentDelta);
Serial.println("%");
Serial.print("TILT_DELTA_PERCENT=");
Serial.println(tiltPercentDelta);
Serial.println("Update your tracked tilt state before driving the motor.");
}
void handleAlexaBlindTiltCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa blind tilt command");
return;
}
const char* endpointId = offbeat::alexa::examples::readEndpointId(root);
JsonVariantConst rangeValue = root[offbeat::alexa::examples::kRangeValueKey];
JsonVariantConst rangeValueDelta = root[offbeat::alexa::examples::kRangeValueDeltaKey];
if (!rangeValue.isNull()) {
applyAlexaBlindTiltPercent(
endpointId, offbeat::alexa::examples::readLong(rangeValue));
} else if (!rangeValueDelta.isNull()) {
adjustAlexaBlindTiltPercent(
endpointId, offbeat::alexa::examples::readLong(rangeValueDelta));
} else {
Serial.println("No Alexa blind tilt payload");
return;
}
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
activate scene
{
"endpointId" : "the endpoint id",
"scenestate" : "TurnOn"
}
Arduino device example
void applyAlexaSceneState(const char* endpointId, const char* sceneState) {
Serial.print("Apply scene command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(sceneState);
if (strcmp(sceneState, "TurnOn") == 0) {
Serial.println("Activate the scene here");
} else if (strcmp(sceneState, "TurnOff") == 0) {
Serial.println("Deactivate the scene here");
} else {
Serial.println("Unsupported Alexa scene command");
return;
}
Serial.print("SCENESTATE=");
Serial.println(sceneState);
}
void handleAlexaSceneCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa scene command");
return;
}
JsonVariantConst sceneStateValue = root[offbeat::alexa::examples::kSceneStateKey];
if (sceneStateValue.isNull()) {
Serial.println("No Alexa scene payload");
return;
}
applyAlexaSceneState(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(sceneStateValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}
deactivate scene
{
"endpointId" : "the endpoint id",
"scenestate" : "TurnOff"
}
Arduino device example
void applyAlexaSceneState(const char* endpointId, const char* sceneState) {
Serial.print("Apply scene command for ");
Serial.print(endpointId);
Serial.print(": ");
Serial.println(sceneState);
if (strcmp(sceneState, "TurnOn") == 0) {
Serial.println("Activate the scene here");
} else if (strcmp(sceneState, "TurnOff") == 0) {
Serial.println("Deactivate the scene here");
} else {
Serial.println("Unsupported Alexa scene command");
return;
}
Serial.print("SCENESTATE=");
Serial.println(sceneState);
}
void handleAlexaSceneCommand(uint8_t* payload, size_t length) {
StaticJsonDocument<256> document;
JsonObjectConst root;
offbeat::alexa::examples::ParseStatus status =
offbeat::alexa::examples::parseRoot(payload, length, document, root);
if (status == offbeat::alexa::examples::ParseStatus::kInvalidPayload) {
Serial.println("Unable to parse Alexa scene command");
return;
}
JsonVariantConst sceneStateValue = root[offbeat::alexa::examples::kSceneStateKey];
if (sceneStateValue.isNull()) {
Serial.println("No Alexa scene payload");
return;
}
applyAlexaSceneState(
offbeat::alexa::examples::readEndpointId(root),
offbeat::alexa::examples::readString(sceneStateValue));
offbeat::alexa::examples::printEndpoint(root);
Serial.println("TEST:PASS");
}