{"id":2938,"date":"2014-11-06T17:39:02","date_gmt":"2014-11-06T16:39:02","guid":{"rendered":"http:\/\/www.alphak.net\/news\/?p=2938"},"modified":"2015-07-05T18:49:19","modified_gmt":"2015-07-05T16:49:19","slug":"sms-automatise-bonus-round","status":"publish","type":"post","link":"https:\/\/www.alphak.net\/news\/2014\/11\/sms-automatise-bonus-round\/","title":{"rendered":"SMS automatis\u00e9 \u2013 Bonus round"},"content":{"rendered":"<p>Le th\u00e8me de l&rsquo;<strong>envoi automatis\u00e9 de SMS<\/strong>, je pensais l&rsquo;avoir trait\u00e9 en long en large et en travers, alors je m&rsquo;\u00e9tais jug\u00e9 que je n&rsquo;en reparlerais plus. Il faut dire que \u00e7a marchait plut\u00f4t bien. \u00c7a fonctionnait tellement bien, que parfois, je recevais m\u00eame des mignons petits messages de gentils inconnus qui s&rsquo;\u00e9taient malencontreusement plant\u00e9s de num\u00e9ro, dans ce genre l\u00e0 :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2948\" src=\"http:\/\/cdn.alphak.net\/news\/wp-content\/uploads\/sites\/2\/2014\/11\/sms-spam.png\" alt=\"sms-spam\" width=\"640\" height=\"122\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2014\/11\/sms-spam.png 640w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2014\/11\/sms-spam-300x57.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Et il faut le dire, parfois, dans ce cas-l\u00e0, j&rsquo;h\u00e9sitais \u00e0 r\u00e9pondre. Et parfois, dans ce cas-l\u00e0, le choix de r\u00e9ponse \u00e9tait corn\u00e9lien, comme si cela entrainait des r\u00e9percussions capitales sur tout le reste de ma longue et h\u00e9ro\u00efque qu\u00eate de l&rsquo;aventure humaine :<!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2957\" src=\"http:\/\/cdn.alphak.net\/news\/wp-content\/uploads\/sites\/2\/2014\/11\/sms-by-npc-rpg.png\" alt=\"sms-by-npc-rpg\" width=\"544\" height=\"416\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2014\/11\/sms-by-npc-rpg.png 544w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2014\/11\/sms-by-npc-rpg-300x229.png 300w\" sizes=\"(max-width: 544px) 100vw, 544px\" \/><\/p>\n<p>Bref, au del\u00e0 des enfantillages, <strong>deux \u00e9v\u00e8nements<\/strong> se sont produits dans les derni\u00e8res semaines et m&rsquo;ont incit\u00e9 a r\u00e9diger une br\u00e8ve suite \u00e0 cette s\u00e9rie d&rsquo;articles.<\/p>\n<h3>\u00c9v\u00e8nement n\u00b01 : le modem GSM qui se vautre<\/h3>\n<p>Qui se vautre, c&rsquo;est un peu exag\u00e9r\u00e9. Je devrais plut\u00f4t dire \u00ab\u00a0qui se bloque\u00a0\u00bb. Du point de vue de l&rsquo;utilisateur, c&rsquo;est pareil. Restons r\u00e9aliste : il s&rsquo;agit pour ma part d&rsquo;un produit chinois pas cher destin\u00e9 \u00e0 envoyer 2 SMS par an \u00e0 tout casser, je n&rsquo;esp\u00e9rais donc pas une continuit\u00e9 de service \u00e0 100% sur l&rsquo;ann\u00e9e. J&rsquo;ai ainsi constat\u00e9, apr\u00e8s de longs mois d&rsquo;inutilisation, qu&rsquo;un SMS ins\u00e9r\u00e9 en base de donn\u00e9es dans la bo\u00eete d&rsquo;envoi <strong>refusait de partir<\/strong>, et que son statut passait en erreur. Un red\u00e9marrage de smsd ne r\u00e9solvait pas le probl\u00e8me. Un d\u00e9chargement du module pl2303, qui g\u00e8re la communication USB avec le modem GSM, non plus. Par contre, le fait de <strong>couper l&rsquo;alimentation<\/strong> du modem GSM par d\u00e9branchement\/rebranchement du cordon USB remettait le modem en \u00e9tat de traiter l&rsquo;envoi du SMS.<\/p>\n<p>Alors, \u00e9videmment, hors de question d&rsquo;aller triturer les cordons USB \u00e0 l&rsquo;int\u00e9rieur de ma trappe \u00e0 serveur tous les 3 mois. Il fallait trouver une mani\u00e8re <strong>logicielle<\/strong> de r\u00e9initialiser le modem, par coupure de l&rsquo;alimentation du port USB ad\u00e9quat, sans impacter les p\u00e9riph\u00e9riques connect\u00e9s sur les autres ports USB. Ceci est possible gr\u00e2ce au programme qui suit, trouv\u00e9 sur le net et subtilement adapt\u00e9 pour mes besoins : (usbreset.c)<\/p>\n<pre class=\"prettyprint\">&#47;* usbreset -- send a USB port reset to a USB device *&#47;\r\n\r\n&#47;*\r\n        INSTRUCTIONS\r\n\r\n    Compile the program:\r\n    $ cc usbreset.c -o usbreset\r\n\r\n    Get the Bus and Device ID of the USB device you want to reset:\r\n    $ lsusb\r\n    Bus 002 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port\r\n\r\n    Make our compiled program executable:\r\n    $ chmod +x usbreset\r\n\r\n    Execute the program with sudo privilege; make necessary substitution\r\n    for Bus and Device ids as found by running the lsusb command:\r\n    $ sudo .&#47;usbreset &#47;dev&#47;bus&#47;usb&#47;002&#47;006\r\n\r\n*&#47;\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;unistd.h&gt;\r\n#include &lt;fcntl.h&gt;\r\n#include &lt;errno.h&gt;\r\n#include &lt;sys&#47;ioctl.h&gt;\r\n\r\n#include &lt;linux&#47;usbdevice_fs.h&gt;\r\n\r\n\r\nint main(int argc, char **argv)\r\n{\r\n    const char *filename;\r\n    int fd;\r\n    int rc;\r\n\r\n    if (argc != 2) {\r\n        fprintf(stderr, &#34;Usage: usbreset device-filename\\n&#34;);\r\n        return 1;\r\n    }\r\n    filename = argv&#091;1&#093;;\r\n\r\n    fd = open(filename, O_WRONLY);\r\n    if (fd &lt; 0) {\r\n        perror(&#34;Error opening output file&#34;);\r\n        return 1;\r\n    }\r\n\r\n    printf(&#34;Resetting USB device %s\\n&#34;, filename);\r\n    rc = ioctl(fd, USBDEVFS_RESET, 0);\r\n    if (rc &lt; 0) {\r\n        perror(&#34;Error in ioctl&#34;);\r\n        return 1;\r\n    }\r\n    printf(&#34;Reset successful\\n&#34;);\r\n\r\n    close(fd);\r\n    return 0;\r\n}\r\n<\/pre>\n<p>Pour ma part, j&rsquo;ai cr\u00e9\u00e9 un shell de lancement suppl\u00e9mentaire, qui recherche le device a red\u00e9marrer parmi la liste des devices USB connect\u00e9s (le modem Wavecom est identifi\u00e9 par la cha\u00eene PL2303), et qui lance usbreset avec les bons param\u00e8tres. \u00c7a donne ce qui suit (\u00e0 adapter en fonction du chipset identifiant le device USB \u00e0 r\u00e9initialiser, et des chemins relatifs des ex\u00e9cutables) :<\/p>\n<pre class=\"prettyprint\">#!&#47;bin&#47;bash\r\n\r\nDIR=$(cd $(dirname $0);pwd)\r\nNEEDLE=PL2303\r\nUSBDEV=&#47;dev&#47;bus&#47;usb&#47;$(&#47;usr&#47;bin&#47;lsusb | grep ${NEEDLE} | cut -d: -f1 | sed -r &#39;s#Bus (&#091;0-9&#093;{3}) Device (&#091;0-9&#093;{3})#\\1&#47;\\2#&#39;)\r\n\r\nif &#091; -c &#34;${USBDEV}&#34; &#093; ; then\r\n        if &#091; -x &#34;${DIR}&#47;..&#47;bin&#47;usbreset&#34; &#093; ; then\r\n                ${DIR}&#47;..&#47;bin&#47;usbreset &#34;${USBDEV}&#34;\r\n        else\r\n                echo &#34;Binary file usbreset not found, operation aborded.&#34; &gt;&amp;2\r\n                exit 2\r\n        fi\r\nelse\r\n        echo &#34;USB device for ${NEEDLE} not found, operation aborded.&#34; &gt;&amp;2\r\n        exit 1\r\nfi\r\n<\/pre>\n<p>Il ne reste plus qu&rsquo;\u00e0 <strong>scruter la base de donn\u00e9es<\/strong> \u00e0 intervalles r\u00e9guliers, par exemple au niveau de la boite d&rsquo;envoi. Si un SMS est vu avec un code retour erron\u00e9 :<\/p>\n<ol>\n<li>On arr\u00eate smsd<\/li>\n<li>On r\u00e9initialise les attributs du SMS en base de donn\u00e9es et son code retour, pour qu&rsquo;il soit trait\u00e9 \u00e0 nouveau<\/li>\n<li>On lance le script de r\u00e9initialisation du port USB<\/li>\n<li>On red\u00e9marre smsd<\/li>\n<li>On attend quelques secondes que le SMS soit \u00e0 nouveau trait\u00e9<\/li>\n<li>S&rsquo;il n&rsquo;a pas \u00e9t\u00e9 correctement trait\u00e9, on positionne un statut compl\u00e9mentaire (code d&rsquo;erreur ou autre) afin que cette boucle ne soit pas it\u00e9r\u00e9e \u00e0 l&rsquo;infini, le probl\u00e8me pouvant \u00eatre tout autre (modem cram\u00e9 \/ pas de r\u00e9seau \/ plus de cr\u00e9dit&#8230;)<\/li>\n<\/ol>\n<p>C&rsquo;est un mode de supervision basique et perfectible, mais il a le m\u00e9rite d&rsquo;exister. Avouons qu&rsquo;il serait dommage de louper le seul SMS automatis\u00e9 que vous recevrez par an (en dehors de ceux qui vous informent des soldes chez But ou Zara, et de celui du <a title=\"Bonne ann\u00e9e, &lt;insert_name_here&gt; !\" href=\"http:\/\/www.alphak.net\/news\/2013\/01\/bonne-annee-insert-name-here\/\">petit plaisantin geek qui vous souhaite une bonne ann\u00e9e<\/a>), le seul SMS automatis\u00e9 vraiment important, celui qui vous signale que votre congel n&rsquo;est plus aliment\u00e9 en \u00e9lectricit\u00e9, que votre maison est en feu ou \u00e0 la merci de cambrioleurs ind\u00e9licats, simplement \u00e0 cause d&rsquo;un petit blocage du modem GSM. Voila qui r\u00e9sout la probl\u00e9matique.<\/p>\n<h3>\u00c9v\u00e8nement n\u00b02 : l&rsquo;arriv\u00e9e du service de notification par SMS de Free Mobile<\/h3>\n<p>Xavier, si tu nous regardes, tu es pour moi un mod\u00e8le d&rsquo;admiration. Pourquoi ? Parce que Free a sorti fin juillet, j&rsquo;admets que \u00e7a date un peu, un nouveau service accessible gratuitement \u00e0 tous ses abonn\u00e9s Free Mobile. Ce service permet \u00e0 l&rsquo;abonn\u00e9 Free Mobile de recevoir, sur le num\u00e9ro de t\u00e9l\u00e9phone mobile li\u00e9 \u00e0 son compte, <strong>un SMS dont le texte est \u00e0 la discr\u00e9tion de l&rsquo;utilisateur<\/strong>, et cet envoi peut \u00eatre d\u00e9clench\u00e9 par une simple requ\u00eate web.<\/p>\n<p>Une <strong>API minimaliste<\/strong> qui s&rsquo;av\u00e8re \u00eatre une solution formidable pour ceux qui ne souhaitent pas se lancer dans l&rsquo;achat du modem GSM, d&rsquo;autant plus qu&rsquo;elle est accessible m\u00eame pour le forfait 2 euros. En r\u00e9sum\u00e9, le service de notification par SMS de Free Mobile constitue un atout ind\u00e9niable pour les bidouilleurs f\u00e9rus de domotique.<\/p>\n<p>Si on compare bri\u00e8vement les deux solutions, on notera principalement que le modem GSM offre plus de souplesse puisqu&rsquo;il permet l&rsquo;envoi de SMS vers n&rsquo;importe quel num\u00e9ro, et qu&rsquo;il permet la r\u00e9ception de SMS en plus de l&rsquo;envoi, possibilit\u00e9s non offertes par le service de notification de Free Mobile. D&rsquo;un autre c\u00f4t\u00e9, si on opte pour la solution modem GSM, il faut investir un peu d&rsquo;argent dans l&rsquo;appareil et dans le cr\u00e9dit de SMS associ\u00e9 au compte SIM. Autre aspect \u00e0 prendre en compte, m\u00eame si le service offert par Free Mobile s&rsquo;av\u00e8re d&rsquo;un grand secours pour un compl\u00e9ment p\u00e9cuniaire nul, rien n&rsquo;oblige la soci\u00e9t\u00e9 \u00e0 maintenir ce service dans le futur.<\/p>\n<p>Ce sont donc deux solutions qui poss\u00e8dent chacune leurs atouts et qui peuvent \u00eatre utilis\u00e9es en <strong>compl\u00e9ment<\/strong> l&rsquo;une de l&rsquo;autre, ce que je ne manquerai pas de faire.<\/p>\n<p>OK, c&rsquo;est bien gentil, mais comment on proc\u00e8de ?<\/p>\n<p>Il suffit de se rendre sur la page de gestion de son compte Free Mobile et d&rsquo;activer le service <em>\u00ab\u00a0Notification par SMS\u00a0\u00bb<\/em>. Une cl\u00e9 d&rsquo;identification est alors g\u00e9n\u00e9r\u00e9e, elle sera a utiliser avec l&rsquo;identifiant de l&rsquo;abonn\u00e9.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2950\" src=\"http:\/\/cdn.alphak.net\/news\/wp-content\/uploads\/sites\/2\/2014\/11\/freemobile-sms-notification-instructions.png\" alt=\"freemobile-sms-notification-instructions\" width=\"526\" height=\"374\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2014\/11\/freemobile-sms-notification-instructions.png 526w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2014\/11\/freemobile-sms-notification-instructions-300x213.png 300w\" sizes=\"(max-width: 526px) 100vw, 526px\" \/><\/p>\n<p>Il est alors possible d&rsquo;utiliser ces informations pour d\u00e9clencher l&rsquo;envoi du SMS de notification par une simple page web. Le principe est \u00e9videmment automatisable, c&rsquo;est le but, par un script \u00e9crit dans le langage de votre choix. Ici, un exemple en shell\/PHP \u00e9crit et test\u00e9 en 15 minutes :<\/p>\n<pre class=\"prettyprint\">#!&#47;bin&#47;bash\r\nSMSUSER=12345678\r\nSMSPASS=VL9PavlBHInVwz\r\nSMSMESG=&#39;Youpi ! Envoyons des SMS de notification avec Free !&#39;\r\nSMSURL=&#39;https:&#47;&#47;smsapi.free-mobile.fr&#47;sendmsg?user=&#39;${SMSUSER}&#39;&amp;pass=&#39;${SMSPASS}&#39;&amp;msg=&#39;$(php -r &#39;print rawurlencode($argv&#091;1&#093;).&#34;\\n&#34;;&#39; -- &#34;${SMSMESG}&#34;)\r\nHTTPCODE=$(curl -k -s -o &#47;dev&#47;null -m 15 -w &#39;%{http_code}&#39; &#34;${SMSURL}&#34;)\r\nERRORCODE=$?\r\n\r\nif &#091; &#34;${ERRORCODE}&#34; != 0 &#093; ; then\r\n        exit 2\r\nelse\r\n        if &#091; &#34;${HTTPCODE}&#34; != 200 &#093; ; then\r\n                exit 3\r\n        else\r\n                exit 0\r\n        fi\r\nfi<\/pre>\n<p>Script qui entraine imm\u00e9diatement l&rsquo;arriv\u00e9e du SMS suivant sur mon mobile :<\/p>\n<div id=\"attachment_2951\" style=\"width: 253px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/cdn.alphak.net\/news\/wp-content\/uploads\/sites\/2\/2014\/11\/notification-on-smartphone.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2951\" class=\"wp-image-2951 size-medium\" src=\"http:\/\/cdn.alphak.net\/news\/wp-content\/uploads\/sites\/2\/2014\/11\/notification-on-smartphone-243x300.jpg\" alt=\"What else ?\" width=\"243\" height=\"300\" \/><\/a><p id=\"caption-attachment-2951\" class=\"wp-caption-text\">What else ?<\/p><\/div>\n<p>C&rsquo;est sur ces derniers mots que je conclus cet article bonus. En d&rsquo;autres termes, c&rsquo;est tout pour aujourd&rsquo;hui. Dans mon prochain article, je d\u00e9taillerai une petite installation que j&rsquo;ai mise en place \u00e0 domicile, et qui un jour peut-\u00eatre permettra de sauver une vie.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le th\u00e8me de l&rsquo;<strong>envoi automatis\u00e9 de SMS<\/strong>, je pensais l&rsquo;avoir trait\u00e9 en long en large et en travers, alors je m&rsquo;\u00e9tais jug\u00e9 que je n&rsquo;en reparlerais plus. Il faut dire que \u00e7a marchait plut\u00f4t bien. \u00c7a fonctionnait tellement bien, que parfois, je recevais m\u00eame des mignons petits messages de gentils inconnus qui s&rsquo;\u00e9taient malencontreusement plant\u00e9s de num\u00e9ro, dans ce genre l\u00e0 :<\/p>\n<p>Et il faut le dire, parfois, dans ce cas-l\u00e0, j&rsquo;h\u00e9sitais \u00e0 r\u00e9pondre. Et parfois, dans ce cas-l\u00e0, le choix de r\u00e9ponse \u00e9tait corn\u00e9lien, comme si cela entrainait des r\u00e9percussions capitales sur tout le reste de ma longue et h\u00e9ro\u00efque qu\u00eate de l&rsquo;aventure humaine :<\/p>\n\t<div class=\"post-teaser-block\">\r\n\t\t<div class=\"teaserHellip\">\r\n\t\t\t<span class=\"teaserLeft\">[<\/span><span class=\"teaserCenter\">&hellip;<\/span><span class=\"teaserRight\">]<\/span>\r\n\t\t<\/div>\r\n\t\t<div class=\"teaserText\">\r\n\t\t\t<a href=\"https:\/\/www.alphak.net\/news\/2014\/11\/sms-automatise-bonus-round\/\" title=\"SMS automatis\u00e9 \u2013 Bonus round\" rel=\"bookmark\"><span class=\"teaserlink\">Lire la suite de l'article&nbsp;<i class=\"fa fa-chevron-right\"><\/i><\/span><\/a>\r\n\t\t<\/div>\r\n\t\t<a class=\"teaserLink\" href=\"https:\/\/www.alphak.net\/news\/2014\/11\/sms-automatise-bonus-round\/\" title=\"SMS automatis\u00e9 \u2013 Bonus round\" rel=\"bookmark\"><\/a>\r\n\t<\/div>\r\n","protected":false},"author":1,"featured_media":2957,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[253],"tags":[36,345,265,263,346],"class_list":["post-2938","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projet-domotique","tag-domotique","tag-free-mobile","tag-gnokii","tag-sms","tag-supervision"],"_links":{"self":[{"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/posts\/2938"}],"collection":[{"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/comments?post=2938"}],"version-history":[{"count":17,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/posts\/2938\/revisions"}],"predecessor-version":[{"id":3033,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/posts\/2938\/revisions\/3033"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/media\/2957"}],"wp:attachment":[{"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/media?parent=2938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/categories?post=2938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/tags?post=2938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}