So I tried this... probably something not right....
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <ThingerWifi.h>
#define USERNAME "xxxx"
#define DEVICE_ID "xxxxx"
#define DEVICE_CREDENTIAL "xxxxxx"
#define SSID "hello"
#define SSID_PASSWORD "xxxxxx"
ThingerWifi thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
const char* holder;
const int pin = 7;
void setup() {
Serial.begin(19200);
thing.add_wifi(SSID, SSID_PASSWORD);
// input resource that prints follower info
thing["onoff"] << [](pson& in){
Serial.println((const char*)in["Username"]);
Serial.println((const char*)in["Channelid"]);
//Serial.println((const char*)in["Message"]);
holder = in["Message"];
Serial.println(holder);
if (strcmp(holder, "!on") == 1){
Serial.println("yes");
digitalWrite(pin, HIGH);
}
if (strcmp(holder, "!off")==1){
Serial.println("no");
digitalWrite(pin, LOW);
}
};
}
void loop() {
thing.handle();
}
The const char* in front of the holder is not preventing it from being a new value and it successfully prints the new value every time it is sent. (and compiles obviously).
In fact if I try to delete it:
In file included from C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/thinger/thinger.h:27:0,
from C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/ThingerClient.h:27,
from C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/ThingerWifi.h:27,
from C:\Users\Aufek\Documents\Arduino\Outlet\Outlet.ino:3:
C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/thinger/pson.h: In instantiation of 'T protoson::pson::get_value() [with T = char*]':
C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/thinger/pson.h:454:33: required from 'protoson::pson::operator T() [with T = char*]'
C:\Users\Aufek\Documents\Arduino\Outlet\Outlet.ino:29:12: required from here
C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/thinger/pson.h:465:28: error: invalid conversion from 'int' to 'char*' [-fpermissive]
return 1;
^
C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/thinger/pson.h:467:37: error: cannot convert 'float' to 'char*' in return
return (float)value_;
^
C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/thinger/pson.h:469:38: error: cannot convert 'double' to 'char*' in return
return (double)value_;
^
C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/thinger/pson.h:471:45: error: invalid conversion from 'uint64_t {aka long long unsigned int}' to 'char*' [-fpermissive]
return pb_decode_varint();
^
C:\Users\Aufek\Documents\Arduino\libraries\thinger.io\src/thinger/pson.h:473:46: error: invalid conversion from 'uint64_t {aka long long unsigned int}' to 'char*' [-fpermissive]
return -pb_decode_varint();
^
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).
But using what you mentioned I was able to search a bit more and I came up with this which works:
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <ThingerWifi.h>
#define USERNAME "xxxxx"
#define DEVICE_ID "xxxxxx"
#define DEVICE_CREDENTIAL "xxxxxxx"
#define SSID "xxxxxx"
#define SSID_PASSWORD "xxxxxxxx"
ThingerWifi thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
const char* holder;
const int pin = 7;
void setup() {
Serial.begin(19200);
thing.add_wifi(SSID, SSID_PASSWORD);
// input resource that prints follower info
thing["onoff"] << [](pson& in){
Serial.println((const char*)in["Username"]);
Serial.println((const char*)in["Channelid"]);
//Serial.println((const char*)in["Message"]);
holder = in["Message"];
Serial.println(holder);
if (std::string(holder) == "!on"){
Serial.println("yes");
digitalWrite(pin, HIGH);
}
if (std::string(holder) == "!off"){
Serial.println("no");
digitalWrite(pin, LOW);
}
};
}
void loop() {
thing.handle();
}
Thanks again for your help.