Je me suis largement inspiré sur le gros du code. La plus part du temps les numéros de téléphone sont en dur.
Je souhaiterai pouvoir envoyer les paramètres via Mqtt , avec des variables
A la place de on_message tu peux utiliser on_json_message
Ensuite tu passe tes 2 valeurs en JSON dans le payload MQTT.
Et tu peux y accéder avec la variable ‹ x › qui contiendra les champs de ton paylaod.
Par exemple:
Oui c’est trop simple
le `x[« recipient »]’ ne peut pas être utilisé directement dans le YAML, ça doit être dans un Lambda.
Mais sinon je crois que c’est ça. J’avais utilisé du MQTT dans un ancien module, mais je n’ai plus l’exemple.
Ca colle en tous cas avec la doc (si tu utilises le lambda)
je suis impressionné, presque du premier coup merci pour ton éclairage, je galère à écumer le forum et là bingo
puis , je comprends de la doc, qu’il est nécessaire de vérifier que la clef existe, autrement l’ESP crash
Cela donne
on_json_message:
- topic: SIM800L/sensor/sms_message
then:
- logger.log: "incoming MQTT : Send SMS"
- sim800l.send_sms:
# test présence de la clef "destinaitaire"
recipient: !lambda |-
const char *destinataire = "+33xxxxx";
if (x.containsKey("destinataire"))
destinataire = x["destinataire"];
return destinataire;
# test présence de la clef "message"
message: !lambda |-
const char *message = "None";
if (x.containsKey("message"))
message = x["message"];
return message;
Autant
{}
Fait une erreur, mais l’ESP semble survivre
[10:11:42][E][json:063]: Could not allocate memory for JSON document! Requested 0 bytes, free heap: 113792