====== Installation et configuration d'une clé 4G LTE ======
===== Modèle testé =====
D-Link, Model:DWM-221. La datasheet et le manuel d'utilisateur sont accessibles sur [[http://www.dlink.com/fr/fr/support/product/dwm-221-4g-lte-usb-adapter|dlink.com]].
===== Installation =====
pi@raspberrypi(rw):~$ lsusb
Bus 001 Device 010: ID 2001:a401 D-Link Corp.
pi@raspberrypi(rw):~$ sudo lsusb -v -s 001:010
Bus 001 Device 010: ID 2001:a401 D-Link Corp. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x2001 D-Link Corp.
  idProduct          0xa401 
  bcdDevice            2.32
  iManufacturer           1 Mobile Connect
  iProduct                2 Mobile Connect
  iSerial                 3 0123456789ABCDEF
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              4 Mass Storage
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0000
  (Bus Powered)
On ajoute ces quatre lignes dans le fichier :
Je ne sais pas s'il faut utiliser le fichier ''usb_modeswitch.conf'' finalement...
[Edit: Il faut ! Pour ne pas avoir à utiliser la longue commande [[usb_modswitch]] ci-dessous et que le modem 3G soit prêt au démarrage! Il faut juste le configurer correctement! /Edit]
[Edit2: La configuration finale de ce fichier est plus bas./Edit2]
$ sudo nano /etc/usb_modeswitch.conf
$ sudo cat /etc/usb_modeswitch.conf
(...)
DefaultVendor=0x2001
DefaultProduct=0xa401
MessageEndpoint="0x01"
MessageContent="55534243123456780000000000000011062000000101000100000000000000"
On utilise la commande [[usb_modeswitch]] avec ces arguments (trouvé sur [[http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=3&t=2173&start=60|ce forum (draisberghof.de)]]). Je n'ai pas très bien compris où on peut trouver les trois "messages" qu'on envoie (''55534...''), je me suis contenté de copier/coller.
pi@raspberrypi(rw):~$ sudo usb_modeswitch -v 2001 -p a401 -W -n -M 555342435b000000000000000001061e000000000000000000000000000000 -2 555342435c000000000000000001061b000000010000000000000000000000 -3 555342435d000000000000000001061b000000020000000000000000000000
Take all parameters from the command line
 * usb_modeswitch: handle USB devices with multiple modes
 * Version 2.2.0 (C) Josua Dietze 2014
 * Based on libusb1/libusbx
 ! PLEASE REPORT NEW CONFIGURATIONS !
DefaultVendor=  0x2001
DefaultProduct= 0xa401
MessageContent="555342435b000000000000000001061e000000000000000000000000000000"
MessageContent2="555342435c000000000000000001061b000000010000000000000000000000"
MessageContent3="555342435d000000000000000001061b000000020000000000000000000000"
NeedResponse=1
Look for default devices ...
  found USB ID 2001:a401
   vendor ID matched
   product ID matched
  found USB ID 0a5c:bd1e
  found USB ID 0483:2016
  found USB ID 04b3:3021
  found USB ID 04b3:3022
  found USB ID 0424:ec00
  found USB ID 0424:9514
  found USB ID 1d6b:0002
 Found devices in default mode (1)
Access device 012 on bus 001
Current configuration number is 1
Use interface number 0
Use endpoints 0x01 (out) and 0x81 (in)
USB description data (for identification)
-------------------------
Manufacturer: Mobile Connect
     Product: Mobile Connect
  Serial No.: 0123456789ABCDEF
-------------------------
Looking for active driver ...
 No active driver found. Detached before or never attached
Set up interface 0
Use endpoint 0x01 for message sending ...
Trying to send message 1 to endpoint 0x01 ...
 OK, message successfully sent
Read the response to message 1 (CSW) ...
 Response successfully read (13 bytes).
Trying to send message 2 to endpoint 0x01 ...
 OK, message successfully sent
Read the response to message 2 (CSW) ...
 Response successfully read (13 bytes).
Trying to send message 3 to endpoint 0x01 ...
 OK, message successfully sent
Read the response to message 3 (CSW) ...
 Response successfully read (13 bytes).
Reset response endpoint 0x81
Reset message endpoint 0x01
-> Run lsusb to note any changes. Bye!
pi@raspberrypi(rw):~$ lsusb 
Bus 001 Device 013: ID 2001:7e19 D-Link Corp. 
Bus 001 Device 005: ID 0a5c:bd1e Broadcom Corp. 
Bus 001 Device 011: ID 0483:2016 STMicroelectronics Fingerprint Reader
Bus 001 Device 010: ID 04b3:3021 IBM Corp. 
Bus 001 Device 009: ID 04b3:3022 IBM Corp. 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi(rw):~$ dmesg | grep ttyUSB
[  806.074853] usb 1-1.5: GSM modem (1-port) converter now attached to ttyUSB0
[  806.075897] usb 1-1.5: GSM modem (1-port) converter now attached to ttyUSB1
[  806.076943] usb 1-1.5: GSM modem (1-port) converter now attached to ttyUSB2
[  806.077874] usb 1-1.5: GSM modem (1-port) converter now attached to ttyUSB3
J'ai un problème quand j'essaye de me connecter parce que je n'ai pas pu mettre le code pin. J'ai donc suivi [[http://john.de-graaff.net/wiki/doku.php/links/umts_debian|ce tutoriel (john.de-graaff.net)]] pour mettre le code pin, me connecter et finalement supprimer l'authentification par code pin (pour ne plus avoir besoin de le faire manuellement!).
$ sudo apt-get install minicom
J'ai configuré minicom pour les quatre ttyUSB*, j'ai trouvé le baurdate via [[https://code.aliyun.com/yaoruisheng/k2-router/tree/514dad408f1dd5bc6f491d41f445828a4e8876ed/uboot/mips|un développeur chinois]]...
pi@raspberrypi(rw):~$ cat /etc/minicom/minirc.ttyUSB0
pu port		/dev/ttyUSB0
pu baudrate	115200
pu bits		8
pu parity	N
pu stopbits	1
pu minit	ATZ
pi@raspberrypi(rw):~$ cat /etc/minicom/minirc.ttyUSB1
pu port		/dev/ttyUSB1
pu baudrate	115200
pu bits		8
pu parity	N
pu stopbits	1
pu minit	ATZ
pi@raspberrypi(rw):~$ cat /etc/minicom/minirc.ttyUSB2
pu port		/dev/ttyUSB2
pu baudrate	115200
pu bits		8
pu parity	N
pu stopbits	1
pu minit	ATZ
pi@raspberrypi(rw):~$ cat /etc/minicom/minirc.ttyUSB3
pu port		/dev/ttyUSB3
pu baudrate	115200
pu bits		8
pu parity	N
pu stopbits	1
pu minit	ATZ
Connexion!!
pi@raspberrypi(rw):~$ sudo minicom ttyUSB2
Une fois dans minicom, connecté au modem, on peut essayer plein de choses. Voici des exemples et le retour des commandes avec une [[carte SIM de chez Proximus]] et une [[carte SIM de chez Base]].
L'essentiel étant de ne plus avoir besoin du code pin pour activer la connexion aux données. Pour ce faire, voici la commande à taper :
AT+CLCK="SC",0,"1234"                                                           
OK
On peut configurer dans le fichier ''/etc/network/interfaces'' : 
pi@raspberrypi(rw):~$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
iface eth0 inet manual
#Désactiver l'interface wlan0 (interne à sur un Raspberry Pi 3
#allow-hotplug wlan0
#iface wlan0 inet manual
#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#D-Link (3G,4G,LTE)
auto ppp0
iface ppp0 inet wvdial
Je pense que le fichier ''gprs'' n'est plus utile, puisqu'on utilise ''wvdial''. À confirmer.
Et dans le fichier ''/etc/ppp/peers/gprs'' :
pi@raspberrypi(rw):~$ sudo cat /etc/ppp/peers/gprs
user "pi"
connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs -T em"
/dev/ttyUSB0
noipdefault
defaultroute
replacedefaultroute
hide-password
noauth
persist
usepeerdns
Avec wvdial :
pi@raspberrypi(rw):~$ cat /etc/wvdial.conf 
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 +FCLASS=0
Modem Type = Analog Modem
Baud = 460800
Stupid Mode = 1
New PPPD = yes
Modem = /dev/ttyUSB1
ISDN = 0
Phone = *99#
Password = '';
Username = '';
Avec la carte SIM de chez Base, j'ai du mettre "Modem = /dev/ttyUSB2" pour que ça fonctionne.
Enfin, on peut activer l'interface ppp0 :
pi@raspberrypi(rw):~$ sudo ifup ppp0 
Et voir que tout roule dans [[ifconfig]] :
pi@raspberrypi(rw):~$ ifconfig 
eth0      Link encap:Ethernet  HWaddr b8:27:eb:63:e1:64  
          adr inet6: fe80::3fa0:327c:1470:f457/64 Scope:Lien
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
lo        Link encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
ppp0      Link encap:Protocole Point-à-Point  
          inet adr:100.115.xxx.xxx  P-t-P:10.64.64.64  Masque:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:13618 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10473 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:3 
          RX bytes:16438678 (15.6 MiB)  TX bytes:647948 (632.7 KiB)
wlan1     Link encap:Ethernet  HWaddr fc:b4:e6:af:d0:f9  
          inet adr:192.168.x.xxx  Bcast:192.168.5.255  Masque:255.255.255.0
          adr inet6: fe80::f45f:ec3a:7fd5:be5f/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17147 errors:0 dropped:10532 overruns:0 frame:0
          TX packets:3864 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:2928538 (2.7 MiB)  TX bytes:509019 (497.0 KiB)
wwan0     Link encap:Ethernet  HWaddr 0e:b1:82:d0:4e:a1  
          inet adr:169.254.xxx.xxx  Bcast:169.254.255.255  Masque:255.255.0.0
          adr inet6: fe80::b785:3bc:9b3d:b245/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:153 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:0 (0.0 B)  TX bytes:51271 (50.0 KiB)
J'ai fait différents tests et j'avais différents soucis avec les DNS. J'ai installé [[resolvconf]] et le problème a été résolu. (Avant, le fichier resolv.conf était écrasé par ''openresolv''.
$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 80.201.237.239
nameserver 80.201.237.238
Il restait encore un problème. Au démarrage, il fallait lancer [[usb_modeswitch]] avec une commande longue : 
$ sudo usb_modeswitch -v 2001 -p a401 -W -n -M 555342435b000000000000000001061e000000000000000000000000000000 -2 555342435c000000000000000001061b000000010000000000000000000000 -3 555342435d000000000000000001061b000000020000000000000000000000
On peut simplifier cette commande en configuration le fichier '2001:a401' :
$ sudo nano /etc/usb_modeswitch.d/2001:a401
$ sudo cat /etc/usb_modeswitch.d/2001:a401 
#D-Link DWM-221
TargetVendor=0x2001
TargetProduct=0x7e19
MessageContent="555342435b000000000000000001061e000000000000000000000000000000"
MessageContent2="555342435c000000000000000001061b000000010000000000000000000000"
MessageContent3="555342435d000000000000000001061b000000020000000000000000000000"
On peut maintenant utiliser la commande suivante :
$ sudo usb_modeswitch -v 2001 -p a401 -c /etc/usb_modeswitch.d/2001:a401
C'est mieux, mais il faudrait que le réseau démarre correctement au démarrage. Il faudrait aussi qu'il (re)démarre automatiquement si on branche la clé 3G. Hop, un petit service [[systemd]] :
$ sudo nano /lib/systemd/system/3g.service
$ sudo cat /lib/systemd/system/3g.service 
[Unit]
Description=Connexion 3G
After=network.target
[Service]
ExecStartPre=/usr/sbin/usb_modeswitch -v 2001 -p a401 -c /etc/usb_modeswitch.d/2001:a401
ExecStart=/usr/bin/wvdial &
ExecStartPost=/sbin/resolvconf -u
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
On relance le daemon qui gère les services, on active le service et on regarde ce que ça donne!
$ sudo systemctl daemon-reload 
$ sudo systemctl enable 3g.service
$ sudo systemctl status 3g.service
● 3g.service - Connexion 3G
   Loaded: loaded (/lib/systemd/system/3g.service; enabled)
   Active: active (running) since mer 2016-09-07 15:27:43 CEST; 29min ago
 Main PID: 2672 (wvdial)
   CGroup: /system.slice/3g.service
           ├─2672 /usr/bin/wvdial &
           └─2692 /usr/sbin/pppd 460800 modem crtscts defaultroute usehostname -detach user ''; noipdefault cal...
sep 07 15:27:44 raspberrypi wvdial[2672]: [19B blob data]
sep 07 15:27:44 raspberrypi wvdial[2672]: [19B blob data]
sep 07 15:27:44 raspberrypi wvdial[2672]: --> local  IP address 100.xxx.xxx.xxx
sep 07 15:27:44 raspberrypi wvdial[2672]: [19B blob data]
sep 07 15:27:44 raspberrypi wvdial[2672]: --> remote IP address 10.xxx.xxx.xxx
sep 07 15:27:44 raspberrypi wvdial[2672]: [19B blob data]
sep 07 15:27:44 raspberrypi wvdial[2672]: --> primary   DNS address 80.201.237.239
sep 07 15:27:44 raspberrypi wvdial[2672]: [19B blob data]
sep 07 15:27:44 raspberrypi wvdial[2672]: --> secondary DNS address 80.201.237.238
sep 07 15:27:44 raspberrypi wvdial[2672]: [19B blob data]
===== Sources =====
  * [[http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=3&t=2173&start=60|forum (draisberghof.de)]]
  * [[http://john.de-graaff.net/wiki/doku.php/links/umts_debian|se connecter avec minicom sur la clé 3G (john.de-graaff.net)]]
  * [[http://www.dlink.com/fr/fr/support/product/dwm-221-4g-lte-usb-adapter|DWM-221 4G-LTE usb adapter (dlink.com)]]
  * [[https://enavarro.me/raspberry-pi-connection-3g-et-envoi-de-sms-en-meme-temps.html|connection 3G et envoi de sms (enavarro.me)]]
  * [[https://www.emnify.com/2015/06/18/how-to-fit-a-raspberry-pi-with-mobile-connectivity/|how to fit a raspberry with mobile connectivité (emmify.com)]]
  * [[http://raspberry-at-home.com/installing-3g-modem/|installing 3G modem (raspberry-at-home.com)]]
  * [[https://shkspr.mobi/blog/2012/07/3g-internet-on-raspberry-pi-success/|3G internet on Raspberry Pi success (shkspr.mobi)]]
  * [[http://www.sbprojects.com/projects/raspberrypi/mobile.php|Raspberry Pi - mobile (sbprojects.com)]]