Arduino / canbus / UVR ?

    This site uses cookies. By continuing to browse this site, you are agreeing to our use of cookies. More details

    #WirBleibenZuhause
    Hilf mit, das Coronavirus zu stoppen
    1. Achte auf Deine Mitmenschen
    2. Halte Abstand zu anderen
    3. Wasche Deine Hände häufig
    4. Huste und Niese in Deine Armbeuge
    5. Berühre Dein Gesicht nicht
    6. Halte Dich an die gültige Allgemeinverfügung

    Mehr Infos vom Bundesministerium für Gesundheit hier!
    Wir danken allen, die in dieser Krise Unglaubliches leisten.

    Du hast Probleme beim Login? Schreibe uns im Forum "Probleme mit der Registrierung".

    Liebe Mitglieder und Gäste,

    die Registrierung im Forum ist wegen einiger Trolle und Spammer nur noch mit einer Freischaltung durch den Admin möglich. Geben Sie eine gültige und dauerhaft erreichbare Mailadresse an. Füllen Sie das Profil aus. Eine Freischaltung erfolgt zeitnah nach Überprüfung der Registrierung.

    Wir bitten um Verständnis.

      • 1

      • # 114718

      Arduino / canbus / UVR ?

      Hallo
      es gibt für den Arduino ein preiswertes canbus shield < 10 euro
      und das mit klassenbibliotek
      hat damit schon mal einer versucht damit den canbus der uvr auszulesen ?

      könnte mir z.b einen WMZ auf den arduino vorstellen
      oder zusätzliche sensoren über den arduino auf den canbus schreiben und damit als netzwerkeingang für die UVR verwertbar
      mit 1wire sensoren 18ds...... hätte man unzählige sensoren auf der uvr


      gruß
      meinolf
      HVS40LC
      große Brennkammer /bessere Turbos (Sven)
      14 Lochdüse
      2400l Puffer ( Tichelmann verschaltet )
      UVR1611 /CMI / Datalogger mit Raspberry
      10qm Solar Vaillant Flachkollektor
      Eigenbau Frischwassersttion
      • 2

      • # 150611

      CAN-Bus Monitor mit ESP32 für uvr1611, cmi, bl-net, can-io ..usw

      Hallo,

      da der ESP32 im Umgang und in der Programmierung Arduino-ähnlich ist, möchte ich diesem Thread antworten.

      Ich bin zur Zeit am experimentieren mit dem ESP32, der kennt laut Datenblatt auch CAN-Funtionen.
      Speziell wollte ich herausfinden, ob es mit einfachen Mitteln möglich ist die Datenpakete
      von meinem CAN-Bus an dem die uvr1611, cmi, bl-net und can-io dranhängen mitzulesen.

      Es ist nur einen CAN-Bus-Transceiver notwendig, der die 12V CAN-Bus-Signale in die für den ESP32
      notwendigen 3,3V TTL-Signale (rx und tx) umwandelt. Den Rest kann der ESP32 und ein bisschen Software.

      Man merkt schon dass in den letzten Jahren die Maker-Szene grösser geworden ist. Es gibt auch dafür sehr preisgünstig Fertigmodule.
      Ich habe ein Waveshare SN65HVD230 CAN Board für ca. 5,94 EURO bei Eckstein gefunden, das genau diesen Zweck erfüllt.


      Die ersten Versuche wurden mit dem Logikanalyser gemacht, der kann auch CAN-Protokoll analysieren.
      Hier ein Standard CAN-Datenpaket mit Checksumme am Ende. Mein UVR CAN-Bus läuft mit 50kBit/s.


      erster Testaufbau auf dem Steckbrett


      Ich betrachte diese Monitoringsmöglichkeit meines UVR - CAN-Bus wie ein Messgerät das die CAN-Bussignale sichtbar machen
      kann, nicht mehr und nicht weniger.

      Nützlich sein kann diese Information im Fehlerfall, wenn man Datenpakete von einem bestimmten Gerät
      auf dem Bus vermisst und nicht genau weiss wo man suchen soll.
      Interessant finde ich auch die Heartbeatmeldungen, die alle TA-Geräte in regelmässigen Abständen senden.
      Da kann man sehen ob ein Gerät noch funktioniert, auch wenn keine sonstige Kommunikaton stattfindet.

      Ich möchte einfach ein Gefühl dafür bekommen, ob der Bus z.B. überlastet ist. Dann könnte ich z.B. einige
      Abfragen nicht so oft durchführen. Oder wenn es timeouts geben sollte, dann könnte ich sehen
      welche Geräte besonders aktiv auf dem CAN-Bus sind und dann besser rausfinden warum.. usw..

      Jedes CAN-Datenpaket hat am Anfang einen Identifier, der sagt ganz grob aus, von welchem Gerät zu welchem Zweck
      die Daten kommen.

      In einer CANOPEN-Beschreibung habe ich eine soche CAN-Identifier-Zurodnungsmöglichkeit gefunden..

      Identifierzuordnung
      ----------------------------------------------------------->gefundene Identifiers in meinen CAN-Busdaten
      180 + NID TPDO1 Netzwerkvariable Digital 1....16 -->01BE=BL-NET, 01A0=CAN-IO
      200 + NID TPDO2 Analog 1.....4 ---------------------->023E=BL-NET
      280 + NID TPDO3 Analog 5.....8 ---------------------->02BE=BL-NET
      300 + NID TPDO4 Analog 9....12 ---------------------->033E=BL-NET
      380 + NID TPDO5 Analog 13...16 --------------------->03BE=BL-NET
      400 + NID MPDO6 Client - Server Adressierung
      480 + NID MPDO7 Datenlogging --------------------->0481=UVR, 04BE=BL-NET, 04A6=CMI
      580 + NIDS SSDO1 Server -> Client
      5C0 + NIDC SSDO2....SSDO63 Server -> Client ---->05F8=CMI
      600 + NIDS SSDO1 Client -> Server
      640 + NIDC SSDO2....SSDO63 Client -> Server ---->0678=CMI
      700 + NID Heartbeat ---------------------------------->0701=UVR, 073E=BL-NET, 0738=CMI, 0720=CAN-IO

      NID ..... Knotennummer ( 1....62)
      NIDS…. Knotennummer Server
      NIDC.... Knotennummer Client

      Meine Geräte die am CAN-Bus hängen und deren Knoten-Nr in hex, um den Identifier zu berechnen.
      knoten 56 = CMI hex 38
      Knoten 1 = UVR1611 hex 01
      Knoten 32 = CAN-IO hex 20
      Knoten 62 = BL-NET hex 3E

      Beispiel um den CAN-Idendifier vom Heartbeat-Paket der UVR1611 zu Berechnen: 0700hex + 01hex = 0701hex = Heartbeat-id von der UVR1611

      Hier ein Auszug vom Mitschnitt meiner CAN-Bus Daten von dem ESP32-Programm,
      damit man sieht, wie CAN-Datenpakete von den einzelnen Geräten beispielhaft identifiziert werden können.

      ---------------------------->CAN-Identifier
      New standard frame from 0x00000720, DLC 1, Data 0x05 --> Heartbeat-Paket von CAN-IO
      New standard frame from 0x0000073E, DLC 1, Data 0x05 --> Heartbeat-Paket von BL-NET
      New standard frame from 0x00000701, DLC 1, Data 0x05 --> Heartbeat-Paket von UVR1611
      New standard frame from 0x000004BE, DLC 8, Data 0x01 0xF4 0x4F 0x01 0x01 0x00 0x00 0x00 --> Datenlogging BL-NET
      New standard frame from 0x000004BE, DLC 8, Data 0x81 0xF1 0x4F 0x01 0x01 0x00 0x00 0x00
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x01 0x01 0x00 0x03 0x80 --> Datenlogging UVR1611
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x02 0x3A 0x02 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x03 0xFC 0x02 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x04 0x9E 0x02 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x05 0x29 0x02 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x06 0xF3 0x01 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x07 0x88 0x01 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x08 0x44 0x02 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x09 0xC6 0x01 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0A 0x34 0x02 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0B 0x25 0x01 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0C 0x1F 0x01 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0D 0x23 0x01 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0E 0x0A 0x01 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0F 0xAB 0x02 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x10 0x27 0x02 0x41 0x01
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x11 0x79 0x00 0x40 0x03
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x12 0x0F 0x00 0x80 0x80
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x13 0x32 0x12 0x00 0x00
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x14 0xA8 0x17 0x1C 0x00
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x15 0x00 0x00 0x00 0x00
      New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x16 0xAA 0x0C 0x5C 0x00
      New standard frame from 0x000004BE, DLC 8, Data 0x81 0xF3 0x4F 0x01 0x01 0x00 0x00 0x00 --> Datenlogging BL-NET
      New standard frame from 0x000004BE, DLC 8, Data 0x01 0xF4 0x4F 0x01 0x01 0x00 0x00 0x00
      New standard frame from 0x000004BE, DLC 8, Data 0x81 0xF1 0x4F 0x01 0x02 0x00 0x00 0x00
      New standard frame from 0x00000738, DLC 1, Data 0x05 --> Heartbeat-Paket von CMI
      New standard frame from 0x00000678, DLC 8, Data 0x40 0x05 0x58 0x00 0x00 0x00 0x00 0x00 --> Client -> Server CMI
      New standard frame from 0x000005F8, DLC 8, Data 0x40 0x05 0x58 0x00 0x00 0x00 0x00 0x00 --> Server -> Client CMI
      New standard frame from 0x00000678, DLC 8, Data 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      New standard frame from 0x000005F8, DLC 8, Data 0x00 0xC2 0xC6 0x07 0x45 0x49 0x4E 0x47
      New standard frame from 0x00000678, DLC 8, Data 0x70 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      New standard frame from 0x000005F8, DLC 8, Data 0x10 0x41 0x45 0x4E 0x47 0x45 0xC5 0xC3
      New standard frame from 0x00000678, DLC 8, Data 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      New standard frame from 0x0000023E, DLC 8, Data 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF --> Analog 1.....4 von BL-NET
      New standard frame from 0x000003BE, DLC 8, Data 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF --> Analog 13...16 von BL-NET
      New standard frame from 0x0000033E, DLC 8, Data 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF --> Analog 9....12 von BL-NET
      New standard frame from 0x000002BE, DLC 8, Data 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF --> Analog 5.....8 von BL-NET
      New standard frame from 0x000001A0, DLC 2, Data 0x00 0x00 --> Netzwerkvariable Digital 1....16 von CAN-IO
      New standard frame from 0x000001BE, DLC 2, Data 0xFF 0xFF --> Netzwerkvariable Digital 1....16 von BL-NET

      Es ist nicht meine Absicht, den CAN-Bus und die Datepakete aller angeschlossenen Geräte zu dekodieren
      und irgendwelche externe Steuerungsmöglichkeiten zu schaffen. Dazu fehlen mir die Kenntnisse und Fähigkeiten
      und vor allem die notwendige Zeit. Ich habe auch nirgends eine Beschreibung des CAN-Protokolls der Geräte von TA gelesen.

      Das Programm ist sehr einfach und die Ausgabe erfolgt auf dem seriellen Monitor.
      Wenn man Arduinos programmieren kann, dann ist die Umstellung auf den ESP32 unproblematisch.
      Der Link zum runterladen der notwendigen ESP32CAN-Biliothek steht im Source-Code.
      Diese wird in der Programmier-IDE (version Arduino 1.8.6) im Menüpunkt SKETCH-Bibliothek einbinden-.zip-Bibliothek hinzufügen, den Programmen zugeordnet.

      In der Datei CAN_config.h in der ESP32CAN-Biliothek musste eine neue Zeile CAN_SPEED_50KBPS für die fehlende CAN-Busgeschwindigkeit
      hinzugefügt werden, damit auch 50kBit/s CAN-Bus gelesen werden kann.

      hier der Auszug von der Datei, in der geändert werden muss:
      ....
      /** \brief CAN Node Bus speed */
      typedef enum {
      CAN_SPEED_50KBPS = 50, /**< \brief CAN Node runs at 50kBit/s. */ /**--> diese Zeile muss hinzugefügt werden */
      CAN_SPEED_100KBPS = 100, /**< \brief CAN Node runs at 100kBit/s. */
      CAN_SPEED_125KBPS = 125, /**< \brief CAN Node runs at 125kBit/s. */
      ...
      CAN_SPEED_1000KBPS = 1000 /**< \brief CAN Node runs at 1000kBit/s. */
      } CAN_speed_t;
      ....

      Die angehängte .ZIP Datei mit einem UNZIPPER Programm entzippen. Dann die INO-Datei mit der Arduino IDE einlesen, kompilieren und auf den ESP32 hochladen.

      Gruß
      Jürgen
      Files
      • esp32can.zip

        (978 Byte, downloaded 13 times, last: )
      Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44 und BL-NET,CMI ;
      2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; PV 3,2kW; Wasserenthärtung
      • 3

      • # 166935
      Hallo Jürgen,

      ich nutze aktuell ein selbst geschriebenes Skript (link), welches mein Schema/die Visualisierung (http://BL-Net/GRAFIK.htm) vom BL-Net auswertet. Das Schema habe ich mit dem TA-Designer erstellt.
      Das tolle daran ist, dass auch alle Ein/Ausgänge von Logikblöcken darüber ausgelesen werden können.

      Jetzt macht der BL-Net aber Ärger (ich muss ihn regelmäßig vom Strom trennen, damit er wieder reagiert) und ich suche nach Alternativen.

      Hast du die Variablen der Logikblöcke auch schon identifiziert?

      Wenn ich es richtig verstehe ist es vom jetzigen Status zu einem Ersatz des BL-Net aber noch weit, da das Tool aktuell nur den CAN-Bus auf die Serielle Schnittstelle schreibt ohne die Daten zu verarbeiten, oder?


      Gruß,
      Hendrik
      • 4

      • # 166967
      Hallo Hendrik,

      ja, mit dem ESP32 kann man in diesem Status nur die Aktivität auf dem CAN-Bus lesen/messen für verschiedene Geräte(adressen).
      Das war mein kleines Forschungsprojekt CAN-Bus Messgerät mit ESP32. Ich hab da noch kein Bedarf gehabt um weiterzuforschen.
      Ist ja nur noch ein kleines oder grosses Stück Software dazu notwendig, um mehr Daten daraus auszulesen.
      Der ESP32 hat ja einen sehr großen Programmspeicher und viel Rechenpower im Vergleich zu den Arduinos, da kann man sich schon austoben.

      Bei mir läuft auch noch ein BL-NET im Hintergrund schon viele Jahre ohne Probleme.
      Ich lese dort die beiden Datenrahmen aus und schicke die Daten über MQTT zu meinem Smarthome.

      Eine kleine Html-Seite zum schnellen, direkten Parameter lesen/ändern oder experimentieren hat wohl jeder im Petto.

      Gruß
      Jürgen
      Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44 und BL-NET,CMI ;
      2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; PV 3,2kW; Wasserenthärtung

    Webutation