Envoyer et recevoir des SMS en MQTT sur base ESP32 avec ESPhome

Bonjour,

J’ai créé une passerelle SMS (Envoyer & recevoir) + appel vocal (sans audio) à partir de ESPhome sur une base ESP2 de Lilygo TTGO sim800l (budget 15€/20€)
Cela permet avec une simple carte sim à 2€ de pouvoir faire communiquer un Jeedom distant (j’ai vu plusieurs fois le sujet)

J’ai vu un post sur lequel on peut recevoir les messages en MQTT. Je n’y arrive pas ?
Quelqu’un peut il m’aider?

Merci

1 « J'aime »

Bonsoir,
Une idée en passant, il suffit de prendre la valeur de la commande info associée au topic dont tu veux envoyer le contenu non ?

Merci @PanoLyon ,

L’Esp32 doit envoyer les infos?
Ici je n’ai rien, il doit falloir aller chercher les informations ?
Ou peut être collecter, mais Jmqtt ne trouve rien?

1 « J'aime »

En fouillant sur le site esphome, j’ai trouvé une option pour forcer à publier en mqtt

https://esphome.io/components/mqtt.html#mqtt-component-base-configuration

Je vais essayer dajouter ça dans le fichier de config

Example configuration entry

mqtt:
broker: 10.0.0.2
username: livingroom
password: !secret mqtt_password

1 « J'aime »

En effet mes excuses je pensais que tu publiais depuis l’ESP en question ?
Si ton esp est pas connecter sur le brocker il ne communique avec aucun de ses abonnés.

Désolé je ne conais pas ESPHome, j’utilise l’IDE arduino pour programmer mes ESP.
Mais en MQTT ça fonctionne très bien et c’est très stable.

EspEasy c’est facile, mais je viens de commencer à jouer avec Esphome, et là on franchit un cran:
-Les équipements supportés sont impressionnants (carte sim 800l dans l’exemple)
-Mise a jour OTA des Esp en live sans fil

En gros configuration du wifi, puis tout est fait à distance :cowboy_hat_face:

J’ai testé en ajoutant, en effet les données arrivent en MQTT (il semble mettre Api en # pour éviter le redémarrage toutes les 15mn)

mqtt:
topic_prefix: SIM800L
discovery: false
broker: 192.168.1.145
port: 1883
username: jeedom
password: xxxxx
discovery_prefix: ESPHome

Par contre je n’arrive pas à envoyer des actions en MQTT

Bonjour,

Je progresse a petits pas, j’arrive en MQTT

1/Jeedom recoit un SMS
-le numero de l’appelant
-le texte du SMS

2/Jeedom envoie un SMS

  • TEXT & numéro en dur
    Maintenant, il faut que j’arrive à passer en paramètre un numéro et message

3/ récupérer les infos de connection
-RSSI
-connexion réseau

Config JMQTT

1 « J'aime »

Voici le premier code qui permet de recevoir et envoyer des SMS

Dans ESPHOME (je vous laisse regarde comme l’installer)

Remplacer par votre SSID & mot de passe
ssid: !secret wifi_ssid
password: !secret wifi_password

et mettre vos infos pour le broker MQTT
username: xxxxx
password: xxxxx

esphome:
  name: esphome-web-7ba600

esp32:
  board: esp-wrover-kit
  framework:
    type: arduino

mqtt:
  topic_prefix: SIM800L
  discovery: false
  broker: 192.168.1.145
  port: 1883
  username: jeedom
  password: xxxxx
  discovery_prefix: homeassistant
  #on_message:
  #  topic: SIM800L/light/internal_led/state
  #  qos: 0
  #  then:
  #    - logger.log: "incoming MQTT"
  #    - output.turn_on : Internal_LED


  on_message:
    - topic: SIM800L/light/internal_led
      payload: 'ON'
      then:
        - logger.log: "incoming MQTT : ON"
        - output.turn_on : Internal_LED
    - topic: SIM800L/light/internal_led
      payload: 'OFF'
      then:
        - logger.log: "incoming MQTT : OFF"
        - output.turn_off : Internal_LED

  on_json_message:
    - topic: SIM800L/sensor/sms_message
      then:
        - logger.log: "MQTT message => Send Message"
        - sim800l.send_sms:
            #recipient: !lambda 'return x["destinataire"];'
            # test présence de la clef "destinaitaire"
            recipient: !lambda |-
              const char *destinataire = "+33xxxxx";
              if (x.containsKey("destinataire"))
                destinataire = x["destinataire"];
              return destinataire;
              
            #message: !lambda 'return x["message"];'
            # test présence de la clef "message"
            message: !lambda |-
              const char *message = "None";
              if (x.containsKey("message"))
                message = x["message"];
              return message;
            
# Enable logging
logger:
  #level: VERBOSE
  baud_rate: 0 # disable uart logger on esp 8266 
  
ota:


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-7Ba600"
    password: "iqozLsSjuW45"

captive_portal:
uart:
  baud_rate: 9600
  tx_pin: 27
  rx_pin: 26

#sim800l:
#  on_sms_received:
#    - logger.log:
#        format: "Received '%s' from %s"
#        args: [ 'message.c_str()', 'sender.c_str()' ]

sim800l:
  on_sms_received:
    - lambda: |-
        id(esp_sim800_sms_expediteur).publish_state(sender);
        id(esp_sim800_sms_message).publish_state(message);
    - logger.log:
        format: "Received '%s' from %s"
        args: [ 'message.c_str()', 'sender.c_str()' ]


text_sensor:
  - platform: template
    id: esp_sim800_sms_expediteur
    name: "Sms Expediteur"
  - platform: template
    id: esp_sim800_sms_message
    name: "Sms Message"

sensor:
  - platform: sim800l
    rssi:
      name: "Sim800L RSSI"

binary_sensor:
  - platform: sim800l
    registered:
      name: "Sim800L Registered"
# statut
#  - platform: status
#    id: esp_sim800_statut
#    name: "Statut"      

output:
  - platform: gpio
    pin: 13
    id: "Internal_LED"
  
light:
  - platform: binary
    output: "Internal_LED"
    name: "Internal_LED"

switch:
  - platform: gpio
    id: "key_pin"
    pin: 4
    restore_mode: ALWAYS_OFF
  - platform: gpio
    id: "reset_pin"
    pin: 5
    restore_mode: ALWAYS_ON
  - platform: gpio
    id: "power_pin"
    pin: 23
    restore_mode: ALWAYS_ON
  # Bouton de redémarrage
  - platform: restart
    id: esp_sim800_restart
    name: "Redémarrage"

Dans Jeedom, se mettre en apprentissage les infos sont créées automatiquement et manuellement créer l’action dans le MQTT pour envoyer des SMS

1 « J'aime »

Bonjour,

super solution, pour pouvoir piloter Jeedom quand on n’a pas de connexion internet (connexion HS).
En checkant sur internet, ca marcherait même avec n’importe quel ESP8266 ou ESP32 + sim800l.

sim800l semble être un module 2G, donc bientôt exit les sim Free à 2€.

@Jeandhom
Le SMS n’utilise pas la 2G, d’autre part c’est annoncé depuis longtemps, pour ma part la connection TomTom de mon Renault Capteur utilise le même réseau

@Djelau
Oui,une simple sim 800l fait le job, mais elle est difficile à stabiliser (ajout de condensateur), l’avantage du module lilygo c’est qu’il gère bien les appels de courants.

Ta réponse m’étonne car mon modem gsm 2G est en roaming sur le réseau Orange. Pourquoi alors n’est-il pas connecté sur le réseau Free?
Le SMS utilise quel protocole?

@Jeandhom,

J’ai cherché sur internet et j’ai pas trouvé de réponse à partager.

Ce dont je suis sûre, c’est pour se connecter sur le réseau 2G avec une sim800l il faut configurer le réseau. Dans le cas d’un SMS, il n’y a pas de config, cela doit venir directement de la carte sim et le réseau est automatiquement reconnu.
D’autre part, il est possible d’avoir un téléphone avec SMS (sans 2G)…c’est plus d’actualité,mais ça existait.
Par contre le MMS utilise le data

Sur nantes le data en 2G fonctionne avec ma Sim800l sur réseau Orange et SFR. J’indique le réseau dans le code, c’est possible qu’un modem intelligent puisse utiliser un autre réseau en roaming

Merci pour tes recherches, mais je pense toujours que les SMS ne passeront plus sur un modem GSM ne faisant que 2G avec un abonnement Free lorsque l’itinérance avec Orange sera finie sauf si Free déploie son propre réseau 2G.

Cet article va dans ton sense

https://www.igen.fr/telecoms/2022/02/la-3g-sarrete-aux-etats-unis-mais-perdure-toujours-en-france-128351

En alternative, il suffit d’utiliser un autre module type 7600 en 4g, ça laisse de la marge

1 « J'aime »