Here is the test routine:
#include <ThingerESP8266.h>
#define SSID “Your SSID”
#define SSID_PASSWORD “Your Password”
long LastMillis;
int MillisDiff;
int LastMillisDiff;
int MaxMillisDiff;
ThingerESP8266 thing(“YourThinger Name”, “Your Device Name”, “Your device credentials”);
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
Serial.println(“Getting WiFi…”);
thing.add_wifi(SSID, SSID_PASSWORD);
Serial.println(“Got WiFi!”);
thing[“led”] << digitalPin(LED_BUILTIN);
// resource output example (i.e. reading a sensor value)
thing[“millis”] >> outputValue(millis());
// more details at http://docs.thinger.io/arduino/
}
void loop() {
digitalWrite(LED_BUILTIN,LOW);
LastMillis = millis();
thing.handle();
MillisDiff = millis() - LastMillis;
MaxMillisDiff = max(MillisDiff, MaxMillisDiff);
digitalWrite(LED_BUILTIN,HIGH);
Serial.printf(“MillisDiff= %i, MaxMillisDiff= %i\n”, MillisDiff, MaxMillisDiff);
if (millis() < 5000) MaxMillisDiff = 0;
delay (1000);
}
Using a device that Thinger does not know (wrong device or wrong credentials):
17:37:34.848 → Getting WiFi…
17:37:34.949 → Got WiFi!
17:37:44.536 → MillisDiff= 9600, MaxMillisDiff= 9600
17:37:51.205 → MillisDiff= 5677, MaxMillisDiff= 9600
17:37:57.880 → MillisDiff= 5688, MaxMillisDiff= 9600
17:38:04.548 → MillisDiff= 5689, MaxMillisDiff= 9600
17:38:11.270 → MillisDiff= 5708, MaxMillisDiff= 9600
17:38:18.447 → MillisDiff= 6145, MaxMillisDiff= 9600
17:38:25.116 → MillisDiff= 5687, MaxMillisDiff= 9600
17:38:31.792 → MillisDiff= 5689, MaxMillisDiff= 9600
17:38:38.513 → MillisDiff= 5717, MaxMillisDiff= 9600
17:38:45.183 → MillisDiff= 5685, MaxMillisDiff= 9600
17:38:51.907 → MillisDiff= 5684, MaxMillisDiff= 9600
17:38:58.583 → MillisDiff= 5694, MaxMillisDiff= 9600
17:39:05.253 → MillisDiff= 5693, MaxMillisDiff= 9600
17:39:11.976 → MillisDiff= 5690, MaxMillisDiff= 9600
17:39:18.652 → MillisDiff= 5693, MaxMillisDiff= 9600
17:39:25.420 → MillisDiff= 5750, MaxMillisDiff= 9600
IMHO the handle should not block that long…
If you put the handle every second, the device is frozen.
Using a recognized device, and letting it run:
18:05:54.810 → Getting WiFi…
18:05:55.443 → Got WiFi!
18:05:59.526 → MillisDiff= 4613, MaxMillisDiff= 4613
18:06:00.529 → MillisDiff= 0, MaxMillisDiff= 0
18:06:01.533 → MillisDiff= 0, MaxMillisDiff= 0
18:06:02.536 → MillisDiff= 0, MaxMillisDiff= 0
18:06:03.539 → MillisDiff= 0, MaxMillisDiff= 0
18:06:04.562 → MillisDiff= 0, MaxMillisDiff= 0
18:06:05.561 → MillisDiff= 0, MaxMillisDiff= 0
18:06:06.518 → MillisDiff= 0, MaxMillisDiff= 0
18:06:07.521 → MillisDiff= 0, MaxMillisDiff= 0
18:06:08.525 → MillisDiff= 0, MaxMillisDiff= 0
18:06:09.528 → MillisDiff= 0, MaxMillisDiff= 0
18:06:10.532 → MillisDiff= 0, MaxMillisDiff= 0
18:06:11.535 → MillisDiff= 0, MaxMillisDiff= 0
18:06:12.538 → MillisDiff= 0, MaxMillisDiff= 0
18:06:13.542 → MillisDiff= 0, MaxMillisDiff= 0
18:06:14.546 → MillisDiff= 1, MaxMillisDiff= 1
18:06:15.549 → MillisDiff= 1, MaxMillisDiff= 1
18:06:16.553 → MillisDiff= 1, MaxMillisDiff= 1
18:06:17.533 → MillisDiff= 0, MaxMillisDiff= 1
…
18:06:53.606 → MillisDiff= 0, MaxMillisDiff= 1
18:06:54.610 → MillisDiff= 1, MaxMillisDiff= 1
18:06:55.613 → MillisDiff= 24, MaxMillisDiff= 24
18:06:56.616 → MillisDiff= 2, MaxMillisDiff= 24
18:06:57.619 → MillisDiff= 0, MaxMillisDiff= 24
…
According to that knowledge I changed to report to show only the cycles longer than 1:
if (MillisDiff > 1) Serial.printf(“MillisDiff= %i, MaxMillisDiff= %i\n”, MillisDiff, MaxMillisDiff);
18:25:27.725 → Getting WiFi…
18:25:27.872 → Got WiFi!
18:25:32.442 → MillisDiff= 4593, MaxMillisDiff= 4593
18:26:28.482 → MillisDiff= 21, MaxMillisDiff= 21
18:27:28.585 → MillisDiff= 39, MaxMillisDiff= 39
18:27:29.541 → MillisDiff= 2, MaxMillisDiff= 39
18:28:28.638 → MillisDiff= 22, MaxMillisDiff= 39
18:28:29.642 → MillisDiff= 2, MaxMillisDiff= 39
18:29:28.687 → MillisDiff= 18, MaxMillisDiff= 39
18:30:28.741 → MillisDiff= 20, MaxMillisDiff= 39
18:30:29.745 → MillisDiff= 2, MaxMillisDiff= 39
18:31:28.794 → MillisDiff= 27, MaxMillisDiff= 39
That is acceptable, I will see tomorrow where the MaxMillisDiff reached…
Could you let the sketch run on an ESP with your credentials and within the own LAN of the server, so we could see if the freezes are due Internet propagation or from server responses?
Regards.
P.S. after ~ one hour run:
19:37:32.378 -> MillisDiff= 22, MaxMillisDiff= 60
19:37:33.382 -> MillisDiff= 2, MaxMillisDiff= 60
19:38:32.440 -> MillisDiff= 22, MaxMillisDiff= 60
19:38:33.444 -> MillisDiff= 2, MaxMillisDiff= 60
19:38:38.461 -> MillisDiff= 2, MaxMillisDiff= 60
19:39:32.486 -> MillisDiff= 11, MaxMillisDiff= 60
19:39:34.238 -> MillisDiff= 743, MaxMillisDiff= 743
19:40:33.295 -> MillisDiff= 16, MaxMillisDiff= 743
19:40:34.298 -> MillisDiff= 2, MaxMillisDiff= 743
19:41:27.321 -> MillisDiff= 2, MaxMillisDiff= 743
19:41:33.342 -> MillisDiff= 19, MaxMillisDiff= 743
Remarkable is that very frequently after a delay, the second after is slightly delayed as well.
IMHO everything up to 100mS is OK, but ahead of that, the handle should abort the transaction.