refactor: Rewiring MQTT constants to toplevel defined constants
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
[submodule "core"]
|
||||
path = core
|
||||
url = git@github.com:Gustice/EspIdfDevicePlatform.git
|
||||
Submodule
+1
Submodule core added at 13d6532a92
+65
-37
@@ -18,12 +18,21 @@ struct {
|
||||
} ConfigKeys;
|
||||
|
||||
// MQTT Topics
|
||||
// Subscriptions:
|
||||
// <mqttPrefix>/watch/MoveTo
|
||||
// <mqttPrefix>/watch/Shuffle
|
||||
// Publishes:
|
||||
// <mqttPrefix>/watch/inPosition
|
||||
// <mqttPrefix>/watch/changingPosition
|
||||
struct {
|
||||
// Subscriptions:
|
||||
const char *moveTo = /* <mqttPrefix>/ */ "watch/moveTo";
|
||||
const char *startShuffle = /* <mqttPrefix>/ */ "watch/startShuffle";
|
||||
// Publishes:
|
||||
const char *inPosition = /* <mqttPrefix>/ */ "watch/inPosition";
|
||||
const char *changingPosition = /* <mqttPrefix>/ */ "watch/changingPosition";
|
||||
} MqttTopics;
|
||||
|
||||
// ToDo:
|
||||
// - MQTT Integration
|
||||
// - OTA
|
||||
// - Syslog heartbeat
|
||||
// - Streamlined DMX
|
||||
// -
|
||||
|
||||
#include "watchMain.hpp"
|
||||
|
||||
@@ -39,7 +48,7 @@ struct DeviceState {
|
||||
float speed = 1.0; // Rad/sec
|
||||
float accel = 1.0; // Rad/sec^2
|
||||
Color color{0x80, 0x80, 0x80};
|
||||
uint8_t pictogram{};
|
||||
uint8_t pictogram{}; // 0..5 active Pictogramm
|
||||
};
|
||||
|
||||
enum class MoveType {
|
||||
@@ -101,6 +110,22 @@ void testPictoIllum(Cli::CArgs args) {
|
||||
}
|
||||
}
|
||||
|
||||
void testMovement(Cli::CArgs args) {
|
||||
ESP_LOGI(TAG, "on triggerMovement:");
|
||||
if (args.size() != 1) {
|
||||
pShell->write("need target position (1..6)'\n");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
int p = std::stoi(args[0]);
|
||||
activeState.profile = p;
|
||||
commandQueue.enqueue(std::make_unique<MoveCommand>(MoveType::StepTo, p));
|
||||
} catch (const std::exception &e) {
|
||||
ESP_LOGI(TAG, "Failed to parse %s and %s", args[0].c_str(), args[1].c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void setConfig(Cli::CArgs args) {
|
||||
if (args.size() != 2) {
|
||||
pShell->write("Needs string key and value'\n");
|
||||
@@ -144,22 +169,6 @@ void setDynamics(Cli::CArgs args) {
|
||||
}
|
||||
}
|
||||
|
||||
void triggerMovement(Cli::CArgs args) {
|
||||
ESP_LOGI(TAG, "on triggerMovement:");
|
||||
if (args.size() != 1) {
|
||||
pShell->write("need target position'\n");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
int p = std::stoi(args[0]);
|
||||
activeState.profile = p;
|
||||
commandQueue.enqueue(std::make_unique<MoveCommand>(MoveType::StepTo, p));
|
||||
} catch (const std::exception &e) {
|
||||
ESP_LOGI(TAG, "Failed to parse %s and %s", args[0].c_str(), args[1].c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void startDemoMovement(Cli::CArgs args) {
|
||||
ESP_LOGI(TAG, "on startDemoMovement:");
|
||||
commandQueue.enqueue(std::make_unique<MoveCommand>(MoveType::Demo));
|
||||
@@ -196,8 +205,8 @@ static void telnetSocketTask(int addrFamily) {
|
||||
{"dyn_set", "set dynamics of movement (velocity,accelerations) as floats",
|
||||
[](Cli::CArgs a) { setDynamics(a); }});
|
||||
pShell->addBinding(
|
||||
{"move", "start movement (profile-idx,steps) as integers ",
|
||||
[](Cli::CArgs a) { triggerMovement(a); }});
|
||||
{"tstMove", "start movement (profile-idx,steps) as integers ",
|
||||
[](Cli::CArgs a) { testMovement(a); }});
|
||||
|
||||
pShell->addBinding(
|
||||
{"tstIllum", "test illumination command 0=off /1..6",
|
||||
@@ -261,7 +270,7 @@ void moveToSubs(std::string data) {
|
||||
Syslog::logv(Syslog::Severity::Informational, "got MoveTo-Cmd->%i", p);
|
||||
commandQueue.enqueue(std::make_unique<MoveCommand>(MoveType::StepTo, p));
|
||||
auto &client = MqttClient::getInstance();
|
||||
client.publish("watch/inPosition", data + "Picto");
|
||||
client.publish(MqttTopics.inPosition, data + "Picto");
|
||||
} catch (const std::exception &e) {
|
||||
ESP_LOGE(TAG, "Error to process data %s, with ex: %s", data.c_str(), e.what());
|
||||
}
|
||||
@@ -274,7 +283,7 @@ void startShuffle(std::string data) {
|
||||
Syslog::logv(Syslog::Severity::Informational, "got Shuffle-Command");
|
||||
commandQueue.enqueue(std::make_unique<MoveCommand>(MoveType::Shuffle, 0));
|
||||
auto &client = MqttClient::getInstance();
|
||||
client.publish("watch/changingPosition", "....");
|
||||
client.publish(MqttTopics.changingPosition, "....");
|
||||
} catch (const std::exception &e) {
|
||||
ESP_LOGE(TAG, "Error to process data %s, with ex: %s", data.c_str(), e.what());
|
||||
}
|
||||
@@ -479,7 +488,7 @@ void LightingTask() {
|
||||
if (pos == 0) {
|
||||
Syslog::logv(Syslog::Severity::Informational,
|
||||
"Dimming picto-illum pos:%i ", lastPicto);
|
||||
processors[lastPicto-1].setEffect(Effect::macDark, &colorSource, 0);
|
||||
processors[lastPicto - 1].setEffect(Effect::macDark, &colorSource, 0);
|
||||
} else if ((pos >= 1) && (pos <= 6)) {
|
||||
auto idx = pos - 1;
|
||||
Syslog::logv(Syslog::Severity::Informational,
|
||||
@@ -539,6 +548,9 @@ void MovementTask() {
|
||||
|
||||
ESP_LOGI("Stepper", "Find Home");
|
||||
stepper.findRef();
|
||||
// Illum 1
|
||||
pictoIllumQue.enqueue(std::make_unique<PictoIllumCommand>(1));
|
||||
|
||||
ESP_LOGI(TAG, "Fist Position is %f.2", stepper.getScaledPos() * 6);
|
||||
fos::Task::delayMs(1000);
|
||||
|
||||
@@ -549,17 +561,33 @@ void MovementTask() {
|
||||
auto cmd = commandQueue.dequeue();
|
||||
if (cmd->type == MoveType::StepTo) {
|
||||
if (stepper.isIdle()) {
|
||||
// activeState.pictogram = ledPos;
|
||||
// ledRing.send(ledStrip);
|
||||
// activeState.pictogram
|
||||
auto delta = std::min<uint8_t>(cmd->pos, 128);
|
||||
pictoIllumQue.enqueue(std::make_unique<PictoIllumCommand>(0));
|
||||
int newPos = cmd->pos;
|
||||
if ((newPos >= 1) && (newPos <= 6)) {
|
||||
auto idx = newPos - 1;
|
||||
Syslog::logv(Syslog::Severity::Informational,
|
||||
"Triggered movement to picto pos:%i ", newPos);
|
||||
} else {
|
||||
Syslog::logv(Syslog::Severity::Error,
|
||||
"Got invalid index for illuminated pictogram =%i ", newPos);
|
||||
continue;
|
||||
}
|
||||
int delta = newPos - activeState.pictogram;
|
||||
if (delta <= 0) {
|
||||
delta += 6;
|
||||
}
|
||||
delta = delta + (activeState.minJumps % 6) * 6;
|
||||
if (delta < activeState.minJumps) {
|
||||
delta += 6;
|
||||
}
|
||||
Syslog::logv(Syslog::Severity::Notice,
|
||||
"Running Stepper by %i steps with prof=%i a=%.2f w=%.2f",
|
||||
delta, activeState.profile, activeState.accel, activeState.speed);
|
||||
pictoIllumQue.enqueue(std::make_unique<PictoIllumCommand>(0));
|
||||
stepper.moveBy(delta * std::numbers::pi / 3,
|
||||
activeState.profile, activeState.accel, activeState.speed);
|
||||
} else {
|
||||
fos::Task::delayMs(100);
|
||||
pictoIllumQue.enqueue(std::make_unique<PictoIllumCommand>(newPos));
|
||||
activeState.pictogram = newPos;
|
||||
}
|
||||
} else if (cmd->type == MoveType::Demo) {
|
||||
int i = 0;
|
||||
@@ -596,7 +624,7 @@ void app_main(void) {
|
||||
initialize_ethernet();
|
||||
NvsApi::init();
|
||||
static fos::Task lightingTask(LightingTask, "Lights", 0x4000uL);
|
||||
// static fos::Task movementTask(MovementTask, "Motor", 0x4000uL);
|
||||
static fos::Task movementTask(MovementTask, "Motor", 0x4000uL);
|
||||
|
||||
etherActive.take();
|
||||
ESP_LOGI(TAG, "Start net services");
|
||||
@@ -618,8 +646,8 @@ void app_main(void) {
|
||||
auto prefix = store.getValue(ConfigKeys.mqttPrefix);
|
||||
auto &client = MqttClient::init(broker, prefix);
|
||||
if (!client.isRunning()) {
|
||||
client.addSubscription("watch/moveTo", [](std::string d) { moveToSubs(d); });
|
||||
client.addSubscription("watch/shuffle", [](std::string d) { startShuffle(d); });
|
||||
client.addSubscription(MqttTopics.moveTo, [](std::string d) { moveToSubs(d); });
|
||||
client.addSubscription(MqttTopics.startShuffle, [](std::string d) { startShuffle(d); });
|
||||
client.start();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user