Page 2 sur 2

Re: MQTT ESP8266

Posté : dim. 24 oct. 2021 17:05
par piper
Ben là je sèche
Ta chaîne correspond à une syntaxe json correcte et pourtant le parseur de json dit le contraire à l'exécution.

Ta fonction callback une fois mise au clair (à ma sauce) donne ceci

Code : Tout sélectionner

void callback(char* topic, byte* payload, unsigned int length) 
{
	// Message reçu du Broker.
	String string;
	// On vérifie qu'il vient bien de Domoticz.
	int valeur = strcmp(topic, topicIn);
	if (valeur == 0) 
	{
		Serial.print("Message arrivé [");
		Serial.print(topic);
		Serial.print("] ");
		for (int i = 0; i < length; i++) 
		{
			string+=((char)payload);
		}
		// Affiche le message entrant - display incoming message
		Serial.println(string);

		// Parse l'objet JSON nommé "root"
		StaticJsonBuffer<512> jsonBuffer;
		JsonObject &root = jsonBuffer.parseObject(string);
		if (root.success()) 
		{
			int idx = root["idx"];
			int nvalue = root["nvalue"];

			if (idx == idxDevice && nvalue == 0) 
			{
				digitalWrite(MOCP, HIGH);
				digitalWrite(MOCN, LOW);
				Serial.print("Device ");
				Serial.print(idx);
				Serial.println(" sur ARRET " );
			} 
			else if (idx == idxDevice && nvalue == 10) 
			{
				digitalWrite(MOCP, LOW);
				digitalWrite(MOCN, HIGH);
				Serial.print("Device " );
				Serial.print(idx);
				Serial.println(" sur HORS GEL " );
			} 
			else if (idx == idxDevice && nvalue == 20) 
			{
				digitalWrite(MOCP, HIGH);
				digitalWrite(MOCN, HIGH);
				Serial.print("Device " );
				Serial.print(idx);
				Serial.println(" sur ECONOMIE " );
			} 
			else if (idx == idxDevice && nvalue == 30 ) 
			{
				digitalWrite(MOCP, LOW);
				digitalWrite(MOCN, LOW);
				Serial.print( "Device " );
				Serial.print(idx);
				Serial.println( " sur CONFORT " );
			}
			else if (idx != idxDevice) 
			{
				Serial.print( "Reçu informations du Device : " );
				Serial.println(idx);
			}
		}
		else 
		{
			Serial.println("Erreur de lecture du JSON !");
		}
	}

}

Re: MQTT ESP8266

Posté : dim. 24 oct. 2021 18:34
par 78fred
Suite à ta remarque sur les { } pour lequel je me suis fais la même observation, j'ai réalisé cette mise en page pour une meilleur lecture.

Je te remercie pour ta relecture.
J'ai réalisé la compilation et il m'affiche une erreur la ligne
string+=((char)payload);

et c'est normal puisque tu as oublié la variable , à savoir:
string+=((char)payload);

Le résultat est toujours le même.

Je te remercie tout de même pour ton temps passé.