SMS via SIM800 sur Raspberry Pi¶
Vue d'ensemble¶
Le Raspberry Pi 3 est équipé d'un module GSM permettant l'envoi et la réception de SMS pour les alertes domotiques, via le daemon Gammu-SMSD.
Statut : ✅ Opérationnel (migration boot NFS 2026-03-07)
Matériel¶
Raspberry Pi¶
- Modèle : Raspberry Pi 3 Model B
- IP : 192.168.1.26 (DHCP réservé)
- OS : Raspberry Pi OS Bookworm (boot NFS)
Module SIM800¶
- Type : SIM800L ou SIM800C
- Interface : UART (GPIO)
- Alimentation : 3.7-4.2V (attention au 5V)
- Carte SIM : Mini SIM ou adaptateur
Câblage¶
| SIM800 | Raspberry Pi |
|---|---|
| VCC | Alimentation externe 4V |
| GND | GND (Pin 6) |
| TXD | RXD (GPIO15, Pin 10) |
| RXD | TXD (GPIO14, Pin 8) |
Important : Le SIM800 nécessite une alimentation externe de 4V avec courant suffisant (2A). Ne pas alimenter directement depuis les GPIO 5V du Pi.
Configuration¶
Activer le port série¶
sudo raspi-config
# Interface Options → Serial Port
# Login shell over serial: No
# Serial port hardware enabled: Yes
Installation des dépendances¶
Test avec minicom¶
Script Python d'envoi SMS¶
#!/usr/bin/env python3
"""
Envoi de SMS via SIM800
Usage: python3 send_sms.py "+33612345678" "Message"
"""
import serial
import time
import sys
def send_sms(phone_number, message, port='/dev/serial0', baudrate=9600):
"""Envoie un SMS via le module SIM800"""
try:
ser = serial.Serial(port, baudrate, timeout=1)
time.sleep(1)
# Mode texte
ser.write(b'AT+CMGF=1\r')
time.sleep(0.5)
# Numéro destinataire
cmd = f'AT+CMGS="{phone_number}"\r'
ser.write(cmd.encode())
time.sleep(0.5)
# Message + Ctrl+Z
ser.write(message.encode() + b'\x1A')
time.sleep(3)
response = ser.read(100)
ser.close()
return b'OK' in response
except Exception as e:
print(f"Erreur: {e}")
return False
if __name__ == '__main__':
if len(sys.argv) < 3:
print("Usage: send_sms.py <numéro> <message>")
sys.exit(1)
success = send_sms(sys.argv[1], sys.argv[2])
sys.exit(0 if success else 1)
Intégration Home Assistant¶
Configuration via shell_command¶
# configuration.yaml
shell_command:
send_sms: 'ssh pi@<IP_RPI> "python3 /home/pi/scripts/send_sms.py {{ phone }} \"{{ message }}\""'
Automatisation d'alerte¶
automation:
- alias: "Alerte intrusion SMS"
trigger:
- platform: state
entity_id: binary_sensor.intrusion
to: 'on'
action:
- service: shell_command.send_sms
data:
phone: "+33612345678"
message: "ALERTE: Intrusion détectée!"
Commandes AT utiles¶
| Commande | Description |
|---|---|
AT |
Test de connexion |
AT+CSQ |
Qualité du signal (0-31) |
AT+CREG? |
État enregistrement réseau |
AT+CMGF=1 |
Mode texte SMS |
AT+CMGS="..." |
Envoi SMS |
AT+CMGR=1 |
Lire SMS slot 1 |
AT+CMGD=1 |
Supprimer SMS slot 1 |
Dépannage¶
Pas de réponse aux commandes AT¶
- Vérifier le câblage
- Vérifier l'alimentation (LED clignotante)
- Tester différentes vitesses (9600, 115200)
Signal faible¶
- Vérifier l'antenne
- Positionner près d'une fenêtre
- Vérifier la carte SIM (activation, crédit)
SMS non envoyés¶
- Vérifier le code PIN (
AT+CPIN?) - Vérifier l'enregistrement réseau (
AT+CREG?) - Vérifier le format du numéro (+33...)
Statut¶
Statut : ✅ Opérationnel
Configuration Actuelle¶
Matériel en place¶
- Modem : Module GSM avec puce CH340 USB-série
- Interface : USB (ID 1a86:7523)
- Port USB physique : 1-1.3
- Symlink :
/dev/sms - Numéro : 0685397996
Service Gammu-SMSD¶
# /etc/systemd/system/gammu-smsd.service
[Unit]
Description=Gammu SMS Daemon
After=network.target dev-sms.device
Wants=dev-sms.device
StartLimitIntervalSec=300
StartLimitBurst=5
[Service]
Type=simple
ExecStartPre=/bin/sleep 3
ExecStart=/usr/bin/gammu-smsd --config /etc/gammu-smsdrc
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
Configuration Gammu (/etc/gammu-smsdrc)¶
[gammu]
port = /dev/sms
connection = at
synchronizetime = yes
[smsd]
PhoneId = 0685397996
Service = files
RunOnReceive = /var/www/html/sms/receive.sh
RunOnFailure = /var/www/html/sms/error.sh
# Répertoires spool
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/
Scripts¶
Réception SMS (/var/www/html/sms/receive.sh) :
- Envoie webhook vers Home Assistant
- Notification Telegram
Envoi SMS (/var/www/html/sms/send.php) :
- API PHP : http://192.168.1.26/sms/send.php?numero=XXX&texte=YYY
Commandes utiles¶
# Statut service
systemctl status gammu-smsd
# Envoi SMS manuel
gammu-smsd-inject TEXT 0612345678 -text "Test SMS"
# Vérifier le modem
gammu --identify
# Logs
journalctl -u gammu-smsd -f
Intégration Home Assistant¶
Via rest_command ou shell_command :