mercoledì 10 agosto 2016

ELM 327

Ho avuto modo di provare ELM327, un dispositivo WiFI o Bluetooth, che si collega CAN Bus delle automobili per avere informazioni in tempo reale sul funzionamento del motore

Versione Bluetooth e WiFi

La presa del sistema ODB (diagnostica di bordo) e' presente in tutte le macchine moderne (post 2000) e si trova in posizioni differenti. Nella Fiat Qubo si trova sotto al volante a sinistra nel quadro fusibili dopo avere rimosso un ampio coperchio

La presa OBD e' quella di colore giallo posta in verticale

Per raccogliere i dati esistono numerosi programmi per praticamente tutti i sistemi operativi, compresi smartphone. Sul CD in dotazione sono presenti diversi programmi fra cui Torque Pro per Android (che e' un programma a pagamento su Play Store)



Dovendo sviluppare una applicazione per interfacciare OBD ho pero' necessita' di capire come funziona nel dettaglio il dispositivo. Alcune interessanti informazioni si possono trovare a questo link

ELM327 in versione WiFi si presenta come un Access Point senza password e senza criptazione con DHCP. L'IP di default dell'ELM327 e' 192.168.0.10 e non e' possibile modificare (in modo semplice) l'SSID

ATTENZIONE: questa configurazione crea un paio di problemi

  • se ci sono macchine vicine tutte con ELM327 ci sara' confusione perche' tutte si dichiarano con lo stesso SSID
  • il telefono si collega all'access point dell'ELM327 e non si collega piu' ad Internet (su Android compare il segno della connessione con il punto esclamativo)

in conclusione puo' essere piu' comodo usare un modulo Bluetooth anche se il punto 1 non e' totalmente superato (diciamo che il raggio d'azione di BT e' inferiore a WiFi e cio' aiuta a non confondere le connessioni)

Effettuando una scansione con nmap si ottiene
-------------------------------------------------------------------------------
[root@localhost linnocenti]# nmap -sS 192.168.0.10

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-09 22:09 CEST
Nmap scan report for 192.168.0.10
Host is up (0.012s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:0E:C6:01:F7:B6 (Asix Electronics)

Nmap done: 1 IP address (1 host up) scanned in 23.68 seconds


Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-09 22:18 CEST
Nmap scan report for 192.168.0.10
Host is up (0.0022s latency).
PORT      STATE SERVICE
35000/tcp open  unknown
MAC Address: 00:0E:C6:01:F7:B6 (Asix Electronics)

[root@localhost linnocenti]# nmap -sU 192.168.0.10

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-09 22:20 CEST
Nmap scan report for 192.168.0.10
Host is up (0.0015s latency).
Not shown: 998 closed ports
PORT      STATE         SERVICE
67/udp    open|filtered dhcps
49153/udp open|filtered unknown
MAC Address: 00:0E:C6:01:F7:B6 (Asix Electronics)

Nmap done: 1 IP address (1 host up) scanned in 65.55 seconds

[root@localhost linnocenti]# nmap -sO 192.168.0.10

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-09 22:22 CEST
Nmap scan report for 192.168.0.10
Host is up (0.053s latency).
Not shown: 253 closed protocols
PROTOCOL STATE SERVICE
1        open  icmp
6        open  tcp
17       open  udp
MAC Address: 00:0E:C6:01:F7:B6 (Asix Electronics)

Nmap done: 1 IP address (1 host up) scanned in 18.47 seconds
-----------------------------------------------------
Il sistema si presenta come una ASIX Electronics (in particolare e' un AX220XX, un dispositivo che fa da ponte tra una RS232, ovvero il sistema ODB, ed il WiFi

Sul UDP sono aperti i servizi DHCP ed un servizio sconosciuto su porta 49153 (questa porta sembra che sia necessaria per connettere l'interfaccia AX200 RS3232-to-WiFi al vero e proprio modulo WiFi  in ascolto su 25125/TCP...non e' possibile programmare il modulo WiFi se non dissaldondolo e connettendosi in seriale TTL con la caratteristica modalita' Null Modem..quindi con collegamento Tx-Tx, Rx-Rx vedi questo documento a pagina 8)

Su TCP viene scoperto un servizio HTTP su porta 80. Connettendosi si ottiene in riposta una pagina index..html vuota
Il dispositivo risponde anche al Ping

Non viene mostrata (e non ne capisco il motivo la porta 35000/TCP) che e' quella dove effettivamente e' presente il server che fornisce i dati

si puo' telnettare su porta 35000 e mediante comandi AT si possono ottenere le informazioni desiderate
per semplicita' ho provato ad interrogare il numero di giri motore che si ottengono inviando il comando 010C

(anche in questo caso niente password...meno male che con OBD non si possono modificare i parametri del motore .....)
-----------------------------------------------------
[root@localhost linnocenti]# telnet 192.168.0.10 35000
Trying 192.168.0.10...
Connected to 192.168.0.10.
Escape character is '^]'.
>010c
>10C13F0
-----------------------------------------------------
La risposta non e' quella attesa (vedi questo link), mi sa qualche casino sulla codifica dei caratteri,  che doveva essere qualcosa del tipo

>010C
SEARCHING: OK
41 0C 0F A0
in ogni caso si puo' pensare che gli rpm siano 13F0 che tradotti indicano in decimale 5104 questo numero deve essere diviso per 4 per un valore di 1276 rpm
a motore spento il numero di giri e' ovviamento 0

>10C0000

Per Bluetooth il discorso e' piu' o meno il solito. Ci si connette con il servizio della seriale virtuale Bluetooth con il pin 1234 con baud rate 38400 8N1
un po' piu' nel dettaglio..per prima cosa ho dovuto sbloccare il soft block sul bluetooth della Linux Box

[root@localhost linnocenti]# rfkill list
0: tpacpi_wwan_sw: Wireless WAN
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no

[root@localhost linnocenti]# rfkill unblock 3
[root@localhost linnocenti]# rfkill list
0: tpacpi_wwan_sw: Wireless WAN
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: no
Hard blocked: no

a questo punto si scansiona per cercare l'ELM 327
hcitool scan
Scanning ...
00:1D:A5:68:98:8C OBDII

avendo l'ID BT si puo' interrogare il dispositivo per vedere che servizi espone

sdptool browse  00:1D:A5:68:98:8C

Browsing 00:1D:A5:68:98:8C ...
Service Name: SPP
Service RecHandle: 0x10001
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1

viene mostrata la porta seriale virtuale BT che e' quella su cui passano i dati RFCOMM

ATTENZIONE : il dispositivo non si spenge quando viene tolto il collegamento dalla chiave della macchina e quindi viene consumata la batteria anche a macchina ferma.