@@ -23,10 +23,19 @@ const char *post_path = "/input/post?";
2323
2424static MongooseHttpClient client;
2525
26+ struct EmonCmsClientState {
27+ bool connected;
28+ };
29+
2630static void emoncms_result (bool success, String message)
2731{
2832 StaticJsonDocument<128 > event;
2933
34+ if (emoncms_connected && success) {
35+ // Don't send events if we have already reported success
36+ return ;
37+ }
38+
3039 emoncms_connected = success;
3140 event[" emoncms_connected" ] = (int )emoncms_connected;
3241 event[" emoncms_message" ] = message.substring (0 , 64 );
@@ -54,11 +63,17 @@ void emoncms_publish(JsonDocument &data)
5463 DBUGVAR (url);
5564 packets_sent++;
5665
57- client.get (url, [](MongooseHttpClientResponse *response)
66+ auto state = new EmonCmsClientState;
67+
68+ state->connected = false ;
69+
70+ client.get (url, [state](MongooseHttpClientResponse *response)
5871 {
5972 MongooseString result = response->body ();
6073 DBUGF (" result = %.*s" , result.length (), result.c_str ());
6174
75+ state->connected = true ;
76+
6277 const size_t capacity = JSON_OBJECT_SIZE (2 ) + result.length ();
6378 DynamicJsonDocument doc (capacity);
6479 if (DeserializationError::Code::Ok == deserializeJson (doc, result.c_str (), result.length ()))
@@ -77,12 +92,13 @@ void emoncms_publish(JsonDocument &data)
7792 DEBUG.printf (" %.*s\n " , result.length (), (const char *)result);
7893 emoncms_result (false , result.toString ());
7994 }
80- }, []()
95+ }, [state ]()
8196 {
82- // DBUGF("onClose %p", response);
83- // if(NULL == response) {
84- // emoncms_result(false, String("Failed to connect"));
85- // }
97+ DBUGF (" onClose" );
98+ if (false == state->connected ) {
99+ emoncms_result (false , String (" Failed to connect" ));
100+ }
101+ delete state;
86102 });
87103 } else {
88104 if (false != emoncms_connected) {
0 commit comments