Android App canIoniq | Can-Bus | Reverse-Engineering

Android App canIoniq | Can-Bus | Reverse-Engineering

me68
  • Beiträge: 566
  • Registriert: So 5. Mai 2013, 11:54
  • Wohnort: Burgenland/Österreich
  • Hat sich bedankt: 13 Mal
  • Danke erhalten: 63 Mal
  • Website
read
Hallo Leute,

ich hab eine Bitte an die Community. Dazu muss ich kurz ausholen:

Bei unserer Android App canIoniq habe ich mit relativ geringem Integrationsaufwand auf Basis der Android App caniOn eine Version für den Ioniq electric bauen können.

Auf der einen Seite hat Xavier inzwischen für alle möglichen Toyota-Hybriden die Android App Hybrid Assistant entwickelt und ich konnte auf seine Basis-Kommunikation mit dem Can-Bus zurückgreifen. Anders als bei den Drillingen muss man beim Ioniq electric (so wie üblich) Can-Bus-Kommandos an diverse Steuergeräte senden. Xavier hat sich intensiv mit dem Protokoll beschäftigt und einen schönen Scanner-Modul entwickelt, der von der Datenhaltung noch sehr ähnlich zu caniOn ist.

Auf der anderen Seite war die Community fleißig beim Reverse-Engineering der Can-Bus-Daten des Ioniq electric und hat eine fix fertige Konfiguration in Form einer Extended PIDs Beschreibung für die Android App Torque Pro geliefert.

Damit war canIoniq "schnell" zusammengebaut. Bis auf km-Stand und Restreichweite war damit schon alles da, so wie heute im Google Play Store verfügbar.

Ich habe mir dann in alter Xavier-Manier einen China-Clone des Hyundai GDS-Werkstattdiagnosetools zugelegt und via Xavier-Android-App can_logger dem GDS auf die Finger geschaut. In irgendeinem Menü zeigt GDS den km-Stand an und ich konnte ihn dann auch relativ leicht in den Can-Bus-Rohdaten finden. Beim zugehörigen Can-Bus-Kommando hat mir wiederum Xavier auf die Sprünge geholfen und so stand einer ersten Veröffentlichung im Google Play Store inklusive Odo nichts mehr im Wege.

Nun zu meinem Anliegen: für die Abfrage des km-Standes wird das Can-Bus-Kommando

"22B002 2" an das Steuergerät "7C6" gesendet.

Der km-Stand ist in drei Bytes kodiert:

Code: Alles auswählen

Odo = BB(8) * 256 * 256 +  BB(9) * 256 + BB(10)
Eventuell kann man dem Steuergerät 7C6 auch die Restreichweite entlocken. Wer mag?


Liebe Grüße,
Martin
... unterwegs mit einem Hyundai Ioniq electric, Bj. 8/2018

Bild

... unsere Webseite: facebook.com/emobility.at
Anzeige

Re: Android App canIoniq | Can-Bus | Reverse-Engineering

USER_AVATAR
  • nix_CO2
  • Beiträge: 63
  • Registriert: Mo 18. Mär 2019, 18:28
  • Hat sich bedankt: 23 Mal
  • Danke erhalten: 8 Mal
read
Hallo Martin,
Vielen Dank erst mal für die App CanIoniq 104.
Ja ich habe Interesse an dieser Aufgabe. Nun habe ich bisher wenig Erfahrung mit der digitalen Motorhaube. Dafür habe ich gerade den SDC Kursus bei Udacity erfolgreich abgeschlossen.
Die Aufgabe hört sich nach einer freundlichem Einstiegs Einladung mit Support an ;-)
Zunächst habe ich den giftgrünen Dongel in LX bestellt. Wenn er da ist sehen wir weiter...
Welches Framework verwendest du? Gibt es ein Git?
Viele Grüße aus Bad Nauheim
Volker
seit 2019 mit dem Ioniq28 unterwegs

Re: Android App canIoniq | Can-Bus | Reverse-Engineering

USER_AVATAR
  • noradtux
  • Beiträge: 1001
  • Registriert: Mi 30. Nov 2016, 19:21
  • Wohnort: Rellingen
  • Hat sich bedankt: 85 Mal
  • Danke erhalten: 214 Mal
read
Ist die 0x7c6 die Adresse im gesendeten oder in den empfangenen Paketen?
2017 - 2022: Ioniq Electric
2022 - : Kia EV6 GT-Line

Re: Android App canIoniq | Can-Bus | Reverse-Engineering

hachi
  • Beiträge: 955
  • Registriert: Do 20. Okt 2016, 18:40
  • Wohnort: 5452 Laubichl
  • Hat sich bedankt: 6 Mal
  • Danke erhalten: 60 Mal
read
ob wir irgendwann mal die Chance haben den OBD-Port aufzuwecken und die Klimatisierung zu steuern? :)

Re: Android App canIoniq | Can-Bus | Reverse-Engineering

USER_AVATAR
  • noradtux
  • Beiträge: 1001
  • Registriert: Mi 30. Nov 2016, 19:21
  • Wohnort: Rellingen
  • Hat sich bedankt: 85 Mal
  • Danke erhalten: 214 Mal
read
Ah, Antwortet auf 0x7ce.
2017 - 2022: Ioniq Electric
2022 - : Kia EV6 GT-Line

Re: Android App canIoniq | Can-Bus | Reverse-Engineering

USER_AVATAR
  • noradtux
  • Beiträge: 1001
  • Registriert: Mi 30. Nov 2016, 19:21
  • Wohnort: Rellingen
  • Hat sich bedankt: 85 Mal
  • Danke erhalten: 214 Mal
read
Ihr wisst nicht zufällig wie man an den Reifendruck kommt?
2017 - 2022: Ioniq Electric
2022 - : Kia EV6 GT-Line

Re: Android App canIoniq | Can-Bus | Reverse-Engineering

me68
  • Beiträge: 566
  • Registriert: So 5. Mai 2013, 11:54
  • Wohnort: Burgenland/Österreich
  • Hat sich bedankt: 13 Mal
  • Danke erhalten: 63 Mal
  • Website
read
Den Reifendruck habe ich im GDS gesehen ... sollte sich abbilden lassen. Kann nur sein, dass die Werte in einer anderen Einheit am Can-Bus daherkommen, als sie angezeigt werden, aber grundsätzlich sind die zu orten.
... unterwegs mit einem Hyundai Ioniq electric, Bj. 8/2018

Bild

... unsere Webseite: facebook.com/emobility.at

Re: Android App canIoniq | Can-Bus | Reverse-Engineering

me68
  • Beiträge: 566
  • Registriert: So 5. Mai 2013, 11:54
  • Wohnort: Burgenland/Österreich
  • Hat sich bedankt: 13 Mal
  • Danke erhalten: 63 Mal
  • Website
read
noradtux hat geschrieben: Ist die 0x7c6 die Adresse im gesendeten oder in den empfangenen Paketen?
Die Sendeadresse ...
... unterwegs mit einem Hyundai Ioniq electric, Bj. 8/2018

Bild

... unsere Webseite: facebook.com/emobility.at

Re: Android App canIoniq | Can-Bus | Reverse-Engineering

ITStromer
  • Beiträge: 367
  • Registriert: Fr 10. Mär 2017, 21:58
  • Hat sich bedankt: 3 Mal
  • Danke erhalten: 35 Mal
read
Mit Torque bekomme ich keine Antwort wenn ich bei "OBD2 Modus und PID" 22B002 undOBD Header 7ce eintrage und teste.
Kann es sein, dass bestimmte Dongle auf den Bus nicht zugreifen können über den diese Steuergeräte erreichbar sind?
Welchen Dongle verwendest Du noratux?

Aus dem Thread von https://github.com/JejuSoul/OBD-PIDs-fo ... /issues/22
könnte dies hier eine heiße Spur zu den Reifensensoren sein:

001_Tire Pressure Front Left,Tire Pre_FL,22C00B,e/5,0.00,120.00,psi,7A0
001_Tire Pressure Front Right,Tire Pre_FR,22C00B,i/5,0.00,120.00,psi,7A0
001_Tire Pressure Back Left,Tire Pre_BL,22C00B,q/5,0.00,120.00,psi,7A0
001_Tire Pressure Back Right,Tire Pre_BR,22C00B,m/5,0.00,120.00,psi,7A0

001_Tire Temperature Front Left,Tire Temp_FL,22C00B,f-50,-40,65,C,7A0
001_Tire Temperature Front Right,Tire Temp_FR,22C00B,j-50,-40,65,C,7A0
001_Tire Temperature Back Left,Tire Temp_BL,22C00B,r-50,-40,65,C,7A0
001_Tire Temperature Back Right,Tire Temp_BR,22C00B,n-50,-40,65,C,7A0
Hyundai IONIQ Elektro Premium in Polar White bestellt: 15.2.17 produziert: 14.09.17 verschifft: 15.9.17 Ankunft beim Händler: 10.11.17 16.8. 22.6. 15.5. rumstromern seit: 16.11.17

Re: Android App canIoniq | Can-Bus | Reverse-Engineering

me68
  • Beiträge: 566
  • Registriert: So 5. Mai 2013, 11:54
  • Wohnort: Burgenland/Österreich
  • Hat sich bedankt: 13 Mal
  • Danke erhalten: 63 Mal
  • Website
read
nix_CO2 hat geschrieben: Die Aufgabe hört sich nach einer freundlichem Einstiegs Einladung mit Support an ;-)
Zunächst habe ich den giftgrünen Dongel in LX bestellt. Wenn er da ist sehen wir weiter...
Welches Framework verwendest du? Gibt es ein Git?
Viele Grüße aus Bad Nauheim
Volker
Hallo Volker,
für das Testen brauchst Du nur die Android App USB-Terminal.

Du tippst die Initsequenz ein:

Code: Alles auswählen

Sub InitCommands
Try
	str_init(0)  = " "  & Chr(13)		' some chars to let know we want to start
	str_init(1)  = "ATZ"            		' reinit to clear filters
	str_init(2)  = "ATE0"           		' Echo OFF
	str_init(3)  = "ATI"            		' info
	str_init(4)  = "STI"            		' detect firmware
	str_init(5)  = "AT@1"           		' device name
	str_init(6)  = "ATSP6"     			' CAN 11 bits @ 500k
	str_init(7)  = "ATAT1"     			' no agressive timing
	str_init(8)  = "ATH1"           		' Header ON
	str_init(9)  = "ATL0"           		' no CR LF
	str_init(10) = "ATS0"     			' suppress spaces
	str_init(11) = "ATCAF1"   			' autoformat
	str_init(12) = "STCAFCP 7C6, 7CE"	' add a flow control for the pair 7C6, 7CE. works only with obdlink ;))
Catch
	MyLog("InitCommands: " & LastException.Message)
End Try
End Sub
... also

Code: Alles auswählen

ATZ
ATE0
ATI
usw. ... alles was unter "" im SourceCode steht.

Zum Adressieren eines Steuergerätes das Kommando ATSH und die Adresse des Steuergerätes ...
... also bei Odo:

Code: Alles auswählen

ATSH 7C6
und dann den Befehl:

Code: Alles auswählen

22B002 2
wobei der zweite Parameter die Anzahl der erwarteten Frames festlegt. Den Wert kann man auch weglassen. Das ist nur eine Optimierung, falls mehr Daten gesendet werden bei einem Befehl, man aber nur den ersten Teil braucht.

Wenn Du im Verzeichnis /sdcard/canIoniq eine Datei scanner_log.txt anlegst, kannst Du mitschauen, was canIoniq am Can-Bus macht. Es wird dann ein Log mit scanner_log_<timestamp>.txt erzeugt mit den Kommandos, Antworten und daraus extrahierten, lesbaren Werten, wie z.B.

Code: Alles auswählen

16:49:14.171 scanner: Service_Create
16:49:14.197  

16:49:14.803 ATZ
16:49:15.693 ATE0
16:49:15.712 ATI
16:49:15.732 STI
16:49:15.749 AT@1
16:49:15.763 ATSP6
16:49:15.780 ATAT1
16:49:15.797 ATH1
16:49:15.814 ATL0
16:49:15.831 ATS0
16:49:15.849 ATCAF1
16:49:15.866 STCAFCP 7C6, 7CE
16:49:15.886 send_cmd: 0 0 ATSH 7C6
16:49:15.900 send_cmd: 1 0 22B002 2
16:49:15.941 raw: 
7CE100F62B002E00000
7CE210000AC00925E00

>
16:49:15.942 decodage	7C6	22B002 2	2	224	0	0	0	0	172	0	146	94	0
16:49:15.943 Odo: 37470.00 37471.00
16:49:15.945 Odo_Miles: 23282.84 23283.84
16:49:15.946 send_cmd: 2 1 ATSH 7E2
16:49:16.008 send_cmd: 3 1 2101 4
16:49:16.060 raw: 
7EA10166101FFE00000
7EA2109015A65064A03
7EA2200000000DF7634
7EA2304200000000000

>
16:49:16.061 decodage	7E2	2101 4	255	224	0	0	9	1	90	101	6	74	3	0	0	0	0	223	118	52	4	32	0	0	0	0	0
16:49:16.062 formated: Speed=0
In den Zeilen mit "send_cmd" steht zunächst eine fortlaufende Nummer, dann eine laufende Nummer aus der Endlos-Schleife mit den Befehlen, die fortwährend abgerufen werden. Es gibt auch ein "do_not_send_cmd" als Optimierung bei der Abfrage von Kommandos mit Werten, die nicht jedesmal in der Schleife gelesen werden.

Im folgenden die Sequenzen in der Endlosschleife:

Code: Alles auswählen

Sub fillSequences
	aSequences(0).Ecu = c7C6
	aSequences(0).Pid = c22B002_2
	aSequences(0).Intervall = 1
	aSequences(0).current = 1

	aSequences(1).Ecu = c7E2
	aSequences(1).Pid = c2101_4
	aSequences(1).Intervall = 1
	aSequences(1).current = 1
	
	aSequences(2).Ecu = c7E3
	aSequences(2).Pid = c2102_2
	aSequences(2).Intervall = 1
	aSequences(2).current = 1

	aSequences(3).Ecu = c7E4
	aSequences(3).Pid = c2101_9
	aSequences(3).Intervall = 1
	aSequences(3).current = 1
	
	aSequences(4).Ecu = c7E4
	aSequences(4).Pid = c2102_6
	aSequences(4).Intervall = 5
	aSequences(4).current = 5
	
	aSequences(5).Ecu = c7E4
	aSequences(5).Pid = c2103_6
	aSequences(5).Intervall = 5
	aSequences(5).current = 5
	
	aSequences(6).Ecu = c7E4
	aSequences(6).Pid = c2104_6
	aSequences(6).Intervall = 5
	aSequences(6).current = 5

	aSequences(7).Ecu = c7E4
	aSequences(7).Pid = c2105_7
	aSequences(7).Intervall = 5
	aSequences(7).current = 5
End Sub
Ein Intervall=1 bedeutet, dass der Befehl bei jedem Durchlauf ausgeführt wird, ein Intervall=5 bei jedem 5. Durchlauf. So kann man die wichtigen Werte Spannung, Strom & zurückgelegte Strecke für die Berechnung der verbrauchten/generierten Wh in kurzen Intervallen messen und einen brauchbaren Momentanverbrauch in Wh/km ausrechnen. Die Stromstärke ist halt eine sehr dynamische Größe und wenn ich den Wert zur Berechnung z.B. nur einmal pro Sekunde bekommen würde, wäre das nur eine grobe Annäherung an die realen Werte. So stimmen die Werte mit dem Bordcomputer überein, nach meinen Erfahrungen.


Liebe Grüße,
Martin
... unterwegs mit einem Hyundai Ioniq electric, Bj. 8/2018

Bild

... unsere Webseite: facebook.com/emobility.at
Anzeige
AntwortenAntworten

Zurück zu „IONIQ - Infotainment“

Gehe zu Profile
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag