MQTT ESP8266

Vous souhaitez piloter votre framboise à partir d'une page web ? Ou mieux encore à partir d'un smartphone ou d'une tablette Android ? Venez donc visiter cette rubrique...

Modérateur : Francois

piper
Raspinaute
Messages : 641
Enregistré le : sam. 5 juin 2021 18:57

Re: MQTT ESP8266

Message par piper » dim. 24 oct. 2021 17:05

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 !");
		}
	}

}
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

78fred
Messages : 8
Enregistré le : sam. 9 oct. 2021 17:31

Re: MQTT ESP8266

Message par 78fred » dim. 24 oct. 2021 18:34

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é.

Répondre

Retourner vers « Des interfaces pour le Raspberry Pi »