После подключения происходит процесс аутентификации, который требует от них взаимодействия с использованием WebSocket (сообщения находятся в формате JSON).
Проблема в том, что ESP32 сообщил, что отправил сообщение
Код: Выделить всё
{"type":"auth_response","id":"CHY","data":{"hash":"f6bb6993e5a44bcde621d6bdd4a3dcb7fcfa5ac0b9a8137d88bed81510849fed","time":19726}}
Я использовал Postman для тестирования сервера, и он работает нормально, поэтому я подозреваю, что проблема заключается в ESP32.
Это код для ESP32.
Код: Выделить всё
void webSocketEvent(WStype_t type, uint8_t *payload, size_t length) {
switch (type) {
...
case WStype_TEXT:
String text = String((char *)payload);
doc.clear();
DeserializationError error = deserializeJson(doc, text);
if (error) {
break;
}
const char *type = doc["type"];
if (strcmp(type, "challenge") == 0) {
challengeNonce = doc["data"].as();
challengeSignal = true;
}
break;
}
}
void setup() {
xTaskCreatePinnedToCore(DataControl, /*Function*/
"Task1", /*name*/
20000, /*stack space*/
NULL, /*input*/
0, /*priority 0*/
&Task1, /*address*/
1); /*core */
}
void DataControl(void *pvParameters) {
while (true) {
if (WiFi.status() != WL_CONNECTED) {
initWifi();
}
webSocket.loop();
if (challengeSignal) {
challengeSignal = false;
String responseHash = calculateHMAC(challengeNonce, SHARED_SECRET);
JsonDocument outDoc;
outDoc["type"] = "auth_response";
outDoc["id"] = StationID;
outDoc["data"]["hash"] = responseHash;
outDoc["data"]["time"] = millis();
String responseJson;
serializeJson(outDoc, responseJson);
webSocket.sendTXT(responseJson);
Serial.println("Response Sent!");
}
vTaskDelay(pdMS_TO_TICKS(1));
}
}
Код: Выделить всё
@router.websocket("/ws/data/{client_id}")
async def websocket_data_endpoint(websocket: WebSocket, client_id: str, background: BackgroundTasks):
await websocket.accept()
logger.info(f"ESP32 {client_id} connected via WebSocket")
nonce = secrets.token_hex(128)
payload = {
"type": "challenge",
"data": nonce
}
await websocket.send_json(payload)
try:
data = await websocket.receive_text()
print(data)
...
Я хотел бы знать, знает ли кто-нибудь, как это исправить. Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/798 ... hon-server
Мобильная версия