JSMN phase 2

This commit is contained in:
Stephan Hadinger 2020-09-23 08:45:14 +02:00
parent 7605ec388c
commit 2fc7626025
3 changed files with 29 additions and 30 deletions

View File

@ -104,18 +104,15 @@ void CmndRfSend(void)
int repeat = 10; int repeat = 10;
int pulse = 350; int pulse = 350;
char dataBufUc[XdrvMailbox.data_len + 1]; JsonParserObject root = JsonParser(XdrvMailbox.data).getRootObject();
UpperCase(dataBufUc, XdrvMailbox.data); if (root) {
StaticJsonBuffer<150> jsonBuf; // ArduinoJSON entry used to calculate jsonBuf: JSON_OBJECT_SIZE(5) + 40 = 134
JsonObject &root = jsonBuf.parseObject(dataBufUc);
if (root.success()) {
// RFsend {"data":0x501014,"bits":24,"protocol":1,"repeat":10,"pulse":350} // RFsend {"data":0x501014,"bits":24,"protocol":1,"repeat":10,"pulse":350}
char parm_uc[10]; char parm_uc[10];
data = strtoul(root[UpperCase_P(parm_uc, PSTR(D_JSON_RF_DATA))], nullptr, 0); // Allow decimal (5246996) and hexadecimal (0x501014) input data = root.getUInt(PSTR(D_JSON_RF_DATA), data);
bits = root[UpperCase_P(parm_uc, PSTR(D_JSON_RF_BITS))]; bits = root.getUInt(PSTR(D_JSON_RF_BITS), bits);
protocol = root[UpperCase_P(parm_uc, PSTR(D_JSON_RF_PROTOCOL))]; protocol = root.getInt(PSTR(D_JSON_RF_PROTOCOL), protocol);
repeat = root[UpperCase_P(parm_uc, PSTR(D_JSON_RF_REPEAT))]; repeat = root.getInt(PSTR(D_JSON_RF_REPEAT), repeat);
pulse = root[UpperCase_P(parm_uc, PSTR(D_JSON_RF_PULSE))]; pulse = root.getInt(PSTR(D_JSON_RF_PULSE), pulse);
} else { } else {
// RFsend data, bits, protocol, repeat, pulse // RFsend data, bits, protocol, repeat, pulse
char *p; char *p;

View File

@ -1328,17 +1328,13 @@ void ThermostatDebug(uint8_t ctr_output)
#endif // DEBUG_THERMOSTAT #endif // DEBUG_THERMOSTAT
void ThermostatGetLocalSensor(uint8_t ctr_output) { void ThermostatGetLocalSensor(uint8_t ctr_output) {
DynamicJsonBuffer jsonBuffer; JsonParserObject root = JsonParser(mqtt_data).getRootObject();
JsonObject& root = jsonBuffer.parseObject((const char*)mqtt_data); if (root) {
if (root.success()) { JsonParserToken value_token = root[PSTR(THERMOSTAT_SENSOR_NAME)].getObject()[PSTR("Temperature")];
const char* value_c = root[THERMOSTAT_SENSOR_NAME]["Temperature"]; if (value_token.isNum()) {
if (value_c != NULL && strlen(value_c) > 0 && (isdigit(value_c[0]) || (value_c[0] == '-' && isdigit(value_c[1])) ) ) { int16_t value = value_token.getFloat() * 10;
int16_t value;
if (Thermostat[ctr_output].status.temp_format == TEMP_FAHRENHEIT) { if (Thermostat[ctr_output].status.temp_format == TEMP_FAHRENHEIT) {
value = (int16_t)ThermostatFahrenheitToCelsius((int32_t)(CharToFloat(value_c) * 10), TEMP_CONV_ABSOLUTE); value = ThermostatFahrenheitToCelsius(value, TEMP_CONV_ABSOLUTE);
}
else {
value = (int16_t)(CharToFloat(value_c) * 10);
} }
if ( (value >= -1000) if ( (value >= -1000)
&& (value <= 1000) && (value <= 1000)

View File

@ -76,7 +76,7 @@ bool TelegramInit(void) {
if (!telegramClient) { if (!telegramClient) {
telegramClient = new BearSSL::WiFiClientSecure_light(tls_rx_size, tls_tx_size); telegramClient = new BearSSL::WiFiClientSecure_light(tls_rx_size, tls_tx_size);
#ifdef USE_MQTT_TLS_CA_CERT #ifdef USE_MQTT_TLS_CA_CERT
telegramClient->setTrustAnchor(&GoDaddyCAG2_TA); telegramClient->setTrustAnchor(&GoDaddyCAG2_TA, 1);
#else #else
telegramClient->setPubKeyFingerprint(Telegram_Fingerprint, Telegram_Fingerprint, false); // check server fingerprint telegramClient->setPubKeyFingerprint(Telegram_Fingerprint, Telegram_Fingerprint, false); // check server fingerprint
#endif #endif
@ -225,15 +225,21 @@ void TelegramAnalizeMessage(void) {
for (uint32_t i = 1; i < Telegram.message[0][0].toInt() +1; i++) { for (uint32_t i = 1; i < Telegram.message[0][0].toInt() +1; i++) {
Telegram.message[i][5] = ""; Telegram.message[i][5] = "";
DynamicJsonBuffer jsonBuffer; String buf = Telegram.message[i][0]; // we need to keep a copy of the buffer
JsonObject &root = jsonBuffer.parseObject(Telegram.message[i][0]); JsonParserObject root = JsonParser((char*)buf.c_str()).getRootObject();
if (root.success()) { if (root) {
Telegram.message[i][0] = root["update_id"].as<String>(); Telegram.message[i][0] = root["update_id"].getStr();
Telegram.message[i][1] = root["message"]["from"]["id"].as<String>(); Telegram.message[i][1] = root["message"].getObject()["from"].getObject()["id"].getStr();
Telegram.message[i][2] = root["message"]["from"]["first_name"].as<String>(); Telegram.message[i][2] = root["message"].getObject()["from"].getObject()["first_name"].getStr();
Telegram.message[i][3] = root["message"]["from"]["last_name"].as<String>(); Telegram.message[i][3] = root["message"].getObject()["from"].getObject()["last_name"].getStr();
Telegram.message[i][4] = root["message"]["chat"]["id"].as<String>(); Telegram.message[i][4] = root["message"].getObject()["chat"].getObject()["id"].getStr();
Telegram.message[i][5] = root["message"]["text"].as<String>(); Telegram.message[i][5] = root["message"].getObject()["text"].getStr();
// Telegram.message[i][0] = root["update_id"].as<String>();
// Telegram.message[i][1] = root["message"]["from"]["id"].as<String>();
// Telegram.message[i][2] = root["message"]["from"]["first_name"].as<String>();
// Telegram.message[i][3] = root["message"]["from"]["last_name"].as<String>();
// Telegram.message[i][4] = root["message"]["chat"]["id"].as<String>();
// Telegram.message[i][5] = root["message"]["text"].as<String>();
} }
int id = Telegram.message[Telegram.message[0][0].toInt()][0].toInt() +1; int id = Telegram.message[Telegram.message[0][0].toInt()][0].toInt() +1;