CAN-BUS am OBD2-Stecker

CAN-BUS am OBD2-Stecker

cribskip
  • Beiträge: 6
  • Registriert: Mi 1. Sep 2021, 19:59
  • Danke erhalten: 9 Mal
read
Hi,

ich hatte überlegt, ob es Sinn macht, meine Informationen mit im Thread nebenan (OB2 endlich verfügbar, viewtopic.php?f=325&t=64034) unterzubringen, mich aber dagegen entschieden, da es hier noch mehr "ans eingemachte geht" 😜

Also:
Am OBD2-Stecker unterm Lenkrad liegt ja der HS-CAN an Pins 6 & 14 an. Hier habe ich einen ESP8266 mit MCP2515 CAN-Controller und MCP2551 CAN-Transceiver angeklemmt, um den CAN-Bus zu belauschen und die blöde App los zu werden.

Status:
- Kommunikation läuft, Daten werden per MQTT an die Haussteuerung gesendet
- Leider pennt der 208 auch beim Laden manchmal ein und macht den CAN aus. Hier muss ich noch das passende Telegram zum Senden suchen, um ihn wachzurütteln.

Code: Alles auswählen

| **CAN ID** | **Frame**               | **Details**                                    | **Bemerkung** | **** | **** | **** | **** | **** | **** |
|------------|-------------------------|------------------------------------------------|---------------|------|------|------|------|------|------|
| **0x3A8**  | XX XX XX S1 S2 S3       | SOC = S1 + S2 / 256 + S3 / 256 / 100           | Warum S3?     |      |      |      |      |      |      |
| **0x552**  | XX XX XX XX M1 M2 M3 M4 | KM = M1 * 256 * 256 + M2 * 256 + M3 + M4 / 256 |               |      |      |      |      |      |      |
| ****       |                         |                                                |               |      |      |      |      |      |      |
Hier der Sketch für den ESP8266 / Wemos D1 Mini:

Code: Alles auswählen

/*
 *  Adapter from MCP_CAN library: https://github.com/coryjfowler/MCP_CAN_lib
 */
 
 /*
  * Wiring diagram ESP3286 <=> MCP2515 (Joy-it CAN module)
  * 3V3         - VCC
  * Vin (5V)    - VCC1
  * GND         - GND
  * D8 (GPIO15) - CS
  * D6          - SO
  * D7          - SI
  * D5          - SCK
  * D4 (GPIO2)  - INT
  */

#define WIFI_SSID "" // YOUR WIFI SSID
#define WIFI_PASSWORD "" // YOUR WIFI PASSWORD
#define BROKER "10.0.0.2" // YOUR MQTT BROKER IP

#include <mcp_can.h>
#include <SPI.h>

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>

#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h>
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;

// ---- MQTT client --------------------------------------------------------------
#include <PubSubClient.h>
WiFiClient wifiClient;
PubSubClient mqtt(wifiClient);

// CAN RX Variables
long unsigned int rxId;
unsigned char len;
byte rxBuf[8];

double mileage;
double SOC;

unsigned long lastmsg = millis();

// CAN0 INT and CS
#define CAN0_INT 2  // INT in pin 2
MCP_CAN CAN0(D3);   // CS in pin 15


void hardreset() {
  ESP.wdtDisable();
  while (1) {};
}

void mqtt_reconnect() {
  //int oldstate = mqtt.state();

  // Loop until we're reconnected
  if (!mqtt.connected()) {
    // Attempt to connect
    if (mqtt.connect(String(String(F("E208")) + String(millis())).c_str())) {
      mqtt.publish("E208/node", "ON", true);
      mqtt.publish("E208/node/ip", WiFi.localIP().toString().c_str(), true);
    }
  }
  lastmsg = millis();
}

void startWifi() {
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print(F("Connecting to wifi"));
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
}

void startCan() {
  if (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK)
  {
    CAN0.setMode(MCP_LISTENONLY);
    pinMode(CAN0_INT, INPUT);

/*
    CAN0.init_Mask(0,0,0x1011111);                // Init first mask...
    CAN0.init_Filt(0,0,0b100000101);                // Init first filter... 552
    //CAN0.init_Filt(1,0,0x01010000);                // Init second filter...
    */
    Serial.println(F("MCP2515 Config successful"));
  }
}

void setup() {
  Serial.begin(115200);
  delay(2000);
  Serial.println();

  // Init HTTP-Update-Server
  httpUpdater.setup(&httpServer, "admin", "");
  httpServer.begin();
  MDNS.begin("E208");
  MDNS.addService("http", "tcp", 80);
  mqtt.setServer(BROKER, 1883);

  startWifi();
  startCan();
}

void loop() {
  if (WiFi.status() != WL_CONNECTED) ESP.restart();
  if (!mqtt.connected()) mqtt_reconnect();

  httpServer.handleClient();
  yield();
  mqtt.loop();
  yield();

  if(CAN0.checkReceive() == CAN_MSGAVAIL) {                         // If CAN0_INT pin is low, read receive buffer
  //if (!digitalRead(CAN0_INT)) {
    CAN0.readMsgBuf(&rxId, &len, rxBuf);              // Read data: len = data length, buf = data byte(s)

#define CANDUMP
#ifdef CANDUMP
if (rxId == 0x552 || rxId == 0x3A8) {
    String dump = "FRAME:ID=";
    if ((rxId & 0x80000000) == 0x80000000)
    {
      dump += (rxId & 0x1FFFFFFF);
    }
    else
    {
      dump += rxId;
    }
    dump += ":LEN=";
    dump += len;

    char msgString[3];
    for (byte i = 0; i < len; i++)
    {
      dump += ":";
      snprintf(msgString, 3, "%02X", rxBuf[i]);
      dump += msgString;
    }
    //Serial.println(dump);
    mqtt.publish ("E208/dump", dump.c_str());
}
#endif

    // Mileage
    if (rxId == 0x552) {
      double tmp;
      // Mileage in Bytes 4,5,6 +7
      tmp = rxBuf[7];
      tmp /= 256;

      tmp += rxBuf[6];
      tmp += rxBuf[5] * 256;
      tmp += rxBuf[4] * 256 * 256;
      
      if (tmp != mileage) {
        mileage = tmp;
        mqtt.publish("E208/mileage", String(mileage, 3).c_str(), true);
      }
    }

    // SoC
    if (rxId == 0x3A8) {
      double tmp = rxBuf[4];
      tmp /= 256;
      tmp += rxBuf[3];
    
      if (tmp != SOC) {
        SOC = tmp;
        mqtt.publish("E208/SOC", String(SOC, 3).c_str(), true);
      }
      lastmsg = millis();
    }
  }

  if (millis() - lastmsg > 60000) hardreset();
}
Grüße
Sascha

PS: Ich habe verschiedene Tabellenformate ausprobiert, in der Vorschau werden alle nicht richtig angewandt :-(
e208 GT-Pack Vertigo Blau
Smart ED
2x Go-E V3 Homefix 11kW
26 kWp PV (kein Akku, die haben bei uns vier Räder)
Anzeige

Re: CAN-BUS am OBD2-Stecker

rw_e208
  • Beiträge: 36
  • Registriert: Mi 29. Jul 2020, 22:32
  • Hat sich bedankt: 3 Mal
  • Danke erhalten: 13 Mal
read
Hallo,
hast du schonmal überlegt das Fahrzeug mit UDS wach zu halten ? Ich würde erwarten das eine Tester-Present Botschaft (0x03 0x3E 0x00) das Fahrzeug wachhalten und vermutlich sogar wecken kann. Üblicher Abstand für die Botschaft wären so um die 5 Sekunden, aber solange das Fahrzeug nicht einschläft kann der Abstand auch größer sein.

Fraglich ist nur welchem Steuergerät man die Botschaft schicken muss um das Fahrzeug wachzuhalten.

Re: CAN-BUS am OBD2-Stecker

cribskip
  • Beiträge: 6
  • Registriert: Mi 1. Sep 2021, 19:59
  • Danke erhalten: 9 Mal
read
Guter Hinweis, vielen Dank dafür.

Ich versuche mich die Tage mal. Mit savycan weiter zu kommen.
e208 GT-Pack Vertigo Blau
Smart ED
2x Go-E V3 Homefix 11kW
26 kWp PV (kein Akku, die haben bei uns vier Räder)

Re: CAN-BUS am OBD2-Stecker

blauerKlaus
  • Beiträge: 56
  • Registriert: Mi 26. Jul 2017, 13:19
  • Hat sich bedankt: 11 Mal
  • Danke erhalten: 13 Mal
read
@cribskip
Was ist denn das Ziel bei diesem Projekt? Man kann doch mit Car Scanner und OBD Dongle sich alles mögliche anzeigen lassen.

Aber um auf dein Problem einzugehen:
Du könntest alternativ auch die Netzwerk-Management Botschaft, dass ein Steuergerät "beschäftigt" ist, zyklisch senden. Ich habe dies mal mit dem Peak USB Dongle bei einem VW getestet und konnte so die Busruhe beenden und verhindern, als Klemme 15 ausgeschaltet war. Allerdings nur mit einer relativ geringen Zykluszeit von ca 100 ms. Bei z.B. 500 ms ist das System immer kurzfristig in die Busruhe gegangen, da ja neben meiner gefakten NM-Botschaft noch die Original-NM-Botschaft 401h (zentrale Komfortelektronik) auf den Bus gesendet wurde.
Habe dir mal ein Foto angehangen. Ich habe die NM-Botschaft mit dem Identifier 401h wie unten zu sehen ist zyklisch mit dem "beschäftigt"-Opcode (01) gesendet. Die anderen NM-Botschaften zeigten dann den Opcode „sleep request“ (11) an, aber das System blieb aktiv.
Dateianhänge
A1922726-454E-42E8-B7B5-D7A3174BDACB.jpeg
AntwortenAntworten

Zurück zu „e-208 - Batterie, Reichweite“

Gehe zu Profile
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag