Hi, Can I ask someone to help me get started with pulling data off the OBD-2 on the I3. I have info on what works via an LM327 and I know the pids, but it would help me for some pointers as to how to do it on the OVMS. You know - the goal to get the first one working. Here's an example definition - the SOC of the main battery. This is extracted from decompiling a definition file for ediasbas/ediasblib: (The "_EN" text is translated using Google cloud translate so the German is the original) The "job" is defined like so: { "SERVICE" : "22", "ID" : "0xDDBC", "DIV" : "-", "INFO" : "aktueller Anzeige Soc", "RES_TABELLE" : "RES_0xDDBC_D", "ARG_TABELLE" : "-", "EINHEIT" : "-", "DATENTYP" : "-", "ARG" : "ANZEIGE_SOC", "LABEL" : "-", "ADD" : "-", "MUL" : "-", "INFO_EN" : "current advertisement Soc", "L/H" : "-", "RESULTNAME" : "-", "NAME" : "-", "SG_ADR" : "-" }, The "results" are defined like so: "RES_0XDDBC_D" : [ { "DIV" : "10.0", "INFO_EN" : "current advertisement Soc", "DATENTYP" : "unsigned int", "EINHEIT" : "%", "INFO" : "aktueller Anzeige Soc", "MASKE" : "-", "RESULTNAME" : "STAT_ANZEIGE_SOC_WERT", "L/H" : "high", "MUL" : "1.0", "ADD" : "0.0", "NAME" : "-" }, { "NAME" : "-", "ADD" : "0.0", "MUL" : "1.0", "L/H" : "high", "RESULTNAME" : "STAT_MAXIMALE_ANZEIGE_SOC_WERT", "INFO" : "obere Grenze des Anzeige Soc", "MASKE" : "-", "INFO_EN" : "upper limit of the display Soc", "EINHEIT" : "%", "DATENTYP" : "unsigned int", "DIV" : "10.0" }, { "RESULTNAME" : "STAT_MINIMALE_ANZEIGE_SOC_WERT", "L/H" : "high", "MUL" : "1.0", "NAME" : "-", "ADD" : "0.0", "DIV" : "10.0", "INFO_EN" : "lower limit of the display Soc", "EINHEIT" : "%", "DATENTYP" : "unsigned int", "INFO" : "untere Grenze des Anzeige Soc", "MASKE" : "-" } ], I read it that three unsigned ints (16 bits each) are returned. Each is divided by 10 to return a "%". I traced an app that can retrieves this parameter using an LM327 based OBD2 interface. That app initialises the LM327 like so: 2020-11-15 10:34:28.831 --> ATD Return all settings to default 2020-11-15 10:34:28.849 --> ATE0 Disable command echo 2020-11-15 10:34:28.861 --> ATH1 Show CAN message headers 2020-11-15 10:34:28.875 --> ATAL Allow long messages 2020-11-15 10:34:28.887 --> ATPBE101 Set programmable param 0x2c to 0xE1, 0x2d to 0x01 - 2c=0xE1: - 11 bit IDs - variable data-length code - 11 or 29 bit received IDs - use data format ISO 15765-4 (CAN) - 2d=0x01 - Use rate divisor of 1 2020-11-15 10:34:28.901 --> ATSPB Use protocol USER1 CAN (as set above I think) 2020-11-15 10:34:28.949 --> ATBI Bypass initialisation - apparently a bad idea... ? 2020-11-15 10:34:28.964 --> ATSH6F1 Set header bytes to 0x6F1 ( 0x06F1 ? ) 2020-11-15 10:34:28.978 --> ATAT0 Disable adaptive timing - wait up to ATSF time 2020-11-15 10:34:28.992 --> ATSTFF Maximum wait Then, when it fetches this PID it does the following: 2020-11-15 10:34:35.101 --> ATCRA607⏎ // Listen for 0x607 2020-11-15 10:34:35.114 <-- OK⏎⏎> 2020-11-15 10:34:35.115 --> ATCEA07⏎ // "extended address" 0x07 [matches 607?] 2020-11-15 10:34:35.127 <-- OK⏎⏎> 2020-11-15 10:34:35.129 --> ATFCSH6F1⏎ // Flow control header 2020-11-15 10:34:35.141 <-- OK⏎⏎> 2020-11-15 10:34:35.143 --> ATFCSD07300800⏎ // Flow control data 2020-11-15 10:34:35.156 <-- OK⏎⏎> 2020-11-15 10:34:35.157 --> ATFCSM1⏎ // Flow control mode 2020-11-15 10:34:35.170 <-- OK⏎⏎> 2020-11-15 10:34:36.367 --> 22␣DD␣BC⏎ // asking for "extended" PID 0xDDBC 2020-11-15 10:34:36.474 <-- 607␣F1␣03␣7F␣22␣78␣⏎ // this is some unrelated packet? 2020-11-15 10:34:36.539 <-- 607␣F1␣10␣09␣62␣DD␣BC␣02␣4C␣⏎ // reply --> 0x24C = 588 = 58.8 SOC 607␣F1␣21␣03␣A6␣00␣69␣FF␣FF␣⏎ // 0x03A6 = = 93.4%, 0x0069 = 10.5% 2020-11-15 10:34:37.598 <-- ⏎> Remember the LM327 takes the sent bytes and wraps with into a full CAN message - though I'm not sure exactly how that comes out - I presume that "extended address" goes in somewhere. --> 22 DD BC is the PID <-- 2 part reply. First has the SOC. Second has 0x03A6 (934) and 0x0069 (105) First int is 588 or 58.8% which is the physical SOC of the battery. 934 is 93.4 which is the physical SOC level which the car displays as "100%" (i3 keeps some headroom "reserved"). 105 is 10.5 which is the physical SOC level that the car displays as 0%. I'd appreciate some help to give me a head-start to be able to retrieve this attribute on the OVMS box. Thanks, Steve