This commit is contained in:
James 2024-04-27 21:13:01 +01:00
parent 20f77a0a41
commit f829fc5156
2 changed files with 26 additions and 41 deletions

View File

@ -2,7 +2,7 @@
#include <ETH.h> #include <ETH.h>
#include "WebSocketManager.h" #include "WebSocketManager.h"
WebSocketManager wsManager("wss://api.ecomotus.co.uk", 443, "/socket"); WebSocketManager wsManager("ws://chodbox.home.arpa", 8765, "/");
static BLEUUID serviceUUID("0000ff00-0000-1000-8000-00805f9b34fb"); //xiaoxiang bms service static BLEUUID serviceUUID("0000ff00-0000-1000-8000-00805f9b34fb"); //xiaoxiang bms service
static BLEUUID charUUID_rx("0000ff01-0000-1000-8000-00805f9b34fb"); //xiaoxiang bms rx id static BLEUUID charUUID_rx("0000ff01-0000-1000-8000-00805f9b34fb"); //xiaoxiang bms rx id
@ -34,7 +34,6 @@ void setup() {
WiFi.onEvent(WiFiEvent); WiFi.onEvent(WiFiEvent);
ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE); ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE);
BLEDevice::init(""); BLEDevice::init("");
wsManager.begin();
} }
void loop() { void loop() {
@ -53,6 +52,13 @@ void loop() {
delay(250); delay(250);
} }
wsManager.begin();
while(!wsManager.isConnected()){
Serial.println("Wait for socket...");
delay(250);
}
for (int i = 0; i < foundDevices.getCount(); i++) { for (int i = 0; i < foundDevices.getCount(); i++) {
delay(1000); delay(1000);
Serial.printf("\r\n\r\n===============================\r\n\r\n"); Serial.printf("\r\n\r\n===============================\r\n\r\n");

View File

@ -3,7 +3,8 @@
#include <WebSocketsClient.h> #include <WebSocketsClient.h>
#include <WiFiClientSecure.h> #include <WiFiClientSecure.h>
#include "ca_cert.h" // Include the CA certificate #include <WiFiClient.h>
#include "ca_cert.h"
class WebSocketManager { class WebSocketManager {
public: public:
@ -19,24 +20,24 @@ public:
template<typename... Args> template<typename... Args>
void sendText(const char* format, Args... args) { void sendText(const char* format, Args... args) {
if (webSocket.isConnected()) { if (webSocket.isConnected() && isConnected) {
char buffer[512]; // Define a buffer to hold the constructed message char buffer[512]; // Define a buffer to hold the constructed message
snprintf(buffer, sizeof(buffer), format, args...); // Use snprintf to format the string snprintf(buffer, sizeof(buffer), format, args...); // Use snprintf to format the string
webSocket.sendTXT(buffer); webSocket.sendTXT(buffer);
Serial.print("[WebSocket] Sent: ");
}else{
Serial.printf("[WebSocket] Dropped: ");
} }
Serial.println(buffer); }
static bool isConnected() {
return connected;
} }
private: private:
static void webSocketTask(void *param) { static void webSocketTask(void *param) {
WiFiClientSecure client; WiFiClient client;
client.setCACert(ca_cert); //client.setCACert(ca_cert);
webSocket.beginSSL(serverUrl.c_str(), serverPort, serverPath.c_str(), ca_cert); webSocket.beginSSL(serverUrl.c_str(), serverPort, serverPath.c_str(), ca_cert);
webSocket.onEvent(webSocketEvent); webSocket.onEvent(webSocketEvent);
webSocket.setReconnectInterval(5000); webSocket.setReconnectInterval(1000);
for (;;) { for (;;) {
webSocket.loop(); webSocket.loop();
@ -44,46 +45,22 @@ private:
} }
} }
static void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) { static void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
switch (type) { switch (type) {
case WStype_DISCONNECTED: case WStype_DISCONNECTED:
if (payload) { connected = false;
Serial.print("[WebSocket] Disconnected - Reason: "); Serial.println("[WebSocket] Disconnected");
Serial.println((char*)payload);
} else {
Serial.println("[WebSocket] Disconnected - No reason provided");
}
break; break;
case WStype_CONNECTED: case WStype_CONNECTED:
connected = true;
Serial.println("[WebSocket] Connected"); Serial.println("[WebSocket] Connected");
// If your WebSocket server sends a greeting or any message upon connection, you can log it here
if (payload && length > 0) {
Serial.print("[WebSocket] Server response: ");
Serial.println((char*)payload);
}
break; break;
case WStype_TEXT: case WStype_TEXT:
Serial.print("[WebSocket] Received text: "); Serial.print("[WebSocket] Received: ");
Serial.println((char*)payload); Serial.println((char*)payload);
break; break;
case WStype_BIN: case WStype_BIN:
Serial.print("[WebSocket] Received binary data, length: "); Serial.println("[WebSocket] Received binary data");
Serial.println(length);
// Optionally, you can add a function to dump binary data for deeper inspection
break;
case WStype_ERROR:
Serial.print("[WebSocket] Error: ");
if (payload) {
Serial.println((char*)payload);
} else {
Serial.println("No specific error message provided.");
}
break;
case WStype_PING:
Serial.println("[WebSocket] Ping received");
break;
case WStype_PONG:
Serial.println("[WebSocket] Pong received");
break; break;
} }
} }
@ -92,6 +69,7 @@ private:
static String serverUrl; static String serverUrl;
static uint16_t serverPort; static uint16_t serverPort;
static String serverPath; static String serverPath;
static bool connected;
}; };
// Define static members // Define static members
@ -99,5 +77,6 @@ WebSocketsClient WebSocketManager::webSocket;
String WebSocketManager::serverUrl = ""; String WebSocketManager::serverUrl = "";
uint16_t WebSocketManager::serverPort = 0; uint16_t WebSocketManager::serverPort = 0;
String WebSocketManager::serverPath = ""; String WebSocketManager::serverPath = "";
bool WebSocketManager::connected = false;
#endif // WEBSOCKETMANAGER_H #endif // WEBSOCKETMANAGER_H