Come usare le API dei servizi connessi Renault
Servizi connessi Renault: come implementare un programmino per interrogare le API (Application Programming Interfaces) dei servizi Z.E. di Renault.
Servizi connessi Renault*. In questo post, rivolto principalmente ai programmatori (ed aspiranti tali) proprietari di un veicolo elettrico Renault (ad esempio ZOE), intendiamo spiegare brevemente come sia possibile interrogare i servizi connessi Renault (Renault ZE Services) per recuperare semplici informazioni sullo stato corrente del proprio veicolo.
* Con Application Programming Interface (acronimo: API, in italiano: Interfaccia di Programmazione di un’Applicazione), in informatica, s’indica ogni insieme di procedure disponibili al programmatore di solito raggruppate a formare un set di strumenti specifici per l’espletamento di un determinato compito all’interno di un certo programma.
Le informazioni che si possono recuperare e le azioni che si possono compiere sono le medesime di quelle gestite dal sito Web “My ZE Online“ e dalle app di Z.E. Services di Renault (disponibili sia per iOS che per Android).
Come spiegato dal Costruttore, dette applicazioni “consentono di trasformare l’auto elettrica in un veicolo intelligente e soprattutto di semplificare la quotidianità del cliente prima, durante e dopo un viaggio. Il conducente troverà quindi informazioni essenziali per la gestione dell’autonomia del proprio veicolo”.
Servizi connessi Renault – Tutti i metodi delle API
Tornando alle API dei servizi connessi Renault, delle quali – tra l’altro – non siamo riusciti a reperire in Rete la documentazione ufficiale, le tipologie di azioni che si possono svolgere sono essenzialmente le seguenti:
- consultare lo percentuale di carica della batteria, la stima della distanza residua e lo stato della ricarica;
- avviare da remoto il pre-condizionamento dell’abitacolo;
- consultare lo storico dei pre-condizionamenti;
- visualizzare ed impostare la pianificazione della ricarica (giorno e ora di avvio e di interruzione);
- accedere allo storico delle ricariche effettuate.
I prerequisiti per l’utilizzo di queste funzionalità sono le seguenti:
- essere registrati ai Servizi connessi Renault, dunque essere in possesso di un nome utente e di una password;
- conoscere il VIN del proprio veicolo elettrico (il Vehicle Identification Number ovvero il numero di telaio).
Servizi connessi Renault – Il programmino per le info sulla batteria
Una volta che si è in possesso delle suddette informazioni si può procedere allo scrittura di un semplice programma PHP** per la verifica dello stato della batteria. Ovviamente occorre disporre di un PC con installati un servizio Web (IIS o Apache) ed il motore del linguaggio PHP.
** Il PHP (acronimo ricorsivo di “PHP: Hypertext Preprocessor”, preprocessore di ipertesti; originariamente acronimo di “Personal Home Page”) è un linguaggio di scripting interpretato, originariamente concepito per la programmazione di pagine web dinamiche. L’interprete PHP è un software libero distribuito sotto la PHP License. Il PHP è principalmente utilizzato per sviluppare applicazioni web lato server, ma può essere usato anche per scrivere script a riga di comando o applicazioni stand-alone con interfaccia grafica.
Queste sono le poche righe di codice sorgente necessarie per la generazione di una semplice pagina Web che mostra i dati di base della batteria:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | <html> <head> <title>Dati ZOE</title> </head> <body style="font-family:'arial'"> <h1>Dati Renault ZOE</h1> <img src="zoe.jpg" alt="Renault ZOE" /> <?php // Timezone date_default_timezone_set('Europe/Rome'); // Dati identificativi $username = '<TUA_USERNAME>'; $password = '<TUA_PASSWORD>'; $vin = '<TUO_VIN>'; // API url di base $host = 'https://www.services.renault-ze.com'; // Funzione per la chiamata all'API function makeAPICall($options, $url) { $context = stream_context_create($options); $result = file_get_contents($url, false, $context); return $result; } // Prima chiamata $url = $host . '/api/user/login'; // Dati JSON $data = array('username' => $username, 'password' => $password); // Opzioni $options = array( 'http' => array( 'header' => "Content-Type: application/json\r\n", 'method' => 'POST', 'content' => json_encode($data) ) ); // Chiamata $result = makeAPICall($options, $url); // Gestione output if ($result === false) { echo '<strong>Errore 1a chiamata!<br/>URL = ' . $url . '<br/> :-( <br/></strong>'; } else { // JSON decoding $resultData = json_decode($result, true); // Saluto $user = $resultData['user']; $first_name = $user['first_name']; echo '<p>Ciao '.$first_name.'!</p>'; // Token $token = $resultData['token']; // Seconda chiamata; dati sulla batteria $url2 = $host . '/api/vehicle/' . $vin . '/battery'; // Opzioni $options2 = array( 'http' => array( 'header' => 'Authorization: Bearer '.$token, 'method' => 'GET' ) ); // Chiamata $result2 = makeAPICall($options2, $url2); // Gestione output if ($result2 === false) { echo '<strong>Errore 2a chiamata!<br/>URL = ' . $url2 . '<br/> :-( <br/></strong>'; } else { // JSON decoding $resultData2 = json_decode($result2, true); // Get dati $charging = $resultData2['charging']; $plugged = $resultData2['plugged']; $charge_level = $resultData2['charge_level']; $remaining_range = $resultData2['remaining_range']; $last_update = $resultData2['last_update']; // Formattazione dati $charge_level = $charge_level . "%"; $remaining_range = $remaining_range . " km"; $charging = empty($charging) ? "<font color=red>non sotto carica</font>" : "<font color=green>in carica</font>"; $plugged = empty($plugged) ? "<font color=red>scollegato</font>" : "<font color=green>collegato</font>"; $last_update = date("d-m-Y H:i", substr($last_update, 0, 10)); // Costruzione output $out_str = ''; $out_str .= '<ul>'; $out_str .= '<li>Livello di carica della batteria: <strong>'.$charge_level.'</strong></li>'; $out_str .= '<li>Stima della distanza rimanente: <strong>'.$remaining_range.'</strong></li>'; $out_str .= '<li>Stato della ricarica: <strong>'.$charging.'</strong></li>'; $out_str .= '<li>Cavo: <strong>'.$plugged.'</strong></li>'; $out_str .= '<li>Data e ora aggiornamento: <strong>'.$last_update.'</strong></li>'; $out_str .= '</ul>'; // Invio output echo $out_str; } } ?> </body> </html> |
L’output prodotto consiste in una pagina del seguente tipo:
Ovviamente la grafica può essere facilmente migliorata e/o modificata a piacimento.
Per altre informazioni su come gestire il precondizionamento e la ricarica, vi rimandiamo alle seguente pagina di GitHub.
Grazie per l’attenzione e alla prossima!
Team GAA
Commenti recenti