我正在尝试使用 IFTTT 和 WebHook 将 JSON 格式的状态消息发送到 Google 工作表。
IFTTT 配方在将所有 3 个单元格的值发布到 Google 工作表(
String和char变量)时工作正常。JSON 消息不太长(尝试使用非常短的消息)。
JSON 是使用
ArduinoJSON库创建的,并按预期作为 MQTT 消息发布。将
String变量(保存 JSON 消息)转换为char,也没有发送。
我猜它必须是JSON使用 IFTT + Webhooks发送格式。
我对吗?我怎样才能克服这个问题?
编辑 1
说明:makeIFTTTRequest获取一个字符串作为参数(已检查 - 并且工作正常)以将其发送给 IFTTT。
create_wakeStatus 以 JSON 格式生成该字符串(也已检查 - 并作为 MQTT 发送)
功能1:发送到IFTTT
template <typename T1, typename T2, typename T3>
void makeIFTTTRequest(T1 val1, T2 val2, T3 val3)
{
Serial.print("Connecting to ");
Serial.print(server);
WiFiClient client;
int retries = 5;
while (!!!client.connect(server, 80) && (retries-- > 0))
{
Serial.print(".");
}
Serial.println();
if (!!!client.connected())
{
Serial.println("Failed to connect...");
}
Serial.print("Request resource: ");
Serial.println(resource);
String jsonObject = String("{\"value1\":\"") + val1 + "\",\"value2\":\"" + val2 + "\",\"value3\":\"" + val3 + "\"}";
client.println(String("POST ") + resource + " HTTP/1.1");
client.println(String("Host: ") + server);
client.println("Connection: close\r\nContent-Type: application/json");
client.print("Content-Length: ");
client.println(jsonObject.length());
client.println();
client.println(jsonObject);
int timeout = 5 * 10; // 5 seconds
while (!!!client.available() && (timeout-- > 0))
{
delay(100);
}
if (!!!client.available())
{
Serial.println("No response...");
}
while (client.available())
{
Serial.write(client.read());
}
Serial.println("\nclosing connection");
client.stop();
}
功能二:
String create_wakeStatus()
{
StaticJsonDocument<300> doc;
// Constansts
doc["deviceName"] = go2sleep.WakeStatus.name;
doc["bootCount"] = go2sleep.WakeStatus.bootCount;
doc["forcedAwake"] = go2sleep.WakeStatus.awake_duration;
// Per wake cycle
doc["sleepDuration"] = go2sleep.sleepduration;
doc["Wake"] = go2sleep.WakeStatus.wake_clock;
doc["SleepStart"] = go2sleep.WakeStatus.startsleep_clock;
doc["nextWake"] = go2sleep.WakeStatus.nextwake_clock;
doc["RTCdrift"] = go2sleep.WakeStatus.drift_err;
doc["WakeErr"] = go2sleep.WakeStatus.wake_err;
String output;
serializeJson(doc, output);
return output;
}
**编辑 2 **
功能3:
void postWake()
{
char a[250];
String output = create_wakeStatus();
output.toCharArray(a, output.length() + 1);
// makeIFTTTRequest(output,"A","B"); once tried as String and once as char ... both failed
// makeIFTTTRequest(a,"blabla","blabla");
iot.pub_ext(a, true);
}