Salut,
Aujourd’hui, je vous propose de voir comment envoyer et recevoir des SMS à partir d’un Raspberry Pi.
Une fois fait, il sera aisé de créer des scripts de notification automatique, ou de créer une petite interface web pour envoyer/recevoir des SMS, etc.
Principe
Pour envoyer et recevoir des SMS, le RPi doit pouvoir se connecter au réseau téléphonique d’un opérateur (une connexion au réseau GSM est suffisante). Pour ce faire, on va utiliser un périphérique USB externe que certains appellent un « dongle 3G » ou encore « clef/modem 3G », et dans lequel on insert une carte SIM.
Vous pouvez par exemple acheter une carte SIM associée à un abonnement minimaliste en temps de communication, mais offrant le nombre de SMS mensuels suffisant à vos besoins.
Le matériel
Côté matériel, il nous faut:
- Une clef 3G (ou dongle 3G, ou modem 3G)
- Un hub USB alimenté
- Une carte SIM
La clef 3G
Il faut choisir avec soin la clef 3G que l’on va acheter car toutes ne sont pas compatibles ou disposent d’un pilote stable pour le Raspberry Pi. Après quelques recherches et fouilles intensives sur divers forums, et après avoir éliminé les clef 3G qu’on ne trouve plus à la vente, j’ai opté pour cette clef 3G qui fonctionne parfaitement avec le RPi, la TP-LINK MA180.
On trouve cette clef pour un peu moins de 40€ sur Amazon.
Le hub USB
Le problème avec les clef 3G est qu’elles consomment plus de courant que ce que le RPi n’est capable de fournir nativement sur ses ports USB embarqués. Il faut donc utiliser un hub USB externe possédant sa propre alimentation. La encore, il faut choisir avec le plus grand soin ce genre de hub. J’ai eu pour ma part des déconvenues avec un premier hub USB sans marque, à bas prix, pourtant supposé fournir le courant nécessaire. Le problème était que tout fonctionnait bien jusqu’à ce que la clef 3G se connecte au réseau de l’opérateur, une opération qui semble consommer plus de courant. Résultat: la tension d’alimentation s’écroulait et le RPi rebootait. Après m’être cassé la tête pour identifier que le problème venait en fait de l’alimentation (et pas d’un problème de driver), j’ai finalement opté pour un hub USB de bonne qualité, le Icy-Box IB-AC611 :
Ce hub de construction solide (métal brossé) délivre jusqu’à 3.5A, ce qui couvrira les besoins d’alimentation de potentiels futurs périphériques. Il propose un port d’uplink ne faisant pas de « backpower » contrairement à des hub USB bas de gamme, et disposant d’un port (le jaune) dédié à l’alimentation seule (pas de données) d’un périphérique. Avec ce hub, tout fonctionne parfaitement, vous ne risquez pas de mauvaise surprise 🙂 .
Installation de la clef 3G
Une fois que tout est branché et alimenté, il y a quelques étapes à suivre afin de faire reconnaitre la clef 3G correctement.
En effet, ce genre de clef, disposant d’un stockage de masse intégré, est vue par défaut par le système comme une clef USB de stockage, ce qui ne permet pas d’accéder à ses fonctionnalités de modem GSM/3G. La manière dont un périphérique USB est vu par le système s’appelle le mode USB. De nombreux périphériques proposent plusieurs modes (pensez à votre smartphone qui peut être soit vu comme un périphérique multimédia, soit comme un stockage externe). Après avoir branché la clef 3G TP-LINK MA180, voyons comment elle est vue par le système, grâce à la commande lsusb :
pi@domopi ~ $ lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 05e3:0610 Genesys Logic, Inc. 4-port hub Bus 001 Device 005: ID 0bda:8179 Realtek Semiconductor Corp. Bus 001 Device 006: ID 2357:0200
Le code 2357:0200 indique que la clef 3G TP-LINK (code constructeur: 2357) est vue comme un stockage de masse (product code: 0200).
Sous linux, il existe heureusement un utilitaire permettant de switcher d’un mode USB à l’autre, automatiquement au démarrage du RPi, ou dès que le périphérique est branché. Cet utilitaire s’appelle tout simplement usb-modeswitch.
Installation de usb-modeswitch :
pi@domopi ~ $ sudo apt-get update && sudo apt-get install usb-modeswitch
Il faut ensuite rebooter le RPi (sudo reboot).
Petite parenthèse, si on s’amuse à regarder dans les fichiers de référence des périphériques connus de usb-modeswitch, on trouve bien les lignes suivantes :
######################################################## # TP-Link MA180 # Contributor: complexgeek DefaultVendor= 0x2357 DefaultProduct=0x0200 TargetVendor= 0x2357 TargetProduct= 0x0201
En effet, après l’installation de usb-modeswitch et un reboot, la clef 3G est maintenant vue avec le nouveau product code (0201 au lieu de 0200), ce qui signifie qu’on peut maintenant l’utiliser comme une clef 3G :
pi@domopi ~ $ lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 05e3:0610 Genesys Logic, Inc. 4-port hub Bus 001 Device 005: ID 0bda:8179 Realtek Semiconductor Corp. Bus 001 Device 006: ID 2357:0201
A ce stade, notre clef 3G est correctement reconnue par le système, et de nouveaux périphériques sont détectés et disponibles sur le système :
pi@domopi ~ $ ls /dev/ttyUSB* /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
Installation de Gammu
Gammu est un package comprenant:
- Un utilitaire en ligne de commande prenant en charge la communication et les interactions avec toute une gamme de clef 3G et de téléphones portables
- Un daemon unix pour la réception des SMS
- Une bibliothèque de liaison avec Python pour écrire ses propres scripts dans ce langage
L’installation de Gammu est très simple, comme d’habitude :
pi@domopi ~ $ sudo apt-get update && sudo apt-get install gammu
Il nous reste maintenant à configurer Gammu pour lui indiquer quel périphérique utiliser et spécifier quelques paramètres de connexion. On va utiliser un utilitaire livré avec Gammu qui permet de créer le fichier de configuration .gammurc dans notre répertoire home :
pi@domopi ~ $ gammu-config -c /home/pi/.gammurc
Cette commande lance un utilitaire semi-graphique type « ncurse » , dans lequel on va spécifier tous nos paramètres:
Les seuls paramètres que l’on va spécifier sont :
- port : /dev/ttyUSB2
- connection : at19200
On laisse le reste par défaut on on fait « Save » puis « Ok ».
Pour finir, on va vérifier que Gammu arrive bien à communiquer avec notre clef 3G :
pi@domopi ~ $ gammu identify Device : /dev/ttyUSB2 Manufacturer : TP-LINK INCORPORATED Model : unknown (MA180) Firmware : M6290A-KPRZL-2.4.0240T 1 [Jan 17 2011 10:00:00] IMEI : 123456789901234 SIM IMSI : 123456789012345
Envoyer/Consulter des SMS
Pour commencer, si la carte SIM requiert un PIN code, on doit le fournir pour débloquer la carte (exemple si le PIN code est 1234) :
pi@domopi ~ $ gammu entersecuritycode PIN 1234
Ensuite, l’envoi de SMS se fait avec la commande :
pi@domopi ~ $ echo "Salut, ceci est mon premier sms" | gammu sendsms TEXT 0601020304 If you want break, press Ctrl+C... Sending SMS 1/1....waiting for network answer..OK, message reference=168
La consultation des SMS reçus se fait avec la commande :
pi@domopi ~ $ gammu getallsms Location 0, folder "Inbox", SIM memory, Inbox folder SMS message SMSC number : "+33689004020" Sent : Wed 15 Apr 2015 17:08:32 +0200 Coding : Default GSM alphabet (no compression) Remote number : "+3361234567" Status : Read SMS bien reçu ! 1 SMS parts in 1 SMS sequences
Dans l’idéal, on ne consulterait pas les SMS reçus en allant régulièrement interroger la clef 3G. On utiliserait plutôt le daemon gammu-smsd qui s’occupe de cette tâche et qui stocke les SMS reçus dans une base de données. Personnellement, je n’utilise pas ce daemon et c’est pourquoi je ne m’étalerai pas sur le sujet.
L’utilitaire gammu comprend plusieurs autres commandes et options intéressantes, et je vous encourage à en lire le manuel.
Quelques scripts pour enrober tout ça
Je vous propose quelques scripts qui vont rendre paramétrable l’appel aux différentes actions, mais également s’occuper de faire des vérifications ainsi que gérer les cas d’erreurs.
sendSMS.sh
Ce script apporte les fonctionnalités suivantes :
- Envoi d’un SMS par défaut à un numéro de téléphone par défaut
- Envoi d’un SMS spécifique à un numéro de téléphone spécifique
- Support des SMS multi-lignes
- Gestion des cas d’erreur (clef 3G non vue, PIN code à ré-entrer etc.)
- Journalisation de l’activité
Utilisation :
pi@domopi ~ $ ./sendSMS.sh [<numéro de téléphone> <fichier contenant le SMS à envoyer>]
Le script est le suivant (en anglais, as usual 🙂 ) :
#!/bin/bash # # This scripts sends a text SMS to the specified number. # If no arguments are passed to the script, it will simply send # a probe SMS to a predefined phone number #============================================================== # Define some variables DEVICE="/dev/ttyUSB2" USBID="2357:0201" GAMMUCONF="/home/pi/.gammurc" DEFAULTPHONE="0601020304" DEFAULTMESSAGEFILE="/home/pi/Domotique/SMSServices/defaultsms.txt" LOGFILE="/home/pi/Domotique/SMSServices/sendsms.log" LOGENABLED=false PINCODE="1234" #============================================================== # Check the number of arguments and store them if [[ $# -eq 2 ]]; then PHONE=$1 MESSAGEFILE=$2 LOGENABLED=true elif [[ $# -eq 1 ]]; then PHONE=${DEFAULTPHONE} MESSAGEFILE=$1 LOGENABLED=true elif [[ $# -eq 0 ]]; then PHONE=${DEFAULTPHONE} MESSAGEFILE=${DEFAULTMESSAGEFILE} else echo "Invalid number of arguments. Must be 2 or 0." exit 0 fi #============================================================== # Check the 3G dongle is available if [[ ! -c ${DEVICE} ]]; then echo "Device ${DEVICE} is not available. Might be a driver issue." if [[ $(lsusb | grep ${USBID}) == "" ]]; then echo "The 3G dongle is not recognized on the USB bus" fi exit 0 fi #============================================================== # Function to send the SMS sendSMS() { cat ${MESSAGEFILE} | sudo /usr/bin/gammu -c ${GAMMUCONF} sendsms TEXT ${PHONE} -validity 6HOURS RETVALUE=$? # Log everything if [[ ${RETVALUE} -eq 0 && ${LOGENABLED} = true ]]; then DATE=$(date +"%x-%X") ONELINEMESSAGE=$(cat ${MESSAGEFILE} | tr "\\r\\n" " ") echo "${DATE};${PHONE};${ONELINEMESSAGE}" >> ${LOGFILE} fi return ${RETVALUE} } sendSMS # Check the status code of the gammu command. If it's 121, then it means the 3G dongle # is first waiting for the pin code to be entered if [[ $? -eq 121 ]]; then sudo /usr/bin/gammu entersecuritycode PIN ${PINCODE} # At this stage, the 3G dongle should be ready and joined on the network # Try to send the SMS again if [[ $? -eq 0 ]]; then sendSMS else echo "Could not enable 3G dongle providing the PIN code ${PINCODE}" fi fi
getAllSMS.sh
Ce script apporte les fonctionnalités suivantes :
- Affichage de la boite de réception des SMS
- Gestion des cas d’erreur (clef 3G non vue, PIN code à ré-entrer etc.)
- Journalisation de l’activité
Utilisation :
pi@domopi ~ $ ./getAllSMS.sh
Le script est le suivant :
#!/bin/bash # # This scripts reads the SMS Inbox folder from the 3G dongle # and echoes it on stdout #============================================================== # Define some variables DEVICE="/dev/ttyUSB2" USBID="2357:0201" GAMMUCONF="/home/pi/.gammurc" PINCODE="1234" #============================================================== # Check the 3G dongle is available if [[ ! -c ${DEVICE} ]]; then echo "Device ${DEVICE} is not available. Might be a driver issue." if [[ $(lsusb | grep ${USBID}) == "" ]]; then echo "The 3G dongle is not recognized on the USB bus" fi exit 0 fi #============================================================== # Function to read the SMS Inbox folderS getAllSMS() { sudo /usr/bin/gammu -c ${GAMMUCONF} getallsms return $? } getAllSMS # Check the status code of the gammu command. If it's 121, then it means the 3G dongle # is first waiting for the pin code to be entered if [[ $? -eq 121 ]]; then /usr/bin/gammu entersecuritycode PIN ${PINCODE} # At this stage, the 3G dongle should be ready and joined on the network # Try to read the SMS Inbox again if [[ $? -eq 0 ]]; then getAllSMS else echo "Could not enable 3G dongle providing the PIN code ${PINCODE}" fi fi
deleteAllSMS.sh
Ce script apporte les fonctionnalités suivantes :
- Effacement de la boite de réception des SMS
- Gestion des cas d’erreur (clef 3G non vue, PIN code à ré-entrer etc.)
Utilisation :
pi@domopi ~ $ ./deleteAllSMS.sh
Le script est le suivant :
#!/bin/bash # # This scripts deletes all SMS from the SMS Inbox folder from the 3G dongle #============================================================== # Define some variables DEVICE="/dev/ttyUSB2" USBID="2357:0201" GAMMUCONF="/home/pi/.gammurc" PINCODE="1234" #============================================================== # Check the 3G dongle is available if [[ ! -c ${DEVICE} ]]; then echo "Device ${DEVICE} is not available. Might be a driver issue." if [[ $(lsusb | grep ${USBID}) == "" ]]; then echo "The 3G dongle is not recognized on the USB bus" fi exit 0 fi #============================================================== # Function to delete all SMS's from the SMS Inbox deleteAllSMS() { sudo /usr/bin/gammu -c ${GAMMUCONF} deleteallsms 1 return $? } deleteAllSMS # Check the status code of the gammu command. If it's 121, then it means the 3G dongle # is first waiting for the pin code to be entered if [[ $? -eq 121 ]]; then /usr/bin/gammu entersecuritycode PIN ${PINCODE} # At this stage, the 3G dongle should be ready and joined on the network # Try to delete all SMS's again if [[ $? -eq 0 ]]; then deleteAllSMS else echo "Could not enable 3G dongle providing the PIN code ${PINCODE}" fi fi
Surveiller le bon fonctionnement de la clef 3G
La stabilité de ce dispositif est correcte (plusieurs semaines sans problème), mais pas parfaite. Jusqu’à présent, il m’est arrivé deux types de problème :
- La clef 3G se déconnecte du réseau de l’opérateur (à moins que ça ne soit le réseau de l’opérateur qui dysfonctionne, je ne sais pas)
ou - Le driver de liaison série « option » commence à dysfonctionner et à envoyer des messages d’erreur au noyau linux de type « option_instat_callback error« , ce qui conduit dans les heures qui suivent à ce que le périphérique ne soit plus vu du système (Note: il semblerait que ce bug ait été corrigé dans une version plus récente du driver, pas encore disponible pour le Raspberry Pi, sauf à se compiler soit même le driver, avec toutes les dépendances que ça tire… pas eu le courage, on va faire autrement, voir ci-après)
L’idée est donc de surveiller régulièrement notre clef 3G et le périphérique correspondant, et agir en fonction des cas:
- Faire un hard reset de la clef 3G pour forcer une reconnexion au réseau de l’opérateur
ou - Simplement alerter par e-mail quand le driver « option » commence à pécloter (j’améliorerai ça plus tard, quand j’aurai trouver la séquence de commandes qui règle le problème en évitant de rebooter le RPi, mais comme ça n’arrive pas souvent…)
Pour cette surveillance, rien de plus simple depuis que nous avons installé le génial programme Monit sur nos RPi !
On va d’abord se doter d’un petit script qui vérifie que la clef 3G est bien connecté au réseau de l’opérateur. Appelons ce script checkSMSDongle.sh et copions-y le code suivant :
#!/bin/bash # # This scripts checks: # 1. that the SMS/3G USB dongle is seen from the system # 2. that the SMS/3G USB dongle is properly connected on the phone provider network #============================================================== # Define some variables DEVICE="/dev/ttyUSB2" USBID="2357:0201" GAMMUCONF="/home/pi/.gammurc" #============================================================== # Check the SMS/3G dongle is available if [[ ! -c ${DEVICE} ]]; then echo "[ERROR] Device ${DEVICE} is not available. Might be a driver issue." if [[ $(lsusb | grep ${USBID}) == "" ]]; then echo "[ERROR] The SMS/3G dongle is not recognized on the USB bus" fi exit 1 fi #============================================================== # Check the SMS/3G dongle is connected to the phone provider network sudo /usr/bin/gammu -c ${GAMMUCONF} networkinfo | grep "home network" > /dev/null if [[ "$?" -eq "1" ]]; then echo "[ERROR] The SMS/3G dongle is not connected to the phone provider network" exit 1 fi
Puis, créons le script qui s’occupera de faire le hard reset de la clef 3G, appelons-le fixSMSDongle.sh et copions-y le code suivant :
#!/bin/bash # # This scripts performs a hard reset of the SMS/3G dongle. It then re-enters the security code. #============================================================== # Define some variables DEVICE="/dev/ttyUSB2" USBID="2357:0201" GAMMUCONF="/home/pi/.gammurc" PINCODE="1234" #============================================================== # Check the SMS/3G dongle is available if [[ ! -c ${DEVICE} ]]; then echo "[ERROR] Device ${DEVICE} is not available. Might be a driver issue." if [[ $(lsusb | grep ${USBID}) == "" ]]; then echo "[ERROR] The SMS/3G dongle is not recognized on the USB bus" fi exit 1 fi #============================================================== # Perform the reset of the dongle # Performing a hard reset of 3G dongle echo "[INFO] Trying to reset the SMS/3G dongle" sudo /usr/bin/gammu -c ${GAMMUCONF} reset hard echo "[INFO] Hard reset done. Waiting for the device to be available" # After a hard reset, the device needs time before it's reachable again sleep 30 # After a hard reset, it is required to re-enter the security code echo "[INFO] Entering PIN code" sudo /usr/bin/gammu -c ${GAMMUCONF} entersecuritycode PIN ${PINCODE} # Check the SMS/3G dongle is now attached to the network sudo /usr/bin/gammu -c ${GAMMUCONF} networkinfo
Il nous reste à créer deux petits fichiers de surveillance Monit. Le premier créé comme /etc/monit.d/3g_sms_dongle.conf et contenant la configuration suivante:
check program CheckSMSDongle path "/home/pi/Domotique/SMSServices/checkSMSDongle.sh" every 5 cycles if status != 0 for 3 cycles then alert if status != 0 for 3 cycles then exec "/home/pi/Domotique/SMSServices/fixSMSDongle.sh" if status != 0 for 10 cycles then unmonitor
Le deuxième créé comme /etc/monit.d/kernel_log.conf et contenant la configuration suivante :
check file kernel with path /var/log/kern.log if match "option_instat_callback" then alert
Pour finir, demander à monit de recharger ses fichier de configuration (voir l’article correspondant).
Envoyer/Recevoir des SMS depuis le réseau
Comme je l’avais montré pour la lecture de température ou pour la commande des prises électriques, l’envoi et la réception de SMS constitue un nouveau service domotique, installé sur mon RPi dédié domotique que j’ai appelé « domopi » (petit rappel de mon environnement dans le premier article de référence).
Souhaitant pouvoir accéder à distance à ce service domotique, via le réseau, depuis mon RPi frontal, il suffit de mettre à jour le script qui reçoit les commandes depuis le réseau pour qu’il traite les demandes d’envoi de SMS, de consultation des SMS reçus, ou d’effacement des SMS (voir l’article sur la communication entre les deux RPi).
Je vous propose donc ici le script intégral, complété par la partie SMS, avec l’apparition de 3 nouvelles commandes, qui s’appuient respectivement sur les 3 scripts bash que j’ai introduit avant :
- sendsms : cette commande attend les paramètres suivants, juste après avoir envoyé le nom de la commande :
- le numéro de téléphone destinataire
- la taille (en octets) du message à suivre
- le corp du message
- readsmsinbox : aucun paramètre
- deleteallsms : aucun paramètre
Le script complet :
#!/bin/bash # Author: Arno0x0x # Description: # This script executes some domotic orders based on the command passed as argument. # The network wrapper is Xinetd on port 6868/tcp (domoservices) # Dependencies: # This script depends on two binaries to send RF433 commands to remote controled outlets # 1. chacon_send : Used to control "Chacon - D-IO" outlets. # Usage: chacon_send <wiringPI pin> <controler code> <outlet code> <on|off> # Ex: chacon_send 0 12325261 1 on # 2. phenix_send : Used to control "PHENIX type" outlets. WiringPi pin used is forced to 0 at compile time. # Usage: phenix_send <wiringPI pin> <controler code> <outlet code> <1|0> # Ex: phenix_send 0 10110 1 1 # 3. sendSMS.sh : Used to send SMS through the 3G dongle. # Usage : sendSMS.sh <phoneNumber> <text file containing the message> #----------------------------------------------------------------------- # Initialize main variables # ligth1 = salle a manger | light2 = salon # heater1 = salon | heater2 = entree #----------------------------------------------------------------------- export LANG=en_GB.UTF-8 _rootDir="/home/pi/Domotique" _domoServicesLogFile="${_rootDir}/domoservices.log" _light1_ON="sudo ${_rootDir}/phenix_send 0 10110 1 1" _light1_OFF="sudo ${_rootDir}/phenix_send 0 10110 1 0" _light2_ON="sudo ${_rootDir}/phenix_send 0 10110 2 1" _light2_OFF="sudo ${_rootDir}/phenix_send 0 10110 2 0" _heater1_ON="sudo ${_rootDir}/chacon_send 0 12325261 1 on" _heater1_OFF="sudo ${_rootDir}/chacon_send 0 12325261 1 off" _heater2_ON="sudo ${_rootDir}/chacon_send 0 12325261 2 on" _heater2_OFF="sudo ${_rootDir}/chacon_send 0 12325261 2 off" _readTemperature="${_rootDir}/readTemperature.sh" _SMSServicesrootDir="${_rootDir}/SMSServices" _sendSMS="${_SMSServicesrootDir}/sendSMS.sh" _getAllSMS="${_SMSServicesrootDir}/getAllSMS.sh" _deleteAllSMS="${_SMSServicesrootDir}/deleteAllSMS.sh" #----------------------------------------------------------------------- # Read the command passed on stdin read _command case ${_command} in light1ON) ${_light1_ON} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; light1OFF) ${_light1_OFF} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; light2ON) ${_light2_ON} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; light2OFF) ${_light2_OFF} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; heater1ON) ${_heater1_ON} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; heater1OFF) ${_heater1_OFF} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; heater2ON) ${_heater2_ON} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; heater2OFF) ${_heater2_OFF} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; readTemperature) echo $($_readTemperature) [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; sendsms) read phoneNumber read contentSize head -c ${contentSize} > ${_SMSServicesrootDir}/smsmessage.txt ${_sendSMS} ${phoneNumber} ${_SMSServicesrootDir}/smsmessage.txt ;; readsmsinbox) ${_getAllSMS} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; deletesmsinbox) ${_deleteAllSMS} [[ $? -eq 0 ]] || echo "[ERROR]" >> ${_domoServicesLogFile} ;; *) echo "[ERROR] UNKNOWN COMMAND" ;; esac
L’ensemble des script bash, et des fichiers de configuration monit sont prêt à télécharger dans une petite archive zip que je vous ai préparé ici. Il vous faudra bien sûr adapter les chemins d’accès de ces scripts en fonction de votre propre installation, leur donner les droits d’exécution et modifier les paramètres par défaut (numéros de téléphone).
Pour finir, voici un exemple de petite application PHP/HTML5, installé sur mon RPi frontal, et qui tire parti de tout ce qu’on a vu dans cet article :
A bientôt !
Vous aimez cet article ? Faites le savoir avec quelques bitcoins !
Bonjour,
je voudrais savor si votre article est encore d’actualité. j ai besoin d’ envoyer et surtout recevoir des SMS depuis mon Raspery pi 3.je voudrais acheter un dongle. est ce que celui que vous avez testé est encore compatible avec les versions de rasbian et gammu actuel ? et est ce qui faut desimlocké quoi que se soit ?
MErci
Pascal
J’aimeJ’aime
Bonjour
Serait il possible d’avoir le code source de la petite application en PHP pour envoyer des sms via une interface web.Chapeau bas pour votre travail et merci pour le partage.
D’avance merci et bonne année 2017
J’aimeJ’aime
Tu peux utiliser cet outil très bien fait.
J’aimeJ’aime
https://github.com/RaspbianFrance/RaspiSMS
J’aimeJ’aime
Merci pour ce tuto qui m’a permis d’installer ma clef 3G en quelques manipulation seulement et ainsi d’envoyer et recevoir mes premiers sms.
J’ai une petite question sur la remarque que tu fais sur les messages envoyé au noyau. Bon je precise que je ne comprends rien à ce que j’ecris. Quand je fais dmesg j’ai un message arrivant du usb0 qui dit usb_serial_generic_read_bulk_callback – urb stopped -32. Je n’ai rien trouvé sur le net sur ce sujet aussi si tu sais quel est le probleme, peux tu m’aider? Je laisse mon adresse email pour que tu puisses me repondre sans polluer ton blog
J’aimeJ’aime
Bonjour,
est possible de personnaliser le nom de l’expéditeur ?
Merci d’avance
J’aimeJ’aime
Bonjour, et merci pour votre tuto!
J’utilise une clé Huawei 169 que je n’arrive pas à utiliser avec gammu. J’ai déjà utilisé gammu qui est très simple à configurer, mais je n’arrive pas à le faire fonctionner avec cette clé..
J’ai un product code de 1001 (je ne sais pas ce que ça représente) :
$ lsusb
Bus 001 Device 004: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
Et dans dmesg, l’USB est me semble t-il reconnu comme un stockage de masse :
$ dmesg | grep usb
[ 14.272869] usb-storage 1-1.4:1.0: USB Mass Storage device detected
[ 14.273383] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0
[ 14.273439] usb-storage 1-1.4:1.1: USB Mass Storage device detected
[ 14.278335] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1
[ 14.278418] usb-storage 1-1.4:1.2: USB Mass Storage device detected
[ 14.281901] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2
J’ai essayé de mettre gammu sur les trois dev, mais il me dit à chaque fois que le périphérique n’existe pas.
Une idée?
Merci d’avance 😀
J’aimeJ’aime
Bonjour,
Merci, grace à ton tuto j’ai réussi à faire fonctionner ma clef huawei e1552, le script sendSMS.sh fonctionne aussi, mais je ne comprends pas :
./sendSMS.sh [ ]
à la place de numero de téléphone j’ai mis le n° destinataire
et fichier contenant le sms à envoyer le chemin du fichier txt à employer
mais cela ne fonctionne pas
par contre si je mets seulement ./sendSMS.sh cela fonctionne, mais j’aimerais envoyer des message différent suivant le cas, du coup comment faire ?
J’aimeJ’aime
Salut,
Peut-être ai-je mal compris ton problème, mais pour utiliser le script sendSMS.sh proposé dans cet article, il faut lui passer les paramètres en ligne de commande, à la suite, sans mettre les crochets ‘[‘ et ‘]’.
Par exemple:
Et de mettre le message dans le fichier message.txt
Est-ce que c’est ça ton problème ?
J’aimeJ’aime