CAN Bus Daten -> HEX in DEC umwandeln

Hallo,

ich habe eine LWZ 404 Wärmepumpe von Stiebel Eltron.
Ich möchte den CAN Bus auslesen und die Daten weiterverarbeiten.
Ausgelesen bekomme ich den CAN Bus bereits, aber die Daten sagen mir leider nicht besonders viel.
Ich möchte die hexadezimalen Zahlen zunächst in dezimale Zahlen umwandeln.
Gegoogelt habe ich natürlich schon, aber so richtig schlau bin ich nicht daraus geworden.

Dies ist der Sketch:

#include <mcp_can.h>
#include <SPI.h>
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
char msgString[128];          // Array to store serial string
#define CAN0_INT 2            // Set INT to pin 2
MCP_CAN CAN0(10);             // Set CS to pin 10

void setup()
{
  Serial.begin(9600);
  if (CAN0.begin(MCP_ANY, CAN_20KBPS, MCP_8MHZ) == CAN_OK)
    Serial.println("MCP2515 Initialized Successfully!");
  else
    Serial.println("Error Initializing MCP2515...");
  CAN0.setMode(MCP_NORMAL);                     // Set operation mode to normal so the MCP2515 sends acks to received data.
  pinMode(CAN0_INT, INPUT);                     // Configuring pin for /INT input
  Serial.println("MCP2515 Library Receive Example...");
}

void loop()
{
  if (!digitalRead(CAN0_INT))                 // If CAN0_INT pin is low, read receive buffer
  {
    CAN0.readMsgBuf(&rxId, &len, rxBuf);      // Read data: len = data length, buf = data byte(s)
    if ((rxId & 0x80000000) == 0x80000000)    // Determine if ID is standard (11 bits) or extended (29 bits)
      sprintf(msgString, "Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxId & 0x1FFFFFFF), len);
    else
      sprintf(msgString, "Standard ID: 0x%.3lX       DLC: %1d  Data:", rxId, len);
    Serial.print(msgString);
    if ((rxId & 0x40000000) == 0x40000000) {  // Determine if message is a remote request frame.
      sprintf(msgString, " REMOTE REQUEST FRAME");
      Serial.print(msgString);
    } else {
      for (byte i = 0; i < len; i++) {
        sprintf(msgString, " 0x%.2X", rxBuf[i]);
        Serial.print(msgString);
      }
    }
    Serial.println();
  }
}

und hier sind einige ausgelesene Beispieldaten:

Entering Configuration Mode Successful!
Setting Baudrate Successful!
MCP2515 Initialized Successfully!
MCP2515 Library Receive Example...
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69F       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0E 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0E 0x01 0xF2
Standard ID: 0x69E       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x0F 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0F 0x00 0xF1
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69F       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0E 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0E 0x01 0xF2
Standard ID: 0x402       DLC: 7  Data: 0x60 0x01 0xFA 0x00 0x11 0x00 0xE4
Standard ID: 0x402       DLC: 7  Data: 0x60 0x01 0xFA 0x00 0x75 0xFD 0xA8
Standard ID: 0x69E       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x0F 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0F 0x00 0xF1
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x180       DLC: 7  Data: 0xD0 0x3C 0xFA 0x01 0x25 0x16 0x00
Standard ID: 0x180       DLC: 7  Data: 0xD0 0x3C 0xFA 0x01 0x26 0x13 0x00
Standard ID: 0x180       DLC: 7  Data: 0xD0 0x3C 0xFA 0x00 0x01 0x00 0x00
Standard ID: 0x180       DLC: 7  Data: 0xD0 0x3C 0xFA 0x01 0x24 0x16 0x00
Standard ID: 0x180       DLC: 7  Data: 0xD0 0x3C 0xFA 0x01 0x76 0x00 0x01
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0C 0x00 0x3F
Standard ID: 0x69F       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0E 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0E 0x01 0xF2
Standard ID: 0x69E       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x0F 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0F 0x00 0xF1
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69F       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0E 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0E 0x01 0xF3
Standard ID: 0x69E       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x0F 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0F 0x00 0xF3
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69F       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0E 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0E 0x01 0xF3
Standard ID: 0x180       DLC: 7  Data: 0xD0 0x3C 0xFA 0x01 0x26 0x14 0x00
Standard ID: 0x69E       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x0F 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0F 0x00 0xF1
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69F       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x11 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x11 0x00 0xD2
Standard ID: 0x69F       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0E 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1F 0xFA 0x00 0x0E 0x01 0xF2
Standard ID: 0x69E       DLC: 7  Data: 0x31 0x00 0xFA 0x00 0x0C 0x00 0xB0
Standard ID: 0x180       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0C 0x00 0x40
Standard ID: 0x69E       DLC: 7  Data: 0x61 0x01 0xFA 0x00 0x0F 0x00 0xB0
Standard ID: 0x301       DLC: 7  Data: 0xD2 0x1E 0xFA 0x00 0x0F 0x00 0xF1

Kann mir jemand helfen?

Vielen Dank und beste Grüße,
Chris

0x31 wäre dezimal 49.
0xD2 könnte 210 sein, oder (vorzeichenbehaftet) -46

Diesen Wert bekämst du, wenn du im sprintf Formatstring statt "%.2X" "%d" angibst. Aber was hättest du davon?. Die Bedeutung deiner 7 Datenbytes wird (mir) so nicht wirklich klarer.

Ich hoffe das das irgendwelche Werte von meiner Wärmepumpe sind, also konkret z.B. die Vorlauftemperatur, Lüfterdrehzahl, Raumtemperatur, usw.
Wenn ich diese zuordnen könnte, dann könnte ich diese in meine volkszähler Datenbank schreiben.

Leider werde ich nicht wirklich schlau daraus.
Ein ProfiTool gibt folgendes in dezimal aus:
grafik
Mein erstes Ziel war das gleiche mit dem ESP6288 hinzubekommen. Der liefert aber bisher nur hexadezimale Daten.

Ich bin ein gutes Ende weiter gekommen.
Inzwischen werden die HEX Daten in dezimaler Form ausgegeben, und das sogar in den 3er Blöcken mit führenden Nullen, wie ich es in dem ProfiTool gewohnt bin.

Allerdings komme ich mit einer Sache nicht weiter.
Die CAN-IDs 384 und 769 werden einwandfrei gelesen und ausgegeben. Die CAN-IDs 1026, 1694 und 1695 (bzw. hexadezimal 402, 69E und 69F) werden nicht ausgegeben (mit dem Profi Tool sehe ich sie immer sofort, mit meinem eigenen Sketch nie)
Woran könnte das liegen?
Hier der aktuelle Sketch:

#include <mcp_can.h>
#include <SPI.h>
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
char msgString[128];          // Array to store serial string
#define CAN0_INT 16            // Set INT to pin 2 (nodemcu = 16, nano = 2)
MCP_CAN CAN0(5);             // Set CS to pin 10 (nodemcu = 5, nano = 10)

void setup()
{
  Serial.begin(9600);
  if (CAN0.begin(MCP_ANY, CAN_20KBPS, MCP_8MHZ) == CAN_OK)
    Serial.println("MCP2515 Initialized Successfully!");
  else
    Serial.println("Error Initializing MCP2515...");
  CAN0.setMode(MCP_NORMAL);                     // Set operation mode to normal so the MCP2515 sends acks to received data.
  pinMode(CAN0_INT, INPUT);                     // Configuring pin for /INT input
  Serial.println("MCP2515 Library Receive Example...");
}

void loop()
{
  if (!digitalRead(CAN0_INT))                 // If CAN0_INT pin is low, read receive buffer
  {
    CAN0.readMsgBuf(&rxId, &len, rxBuf);      // Read data: len = data length, buf = data byte(s)
    if ((rxId & 0x80000000) == 0x80000000)    // Determine if ID is standard (11 bits) or extended (29 bits)
      sprintf(msgString, "Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxId & 0x1FFFFFFF), len);
    else
      sprintf(msgString, "Standard ID: %lu       DLC: %1d  Data:", rxId, len);  // ID in dezimaler Form
    //sprintf(msgString, "Standard ID: 0x%.3lX       DLC: %1d  Data:", rxId, len);  // ID in hex Form
    Serial.print(msgString);
    if ((rxId & 0x40000000) == 0x40000000) {  // Determine if message is a remote request frame.
      sprintf(msgString, " REMOTE REQUEST FRAME");
      Serial.print(msgString);
    } else {
      for (byte i = 0; i < len; i++) {
        //  sprintf(msgString, " 0x%.2X", rxBuf[i]);    // Ausgabe HEX
        sprintf(msgString, " %d", (int)rxBuf[i]);    // Ausgabe als integer dezimal
        Serial.print(msgString);
      }
    }
    Serial.println();
  }
}

Ausgabe:

Entering Configuration Mode Successful!
Setting Baudrate Successful!
MCP2515 Initialized Successfully!
MCP2515 Library Receive Example...
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 118 004 019
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 018 011 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 033 001 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 034 020 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 036 022 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 000 001 000 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 035 012 000
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 012 000 072
Standard ID: 0x301       DLC: 7  Data: 210 031 250 000 017 000 206
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 014 001 240
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 038 008 000
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 012 000 073
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 038 008 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 000 001 000 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 118 004 019
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 034 020 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 037 002 000
Standard ID: 0x301       DLC: 7  Data: 210 031 250 000 017 000 206
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 018 011 000
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 014 001 240
Standard ID: 0x180       DLC: 7  Data: 210 030 250 000 012 000 072
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 018 011 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 033 001 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 034 020 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 037 002 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 118 004 019
Standard ID: 0x301       DLC: 7  Data: 210 030 250 000 015 002 037
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 035 012 000
Standard ID: 0x301       DLC: 7  Data: 210 030 250 000 017 000 206
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 012 000 072
Standard ID: 0x301       DLC: 7  Data: 210 031 250 000 017 000 206
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 014 001 241
Standard ID: 0x180       DLC: 7  Data: 210 030 250 000 012 000 072
Standard ID: 0x301       DLC: 7  Data: 210 030 250 000 015 002 038
Standard ID: 0x301       DLC: 7  Data: 210 030 250 000 017 000 206
Standard ID: 0x180       DLC: 7  Data: 210 030 250 001 154 002 027
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 012 000 073
Standard ID: 0x301       DLC: 7  Data: 210 031 250 000 017 000 206
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 014 001 241
Standard ID: 0x180       DLC: 7  Data: 210 030 250 000 012 000 073
Standard ID: 0x301       DLC: 7  Data: 210 030 250 000 015 002 039
Standard ID: 0x301       DLC: 7  Data: 210 030 250 000 017 000 206
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 012 000 072
Standard ID: 0x301       DLC: 7  Data: 210 031 250 000 017 000 206
Standard ID: 0x180       DLC: 7  Data: 210 031 250 000 014 001 242
Standard ID: 0x180       DLC: 7  Data: 210 030 250 000 012 000 072
Standard ID: 0x301       DLC: 7  Data: 210 030 250 000 015 002 039
Standard ID: 0x301       DLC: 7  Data: 210 030 250 000 017 000 206
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 033 001 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 034 020 000
Standard ID: 0x180       DLC: 7  Data: 208 060 250 001 035 012 000

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.