cloud protocol updated
This commit is contained in:
101
main/cloud.h
101
main/cloud.h
@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#define FEATURE_CLOUD
|
||||||
// esp-idf includes
|
// esp-idf includes
|
||||||
#include <esp_log.h>
|
#include <esp_log.h>
|
||||||
|
|
||||||
@ -7,9 +7,11 @@
|
|||||||
#include <wrappers/websocket_client.h>
|
#include <wrappers/websocket_client.h>
|
||||||
#include <espwifistack.h>
|
#include <espwifistack.h>
|
||||||
#include <esphttpdutils.h>
|
#include <esphttpdutils.h>
|
||||||
|
#include <fmt/core.h>
|
||||||
|
|
||||||
// local includes
|
// local includes
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
#ifdef FEATURE_CLOUD
|
#ifdef FEATURE_CLOUD
|
||||||
@ -70,43 +72,72 @@ void handleCloud()
|
|||||||
if (!cloudClient.is_connected())
|
if (!cloudClient.is_connected())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::string rssi = "null";
|
static std::string msg;
|
||||||
|
msg = fmt::format("[{},{},{}",
|
||||||
|
std::chrono::milliseconds{espchrono::millis_clock::now().time_since_epoch()}.count(),
|
||||||
|
std::chrono::milliseconds{espchrono::utc_clock::now().time_since_epoch()}.count(),
|
||||||
|
heap_caps_get_free_size(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT));
|
||||||
if (wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::CONNECTED)
|
if (wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::CONNECTED)
|
||||||
|
{
|
||||||
if (const auto &result = wifi_stack::get_sta_ap_info(); result)
|
if (const auto &result = wifi_stack::get_sta_ap_info(); result)
|
||||||
rssi = std::to_string(result->rssi);
|
msg += fmt::format(",{}", result->rssi);
|
||||||
|
else
|
||||||
|
msg += ",null";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
msg += ",null";
|
||||||
|
|
||||||
std::string msg = "{"
|
if (raw_gas)
|
||||||
"\"type\": \"fullStatus\","
|
msg += fmt::format(",{}", *raw_gas);
|
||||||
"\"partial\": false, "
|
else
|
||||||
"\"status\": {"
|
msg += ",null";
|
||||||
"\"millis\":" + std::to_string(std::chrono::milliseconds{espchrono::millis_clock::now().time_since_epoch()}.count()) + ","
|
|
||||||
"\"rssi\":" + rssi + ","
|
if (raw_brems)
|
||||||
"\"front.valid\":" + std::to_string(controllers.front.feedbackValid) + ","
|
msg += fmt::format(",{}", *raw_brems);
|
||||||
"\"back.valid\":" + std::to_string(controllers.back.feedbackValid) + ","
|
else
|
||||||
"\"front.left.pwm\":" + std::to_string(controllers.front.command.left.pwm) + ","
|
msg += ",null";
|
||||||
"\"front.right.pwm\":" + std::to_string(controllers.front.command.right.pwm) + ","
|
|
||||||
"\"back.left.pwm\":" + std::to_string(controllers.back.command.left.pwm) + ","
|
if (gas)
|
||||||
"\"back.right.pwm\":" + std::to_string(controllers.back.command.right.pwm) + ","
|
msg += fmt::format(",{:.1f}", *gas);
|
||||||
"\"front.volt\":" + std::to_string(controllers.front.feedback.batVoltage) + ","
|
else
|
||||||
"\"back.volt\":" + std::to_string(controllers.back.feedback.batVoltage) + ","
|
msg += ",null";
|
||||||
"\"front.temp\":" + std::to_string(controllers.front.feedback.boardTemp) + ","
|
|
||||||
"\"back.temp\":" + std::to_string(controllers.back.feedback.boardTemp) + ","
|
if (brems)
|
||||||
"\"front.bad\":" + std::to_string(controllers.front.feedback.timeoutCntSerial) + ","
|
msg += fmt::format(",{:.1f}", *brems);
|
||||||
"\"back.bad\":" + std::to_string(controllers.back.feedback.timeoutCntSerial) + ","
|
else
|
||||||
"\"front.left.speed\":" + std::to_string(controllers.front.feedback.left.speed) + ","
|
msg += ",null";
|
||||||
"\"front.right.speed\":" + std::to_string(controllers.front.feedback.right.speed) + ","
|
|
||||||
"\"back.left.speed\":" + std::to_string(controllers.back.feedback.left.speed) + ","
|
constexpr const auto addController = [](const Controller &controller){
|
||||||
"\"back.right.speed\":" + std::to_string(controllers.back.feedback.right.speed) + ","
|
if (!controller.feedbackValid)
|
||||||
"\"front.left.current\":" + std::to_string(controllers.front.feedback.left.dcLink) + ","
|
{
|
||||||
"\"front.right.current\":" + std::to_string(controllers.front.feedback.right.dcLink) + ","
|
msg += ",null";
|
||||||
"\"back.left.current\":" + std::to_string(controllers.back.feedback.left.dcLink) + ","
|
return;
|
||||||
"\"back.right.current\":" + std::to_string(controllers.back.feedback.right.dcLink) + ","
|
}
|
||||||
"\"front.left.error\":" + std::to_string(controllers.front.feedback.left.error) + ","
|
|
||||||
"\"front.right.error\":" + std::to_string(controllers.front.feedback.right.error) + ","
|
msg += fmt::format(",[{:.02f},{:.02f}",
|
||||||
"\"back.left.error\":" + std::to_string(controllers.back.feedback.left.error) + ","
|
fixBatVoltage(controller.feedback.batVoltage),
|
||||||
"\"back.right.error\":" + std::to_string(controllers.back.feedback.right.error) +
|
fixBoardTemp(controller.feedback.boardTemp));
|
||||||
"}"
|
|
||||||
"}";
|
constexpr const auto addMotor = [](const bobbycar::protocol::serial::MotorState &command,
|
||||||
|
const bobbycar::protocol::serial::MotorFeedback &feedback,
|
||||||
|
bool invert){
|
||||||
|
msg += fmt::format(",[{},{:.2f},{:.2f},{}]",
|
||||||
|
command.pwm * (invert?-1:1),
|
||||||
|
convertToKmh(feedback.speed) * (invert?-1:1),
|
||||||
|
fixCurrent(feedback.dcLink) * (invert?-1:1),
|
||||||
|
feedback.error);
|
||||||
|
};
|
||||||
|
|
||||||
|
addMotor(controller.command.left, controller.feedback.left, controller.invertLeft);
|
||||||
|
addMotor(controller.command.right, controller.feedback.right, controller.invertRight);
|
||||||
|
|
||||||
|
msg += ']';
|
||||||
|
};
|
||||||
|
|
||||||
|
addController(controllers.front);
|
||||||
|
addController(controllers.back);
|
||||||
|
|
||||||
|
msg += ']';
|
||||||
|
|
||||||
const auto timeout = std::chrono::ceil<espcpputils::ticks>(espchrono::milliseconds32{settings.cloudSettings.cloudTransmitTimeout}).count();
|
const auto timeout = std::chrono::ceil<espcpputils::ticks>(espchrono::milliseconds32{settings.cloudSettings.cloudTransmitTimeout}).count();
|
||||||
const auto written = cloudClient.send_text(msg, timeout);
|
const auto written = cloudClient.send_text(msg, timeout);
|
||||||
|
Reference in New Issue
Block a user