Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Question] Server-Side RPC: Receiving Attributes doesn't work #107

Closed
callmereno opened this issue Jan 3, 2023 · 85 comments
Closed

[Question] Server-Side RPC: Receiving Attributes doesn't work #107

callmereno opened this issue Jan 3, 2023 · 85 comments

Comments

@callmereno
Copy link

  • Generic
  • Rule Engine(?)

Description
Hey guys,

i'm currently working on a server-side rpc application. I basically want to turn on an analog LED via TB.
The later works fine (see picture), but when I also want to mirror the analog led on my dashboard, like in this tutorial. Therefore I created a server-side attribute called 'ledStatus' and linked an led indicator to its changes. To send the status i use this TB-function for example:

client.sendAttributeBool("ledStatus", ledStatus);

The problem is that TB doesn't seemt to receive the change of the ledStatus. Am I missing something? Do i maybe have to make a rule chain to process information coming from the device?

I hope my problem is kind of understandable. Suggestions are always appreciated :)

Greetings
Reno

grafik

Here is the current code. I use the Arduino IDE for coding:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ThingsBoard.h>

// AP-DE
#define home "XXXXX"
#define homepw "XXXXXXXX"

// Auswahl des TB-Access Points:
#define TB_TOKEN "XXXXXX" 
#define TB_SERVER "demo.thingsboard.io"
//#define TB_PORT 1883

// Initialization:
WiFiClient wifiClient;           
ThingsBoard client(wifiClient);  

// Select AP:
const char* ssid = home;      
const char* password = homepw;

// Other Variables:
const int led = D2;
bool ledStatus = false;
bool previousState = false;

int status = WL_IDLE_STATUS;

void setup() {

  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600);               
  InitWiFi();                             
  client.connect(TB_SERVER, demo_TOKEN);  // Definition des MQTT-Server
}

///////////////////// RPC-SETTINGS /////////////////////

RPC_Response processSwitchChange(const RPC_Data& data) {
  Serial.println("Received 'processSwitchChange'-method: ");
  char params[10];
  serializeJson(data, params);
  String _params = params;

  if (_params == "true") {
    Serial.println("SWITCH: ON");
    ledStatus = true;
    return RPC_Response("processSwitchChange", "true");

  } else if (_params == "false") {
    Serial.println("SWITCH: OFF");
    ledStatus = false;
    return RPC_Response("processSwitchChange", "false");
  }
}

const size_t callbacks_size = 1;
RPC_Callback callbacks[callbacks_size] = {
  { "processSwitchChange", processSwitchChange }
};

bool subscribed = false;  //RPC-Subscribe Status

///////////////////////////////////////// //Serial.printf(previousState != ledStatus ? "true" : "false");

void loop() {

  // Maintain connection
  if (!client.connected()) {
    reconnect();
  }

  checkRPC_Subscription();

  // Sends 
  if (previousState != ledStatus) {
    Serial.println();
    Serial.println("[SWITCH STATE CHANGED]");

    if (ledStatus == true) {
      digitalWrite(led, HIGH);
      Serial.println("LED: ON");
      client.sendAttributeBool("ledStatus", true);
    } else {
      digitalWrite(led, LOW);
      Serial.println("LED: OFF");
      client.sendAttributeBool("ledStatus", false);
    }

    previousState = ledStatus;
  }

  client.loop();
}

/////////////////////////////// OTHER FUNCTIONS ////////////////////////////////////

void InitWiFi() {
  Serial.print("Connecting to Access Point...");
  WiFi.begin(ssid, password);  // Eingabe der Zugangsdaten

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);  // "." bis Verbindung hergestellt ist
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected! IP address: ");
  Serial.println(WiFi.localIP());
}

void reconnect() {
  while (!client.connected()) {

    status = WiFi.status();
    if (status != WL_CONNECTED) {
      InitWiFi();
    }

    // Reconnect
    Serial.print("Connecting to ThingsBoard Device ...");
    if (client.connect("ESP8266 Device", TB_TOKEN, NULL)) {
      Serial.println("[DONE]");
    } else {
      Serial.print("[FAILED] Retrying in 5 seconds]");
      delay(5000);
    }
  }
}


void checkRPC_Subscription() {
  if (!subscribed) {
    Serial.println("Subscribing for RPC...");

    if (!client.RPC_Subscribe(callbacks, callbacks_size)) {
      Serial.println("Failed to subscribe for RPC");
      return;
    }

    Serial.println("Subscribe done");
    subscribed = true;
  }
}

Environment

  • OS: Win10,
  • ThingsBoard: TB Demo
  • Browser: Firefox
@MathewHDYT
Copy link
Contributor

See #91 for a longer description on the issue you probably have.

The short version is that to receive RPC messages the PayloadSize you are allowed to receive, has to be increased. If that is not done the PubSubClient simply discards the received message.

Therefore replace ThingsBoard client(wifiClient); with ThingsBoardSized<256> client(wifiClient);

@callmereno
Copy link
Author

First of all thanks for the quick response @MathewHDYT !

I tried this out, but it sadly didn't make a difference, since i still dont receive client attributes :(
I will try to send the attributes as json using the sendAttributeJSON()-function and see if i get results.

Other question: Does it make sense to include the in the sendAttribute...l()-function in the RPC-Response method? Like this for example (<-- is the indicator for the added lines):

RPC_Response processSwitchChange(const RPC_Data& data) {
  Serial.println("Received 'processSwitchChange'-method: ");
  char params[10];
  serializeJson(data, params);
  String _params = params;

  if (_params == "true") {
    Serial.println("SWITCH: ON");
    ledStatus = true;
    client.sendAttributeBool("ledStatus", true); <--
    return RPC_Response("processSwitchChange", "true");

  } else if (_params == "false") {
    Serial.println("SWITCH: OFF");
    ledStatus = false;
    client.sendAttributeBool("ledStatus", false); <--
    return RPC_Response("processSwitchChange", "false");
  }
}

const size_t callbacks_size = 1;
RPC_Callback callbacks[callbacks_size] = {
  { "processSwitchChange", processSwitchChange }
};

bool subscribed = false;  //RPC-Subscribe Status

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 6, 2023

I think I might know a possible issue, in the comment above you mentioned server side attributes, those can not be read or written to be the client, for the shared attributes they are read only.

So what you are sending with the sendAttributeBool method is a client side attribute, you would need to set the widget to use that attribute instead of the server side one.

image

And sending the attribute directly in the RPC callback method should work, at least it worked on my device.

@callmereno
Copy link
Author

That i know :) The tab is empthy though:

grafik

@MathewHDYT
Copy link
Contributor

Good to know might It be possible to switch to the newest version 0.8.0 and try it again.

@callmereno
Copy link
Author

This could help. Im using version 0.6 becasue i had issues with libraries in 0.7.1. I will keep you postd

@callmereno
Copy link
Author

So this is the error i get when i use 0.7.1 :

In file included from c:\users\renaud kenfack\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\assert.h:10,
                 from c:\users\renaud kenfack\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\sys\reent.h:503,
                 from c:\users\renaud kenfack\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\stdlib.h:18,
                 from c:\users\renaud kenfack\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\cstdlib:75,
                 from c:\users\renaud kenfack\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\stdlib.h:36,
                 from C:\Users\Renaud Kenfack\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/Arduino.h:27,
                 from C:\Users\Renaud Kenfack\AppData\Local\Temp\arduino-sketch-638D704AB4402ABD609A76C7C8A71D5B\sketch\Code_Sensor+RPC.ino.cpp:1:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:53:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
   53 | constexpr char ATTRIBUTE_TOPIC[] = PSTR("v1/devices/me/attributes");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:54:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
   54 | constexpr char TELEMETRY_TOPIC[] = PSTR("v1/devices/me/telemetry");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:57:40: error: statement-expressions are not allowed outside functions nor in template-argument lists
   57 | constexpr char RPC_SUBSCRIBE_TOPIC[] = PSTR("v1/devices/me/rpc/request/+");
      |                                        ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:58:30: error: statement-expressions are not allowed outside functions nor in template-argument lists
   58 | constexpr char RPC_TOPIC[] = PSTR("v1/devices/me/rpc");
      |                              ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:61:44: error: statement-expressions are not allowed outside functions nor in template-argument lists
   61 | constexpr char FIRMWARE_RESPONSE_TOPIC[] = PSTR("v2/fw/response");
      |                                            ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:64:44: error: statement-expressions are not allowed outside functions nor in template-argument lists
   64 | constexpr char ATTRIBUTE_REQUEST_TOPIC[] = PSTR("v1/devices/me/attributes/request/%u");
      |                                            ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:65:55: error: statement-expressions are not allowed outside functions nor in template-argument lists
   65 | constexpr char ATTRIBUTE_RESPONSE_SUBSCRIBE_TOPIC[] = PSTR("v1/devices/me/attributes/response/+");
      |                                                       ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:66:45: error: statement-expressions are not allowed outside functions nor in template-argument lists
   66 | constexpr char ATTRIBUTE_RESPONSE_TOPIC[] = PSTR("v1/devices/me/attributes/response");
      |                                             ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:69:40: error: statement-expressions are not allowed outside functions nor in template-argument lists
   69 | constexpr char PROV_RESPONSE_TOPIC[] = PSTR("/provision/response");
      |                                        ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:72:38: error: statement-expressions are not allowed outside functions nor in template-argument lists
   72 | constexpr char PROV_ACCESS_TOKEN[] = PSTR("provision");
      |                                      ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:73:38: error: statement-expressions are not allowed outside functions nor in template-argument lists
   73 | constexpr char DEFAULT_CLIENT_ID[] = PSTR("TbDev");
      |                                      ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:76:32: error: statement-expressions are not allowed outside functions nor in template-argument lists
   76 | constexpr char SHARED_KEYS[] = PSTR("sharedKeys");
      |                                ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:77:31: error: statement-expressions are not allowed outside functions nor in template-argument lists
   77 | constexpr char SHARED_KEY[] = PSTR("shared");
      |                               ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:80:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
   80 | constexpr char RPC_METHOD_KEY[] = PSTR("method");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:81:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
   81 | constexpr char RPC_PARAMS_KEY[] = PSTR("params");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:82:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
   82 | constexpr char RPC_REQUEST_KEY[] = PSTR("request");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:83:37: error: statement-expressions are not allowed outside functions nor in template-argument lists
   83 | constexpr char RPC_RESPONSE_KEY[] = PSTR("response");
      |                                     ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:86:40: error: statement-expressions are not allowed outside functions nor in template-argument lists
   86 | constexpr char INVALID_BUFFER_SIZE[] = PSTR("PayloadSize (%u) to small for the given payloads size (%u)");
      |                                        ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:87:37: error: statement-expressions are not allowed outside functions nor in template-argument lists
   87 | constexpr char MAX_RPC_EXCEEDED[] = PSTR("Too many rpc subscriptions, increase MaxFieldsAmt or unsubscribe");
      |                                     ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:88:51: error: statement-expressions are not allowed outside functions nor in template-argument lists
   88 | constexpr char MAX_SHARED_ATT_UPDATE_EXCEEDED[] = PSTR("Too many shared attribute update callback subscriptions, increase MaxFieldsAmt or unsubscribe");
      |                                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:89:52: error: statement-expressions are not allowed outside functions nor in template-argument lists
   89 | constexpr char MAX_SHARED_ATT_REQUEST_EXCEEDED[] = PSTR("Too many shared attribute request callback subscriptions, increase MaxFieldsAmt");
      |                                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:90:34: error: statement-expressions are not allowed outside functions nor in template-argument lists
   90 | constexpr char NUMBER_PRINTF[] = PSTR("%u");
      |                                  ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:91:24: error: statement-expressions are not allowed outside functions nor in template-argument lists
   91 | constexpr char COMMA = PSTR(',');
      |                        ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:92:39: error: statement-expressions are not allowed outside functions nor in template-argument lists
   92 | constexpr char NO_KEYS_TO_REQUEST[] = PSTR("No keys to request were given");
      |                                       ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:93:32: error: statement-expressions are not allowed outside functions nor in template-argument lists
   93 | constexpr char REQUEST_ATT[] = PSTR("Requesting shared attributes transformed from (%s) into json (%s)");
      |                                ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:94:40: error: statement-expressions are not allowed outside functions nor in template-argument lists
   94 | constexpr char UNABLE_TO_SERIALIZE[] = PSTR("Unable to serialize data");
      |                                        ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:95:47: error: statement-expressions are not allowed outside functions nor in template-argument lists
   95 | constexpr char UNABLE_TO_DE_SERIALIZE_RPC[] = PSTR("Unable to de-serialize RPC");
      |                                               ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:96:55: error: statement-expressions are not allowed outside functions nor in template-argument lists
   96 | constexpr char UNABLE_TO_DE_SERIALIZE_ATT_REQUEST[] = PSTR("Unable to de-serialize shared attribute request");
      |                                                       ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:97:54: error: statement-expressions are not allowed outside functions nor in template-argument lists
   97 | constexpr char UNABLE_TO_DE_SERIALIZE_ATT_UPDATE[] = PSTR("Unable to de-serialize shared attribute update");
      |                                                      ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:98:45: error: statement-expressions are not allowed outside functions nor in template-argument lists
   98 | constexpr char RECEIVED_RPC_LOG_MESSAGE[] = PSTR("Received RPC:");
      |                                             ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:99:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
   99 | constexpr char RPC_METHOD_NULL[] = PSTR("RPC method is NULL");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:100:32: error: statement-expressions are not allowed outside functions nor in template-argument lists
  100 | constexpr char RPC_CB_NULL[] = PSTR("RPC callback or subscribed rpc method name is NULL");
      |                                ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:101:41: error: statement-expressions are not allowed outside functions nor in template-argument lists
  101 | constexpr char NO_RPC_PARAMS_PASSED[] = PSTR("No parameters passed with RPC, passing null JSON");
      |                                         ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:102:32: error: statement-expressions are not allowed outside functions nor in template-argument lists
  102 | constexpr char CALLING_RPC[] = PSTR("Calling RPC:");
      |                                ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:103:40: error: statement-expressions are not allowed outside functions nor in template-argument lists
  103 | constexpr char RECEIVED_ATT_UPDATE[] = PSTR("Received shared attribute update");
      |                                        ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:104:41: error: statement-expressions are not allowed outside functions nor in template-argument lists
  104 | constexpr char NOT_FOUND_ATT_UPDATE[] = PSTR("Shared attribute update key not found");
      |                                         ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:105:30: error: statement-expressions are not allowed outside functions nor in template-argument lists
  105 | constexpr char ATT_CB_ID[] = PSTR("Shared attribute update callback id: (%u)");
      |                              ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:106:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
  106 | constexpr char ATT_CB_IS_NULL[] = PSTR("Shared attribute update callback is NULL");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:107:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
  107 | constexpr char ATT_CB_NO_KEYS[] = PSTR("No keys subscribed. Calling subscribed callback for any updated attributes (assumed to be subscribed to every possible key)");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:108:32: error: statement-expressions are not allowed outside functions nor in template-argument lists
  108 | constexpr char ATT_IS_NULL[] = PSTR("Subscribed shared attribute update key is NULL");
      |                                ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:109:33: error: statement-expressions are not allowed outside functions nor in template-argument lists
  109 | constexpr char ATT_IN_ARRAY[] = PSTR("Shared attribute update key: (%s) is subscribed");
      |                                 ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:110:34: error: statement-expressions are not allowed outside functions nor in template-argument lists
  110 | constexpr char ATT_NO_CHANGE[] = PSTR("No keys that we subscribed too were changed, skipping callback");
      |                                  ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:111:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
  111 | constexpr char CALLING_ATT_CB[] = PSTR("Calling subscribed callback for updated shared attribute (%s)");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:112:33: error: statement-expressions are not allowed outside functions nor in template-argument lists
  112 | constexpr char RECEIVED_ATT[] = PSTR("Received shared attribute request");
      |                                 ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:113:38: error: statement-expressions are not allowed outside functions nor in template-argument lists
  113 | constexpr char ATT_KEY_NOT_FOUND[] = PSTR("Shared attribute key not found");
      |                                      ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:114:43: error: statement-expressions are not allowed outside functions nor in template-argument lists
  114 | constexpr char ATT_REQUEST_CB_IS_NULL[] = PSTR("Shared attribute request callback is NULL");
      |                                           ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:115:43: error: statement-expressions are not allowed outside functions nor in template-argument lists
  115 | constexpr char CALLING_REQUEST_ATT_CB[] = PSTR("Calling subscribed callback for response id (%u)");
      |                                           ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:116:41: error: statement-expressions are not allowed outside functions nor in template-argument lists
  116 | constexpr char TOO_MANY_JSON_FIELDS[] = PSTR("Too many JSON fields passed (%u), increase MaxFieldsAmt (%u) accordingly");
      |                                         ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:117:34: error: statement-expressions are not allowed outside functions nor in template-argument lists
  117 | constexpr char CB_ON_MESSAGE[] = PSTR("Callback on_message from topic: (%s)");
      |                                  ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:118:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
  118 | constexpr char CONNECT_FAILED[] = PSTR("Connecting to server failed");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:122:32: error: statement-expressions are not allowed outside functions nor in template-argument lists
  122 | constexpr char CLAIM_TOPIC[] = PSTR("v1/devices/me/claim");
      |                                ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:125:39: error: statement-expressions are not allowed outside functions nor in template-argument lists
  125 | constexpr char PROV_REQUEST_TOPIC[] = PSTR("/provision/request");
      |                                       ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:128:31: error: statement-expressions are not allowed outside functions nor in template-argument lists
  128 | constexpr char SECRET_KEY[] = PSTR("secretKey");
      |                               ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:129:33: error: statement-expressions are not allowed outside functions nor in template-argument lists
  129 | constexpr char DURATION_KEY[] = PSTR("durationMs");
      |                                 ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:130:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
  130 | constexpr char DEVICE_NAME_KEY[] = PSTR("deviceName");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:131:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
  131 | constexpr char PROV_DEVICE_KEY[] = PSTR("provisionDeviceKey");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:132:43: error: statement-expressions are not allowed outside functions nor in template-argument lists
  132 | constexpr char PROV_DEVICE_SECRET_KEY[] = PSTR("provisionDeviceSecret");
      |                                           ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:135:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
  135 | constexpr char PROV_STATUS_KEY[] = PSTR("status");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:136:39: error: statement-expressions are not allowed outside functions nor in template-argument lists
  136 | constexpr char PROV_CRED_TYPE_KEY[] = PSTR("credentialsType");
      |                                       ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:137:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
  137 | constexpr char STATUS_SUCCESS[] = PSTR("SUCCESS");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:138:41: error: statement-expressions are not allowed outside functions nor in template-argument lists
  138 | constexpr char PROV_CRED_TYPE_VALUE[] = PSTR("X509_CERTIFICATE");
      |                                         ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:141:33: error: statement-expressions are not allowed outside functions nor in template-argument lists
  141 | constexpr char PROV_REQUEST[] = PSTR("Provision request:");
      |                                 ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:142:57: error: statement-expressions are not allowed outside functions nor in template-argument lists
  142 | constexpr char UNABLE_TO_DE_SERIALIZE_PROV_RESPONSE[] = PSTR("Unable to de-serialize provision response");
      |                                                         ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:143:34: error: statement-expressions are not allowed outside functions nor in template-argument lists
  143 | constexpr char PROV_RESPONSE[] = PSTR("Process provisioning response");
      |                                  ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:144:43: error: statement-expressions are not allowed outside functions nor in template-argument lists
  144 | constexpr char RECEIVED_PROV_RESPONSE[] = PSTR("Received provision response");
      |                                           ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:145:39: error: statement-expressions are not allowed outside functions nor in template-argument lists
  145 | constexpr char X509_NOT_SUPPORTED[] = PSTR("Provision response contains X509_CERTIFICATE credentials, this is not supported yet");
      |                                       ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:149:54: error: statement-expressions are not allowed outside functions nor in template-argument lists
  149 | constexpr char FIRMWARE_RESPONSE_SUBSCRIBE_TOPIC[] = PSTR("v2/fw/response/#");
      |                                                      ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:150:43: error: statement-expressions are not allowed outside functions nor in template-argument lists
  150 | constexpr char FIRMWARE_REQUEST_TOPIC[] = PSTR("v2/fw/request/0/chunk/%u");
      |                                           ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:153:38: error: statement-expressions are not allowed outside functions nor in template-argument lists
  153 | constexpr char CURR_FW_TITLE_KEY[] = PSTR("current_fw_title");
      |                                      ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:154:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
  154 | constexpr char CURR_FW_VER_KEY[] = PSTR("current_fw_version");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:155:38: error: statement-expressions are not allowed outside functions nor in template-argument lists
  155 | constexpr char CURR_FW_STATE_KEY[] = PSTR("current_fw_state");
      |                                      ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:156:31: error: statement-expressions are not allowed outside functions nor in template-argument lists
  156 | constexpr char FW_VER_KEY[] = PSTR("fw_version");
      |                               ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:157:33: error: statement-expressions are not allowed outside functions nor in template-argument lists
  157 | constexpr char FW_TITLE_KEY[] = PSTR("fw_title");
      |                                 ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:158:32: error: statement-expressions are not allowed outside functions nor in template-argument lists
  158 | constexpr char FW_CHKS_KEY[] = PSTR("fw_checksum");
      |                                ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:159:37: error: statement-expressions are not allowed outside functions nor in template-argument lists
  159 | constexpr char FW_CHKS_ALGO_KEY[] = PSTR("fw_checksum_algorithm");
      |                                     ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:160:32: error: statement-expressions are not allowed outside functions nor in template-argument lists
  160 | constexpr char FW_SIZE_KEY[] = PSTR("fw_size");
      |                                ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:161:38: error: statement-expressions are not allowed outside functions nor in template-argument lists
  161 | constexpr char FW_CHECKSUM_VALUE[] = PSTR("MD5");
      |                                      ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:162:38: error: statement-expressions are not allowed outside functions nor in template-argument lists
  162 | constexpr char FW_STATE_CHECKING[] = PSTR("CHECKING FIRMWARE");
      |                                      ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:163:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
  163 | constexpr char FW_STATE_NO_FW[] = PSTR("NO FIRMWARE FOUND");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:164:40: error: statement-expressions are not allowed outside functions nor in template-argument lists
  164 | constexpr char FW_STATE_UP_TO_DATE[] = PSTR("UP TO DATE");
      |                                        ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:165:42: error: statement-expressions are not allowed outside functions nor in template-argument lists
  165 | constexpr char FW_STATE_INVALID_CHKS[] = PSTR("CHKS IS NOT MD5");
      |                                          ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:166:41: error: statement-expressions are not allowed outside functions nor in template-argument lists
  166 | constexpr char FW_STATE_DOWNLOADING[] = PSTR("DOWNLOADING");
      |                                         ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:167:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
  167 | constexpr char FW_STATE_FAILED[] = PSTR("FAILED");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:168:42: error: statement-expressions are not allowed outside functions nor in template-argument lists
  168 | constexpr char FW_STATE_UPDATE_ERROR[] = PSTR("UPDATE ERROR");
      |                                          ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:169:40: error: statement-expressions are not allowed outside functions nor in template-argument lists
  169 | constexpr char FW_STATE_CHKS_ERROR[] = PSTR("CHECKSUM ERROR");
      |                                        ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:172:26: error: statement-expressions are not allowed outside functions nor in template-argument lists
  172 | constexpr char NO_FW[] = PSTR("No new firmware assigned on the given device");
      |                          ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:173:29: error: statement-expressions are not allowed outside functions nor in template-argument lists
  173 | constexpr char EMPTY_FW[] = PSTR("Given firmware was NULL");
      |                             ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:174:34: error: statement-expressions are not allowed outside functions nor in template-argument lists
  174 | constexpr char FW_UP_TO_DATE[] = PSTR("Firmware is already up to date");
      |                                  ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:175:34: error: statement-expressions are not allowed outside functions nor in template-argument lists
  175 | constexpr char FW_NOT_FOR_US[] = PSTR("Firmware is not for us (title is different)");
      |                                  ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:176:47: error: statement-expressions are not allowed outside functions nor in template-argument lists
  176 | constexpr char FW_CHKS_ALGO_NOT_SUPPORTED[] = PSTR("Checksum algorithm is not supported, please use MD5 only");
      |                                               ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:177:31: error: statement-expressions are not allowed outside functions nor in template-argument lists
  177 | constexpr char PAGE_BREAK[] = PSTR("=================================");
      |                               ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:178:27: error: statement-expressions are not allowed outside functions nor in template-argument lists
  178 | constexpr char NEW_FW[] = PSTR("A new Firmware is available:");
      |                           ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:179:29: error: statement-expressions are not allowed outside functions nor in template-argument lists
  179 | constexpr char FROM_TOO[] = PSTR("(%s) => (%s)");
      |                             ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:180:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
  180 | constexpr char DOWNLOADING_FW[] = PSTR("Attempting to download over MQTT...");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:181:35: error: statement-expressions are not allowed outside functions nor in template-argument lists
  181 | constexpr char NOT_ENOUGH_RAM[] = PSTR("Not enough RAM");
      |                                   ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:182:24: error: statement-expressions are not allowed outside functions nor in template-argument lists
  182 | constexpr char SLASH = PSTR('/');
      |                        ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:183:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
  183 | constexpr char UNABLE_TO_WRITE[] = PSTR("Unable to write firmware");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:184:39: error: statement-expressions are not allowed outside functions nor in template-argument lists
  184 | constexpr char UNABLE_TO_DOWNLOAD[] = PSTR("Unable to download firmware");
      |                                       ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:185:29: error: statement-expressions are not allowed outside functions nor in template-argument lists
  185 | constexpr char FW_CHUNK[] = PSTR("Receive chunk (%i), with size (%u) bytes");
      |                             ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:186:39: error: statement-expressions are not allowed outside functions nor in template-argument lists
  186 | constexpr char ERROR_UPDATE_BEGIN[] = PSTR("Error during Update.begin");
      |                                       ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:187:31: error: statement-expressions are not allowed outside functions nor in template-argument lists
  187 | constexpr char MD5_ACTUAL[] = PSTR("MD5 actual checksum: (%s)");
      |                               ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:188:33: error: statement-expressions are not allowed outside functions nor in template-argument lists
  188 | constexpr char MD5_EXPECTED[] = PSTR("MD5 expected checksum: (%s)");
      |                                 ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:189:36: error: statement-expressions are not allowed outside functions nor in template-argument lists
  189 | constexpr char CHKS_VER_FAILED[] = PSTR("Checksum verification failed");
      |                                    ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:190:37: error: statement-expressions are not allowed outside functions nor in template-argument lists
  190 | constexpr char CHKS_VER_SUCCESS[] = PSTR("Checksum is the same as expected");
      |                                     ^~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:191:38: error: statement-expressions are not allowed outside functions nor in template-argument lists
  191 | constexpr char FW_UPDATE_SUCCESS[] = PSTR("Update success");
      |                                      ^~~~
In file included from C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:3:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h: In member function 'void ThingsBoardSized<PayloadSize, MaxFieldsAmt, Logger>::process_provisioning_response(char*, uint8_t*, uint32_t)':
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:1377:82: error: call of overloaded 'strncmp_P(const char [1], ArduinoJson6193_F1::enable_if<true, ArduinoJson6193_F1::MemberProxy<ArduinoJson6193_F1::ObjectRef, const char*> >::type, size_t)' is ambiguous
 1377 |       if (strncmp_P(STATUS_SUCCESS, data[PROV_STATUS_KEY], strlen(STATUS_SUCCESS)) == 0 && strncmp_P(PROV_CRED_TYPE_VALUE, data[PROV_CRED_TYPE_KEY], strlen(PROV_CRED_TYPE_VALUE)) == 0) {
      |                                                                                  ^
In file included from c:\users\renaud kenfack\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\string.h:175,
                 from C:\Users\Renaud Kenfack\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/Arduino.h:33,
                 from C:\Users\Renaud Kenfack\AppData\Local\Temp\arduino-sketch-638D704AB4402ABD609A76C7C8A71D5B\sketch\Code_Sensor+RPC.ino.cpp:1:
c:\users\renaud kenfack\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\sys\string.h:38:6: note: candidate: 'int strncmp_P(const char*, const char*, size_t)'
   38 | int  strncmp_P(const char *, const char *, size_t);
      |      ^~~~~~~~~
In file included from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Strings/Adapters/FlashString.hpp:9,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Strings/StringAdapters.hpp:24,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Memory/MemoryPool.hpp:10,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantData.hpp:7,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/SlotFunctions.hpp:8,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayIterator.hpp:7,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayRef.hpp:8,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:24,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:16,
                 from C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:3:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Polyfills/pgmspace.hpp:32:12: note: candidate: 'int strncmp_P(const char*, ArduinoJson6193_F1::pgm_p, size_t)'
   32 | inline int strncmp_P(const char* a, ARDUINOJSON_NAMESPACE::pgm_p b, size_t n) {
      |            ^~~~~~~~~
In file included from C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:3:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:1377:178: error: call of overloaded 'strncmp_P(const char [1], ArduinoJson6193_F1::enable_if<true, ArduinoJson6193_F1::MemberProxy<ArduinoJson6193_F1::ObjectRef, const char*> >::type, size_t)' is ambiguous
 1377 |       if (strncmp_P(STATUS_SUCCESS, data[PROV_STATUS_KEY], strlen(STATUS_SUCCESS)) == 0 && strncmp_P(PROV_CRED_TYPE_VALUE, data[PROV_CRED_TYPE_KEY], strlen(PROV_CRED_TYPE_VALUE)) == 0) {
      |                                                                                                                                                                                  ^
In file included from c:\users\renaud kenfack\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\string.h:175,
                 from C:\Users\Renaud Kenfack\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/Arduino.h:33,
                 from C:\Users\Renaud Kenfack\AppData\Local\Temp\arduino-sketch-638D704AB4402ABD609A76C7C8A71D5B\sketch\Code_Sensor+RPC.ino.cpp:1:
c:\users\renaud kenfack\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\sys\string.h:38:6: note: candidate: 'int strncmp_P(const char*, const char*, size_t)'
   38 | int  strncmp_P(const char *, const char *, size_t);
      |      ^~~~~~~~~
In file included from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Strings/Adapters/FlashString.hpp:9,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Strings/StringAdapters.hpp:24,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Memory/MemoryPool.hpp:10,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantData.hpp:7,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/SlotFunctions.hpp:8,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayIterator.hpp:7,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ArrayRef.hpp:8,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:24,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
                 from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:16,
                 from C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:3:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Polyfills/pgmspace.hpp:32:12: note: candidate: 'int strncmp_P(const char*, ArduinoJson6193_F1::pgm_p, size_t)'
   32 | inline int strncmp_P(const char* a, ARDUINOJSON_NAMESPACE::pgm_p b, size_t n) {
      |            ^~~~~~~~~
C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino: In function 'void connectRPC()':
C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:256:56: error: no matching function for call to 'ThingsBoardSized<256>::RPC_Subscribe(RPC_Callback [1], const size_t&)'
  256 |     if (!client.RPC_Subscribe(callbacks, callbacks_size)) {
      |                                                        ^
In file included from C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:3:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:673:23: note: candidate: 'template<class InputIterator> const bool ThingsBoardSized<PayloadSize, MaxFieldsAmt, Logger>::RPC_Subscribe(const InputIterator&, const InputIterator&) [with InputIterator = InputIterator; unsigned int PayloadSize = 256; unsigned int MaxFieldsAmt = 8; Logger = ThingsBoardDefaultLogger]'
  673 |     inline const bool RPC_Subscribe(const InputIterator& first_itr, const InputIterator& last_itr) {
      |                       ^~~~~~~~~~~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:673:23: note:   template argument deduction/substitution failed:
C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:256:56: note:   deduced conflicting types for parameter 'const InputIterator' ('RPC_Callback [1]' and 'size_t' {aka 'unsigned int'})
  256 |     if (!client.RPC_Subscribe(callbacks, callbacks_size)) {
      |                                                        ^
In file included from C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:3:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:689:23: note: candidate: 'const bool ThingsBoardSized<PayloadSize, MaxFieldsAmt, Logger>::RPC_Subscribe(const RPC_Callback&) [with unsigned int PayloadSize = 256; unsigned int MaxFieldsAmt = 8; Logger = ThingsBoardDefaultLogger]'
  689 |     inline const bool RPC_Subscribe(const RPC_Callback& callback) {
      |                       ^~~~~~~~~~~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:689:23: note:   candidate expects 1 argument, 2 provided

exit status 1

Compilation error: no matching function for call to 'ThingsBoardSized<256>::RPC_Subscribe(RPC_Callback [1], const size_t&)'

And this is the error i get using 0.8 :

In file included from c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:12,
                 from C:\Users\Renaud Kenfack\Documents\Arduino\Code_RPC\Code_RPC.ino:4:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/HashGenerator.h:11:10: fatal error: mbedtls/md.h: No such file or directory
   11 | #include <mbedtls/md.h>
      |          ^~~~~~~~~~~~~~
compilation terminated.

exit status 1

Compilation error: exit status 1

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 6, 2023

I knew 0.7.1 had thoose issues that's why I attempted to fix them, it's interesting tough that it has problems finding the mbedtls/md.h library inv ersion 0.8.0

Might I know what device you are using is it an Arduino Uno perhaps so neither an ESP32 or ESP8266?

@callmereno
Copy link
Author

callmereno commented Jan 6, 2023

Im using a NodeMCU with a ESP8266(MOD)-Chip

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 6, 2023

Could you try to include this library https://github.com/Seeed-Studio/Seeed_Arduino_mbedtls. It should make it possible to use the functionality of mbedtls/md.h on the ESP8266, that is natively supported on ESP32. Sorry for the inconvenience.

@callmereno
Copy link
Author

callmereno commented Jan 6, 2023

I doesnt find the header file, when i include this line: #include <md.h>
I downloaded the asset and added it in the same libraries folder in which the Thingsboard library:

Do i have to specify the path of the header`?

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 6, 2023

I think it should be fine to simply just download the library the same way PubSubClient has been downloaded and the include should stay #include <mbedtls/md.h> as far as I know.

@callmereno
Copy link
Author

grafik

grafik

Same error for some reason..

@MathewHDYT
Copy link
Contributor

What happens if you don't include the library in your main file and then recompile?

@callmereno
Copy link
Author

callmereno commented Jan 6, 2023

You mean like this #include <library> ?

@MathewHDYT
Copy link
Contributor

Yeah just remove that line and recompile.

@callmereno
Copy link
Author

callmereno commented Jan 6, 2023

Ah i misread your sentence. This is what happens when i delete the include:

grafik

@MathewHDYT
Copy link
Contributor

Sorry for asking but did you add the library the same way you add the PubSubClient and ArduinoJson library.

@callmereno
Copy link
Author

grafik

All good :) Yes i did

@MathewHDYT
Copy link
Contributor

What happens if you download the library over Sketch > Include Library > Manage Libraries and then search for Seeed_Arduino_mbedtls

@callmereno
Copy link
Author

callmereno commented Jan 6, 2023

grafik

The newest version isnt available in the Arduino IDE. Same goes for ThingsBoard:

grafik

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 6, 2023

Can you replace the include statement with this one instead. In the HashGenerator.h file #include <Seeed_mbedtls.h>.

That's the include they had in their example file.

@callmereno
Copy link
Author

grafik

grafik

It sadly didnt change the outcome.

@MathewHDYT
Copy link
Contributor

Can you remove the old include #include <mbedtls/md.h> because it seems that's the one that is causing problems.

@callmereno
Copy link
Author

callmereno commented Jan 6, 2023

Finally a new error haha:

C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino: In function 'void connectRPC()':
C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:254:56: error: no matching function for call to 'ThingsBoardSized<256>::RPC_Subscribe(RPC_Callback [1], const size_t&)'
  254 |     if (!client.RPC_Subscribe(callbacks, callbacks_size)) {
      |                                                        ^
In file included from C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:3:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:637:23: note: candidate: 'template<class InputIterator> const bool ThingsBoardSized<PayloadSize, MaxFieldsAmt, Logger>::RPC_Subscribe(const InputIterator&, const InputIterator&) [with InputIterator = InputIterator; unsigned int PayloadSize = 256; unsigned int MaxFieldsAmt = 8; Logger = ThingsBoardDefaultLogger]'
  637 |     inline const bool RPC_Subscribe(const InputIterator& first_itr, const InputIterator& last_itr) {
      |                       ^~~~~~~~~~~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:637:23: note:   template argument deduction/substitution failed:
C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:254:56: note:   deduced conflicting types for parameter 'const InputIterator' ('RPC_Callback [1]' and 'size_t' {aka 'unsigned int'})
  254 |     if (!client.RPC_Subscribe(callbacks, callbacks_size)) {
      |                                                        ^
In file included from C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:3:
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:653:23: note: candidate: 'const bool ThingsBoardSized<PayloadSize, MaxFieldsAmt, Logger>::RPC_Subscribe(const RPC_Callback&) [with unsigned int PayloadSize = 256; unsigned int MaxFieldsAmt = 8; Logger = ThingsBoardDefaultLogger]'
  653 |     inline const bool RPC_Subscribe(const RPC_Callback& callback) {
      |                       ^~~~~~~~~~~~~
c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:653:23: note:   candidate expects 1 argument, 2 provided

exit status 1

Compilation error: no matching function for call to 'ThingsBoardSized<256>::RPC_Subscribe(RPC_Callback [1], const size_t&)'

Here the connectRPC() function

void connectRPC() {
  if (!subscribed) {
    Serial.println("Subscribing for RPC...");

    if (!client.RPC_Subscribe(callbacks, callbacks_size)) {
      Serial.println("Failed to subscribe for RPC");
      return;
    }

    Serial.println("Subscribe done");
    subscribed = true;
  }
}

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 6, 2023

Okay perfect those errors are just because the API changed a bit. Just have a look in the examples folder in the ThingsBoard Library more exactly the RPC example and adjust it to be similar to that one.

@callmereno
Copy link
Author

callmereno commented Jan 6, 2023

Okay i changed the code to this:

void connectRPC() {
  if (!subscribed) {
    Serial.println("Subscribing for RPC...");

    if (!client.RPC_Subscribe(callbacks.cbegin(), callbacks.cend())) {
      Serial.println("Failed to subscribe for RPC");
      return;
    }

    Serial.println("Subscribe done");
    subscribed = true;
  }
}

This is the error i get now:

C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino: In function 'void connectRPC()':
C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:254:41: error: request for member 'cbegin' in 'callbacks', which is of non-class type 'RPC_Callback [1]'
  254 |     if (!client.RPC_Subscribe(callbacks, callbacks_size)) {
      |                                         ^~~~~~
C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC\Code_Sensor+RPC.ino:254:61: error: request for member 'cend' in 'callbacks', which is of non-class type 'RPC_Callback [1]'
  254 |     if (!client.RPC_Subscribe(callbacks, callbacks_size)) {
      |                                                             ^   

exit status 1

Compilation error: request for member 'cbegin' in 'callbacks', which is of non-class type 'RPC_Callback [1]'

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 6, 2023

Could you also send the code for the callback array itself, because that seems to be the error. I'm assuming it is still a normal c-style array RPC_Callback[], could you make it an std::array or std::vector instead.

@callmereno
Copy link
Author

callmereno commented Jan 6, 2023

Do you mean in my code or the ThingsBoard.h ? In case you mean the later:

grafik

Should i change it to array?

@callmereno
Copy link
Author

callmereno commented Jan 6, 2023

I'm losing it haha. Look at this. The attribute gets sent but i don't know why i doesn't arrive in 'client-attributes':

grafik

I double checked the access token, but it shouldn't be a problem since I receive telemetry data.

@MathewHDYT
Copy link
Contributor

So it does send but it is a telemetry instead of attribute data value?

@callmereno
Copy link
Author

No i was just exclude the mistake of using a wrong device token.

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 6, 2023

This is really really weird the communication with the server is up, sending values does return true. RPC works, Telemetry works as well i think? But attributes do not...

@callmereno
Copy link
Author

Yeah, i'm very confused aswell.

Also just tried to create another device and changed the token in the code. Telemetry arrives but not the client attributes:

grafik

grafik

The the transport configuration in device profile of my device is also on set default, meaning that the topics match:

grafik

@callmereno
Copy link
Author

callmereno commented Jan 7, 2023

Problem solved. I forgot to add the 'Save Attributes'-Node and the 'Post Attributes' in my Root Rule Chain.

@callmereno
Copy link
Author

callmereno commented Jan 7, 2023

Regarding the 0.8.0 issue: I tried to install the ExceptionDecoder as proposed by you. Sadly there seems to be an issue with IDE 2.0.1. (#58). I followed the instructions. But the tool doesn't show up on my UI:

grafik

grafik

Here is the exception i received:

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Exception (3):
epc1=0x4022179e epc2=0x00000000 epc3=0x00000000 excvaddr=0x4026f6ff depc=0x00000000

>>>stack>>>

ctx: cont
sp: 3ffffd60 end: 3fffffc0 offset: 0190
3ffffef0:  00000000 3ffe8ad7 00000000 4020b068  
3fffff00:  514d0400 00045454 3ffe9269 4020e830  
3fffff10:  00000000 4026f6ff 00000000 00000000  
3fffff20:  00000001 00000040 00000000 3fff0934  
3fffff30:  4020ba18 3ffe9268 3fff07f4 3fff0934  
3fffff40:  3fffdad0 00000000 3fff0588 4020b250  
3fffff50:  00000000 00000000 00000001 4020bd68  
3fffff60:  66b2a8c0 00ffffff 01b2a8c0 40205f6e  
3fffff70:  3fffdad0 3fff069c 3fff07f4 4020573c  
3fffff80:  402115c4 66b2a8c0 00000000 3fff0934  
3fffff90:  3fffdad0 00000000 3fff0588 402060f8  
3fffffa0:  feefeffe feefeffe 3fff0920 4020d2e8  
3fffffb0:  feefeffe feefeffe 3ffe86e8 40100f65  
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 7, 2023

Sad to know that it doesn't work with Arduino IDE currently, because that would have made it easier for you alternatively you can use this library EspStackTraceDecoder, it's a little more work but it should work even without the Arduino IDE.

You need to put the .jar script of this respository into a folder, that folder also needs to contain the .elf file (automatically created when building the project, copy it from the build folder, it also needs a .txt with the Stacktrace copied into it and then you should be able to execute the .jar and give the path to the files as command line arguments.

@callmereno
Copy link
Author

Where do I find the build folder?

@MathewHDYT
Copy link
Contributor

I sadly don't really know how the Arduino IDE works, but I guess navigating to the project on the filesystem in the File Explorer and then seeing if there is a build folder there somewhere might work the easiest.

@callmereno
Copy link
Author

I followed this this method and found the .elf-file. Let me try the EspStackTraceDecoder now.

@callmereno
Copy link
Author

callmereno commented Jan 7, 2023

You need to put the .jar script of this respository into a folder, that folder also needs to contain the .elf file (automatically created when building the project, copy it from the build folder, it also needs a .txt with the Stacktrace copied into it and then you should be able to execute the .jar and give the path to the files as command line arguments.

Do you mean like this? :

grafik

And also i dont really understand what they mean by this. :

java -jar EspEception <Path to xtensa-lx106-elf-addr2line> <Elf-File> <Dump of Exception>

grafik

Im running the the java file using Visual Studio Code.

@MathewHDYT
Copy link
Contributor

MathewHDYT commented Jan 7, 2023

<Path to xtensa-lx106-elf-addr2line>: This is another file that you should be able to find at this or somewhere to this location C:\User\<user>\.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-addr2line
It's needed to actually translate the addresses to lines in your code. Simply copy that into the folder as well and then entering the path is a lot easier
<Elf-File>: .elf file
<Dump of Exception>: .txt Exception Dump file

You can simply run the VSCode file via. the command shell, simply open the folder in the command shell where your files are located and then enter the command.

@callmereno
Copy link
Author

callmereno commented Jan 7, 2023

Simply copy that

What do mean by that? You mean the xtensa-lx106-elf-addr2line.exe? This is what the folder looks like on my computer:

grafik

As you can see there is no such .exe. I looked it up on the internet and found this. But it's not an .exe either. Also i found this issue.

<Elf-File>: .elf file
<Dump of Exception>: .txt Exception Dump file

So i replace the placeholders with the name of the files, right (e.g. exception.txt)?

@MathewHDYT
Copy link
Contributor

So i replace the placeholders with the name of the files, right (e.g. exception.txt)?

Yeah exactly because it wants a path you might need to add .\<path>to indicate that the file is in the same directory as the executable.

For the executable I'll have a look later if I can find the file on my machine and how it is called, for now can you try just downloading the xtensa file you found and trying to run that and see if it does anything.

@callmereno
Copy link
Author

callmereno commented Jan 7, 2023

I converted the downloaded file by adding .exe at the end of the file:

grafik

This is what his how my cmd line looks like:

C:\Users\<user>\Desktop\DEBUG\EspStackTraceDecoder-untagged-59a763238a6cedfe0362\src>java -jar EspEception "C:\Users\<user>\Desktop\DEBUG\EspStackTraceDecoder-untagged-59a763238a6cedfe0362\src" code.elf exeception.txt

This is the output:

Error: Unable to access jarfile EspEception

DEBUG.zip

@MathewHDYT
Copy link
Contributor

EspEception Probably needs to be EspStackTraceDecoder instead

@callmereno
Copy link
Author

callmereno commented Jan 7, 2023

Same issue. I upload the files as .zip in my previous message.

@MathewHDYT
Copy link
Contributor

Could you use this command instead just to try if the paths are the issue.

java -jar .\EspStackTraceDecoder.java ".\xtensa-lx 106-elf-addr2line" .\code.elf .\exeception.txt

@callmereno
Copy link
Author

Error: Invalid or corrupt jarfile .\EspStackTraceDecoder.java

@MathewHDYT
Copy link
Contributor

I looked it up the jar file itself doesn't seem to need to be a path

java EspStackTraceDecoder ".\xtensa-lx 106-elf-addr2line" .\code.elf .\exeception.txt

I'll try it on my machine in a while

@callmereno
Copy link
Author

Error: Main class EspStackTraceDecoder could not be found or loaded

I'll try it on my machine in a while

Okay, do that :) Let me know if you need something.

@MathewHDYT
Copy link
Contributor

Okay I found the issue:

  1. The file you need to download is the .jar not the .java that was a mistake on my part sorry, you can download it from the Release page on the GitHub repository
  2. Then change the command too java -jar EspStackTraceDecoder.jar xtensa-lx106-elf-addr2line code.elf exception.txt
  3. I'm also pretty sure the xtensa you got didn't work for me, using the ESP32 xtensa I had in my folder seemed to work tough. It was in this path /home/<user>/.platformio/packages/toolchain-xtensa-esp32/bin/. It seems like they can be used interchangeably not 100% sure about it tough

The output I got was

Exception Cause: 3  [LoadStoreError: Processor internal physical address or data error during load or store]

0x4022179e: strnlen at /workdir/repo/newlib/newlib/libc/string/strnlen.c:38 (discriminator 1)
0x4026f6ff: system_get_sdk_version at ??:?
0x4020b068: PubSubClient::connect(char const*, char const*, char const*, char const*, unsigned char, bool, char const*, bool) at C:\Program Files\Arduino IDE/c:\Users\Renaud Kenfack\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.cpp:196
 (inlined by) PubSubClient::connect(char const*, char const*, char const*, char const*, unsigned char, bool, char const*, bool) at C:\Program Files\Arduino IDE/c:\Users\Renaud Kenfack\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.cpp:181
0x4020e830: uart_write at C:\Program Files\Arduino IDE/C:\Users\Renaud Kenfack\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.0\cores\esp8266/uart.cpp:544
0x4026f6ff: system_get_sdk_version at ??:?
0x4020ba18: HardwareSerial::write(unsigned char const*, unsigned int) at C:\Program Files\Arduino IDE/C:\Users\Renaud Kenfack\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.0\cores\esp8266/HardwareSerial.h:193
0x4020b250: PubSubClient::connect(char const*, char const*, char const*) at C:\Program Files\Arduino IDE/c:\Users\Renaud Kenfack\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.cpp:171
0x4020bd68: Print::println() at C:\Program Files\Arduino IDE/C:\Users\Renaud Kenfack\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.0\cores\esp8266/Print.cpp:182
0x40205f6e: ThingsBoardSized<64u, 8u, ThingsBoardDefaultLogger>::connect_to_host(char const*, char const*, char const*) at C:\Program Files\Arduino IDE/c:\Users\Renaud Kenfack\Documents\Arduino\libraries\ThingsBoard\src/ThingsBoard.h:1018
0x4020573c: InitWiFi() at C:\Program Files\Arduino IDE/C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC_TBv08/Code_Sensor+RPC_TBv08.ino:216
0x402115c4: std::_Function_handler<bool (), settimeofday::{lambda()#1}>::_M_manager(std::_Any_data&, std::_Function_handler<bool (), settimeofday::{lambda()#1}> const&, std::_Manager_operation) at time.cpp:?
0x402060f8: setup at C:\Program Files\Arduino IDE/C:\Users\Renaud Kenfack\Documents\Arduino\Code_Sensor+RPC_TBv08/Code_Sensor+RPC_TBv08.ino:37
0x4020d2e8: loop_wrapper() at C:\Program Files\Arduino IDE/C:\Users\Renaud Kenfack\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.0\cores\esp8266/core_esp8266_main.cpp:198
0x40100f65: cont_wrapper at C:\Program Files\Arduino IDE/C:\Users\Renaud Kenfack\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.0\cores\esp8266/cont.S:81

@callmereno
Copy link
Author

I hope it helps you troubleshooting 0.8.0 :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants