RaspbianFrance / raspisms

RaspiSMS est un système de gestion et d'envoi de SMS par ordinateur, initialement conçu pour les Raspberry Pi
https://raspisms.fr
GNU General Public License v3.0
163 stars 70 forks source link

Instabilité téléphone Gammu à suivre... #159

Open FredMa01 opened 3 years ago

FredMa01 commented 3 years ago

Ce problème est abordé dans cette issue : #155 Raspisms fonctionne parfaitement jusqu'à un moment où un redémarrage du raspberry ne laisse plus les SMS entrer, sans que je ne parvienne à comprendre cette instabilité. Le problème provient certainement de Gammu...

Raspisms a bien démarré : service raspisms status

● raspisms.service - RaspiSMS Daemons
   Loaded: loaded (/usr/share/raspisms/confs/systemd/raspisms.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-03-01 15:41:46 CET; 8min ago
     Docs: https://raspisms.raspberry-pi.fr
  Process: 636 ExecStart=/usr/share/raspisms/bin/start.sh (code=exited, status=0/SUCCESS)
 Main PID: 1071 (php)
    Tasks: 7 (limit: 2181)
   CGroup: /system.slice/raspisms.service
           ├─1071 RaspiSMS Daemon Launcher
           ├─1076 RaspiSMS Daemon Sender
           ├─1078 RaspiSMS Daemon Webhook
           ├─1085 RaspiSMS Daemon Mailer
           ├─1349 RaspiSMS Daemon Phone 11
           ├─1502 sh -c /usr/share/raspisms/bin/gammu_get_unread_sms.py '/etc/gammurc' 2>&1
           └─1503 python3 /usr/share/raspisms/bin/gammu_get_unread_sms.py /etc/gammurc

Fichier de config : /etc/gammurc

[gammu]
device = /dev/ttyUSB-3G
model =
connection = at19200
synchronizetime = yes
logfile = /var/log/gammu.log
logformat = textalldate
gammu_coding = utf8
use_locking =
gammuloc =
atgen_setCNMI=1,2,0,0,0
DeliveryReport = sms

Log Gammu :

Mon 2021/03/01 15:13:12: SENDING frame type 0x00/length 0x05/5
Mon 2021/03/01 15:13:12: 41A|54T|45E|311|0D                                              ATE1.
Mon 2021/03/01 15:13:22: Phone does not support enabled echo, it can not work with Gammu!
Mon 2021/03/01 15:13:22: It might be caused by other program using the modem.
Mon 2021/03/01 15:13:22: See <https://wammu.eu/docs/manual/faq/general.html#echo> for help.
Mon 2021/03/01 15:13:22: Init:GSM_TryGetModel failed with error TIMEOUT[14]: No response in specified timeout. Probably the phone is not connected.
Mon 2021/03/01 15:13:22: Entering GSM_SetIncomingSMS
Mon 2021/03/01 15:13:22: Getting available SMS memories
Mon 2021/03/01 15:13:22: SENDING frame type 0x00/length 0x0A/10
Mon 2021/03/01 15:13:22: 41A|54T|2B+|43C|50P|4DM|53S|3D=|3F?|0D                          AT+CPMS=?.

Les logs font référence à https://docs.gammu.org/faq/general.html#echo La commande : fuser -va /dev/ttyUSB-3G renvoie :

                     UTIL.       PID ACCÈS  COMMANDE
/dev/ttyUSB2:        root       2060 F.... python3

La commande : gammu identify Erreur à l'ouverture du périphérique : périphérique inconnu, occupé ou problème de permissions. Ce qui est normal quand raspisms est démarré donc Gammu occupé ! Une fois arrêté le gammu identify indique :

Périphérique       : /dev/ttyUSB-3G
Fabricant            : Huawei
Modèle              : E3531 (E3531)
Firmware             : 22.521.35.00.1217
IMEI                 : 861143035493085
SIM IMSI             : 208014706668400

La commande gammu --config /etc/gammurc sendsms TEXT '+33612345678' -text 'texte1234' -validity MAX -autolen '9' renvoie : Erreur à l'ouverture du périphérique : périphérique inconnu, occupé ou problème de permissions.

La commande gammu-detect

; Fichier de configuration généré par gammu-detect.
; Merci de consulter le manuel de Gammu pour plus d'informations.

[gammu]
device = /dev/ttyS0
name = Téléphone sur le port série 0
connection = at

[gammu1]
device = /dev/ttyUSB0
name = Téléphone sur le port USB série HUAWEIHUAWEI_Mobile
connection = at

[gammu2]
device = /dev/ttyUSB2
name = Téléphone sur le port USB série HUAWEIHUAWEI_Mobile
connection = at

[gammu3]
device = /dev/ttyUSB3
name = Téléphone sur le port USB série HUAWEIHUAWEI_Mobile
connection = at

Error finding Bluetooth adapter: Aucun périphérique de ce type

Je réinitialise Gammu : /usr/sbin/usb_modeswitch -W -v 12d1 -p 155e -R

Take all parameters from the command line

 * usb_modeswitch: handle USB devices with multiple modes
 * Version 2.5.2 (C) Josua Dietze 2017
 * Based on libusb1/libusbx

 ! PLEASE REPORT NEW CONFIGURATIONS !

DefaultVendor=  0x12d1
DefaultProduct= 0x155e

Look for default devices ...
  found USB ID 12d1:155e
   vendor ID matched
   product ID matched
  found USB ID 8564:4100
  found USB ID 0bc2:61b6
  found USB ID 0424:ec00
  found USB ID 0424:9514
  found USB ID 1d6b:0002
 Found devices in default mode (1)
Access device 005 on bus 001
Get the current device configuration ...
Current configuration number is 1
Use interface number 0
 with class 255

USB description data (for identification)
-------------------------
Manufacturer: HUAWEI
     Product: HUAWEI Mobile
  Serial No.: not provided
-------------------------
Warning: no switching method given. See documentation
Reset USB device .
 Device was reset
-> Run lsusb to note any changes. Bye!

Je lance lsusb mais rien de mieux !

La commande ps aux | grep gammu

root      1691  0.0  0.0   1940   396 ?        S    15:53   0:00 sh -c /usr/share/raspisms/bin/gammu_get_unread_sms.py '/etc/gammurc' 2>&1
root      1692  6.0  1.2  36800 12924 ?        S    15:53   0:00 python3 /usr/share/raspisms/bin/gammu_get_unread_sms.py /etc/gammurc
root      1694  0.0  0.0   7368   556 pts/0    S+   15:53   0:00 grep gammu

A force de redémarrages, réinstallations, retrait manuel du dongle..., cela finit par fonctionner sans identifier la nature du problème... D'ailleurs en finissant d'écrire ces lignes, tout se remet à marcher ! Affaire à suivre ;)

FredMa01 commented 3 years ago

Je ne sais pas s'il y a un lien avec ce pb de téléphone Gammu ou s'il s'agit d'un autre souci mais, je réalise que même quand le téléphone marche bien en émission/réception, il arrive que les envois de commandes ne marchent plus. C'est le cas actuellement. Je me retrouve donc comme dans l'issue #154 : Il semble y avoir un pb d'encodage :

Receive message : {"at":"2021-03-01 16:18:50","text":"{\"login\":\"xxxx@xxxx.fr\",\"password\":\"xxxxxxxxxx\",\"command\":\"stoppi3\"}\u0000e","origin":"+3312345678"} [] []
Receive message : {"at":"2021-03-01 16:19:23","text":"{\"login\":\"xxxx@xxxx.fr\",\"password\":\"xxxxxxxxxx\",\"command\":\"sms\"}\u00003","origin":"+3312345678"} [] []

L'ajout de la ligne file_put_contents(PWD_DATA . '/tst.txt', print_r($decode_message, true)); après la ligne 88 du fichiercontrollers\internals\Command.php , modifie le fichier/usr/share/raspisms/data/tst.txt mais celui-ci reste vide !

OsaAjani commented 3 years ago

Pour moi il faut bien distinguer le cas des commandes, qui viens à priori d'un problème d'encodage, et le cas des problèmes d'envoi/reception des messages.

Pour les problèmes d'envoi/reception, ce qui me choque c'est de voir que tu as deux script /usr/share/raspisms/bin/gammu_get_unread_sms.py '/etc/gammurc' qui tournent en même temps, et sur le même fichier de conf gammu. Ça ne devrait pas arriver et cela va forcément créer des conflits entre les deux scripts, et donc des blocages.

Pour le problème des commandes, je ne vois pas comment la ligne file_put_contents peut créer un fichier vide, essaie de replacer la partie $decode_message par 'toto' pour voir si ça inscrit bien toto dans le fichier.

OsaAjani commented 3 years ago

Je rajoute au passage que je te conseils d'utiliser un autre fichier que /etc/gammurc pour les téléphones à créer au sein de RaspiSMS. Notamment pour éviter les conflits si tu créer plusieurs téléphones, ou si un service gammu démarre. Dans la documentation sur l'utilisation de gammu avec RaspiSMS, je conseils de créer un fichier /etc/gammu_<un_id_unique>.rc pour chaque téléphone.

FredMa01 commented 3 years ago

J'ai changé de fichier de config pour le téléphone. Je supprime l'ancien téléphone, crée un nouveau avec ce nouveau fichier puis relance le service raspisms :

ps aux | grep gammu
root      9969  0.0  0.0   1940   376 ?        S    13:12   0:00 sh -c /usr/share/raspisms/bin/gammu_get_unread_sms.py '/etc/gammu_raspi.rc' 2>&1
root      9970 10.0  1.3  36800 13132 ?        S    13:12   0:00 python3 /usr/share/raspisms/bin/gammu_get_unread_sms.py /etc/gammu_raspi.rc

J'ai toujours les 2 scripts !

FredMa01 commented 3 years ago

Je te confirme que 'toto' s'écrit bien dans le fichier !

/* Fred */
$decode_message= 'toto';
file_put_contents(PWD_DATA . '/tst.txt', print_r($decode_message, true));
OsaAjani commented 3 years ago

Pour les deux script j'ai trouvé l'origine, en fait c'est normal, le premier script déclenche l'appel du deuxième, c'est juste la façon dont php execute une commande unix, donc ça n'est pas ça qui pose le problème.

Pour le cas du fichier tst.txt qui est vide je viens de me rendre compte que print_r n'affiche pas les valeures NULL comme var_dump, donc c'est bien que le fichier ne peut pas être décodé comme un JSON valide, à cause du caractère mal encodé \u00003. Ce caractère me fait penser ou bien à un encodage python bizarre, ou bien à un encodage UTF-16 converti en code JSON, mais que PHP n'arrive pas à décoder. Ça reste à creuser donc pour voir comment se débarasser du problème.

ebardoul commented 1 year ago

Est-ce que le problème n'est pas que même si on supprime un téléphone Gammu, il y a toujours des démons qui sont lancés à son sujet. Quand je regarde /var/log/raspisms/daemons.log j'ai ceci : [2022-12-12T09:20:59.735338+01:00] RaspiSMS Daemon Phone 8.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:21:12.834696+01:00] RaspiSMS Daemon Phone 2.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:21:57.896547+01:00] RaspiSMS Daemon Phone 2.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:22:15.848508+01:00] RaspiSMS Daemon Phone 8.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:23:59.528282+01:00] RaspiSMS Daemon Phone 8.INFO: Stopping Phone daemon with pid 2528 [] [] [2022-12-12T09:24:00.601526+01:00] RaspiSMS Daemon Phone 8.INFO: Starting Phone daemon with pid 2582 [] [] [2022-12-12T09:24:12.561608+01:00] RaspiSMS Daemon Phone 2.INFO: Stopping Phone daemon with pid 2533 [] [] [2022-12-12T09:24:13.630292+01:00] RaspiSMS Daemon Phone 2.INFO: Starting Phone daemon with pid 2585 [] [] [2022-12-12T09:24:33.970068+01:00] RaspiSMS Daemon Phone 2.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:24:51.855071+01:00] RaspiSMS Daemon Phone 8.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:26:26.472622+01:00] RaspiSMS Daemon Phone 8.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:26:39.825536+01:00] RaspiSMS Daemon Phone 2.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:28:39.185920+01:00] RaspiSMS Daemon Phone 2.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:28:56.865391+01:00] RaspiSMS Daemon Phone 8.INFO: Error reading received smss : Gammu command return failed. [] [] [2022-12-12T09:29:01.377737+01:00] RaspiSMS Daemon Phone 8.INFO: Stopping Phone daemon with pid 2582 [] [] [2022-12-12T09:29:02.448521+01:00] RaspiSMS Daemon Phone 8.INFO: Starting Phone daemon with pid 2636 [] [] [2022-12-12T09:29:14.443435+01:00] RaspiSMS Daemon Phone 2.INFO: Stopping Phone daemon with pid 2585 [] [] [2022-12-12T09:29:15.509502+01:00] RaspiSMS Daemon Phone 2.INFO: Starting Phone daemon with pid 2638 [] []

Je vois un tas de démons lancés pour des téléphone qui n'existent plus. Puisque seul le N°8 existe. Les autres ont été des essais et comme il est impossible de modifier un téléphone. On est obligé de supprimer le téléphone et d'en créer un nouveau.

En plus il m'a fallut bloquer le démon gammu-smsd qui se lançait automatiquement au démarrage.

Tous ces démons qui cherchent à utiliser la même ressource, ça doit finir par rendre instable la configuration et si on a de la chance, les sms partent, mais si il y a conflit au moment de l'envoi, alors c'est l'échec.