Potřebuji z řetězce vypreparovat číselnou část a tuto převést na číslo typu integer. Vypreparovat mi to jde, tisk na sériovou linku ukazuje, že je to OK, ale když to pak dám odeslat do NODE-RED, přijde mi 0 (nula). Řekl bych, že špatně převádím typy proměnných. Jak udělám, aby výsledek byla proměnná typu int? Získané číslo pak potřebuji vložit do proměnné pozadTeplKuchyn , která je deklarovaná jako integer a odeslat pomocí MQTT do NODE-RED. Po spuštění jednotky se odešle výchozí hodnota proměnné pozadTeplKuchyn správně. Ale když přijmu řetězec z NODE-RED, kterým chci nastavit novou hodnotu, a níže uvedeným kódem získám z tohoto řetězce požadované číslo, které vložím do proměnné pozadTeplKuchyn , odesílá se 0, místo požadovaného čísla. Kde dělám chybu? Vím, že tam už těch převodů mám hodně, ale zkoušel jsem, co se dá, a nic. Tak sem dávám poslední verzi marného pokusu... Fce callback je správně (není moje ...

Kód: Vybrat vše
void callback(char* topic, byte* message, unsigned int length) {
// výpis na sériovou linku, že byla přijatá zpráva
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
if (String(topic) == "ridiciEsp32/nastavHlidanouTepl") {
Serial.print("Přišlo: ");
Serial.println(messageTemp);
int pozicedvojtecky = messageTemp.indexOf(':');
Serial.print("Pozice : je: ");
Serial.println(pozicedvojtecky);
int poziceZavorky = messageTemp.indexOf('}');
Serial.print("Pozice }: ");
Serial.println(poziceZavorky);
String hodnota = messageTemp.substring(pozicedvojtecky,poziceZavorky);
Serial.print("Výřez 16/18: ");
Serial.println(hodnota);
char buf[6];
hodnota.toCharArray(buf,6);
Serial.print("Nová hlídaná teplota převedená na char: ");
Serial.println(buf);
Serial.print("Nová hlídaná teplota: ");
pozadTeplKuchyn = (int)atoi(buf);
Serial.println(pozadTeplKuchyn);
}
}