elm327 BT / Android

  • Initiateur de la discussion Initiateur de la discussion priusfan
  • Date de début Date de début
silence radio

Bonjour à tous et désolé pour le silence radio mais j'ai été pas mal occupé ces derniers mois et j'ai pas bcp modifié le HSDCanMonitor.
J'ai quand même committé qq modifs hier qui correspondent à l'utilisation que j'en fait (attention je ne m'en sers qu'en mode paysage donc je ne sais pas ce que donne le mode portrait en ce moment).
Par contre dans les modifs qui peuvent intéresser j'ai ajouté le fait de mémoriser l'adresse du dernier device bt connecté et de m'y reconnecter au prochain démarrage.

A+,
G.
 
l'obdlink est effectivement un super truc.
un petit "détail" quand-même: il ne sort pas de léthargie spontanément.
concrètement, j'utilise un de ces truc en BT et je fais des tests avec Torque sur plateforme android.
je dois débrancher et rebrancher le dongle quand il a commencé à faire dodo.

prius2009
son projet est (encore...) en cours de modif:
il est en train d' intégrer le CAN "Stuffing" , càd les requêtes multiples du type
21c3c4
au lieu de
21 c3
21 c4

je l'avais contacté pour lui signaler qu'il avait intérêt à utiliser ce truc;
il ne le connaissait pas et il est vachement content de le mettre en œuvre.

je lui ai également suggéré de contacter notre planetaire national...
 
Bonjour à tous et désolé pour le silence radio mais j'ai été pas mal occupé ces derniers mois et j'ai pas bcp modifié le HSDCanMonitor.
J'ai quand même committé qq modifs hier qui correspondent à l'utilisation que j'en fait (attention je ne m'en sers qu'en mode paysage donc je ne sais pas ce que donne le mode portrait en ce moment).
Par contre dans les modifs qui peuvent intéresser j'ai ajouté le fait de mémoriser l'adresse du dernier device bt connecté et de m'y reconnecter au prochain démarrage.

A+,
G.

Cool faut que je récupère la version. Sinon oui ça a avancé côté interface, je vais committer une nouvelle version en 1.1, je vais voir si je peux créer une branche pour la 1.0.
Peut être aussi faut il aussi mémoriser dans les sharedprefs le type de dongle et donc initialiser différemment la connexion.
 
Cool, j'attends aussi, Et en mode paysage en plus, 2 fois cool.
Mais je peux davantage patienter maintenant que j'ai corrigé pcm tactrix.
 
bonsoir guinness
grand plaisir d'avoir des news de toi.
je testerai ce WE ton nouveau truc.

de mon coté, mon boulot me pompe mon énergie créative, mais il y aura des retombées sur notre projet en cours, je m'explique:

je suis en train de développer une appli métier sur android qui permettra aux commerciaux de ma boite de travailler sans connexions.
(ils ont déja des portables sous windows, mais cela fait tièpe face aux ipads...)

concrètement:

  • une tablette sous android (asus transformer)

  • qui contient dans une base SQLite un subset de la bd de l'entreprise (cela a été plutôt sympa de procéder à l'analyse des données pertinentes puis à l'automatisation de l'export DB2 vers du SQLite)

  • enfin une appli en cours de dev avec B4A; les premiers tests de faisabilité, check des temps de réponse, possibilité de faire un IHM à ma convenance sont plus que satisfaisant.

Cela me permet de beaucoup mieux cerner les possibilités/contraintes de cet OS.

je penche maintenant vers une appli dont la partie sollicitation/collecte/caculs/logging est effectuée en tant que service (cela a depuis longtemps été mon souhait, je sais aujourd'hui que c'est faisable sans trop de difficultés), cela permet de continuer à logger quelque soit l'usage du phone.
@suivre FX
 
je penche maintenant vers une appli dont la partie sollicitation/collecte/caculs/logging est effectuée en tant que service (cela a depuis longtemps été mon souhait, je sais aujourd'hui que c'est faisable sans trop de difficultés), cela permet de continuer à logger quelque soit l'usage du phone.
@suivre FX

Bonne idée, si tu n'as pas avancé d'ici Noël (peu de chance que j'arrive à trouver du temps avant 8), d'autant plus que finalement je n'ai pas de dev à faire sur Android pour le boulot pour l'instant) je pourrais jeter un oeil sur la service-isation des classes qui ne sont pas dans le package activities (ce projet a été ma formation sur Android, je ne connaissais pas la classe android.app.Service 😳).

Sinon soyez pas timides pour committer des modifs dans le projet code.google, je trouverai toujours le temps de jeter un oeil sur les modifs.

A+,
G.
 
bonjour,
entre hier et aujourd'hui, j' ai développé, à partir de zéro, avec B4A, une appli de collecte de données .
à ce jour, sont opérationnelles:
la partie séquenceur de requètes,
la partie ventilation des données significatives dans un tableau d'entier,
la partie extraction des variables de base,
la partie logging des données brutes,
la partie logging piloté par un timer à la seconde.

cela tourne parfaitement sur tablet, par contre, j'ai un petit pb d'accés sdcard avec mon htc HD...

reste à ajouter :

qqs variables calculées : durée, distance, conso, puissances....

un traitement adapté aux différents types de dongle BT

des règles suivant type de véhicule gen2 ou gen3

puis une partie graphique (qui est infiniment plus accessible avec B4A qu' avec un dev traditionnel Java.).

puis mettre en service toute la partie extraction/ calculs/ logging....

ci joint la teneur actuelle du fichier de log des variables extraites; c'est un fichier texte tabulé.
vous remarquerez entre-autres la précision du timer.....

ps: B4A est un fantastique environnement de dev pour android, j'ai développé dans le courant de la semaine une appli comprenant 7 scrollview muticolonnes et un graphe, le tout étant alimenté par une base autonome SQLite
 

Pièces jointes

Pas mal !
si tu cherches un bêta testeur, même sans interface, je suis prêt.
 
Excellent, je veux bien tester aussi ... voire participer au code (moyennant l'achat de B4A si j'ai bien compris) 🙂
De mon côté, j'ai passé en revue le code java de hsdcanmonitor avec mon frère et il faudra quelques modifications pour intégrer une partie graphique vraiment étanche de la partie données + calculs.
 
les news de la matinée:


  • j'ai résolu le pb de logging sur sdcard du HTC.il s'agissait d'un pb du nom de fichier de log; l'original utilisait un format date et time qui passait en android 3.1 mais pas en 2.x.
  • solution: des formats sans séparateur...


j'ai écrit un pgm de sniffer passif sous android.
son but est de "logger" tout le trafic de et vers les ECU lorsqu' on utilise techstream.

branchement :
a) un Y sur la prise diag
b) sur une branche, un interface mongoose mfc raccordé à un PC faisant tourner techstream.
c) sur l'autre branche, un dongle BT qui communique avec mon sniffer sous stéroïde.

mode opératoire :
a)avec techstream on lance l'observation et le logging d' un paramètre.
b) on récupère les logs et on joue au jeu des 7 erreurs; en fait cela consiste à chercher des corrélations entre les 2 logs.
pour cela, pas de mystères, on fait des graphes comparant la log de techstream et celle du sniffer (éventuellement, et très souvent, en combinant 2 octets voisins), lorsque l'on trouve 2 graphes qui ont a la même allure, il n'y a plus qu'à trouver la pente et l'offset.
beaucoup plus facile à écrire ici que trouver des trucs significatifs...

le sniffer n'est pas encore testé, mais cela ne saurait tarder.

nb: cet outil est valable pour toutes les générations.


étape suivante : tester les graphiques avec B4A
mise en bouche : un thermomètre à 4 aiguilles (concentriques) montrant les températures données par les 4 sondes de la batterie. j'ai un exemple qui tient en qqs lignes.

plus tard, il sera très intéressant de faire apparaitre en clair les stades de fonctionnement: sommes nous en S2 S3 S4????

@ suivre
 
Bravo pour l'appli B4A, c'est plus rapide que le temps qu'il m'a fallu pour HsdCanMonitor (j'ai du y passer un week-end complet et tous les soirs d'une semaine, en mode geek je bouge pas de mon écran :-D).
Par contre un truc que j'apprécie dans HsdCanMonitor c'est que je bouffe 2 fois moins de batterie que Torque, ce qui est appréciable sur les longs trajets car là où je mets le téléphone (derrière le volant) je ne peux pas être branché en USB pour garder la charge.

Je partage l'analyse de Parkerbol et son frère, il reste un peu de travail sur HsdCanMonitor si on veut une Interface graphique indépendante de la partie collecte et qui marche à la fois pour PII et PIII.
 
je pense que torque consomme beaucoup, car il prétend tout faire:
entre le BT , l'usage du GPS , la pub , la vérification par le réseau que ta version payante est bien légitime, la collecte de données pour debug, la collecte pour émission, les calculs et l'affichage, il y a effectivement de quoi bouffer sa batterie...

ci-joint, le source intégral de l'appli en b4a (et oui, il y a un seul fichier :-D pour le source) ,
il y en a un autre pour la partie positionnement des layouts.

C' est radin en commentaires, mais optimisé au niveau code :grin:...

Cette aprem, j'ai testé un truc avec 4 aiguilles dynamique;
cela s'implémente "fingers in the nose" :
un fond en bmp (ou n'importe quel type d'image),
des aiguilles étroites en png avec fond transparent,
on applique sur un canvas comme il faut en qqs lignes en positionnant les aiguilles bien centrées et en rotant comme on le souhaite...

testé sur tablet et HTC HD à haute vitesse de rafraichissement (timer à 30 mS), je n'ai pas regardé ce que ça consomme, mais en tous cas la fluidité est parfaite.

@suivre
 

Pièces jointes

Incroyable de simplicité, je suis étonné que le code soit aussi léger (ce n'est pas péjoratif du tout) pour faire autant de choses.
 
il sera extrêmement instructif de procéder à un benchmark entre ce dev fait avec B4A & le dev en traditionnel.

  • sur même plateforme,

  • usage CPU / usage batterie,

  • usage mémoire, (fuites éventuelles) ,

  • stabilité,

  • fréquence de collecte...

en ce qui concerne mon premier jet,
pour info, la communication avec le serial en BT est multithreadé et la réception est traitée sur évènement. (usage des AsyncStreams en I/O).

je documenterai tout cela correctement,
il y en a en effet des trucs particulièrement efficaces et denses qui nécessitent des explications.
mais je confirme que la reconnaissance du type de prius, et l'application des règles correspondantes, seront très simples à implémenter.
 
Je serai en congés une quinzaine de jours à mon retour, je commande b4a.
En parallèle, je continue mon travail sur hsdcanmonitor.
 
ci joint, le source précédent accompagné de commentaires.

je testerai probablement mon sniffer ce soir,
je l'ai essayé hier soir, mais mes paramètres de filtrage étaient mal foutus,
j'ai retrouvé dans le canmonitor original comment paramétrer pour voir passer uniquement les 7xx:
AT CF 700 filtre 7xx
AT CM F00 le masque qui va bien
AT MA et on écoute passivement
 

Pièces jointes

sniffer sous stéroide

Me Again

with good news :

j'ai testé ce soir mon nouveau "sniffer passif" sous stéroide.

rappel du protocole:
on cherche à trouver des corrélations entre ce que techstream demande et présente comme résultat et ce qui transite par le bus can.

en mettant en parallèle un observateur passif qui sniffe et logue comme il faut avec un timestamp ok,

avec un peu (beaucoup) de méthode, on peut peut-être localiser des requêtes et la structure des réponses.

pour faire court:
j'ai branché un techstream sur une branche du Y connecté à la prise de diag, et à l'autre bout, mon dongle BT et mon sniffer lui même installé sur une tablet.
j'ai ensuite demandé à techstream de superviser tout ce qui se passe autour du système hybride et voila le résultat du sniffer:

j'ajoute le source en b4a du sniffer en question(, il marche uniquement avec les dongles rapides):
Code:
'Activity module
Sub Process_Globals
    Dim Serial1 As Serial
    Dim AStreams As AsyncStreams
    Dim connected As Boolean
    Dim Buffa As String
    Dim mode As String
    Dim ptr As Int
    Dim cmd As String
    Dim fincmd() As Byte
    Dim DataLogger As TextWriter
    
    Dim cmdtime As String
    Dim Timer1 As Timer
End Sub

Sub Globals
    Dim btnSend As Button
    Dim txtLog As EditText
    Dim txtSend As EditText
    
    Dim Ready_ForNext As Boolean        ' 
    Dim response As StringBuilder
    Dim msg1 As String
    Dim msg2 As String
    Dim ctrf As Int
    Dim ctrm As Int
    Dim ctrs As Int
    Dim Now As Long
    Dim prevcmd As String
    Dim septab As String
        septab=Chr(9)
    Dim fincmda As String
        fincmda=Chr(10)&Chr(13)
        fincmd=fincmda.getbytes("UTF8")
        
    Dim str_init(8) As String
        str_init(0)="STI"         ' show version firmware
        str_init(1)="ATSP6"     ' protocol CAN
        str_init(1)="ATE0"         ' echo suppress
        str_init(2)="ATH1"         ' Header On
        str_init(3)="ATL0"         ' LineFeed Off
        str_init(4)="ATS0"         ' Space    Off
        str_init(5)="ATCF 700"    ' Filter 7xx
        str_init(6)="ATCM F00"     ' Mask   all 7xx
        str_init(7)="STM"        ' show everything passing mask & filter

    Dim btn_start As Button

        
    Dim Btn_connect As Button
    Dim Lbl_connect As Label
    

    
    
End Sub

Sub Activity_Create(FirstTime As Boolean)
    If FirstTime Then
        Serial1.Initialize("Serial1")
    End If
    Activity.LoadLayout("1")

   
    now = DateTime.Now
    DateTime.DateFormat="yyMMdd"
    DateTime.timeformat="HHmmss"
    Lbl_connect.Color=Colors.Red


End Sub
Sub Activity_Resume

    If Serial1.IsEnabled = False Then
        Msgbox("Please enable Bluetooth.", "")
    Else
        Serial1.Listen 'listen for incoming connections
    End If
    mode="init"
    ptr=0
    response.Initialize
End Sub


Sub Serial1_Connected (Success As Boolean)
    If Success Then
        ToastMessageShow("Connected successfully", False)
        AStreams.Initialize(Serial1.InputStream, Serial1.OutputStream, "AStreams")
        connected = True
        Lbl_connect.Text="Connected"
        Lbl_connect.Color=Colors.green
        DataLogger.Initialize(File.OpenOutput(File.DirRootExternal& "/Sniffer" ,"sniffer_"&DateTime.date(now)&"_"&DateTime.time(now) &".txt", True))
        DateTime.timeformat="HHmmss:SSS"
    Else
        connected = False
        Msgbox(LastException.Message, "Error connecting.")
        Lbl_connect.Text="Not Connected"
        Lbl_connect.Color=Colors.Red
    End If
End Sub


Sub Activity_Pause (UserClosed As Boolean)
    If UserClosed Then
        AStreams.Close
        Serial1.Disconnect
        DataLogger.close

    End If
End Sub

Sub btnSend_Click
    If connected Then
        If AStreams.IsInitialized = False Then 
            Return
        End If
        If txtSend.Text.Length > 0 Then
            sendcmd(txtSend.Text) 
        End If
    End If
End Sub
Sub sendcmd (commande As String)
        AStreams.Write(commande.GetBytes("UTF8"))
        AStreams.Write(fincmd)
        cmdtime=DateTime.time(now)
        prevcmd=commande
End Sub
Sub AStreams_NewData (Buffer() As Byte)
    Dim rsp As String
    rsp = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
    now = DateTime.Now
    txtLog.Text = txtLog.Text & rsp
    txtLog.SelectionStart = txtLog.Text.Length
    DataLogger.WriteLine("new " & DateTime.time(now) & " msg " & rsp )


End Sub


Sub AStreams_Error
    ToastMessageShow(LastException.Message, True)
End Sub
Sub btn_start_Click

    timer1.Interval=200
    timer1.Enabled=True
    For i=0 To 7
        sendcmd(str_init(i))
    Next
    timer1.Enabled=False

End Sub


Sub Btn_connect_Click
    Dim PairedDevices As Map
    PairedDevices = Serial1.GetPairedDevices
    Dim l As List
    l.Initialize
    For i = 0 To PairedDevices.Size - 1
        l.Add(PairedDevices.GetKeyAt(i))
    Next
    Dim res As Int
    res = InputList(l, "Choose device", -1) 'show list with paired devices
    If res <> DialogResponse.CANCEL Then
        Serial1.Connect(PairedDevices.Get(l.Get(res))) 'convert the name to mac address
    End If
End Sub
Sub Btn_disconnect_Click
        Timer1.Enabled = False
        DataLogger.close
        
    If connected Then
        AStreams.Close
        Serial1.Disconnect
        connected = False
    End If
        Lbl_connect.Text="Not Connected"
        Lbl_connect.Color=Colors.Red
End Sub

attention, le décodage de la log peut paraitre lourd aux non initiés à cause des "FC" , pour les Zanciens, c' est super.
 

Pièces jointes

leçon de décannage.

en prenant un extrait de mon sniffer et des crayons de couleur, on va tenter de comprendre le décryptage du message:

new 192845:476 msg 7E20221810000000000
7EA1023618133AE33AE
7E23000040000000000
7EA2133AE3385338533
7EA229533AE33853385
7EA23339533AE339533
7EA249533BEAAF908CA
new 192845:505 msg 7EA250E000000000000

on met tout bout à bout et on aère un peu,
cela donne:
7E2 02 21 81 00 00 00 00 00
7EA 10 23 61 81 33 AE 33 AE
7E2 30 00 04 00 00 00 00 00
7EA 21 33 AE 33 85 33 85 33
7EA 22 95 33 AE 33 85 33 85
7EA 23 33 95 33 AE 33 95 33
7EA 24 95 33 BE AA F9 08 CA
7EA 25 0E 00 00 00 00 00 00

les lignes commençant par 7E2 sont des demandes de techstream à l'ECU du système hybride;
les lignes commençant par 7EA sont les réponses de cet ECU; 7E2 + 8 = 7EA; on retrouvera ce décalage de 8 lors de dialogues avec d'autres ECU.

1ère ligne : la question est 21 81
réponse : elle contiendra forcement 61 81 (21 + 40 suivi du 2ème octet), mais on rencontre 2 types de réponse; simple ou multitrame.
dans le cas d'une réponse simple trame, l'octet aprés 7EA indiquerait le nb d'octets de la réponse et les 2 octets suivant seraient 61 81.
ici on a 10 qui signifie que la réponse est multitrame;
l'octet suivant 23 indique le nb total d'octets utiles de la réponse 23 hexa donne 2*16 + 3 soit 35 octets
on trouve enfin l'attendu 61 81
puis le début des infos

on rencontre ensuite une trame de FlowControl (FC) qui demande la suite. (l'elm327 fera trés bien cela tout seul pour nous)
les trames suivantes sont la suite de la réponse, elles sont reconnaissable au N° de sequence commençant par 2.


les données utilisables sont les paires en noir gras chaque paire sera convertie en décimal (de 0 à 255).
 
Dernière édition:
:coucou: Bonjour,

Ça y est :smile: Cette fois (pour la Fête Nationale), avec ces dernières explications claires, j'ai tout, oui tout, compris:-D

Merci à F-X :jumproll:
 
Merci, super clair.

Après il ne reste plus qu à savoir quoi faire de ces octets.:-(
 
joyeuse fete nat chers zoditeurs...

je prépare moi zossi un petit wiki centré sur le can des HSD.

vous avez eu droit à un premier jet ci-dessus

étapes suivantes:
A) où on parlera de can stuffing (comment regrouper des demandes afin de gagner du temps).
B) où on expliquera comment extraire la moelle (les variables de base).
C) où en parlera des intégrales pour les nuls (comment des vitesses deviennent des distances, et des débits des milliLitres, puis des consos en L/100)...
D)où on parlera (peut-etre) des Trip A & Trip B, les totalisateurs indépendants temps/distance/conso(en L)
E) où on parlera (peut-être) des modes de fonctionnement (suis- je en S2 ou S4?)
F) ou on parlera (peut-être) des manières de présenter le résultat des élucubrations précédentes:
l' écran aide à l' écoconduite
l' écran geek sauce kéké
l' écran pour hypermileur.

j' envisage de mettre une partie de ces idées dans une zone publique , mais pas ce qui parle de can stuffing ni du détail du décodage...

vos avis???
 
Moi j'en pense que sans tes explications la version de HsdCanMonitor que j'ai écrite et que j'utilise quotidiennement n'aurait jamais vu le jour :jap:

Un point qui m'intéresse en particulier est la détection du mode S2 ou S4 (pour l'instant je change juste la couleur de la ICE Temp dès qu'elle dépasse 70°C mais je ne sais pas détecter si la ICE idling ceremony a déjà eu lieu ou pas).
 
@Fxm Réponse de normand. Cela dépendra de la difficulté technique dans tes propos. Autrement dit, si c'est trop dur à comprendre...
Quel public est visé ?

@Guiness, c'est pas simple en fait. Certes un test sur la température de l'ICE suffit, théoriquement. Mais comment réagit le hsd quand on est en train d'osciller autour des 72°C. Et puis si elle descend trop bas (65°C ??) on perd le S4.
 
Pages vues depuis le 20 Oct 2005: 317,069,572
Retour
Haut Bas