ERROR : Exception on GSM - Aide à propos de strpos

Bonjour

Cela fait des mois que je galère avec deux clés 4g HUWAEI 3372-150 et 3372-325
J’ai lu, relu, rerelu, des forums de toute part.
J’ai finalement réussi à faire fonctionner ma clé -150 et je vais revendre l’autre…

Ultime problème, les sms fonctionnent 10 minutes puis l’erreur suivante tourne en boucle en mode debug:

ERROR : Exception on GSM :
DEBUG : write: AT+CREG?
DEBUG : response: ['AT+CREG?', '+CREG: 2,1,"C5A0","017BAE03"', 'OK']
DEBUG : write: AT+CSQ
DEBUG : response: ['AT+CSQ', '+CSQ: 14,99', 'OK']

Après avoir lu ces deux pages:

https://forum.jeedom.com/viewtopic.php?t=34086

J’ai décidé de faire un scénario qui check le log du demon toutes les minutes (mode debug important sinon la dernière ligne du demon reste l’erreur après relancement) et relance celui-ci dès que l’erreur se produit.

Mais:

  • Je remarque contrairement aux deux liens ci-dessus que pour moi, le NONE n’est pas présent, j’ai adapté le code
  • J’ai 5 lignes qui tournent en boucle contrairement à ce qui est proposé dans les deux liens (une à 2 lignes étudiées)

Voici mon code qui fonctionne pour une ligne:

$tab = file('/var/www/html/log/sms');
$der_ligne = $tab[count($tab)-1];
if(!strpos($der_ligne, "[ERROR] : Exception on GSM :") === false) 
{
  message::add('Check SMS','SMS Ko! Reboot du plugin!');
  $DaemonStop = sms::deamon_stop();
  sleep(10);
  $DaemonStart = sms::deamon_start();
}

J’ai vu que pour l’avant dernière ligne on peut utiliser $avant_der_ligne

Cool, mon code devient:

$tab = file('/var/www/html/log/sms');
$der_ligne = $tab[count($tab)-1];
if((!strpos($der_ligne, "[ERROR] : Exception on GSM :") === false) || (!strpos($avant_der_ligne, "[ERROR] : Exception on GSM :") === false))
{
  message::add('Check SMS','SMS Ko! Reboot du plugin!');
  $DaemonStop = sms::deamon_stop();
  sleep(10);
  $DaemonStart = sms::deamon_start();
}

Mais mon scénario ne fonctionnera que si j’ai la chance qu’à chaque minute, le hasard fasse tomber au moment où l’une des deux dernières lignes parmi 5 contient l’erreur…

Je cherche donc à pouvoir checker les 5 dernières lignes, comment faire ?
J’ai cherché dans google avec $der_ligne et $avant_der_ligne mais je ne trouve rien

Si l’un de vous peut m’aider

PS:
Les 5 lignes apparaissent en 7 lignes dans le log car les lignes sont trop longues:

[2023-08-12 14:18:32]ERROR : Exception on GSM :
[2023-08-12 14:18:37]DEBUG : write: AT+CREG?
[2023-08-12 14:18:37]DEBUG : response: ['AT+CREG?
', '+CREG: 2,1,"C5A0","017BAE03"', 'OK']
[2023-08-12 14:18:38]DEBUG : write: AT+CSQ
[2023-08-12 14:18:38]DEBUG : response: ['AT+CSQ
', '+CSQ: 15,99', 'OK']

Faut-il tester 5 ou 7 lignes ?

J’ai compris, j’avais pas tout lu, pas doué…
$der_ligne = $tab[count($tab)-1];
Donc en jouant sur -1 je saurai faire ce que je veux.
Je laisse cet article quand même car cela apporte quelques précisions importantes par rapport aux deux que j’avais déjà trouvés, ça aidera peut être d’autres

Voici le code final (je ne sais pas faire de boucles dans ce langage):

$tab = file('/var/www/html/log/sms');
$L1 = $tab[count($tab)-1];
$L2 = $tab[count($tab)-2];
$L3 = $tab[count($tab)-3];
$L4 = $tab[count($tab)-4];
$L5 = $tab[count($tab)-5];
if((!strpos($L1, "[ERROR] : Exception on GSM :") === false) || (!strpos($L2, "[ERROR] : Exception on GSM :") === false) || (!strpos($L3, "[ERROR] : Exception on GSM :") === false) || (!strpos($L4, "[ERROR] : Exception on GSM :") === false) || (!strpos($L5, "[ERROR] : Exception on GSM :") === false))
{
  message::add('Check SMS','SMS Ko! Reboot du plugin!');
  $DaemonStop = sms::deamon_stop();
  sleep(10);
  $DaemonStart = sms::deamon_start();
}

Ce que je ne sais pas, c’est si les tests doivent se faire sur 5 ou 7 lignes (je laisse 5 et je veille les logs pour voir si ça passe à 100% ou pas)

Comme le bug arrive toutes les 5 minutes, c’est facile de vérifier. j’ai donc vu que ça passe pas du premier coup. J’ai donc évidemment eu l’idée d’aller voir le log dans l’explorateur de fichiers:
Capture

Il faut tester les 7 lignes:

$tab = file('/var/www/html/log/sms');
$L1 = $tab[count($tab)-1];
$L2 = $tab[count($tab)-2];
$L3 = $tab[count($tab)-3];
$L4 = $tab[count($tab)-4];
$L5 = $tab[count($tab)-5];
$L6 = $tab[count($tab)-6];
$L7 = $tab[count($tab)-7];
if((!strpos($L1, "[ERROR] : Exception on GSM :") === false) || (!strpos($L2, "[ERROR] : Exception on GSM :") === false) || (!strpos($L3, "[ERROR] : Exception on GSM :") === false) || (!strpos($L4, "[ERROR] : Exception on GSM :") === false) || (!strpos($L5, "[ERROR] : Exception on GSM :") === false) || (!strpos($L6, "[ERROR] : Exception on GSM :") === false) || (!strpos($L7, "[ERROR] : Exception on GSM :") === false))
{
  message::add('Check SMS','SMS Ko! Reboot du plugin!');
  $DaemonStop = sms::deamon_stop();
  sleep(10);
  $DaemonStart = sms::deamon_start();
}

Génial, ça marche dès la première minute du bug maintenant :slight_smile:

Petite amélioration de la complexité en évitant le calcul count($tab) 7 fois…

// Mettre le log en mode debug !!!
$tab = file('/var/www/html/log/sms');
$Bug = "[ERROR] : Exception on GSM :";
$Taille = count($tab);
$L1 = $tab[$Taille-1];
$L2 = $tab[$Taille-2];
$L3 = $tab[$Taille-3];
$L4 = $tab[$Taille-4];
$L5 = $tab[$Taille-5];
$L6 = $tab[$Taille-6];
$L7 = $tab[$Taille-7];
if((!strpos($L1,$Bug)===false)||(!strpos($L2,$Bug)===false)||(!strpos($L3,$Bug)===false)||(!strpos($L4,$Bug)===false)||(!strpos($L5,$Bug)===false)||(!strpos($L6,$Bug)===false)||(!strpos($L7,$Bug)===false))
{
  message::add('Check SMS','SMS Ko! Reboot du plugin!');
  $DaemonStop = sms::deamon_stop();
  sleep(10);
  $DaemonStart = sms::deamon_start();
}

Et pour mettre en place ce code dans un scénario:

  • Créer un scénario
  • Mettre un déclencheur « Programmé » avec pour un lancement chaque minute (mini faisable): */1 * * * *
  • Créer un bloc code dans « Scénario » et coller le code ci-dessus
  • Enregistrer

Bonjour,

Je n’ai rien compris à cette histoire…

Les lignes de debug ne sont pas un problème
En situation normal elles sont présente, c’est tout à fait normal.

C’est complètement foireux d’aller parser un log (qui va changer avec le temps) dans ce cas, en tout cas de le faire à la main.
Pas compris cette histoire de 5 ou 7 lignes…
En plus, si on reste dans votre logique, il suffirait de mettre le loglevel sur ERROR et vous n’aurez plus les lignes de debug… les lignes commencent par la date et l’heure pour éviter de redémarrer en boucle (toujours dans votre logique)

Bref à mon avis: ne surtout pas réutiliser ce script/scenario.
Il faudrait mieux fournir les infos utiles pour qu’on puisse identifier et corriger le problème éventuel.

Pour situer un peu ma démarche, j’ai utilisé la clé E3372-150 pendant des années avec un abonnement free 2€ sur une smart et cela fonctionnait. J’ai quand même déjà du passer des journées sur les forums pour trouver mon problème de usb mode switch pour la faire fonctionner en mode « Modem/Networkcard ».

Il y a environ 6 mois, elle n’a plus fonctionné, je ne sais plus les raisons. J’ai relu les forums, souvent déjà vus avant, j’ai tenté les choses simples comme le branchement sur box en direct ou via un hub usb alimenté sans rallonge, rien à faire. Evidemment, la déplacer aussi pour changer la qualité du réseau free moyen chez moi, mais rien. J’ai tenté les 2 vitesses dans les paramètres du plugin, rien non plus.

Un temps, j’ai cru que le hub usb était défectueux, je l’ai changé, mais rien.

Entre temps, j’ai acheté une Atlas, mais la clé ne fonctionnait pas dessus.

J’ai fini par acheter une E3372 chez Domadoo, « Compatible Jeedom », on ne sait pas à l’avance le modèle et le firmware de cette clé, c’est une E3372-325. Eh bien, elle fonctionne sur un ordinateur avec Windows, mais pas sur mon Atlas, et j’ai un problème que personne n’a relayé, quand je fais lsusb avec Putty, j’ai bien une ligne pour cette clé (plein de tests en branchant et débranchant pour m’en assurer), mais rien comme description :frowning: :frowning: :frowning:
lsusb donne une ligne du type:
→ Bus XXX Device XXX: ID 3566:2001
Mais au lieu de voir quelque chose comme « Huawei Technologies Co., Ltd. Modem/Networkcard » il n’y a juste rien derrière, et évidemment, je n’ai rien pu faire fonctionner
Avec « dmesg | grep USB », j’ai bien une ligne:
[ 9.090073] usb 7-1.2: New USB device found, idVendor=3566, idProduct=2001, bcdDevice=ff.ff
A savoir: Domadoo revient vers moi prochainement car j’ai fait il y a quelques jours une demande de retour/échange de ma -325, car j’imagine que ma clé est défectueuse, ils se renseignent et reviennent vers moi.

J’ai fini par tenter une carte SIM orange dans la clé -325, rien. J’ai fait de même dans ma vieille clé -150 au cas où, et miracle, un sms est passé.

J’ai donc résilié mon abonnement free 2€ et pris un abonnement orange 5.99€… J’ai reçu la sim il y a 3 jours.

Youpi, ça marche… 5 minutes, puis plus rien. Erreur « ERROR : Exception on GSM », et ce à chaque relance manuelle du demon. J’ai lu tous les articles que l’ai trouvé en lien avec cette erreur sans réussir quoi que ce soit. En mode « Defaut », le log fini par mettre une infinité de fois la même ligne « Error: Exception on GSM: ». Au passage, sur internet, tous ceux qui remontent cette erreur ont un NONE après, moi non…

Je me suis souvenu avoir vu la solution de redémarrage automatique du demon proposée ici plugin sms se plante souvent - Forum Communauté Jeedom et que jusque là, je ne voulais pas appliquer car oui, mieux vaut régler le problème comme tu le dis que faire cette machine à redémarrer le démon… Mais, j’ai fait presque tout ce qui est en mon pouvoir pour faire fonctionner le GSM… Et j’ai dépensé des sous en changeant tout ce qui pouvait être concerné (clé 4g, box jeedom, hub usb, abonnement mobile)

Si je laisse le log en « Defaut », après relance du demon, rien n’apparaît, donc la dernière ligne du log est toujours « ERROR… » et donc, la procédure redémarre le demon toutes les minutes. J’ai vu ici Tutoriel Jeedom plugin SMS – LiXee GSMS-DIN – Faire soi-même qu’il fallait mettre le mode debug, j’ai tenté et ça fonctionne. Sans erreurs du plugin sms, tout va bien (plein de choses passent), et quand l’erreur apparait, elle tourne en boucle sur 7 lignes de log (Cela a beau être 5 évènements, 2 d’entre eux occupent chacun 2 lignes dans le fichier). Je capte alors l’erreur à la prochaine minute de l’horloge, ça relance le demon et ça repart.

Pour finir, car je n’avais pas essayé, je viens de remettre ma clé sur le Hub alimenté (je l’avais remise sur la box avec une rallonge USB), je vous dirai si c’est plus stable, ça à l’air de moins bugger pour le moment (rien depuis que j’écris cet article).

Il reste une solution proposée à pas mal d’endroits. Ma clé -150 fait apparaitre 2 ports usb dans lsusb et il semble (malheureusement encore aucune certitude) que cela puisse générer mes problèmes. Il faudrait « flasher » la clé comme dit ici [TUTO] Flasher clef GSM Huawei e3372-153 - 100% compatible Jeedom avec plugin-sms mais pour une -153 :(… Et sur tout ce que j’ai lu, j’ai bien vu que tout le monde a des versions différentes et que l’on a aucune garantie de bien faire les choses. Et là, je me dis que la dernière clé acheté en version -325 ne fonctionne pas, que la clé qui marche est ancienne et que je ne trouverai jamais de -150 parce qu’elle ne se fait peut-être plus et que cette dénomination -150 -325 n’est pas fournie sur les sites d’achat, alors j’ai un gros risque de la rendre inop… Je ne veux pas tenter…

J’espère que ma démarche est plus claire, je prend maintenant la pire solution oui, mais le GSM fonctionne, et je m’adapterai si les logs changent, de toute manière je m’en rendrai vite compte…

En étant repassé sur le hub usb alimenté, l’erreur qui arrivait toutes les 5 à 10 minutes ne s’est reproduite qu’une seule fois en 2h, il y a une heure exactement. Le scénario joue donc pour le moment encore un rôle important.

774 erreurs en 24h, cela n’a donc pas changé grand chose

Je n’ai pas eu le temps de tout lire mais, quelle est la force de signal du réseau ?

Bonjour

J’ai eu aussi des soucis lors de l’installation de ma clé huawei (E3531: pas de réception).

Pour faire court, le problème venait du firmware de la clé qui était trop récent! Après downgrade ça fonctionne impec depuis 3 ans.

Ton problème n’est peut-être pas le même mais ça vaut le coup de jeter un oeil.

Bonjour
Dernières nouvelles, hier soir la clé a été perdue sur le hub (plus de ports visibles). Me voici rentré, je l’ai remise derrière ma petite rallonge USB sur un port direct de mon Altas pour que cela ne recommence pas.
J’ai une réception de 18 environ (cela fluctue un peu):
SMS
Merci @drs , je sais qu’une voie consiste à travailler sur le firmware des clés, et de ce côté là, j’ai espoir que l’équipe de Domadoo me propose dans les prochains jours une procédure pour ma clé neuve E3372-325, ce qui réglera, je l’espère, tous ces problèmes. Evidemment, je dirai ici ce qu’il en est.


Edit 09/04/2024: Sans actions de ma part, et probablement après la dernière mise à jour du plugin, je n’ai plus aucun problème

Ce sujet a été automatiquement fermé après 7 jours. Aucune réponse n’est permise dorénavant.