Bonjour
Actuellement j'utilise le protocole MQTT pour allumer une pompe d'extérieur et l'éteindre en envoyant avec node red une information "PompeON" ou "PompeOFF".
Je souhaiterai pouvoir envoyer en plus une valeur pour définir le temps qu'elle doit resté allumé.
Je pensais faire comme ceci par exemple envoyé "PompeON10000" extraire le mot PompeON pour lancer l'allumage et utilisé 10000 pour définir un delay .
Je suis juste arrivé à extraire PompeON mais pas le temps, car j'ai voulu extraire les données grace à un tableau mais sans résultat.
J'ai essayé d'envoyer avec node red les données sous cette forme Payload: {pompe, 10000};
pour pouvoir créer un tableau à la réception mais je n'es pas réussi
void callback(char* topic, byte* payload, unsigned int length) {
int i = 0;
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
}
for (i = 0; i<length; i++) {
message_buff[i] = payload[i];
}
message_buff[i] = '\0';
String msgString = String(message_buff);
Serial.println("Payload: " + msgString);
int test[] = msgString; // impossible d'y convertir en tableau ou je mit prend mal.
}
Pourriez vous m'aider cordialement ou m'orienter sur une solution.
Voila le code basic mqtt que j'utilise et que je veus améliorer.
//Ethernet mqtt////////////////////////////////////////////////////////////////////
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xEF };
IPAddress ip(192, 168, 0, 31);
#define mqtt_server "192.168.0.52"
#define mqtt_user "1234" //s'il a été configuré sur Mosquitto
#define mqtt_password "1234" //idem
EthernetClient ethClient;
PubSubClient client(ethClient);
char message_buff[100];
//Fin Ethernet mqtt////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(9600);
//Ethernet mqtt////////////////////////////////////////////////////////////////////
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
Ethernet.begin(mac, ip);
//Fin Ethernet mqtt////////////////////////////////////////////////////////////////
}
void loop() {
//Ethernet mqtt////////////////////////////////////////////////////////////////////
if (!client.connected()) {
reconnect();
}
client.loop();
//Fin Ethernet mqtt////////////////////////////////////////////////////////////////
}
//Ethernet mqtt////////////////////////////////////////////////////////////////////
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("arduino2", mqtt_user, mqtt_password)) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("Infos2/arduino2","hello");
// ... and resubscribe
client.subscribe("home/piscinerequetes");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(2000);
}
}
}
//Fin Ethernet mqtt////////////////////////////////////////////////////////////////
void callback(char* topic, byte* payload, unsigned int length) {
int i = 0;
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
}
for (i = 0; i<length; i++) {
message_buff[i] = payload[i];
}
message_buff[i] = '\0';
String msgString = String(message_buff);
Serial.println();
Serial.println("-----------------------");
Serial.println("Payload: " + msgString);
if (msgString == "PompeON" ) {
String payload = "{";
payload += "\"EtatPompe\":"; payload += "1";
payload += "}";
// Send payload
char attributes1[100];
payload.toCharArray( attributes1, 100 );
client.publish("home/piscinemsg", attributes1);
Serial.println( attributes1 );
delay(500);
}
}