Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. mqtt-Abruf WiCAN-OBD-Dongle mit mqtt-Adapter und Blockly

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    512

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

mqtt-Abruf WiCAN-OBD-Dongle mit mqtt-Adapter und Blockly

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 3 Kommentatoren 1.6k Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • A ab-bro

    Ich versuche, über einen meatpi WiCAN-OBD Dongle den SOC eines e-Up auszulesen. Dazu habe ich im WiCAN-Dongle unsere openWB als mqtt-Broker eingestellt. Die Verbindung funktioniert auch. Der WiCAN-Dongle meldet seinen Status, den ich dann im ioBroker sehe.

    Ich weiß aber nicht, wie ich den WiCAN-Dongle dazu bekomme, auch den SOC über mqtt mitzuteilen. Dazu gibt es im openWB-Forum ein schönes Projekt, wo jemand den SOC durch ein Python-Programm abruft. Ich würde aber gerne über den mqtt-Adapter des ioBroker an den SOC des e-Up kommen, um dann über den ioBroker den SOC in die openWB zu bringen und als Info auch an anderen Stellen über die Visualisierung zu verwenden.

    Die Lösung für den SOC-Abruf beim WiCAN-Dongle sieht im oben beschriebenen Python-Projekt wie folgt aus:

    1. Datei configuration.py
      TOPIC_PREFIX = 'wican/34b472f22a8d'
      SOC_REQUEST = '{ "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] }'
    2. Hauptprogramm soc-helper.py
      client.publish(configuration.TOPIC_PREFIX+'/can/tx', configuration.SOC_REQUEST)

    Ich habe versucht, über ein Blockly mit sendTo das Gleiche zu erreichen. Mit folgenden Parametern (und natürlich als der WiCAN-Dongle online und nicht offline war):
    sendTo: mqtt.0
    Befehl: sendMessage2Client
    topic: wican.34b472f22a8d.can.tx
    message: { "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] }

    Das führte aber zu folgenden Fehlermeldungen:
    error script.js.WiCAN-SOC compile failed: at script.js.WiCAN-SOC:1
    error sendTo('mqtt.0', 'sendMessage2Client', { 'topic': 'wican.34b472f22a8d.can.tx', 'message': { \"bus\": \"0\", \"type\": \"tx\", \"frame\": [{ \"id\": 2021, \"dlc\": 8, \"rtr\": false, \"extd\": false, \"data\": [3, 34, 2, 140, 170, 170, 170, 170] }] } });
    error ^
    error SyntaxError: Invalid or unexpected token
    error at new Script (node:vm:100:7)

    Leider verstehe ich im Grunde nichts von mqtt. Hat jemand einen Tipp, was ich falsch mache, oder aber ob es vielleicht einen anderen (besseren) Weg gibt, den SOC-Abruf über den ioBroker durchzuführen?

    openWB-mqtt.jpg

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #2

    @ab-bro sagte: Der WiCAN-Dongle meldet seinen Status, den ich dann im ioBroker sehe.

    Was enthält der Status?

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    A 1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @ab-bro sagte: Der WiCAN-Dongle meldet seinen Status, den ich dann im ioBroker sehe.

      Was enthält der Status?

      A Offline
      A Offline
      ab-bro
      schrieb am zuletzt editiert von
      #3

      @paul53 Der Status zeigt "online" wenn das Fahrzeug fahrbereit ist oder lädt und sich der Dongle ins heimische WLAN eingebucht hat. Ansonsten zeigt er "offline". Das meldet der Dongle wohl, bevor er in den Schlafmodus geht. Die konkrete Meldung sieht im ioBroker so aus: {"status": "offline"}

      1 Antwort Letzte Antwort
      0
      • A ab-bro

        Ich versuche, über einen meatpi WiCAN-OBD Dongle den SOC eines e-Up auszulesen. Dazu habe ich im WiCAN-Dongle unsere openWB als mqtt-Broker eingestellt. Die Verbindung funktioniert auch. Der WiCAN-Dongle meldet seinen Status, den ich dann im ioBroker sehe.

        Ich weiß aber nicht, wie ich den WiCAN-Dongle dazu bekomme, auch den SOC über mqtt mitzuteilen. Dazu gibt es im openWB-Forum ein schönes Projekt, wo jemand den SOC durch ein Python-Programm abruft. Ich würde aber gerne über den mqtt-Adapter des ioBroker an den SOC des e-Up kommen, um dann über den ioBroker den SOC in die openWB zu bringen und als Info auch an anderen Stellen über die Visualisierung zu verwenden.

        Die Lösung für den SOC-Abruf beim WiCAN-Dongle sieht im oben beschriebenen Python-Projekt wie folgt aus:

        1. Datei configuration.py
          TOPIC_PREFIX = 'wican/34b472f22a8d'
          SOC_REQUEST = '{ "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] }'
        2. Hauptprogramm soc-helper.py
          client.publish(configuration.TOPIC_PREFIX+'/can/tx', configuration.SOC_REQUEST)

        Ich habe versucht, über ein Blockly mit sendTo das Gleiche zu erreichen. Mit folgenden Parametern (und natürlich als der WiCAN-Dongle online und nicht offline war):
        sendTo: mqtt.0
        Befehl: sendMessage2Client
        topic: wican.34b472f22a8d.can.tx
        message: { "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] }

        Das führte aber zu folgenden Fehlermeldungen:
        error script.js.WiCAN-SOC compile failed: at script.js.WiCAN-SOC:1
        error sendTo('mqtt.0', 'sendMessage2Client', { 'topic': 'wican.34b472f22a8d.can.tx', 'message': { \"bus\": \"0\", \"type\": \"tx\", \"frame\": [{ \"id\": 2021, \"dlc\": 8, \"rtr\": false, \"extd\": false, \"data\": [3, 34, 2, 140, 170, 170, 170, 170] }] } });
        error ^
        error SyntaxError: Invalid or unexpected token
        error at new Script (node:vm:100:7)

        Leider verstehe ich im Grunde nichts von mqtt. Hat jemand einen Tipp, was ich falsch mache, oder aber ob es vielleicht einen anderen (besseren) Weg gibt, den SOC-Abruf über den ioBroker durchzuführen?

        openWB-mqtt.jpg

        Marc BergM Offline
        Marc BergM Offline
        Marc Berg
        Most Active
        schrieb am zuletzt editiert von Marc Berg
        #4

        @ab-bro sagte in mqtt-Abruf WiCAN-OBD-Dongle mit mqtt-Adapter und Blockly:

        wican.34b472f22a8d.can.tx

        Ich würde das Blockly erstmal außen vor lassen und stattdessen das Topic im MQTT Baum anlegen. Dann kannst du einfach die Message in den Datenpunkt kopieren. Damit wird diese Message dann veröffentlicht.

        Um das Topic anzulegen aktivierst du kurz des Expertenmodus, stellst dich auf den Ordner "34b472..." und klickst auf das "+", als Name gibst du can.tx ein.

        Nun kannst du den Inhalt des neuen Datenpunktes "tx" verändern und { "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] } reinschreiben.

        Wenn das funktioniert, kannst du mit dem Automatisieren weiter machen.

        NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

        Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

        Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

        A 1 Antwort Letzte Antwort
        0
        • A ab-bro

          Ich versuche, über einen meatpi WiCAN-OBD Dongle den SOC eines e-Up auszulesen. Dazu habe ich im WiCAN-Dongle unsere openWB als mqtt-Broker eingestellt. Die Verbindung funktioniert auch. Der WiCAN-Dongle meldet seinen Status, den ich dann im ioBroker sehe.

          Ich weiß aber nicht, wie ich den WiCAN-Dongle dazu bekomme, auch den SOC über mqtt mitzuteilen. Dazu gibt es im openWB-Forum ein schönes Projekt, wo jemand den SOC durch ein Python-Programm abruft. Ich würde aber gerne über den mqtt-Adapter des ioBroker an den SOC des e-Up kommen, um dann über den ioBroker den SOC in die openWB zu bringen und als Info auch an anderen Stellen über die Visualisierung zu verwenden.

          Die Lösung für den SOC-Abruf beim WiCAN-Dongle sieht im oben beschriebenen Python-Projekt wie folgt aus:

          1. Datei configuration.py
            TOPIC_PREFIX = 'wican/34b472f22a8d'
            SOC_REQUEST = '{ "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] }'
          2. Hauptprogramm soc-helper.py
            client.publish(configuration.TOPIC_PREFIX+'/can/tx', configuration.SOC_REQUEST)

          Ich habe versucht, über ein Blockly mit sendTo das Gleiche zu erreichen. Mit folgenden Parametern (und natürlich als der WiCAN-Dongle online und nicht offline war):
          sendTo: mqtt.0
          Befehl: sendMessage2Client
          topic: wican.34b472f22a8d.can.tx
          message: { "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] }

          Das führte aber zu folgenden Fehlermeldungen:
          error script.js.WiCAN-SOC compile failed: at script.js.WiCAN-SOC:1
          error sendTo('mqtt.0', 'sendMessage2Client', { 'topic': 'wican.34b472f22a8d.can.tx', 'message': { \"bus\": \"0\", \"type\": \"tx\", \"frame\": [{ \"id\": 2021, \"dlc\": 8, \"rtr\": false, \"extd\": false, \"data\": [3, 34, 2, 140, 170, 170, 170, 170] }] } });
          error ^
          error SyntaxError: Invalid or unexpected token
          error at new Script (node:vm:100:7)

          Leider verstehe ich im Grunde nichts von mqtt. Hat jemand einen Tipp, was ich falsch mache, oder aber ob es vielleicht einen anderen (besseren) Weg gibt, den SOC-Abruf über den ioBroker durchzuführen?

          openWB-mqtt.jpg

          Marc BergM Offline
          Marc BergM Offline
          Marc Berg
          Most Active
          schrieb am zuletzt editiert von
          #5

          @ab-bro Und zeig' bitte noch die MQTT Instanzeinstellungen.

          NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

          Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

          Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

          A 1 Antwort Letzte Antwort
          0
          • Marc BergM Marc Berg

            @ab-bro Und zeig' bitte noch die MQTT Instanzeinstellungen.

            A Offline
            A Offline
            ab-bro
            schrieb am zuletzt editiert von
            #6

            @marc-berg
            Vielen Dank für die schnellen Rückmeldungen! Leider steht das Auto gerade nicht zum Testen zur Verfügung. Ich probiere morgen dann direkt aus, den Topic im Baum des ioBoker anzulegen und die Message in den Datenpunkt einzutragen.

            Hier sind schon mal die Screenshots der mqtt-Instanzeinstellungen:

            mqtt-Instanzeinstellungen-Verbindung.png

            Instanzeinstellungen-ClientSettings.png

            Instanzeinstellungen-mqttEinstellungen1.png

            Instanzeinstellungen-mqttEinstellungen2.png

            1 Antwort Letzte Antwort
            0
            • Marc BergM Marc Berg

              @ab-bro sagte in mqtt-Abruf WiCAN-OBD-Dongle mit mqtt-Adapter und Blockly:

              wican.34b472f22a8d.can.tx

              Ich würde das Blockly erstmal außen vor lassen und stattdessen das Topic im MQTT Baum anlegen. Dann kannst du einfach die Message in den Datenpunkt kopieren. Damit wird diese Message dann veröffentlicht.

              Um das Topic anzulegen aktivierst du kurz des Expertenmodus, stellst dich auf den Ordner "34b472..." und klickst auf das "+", als Name gibst du can.tx ein.

              Nun kannst du den Inhalt des neuen Datenpunktes "tx" verändern und { "bus": "0", "type": "tx", "frame": [{ "id": 2021, "dlc": 8, "rtr": false, "extd": false, "data": [3, 34, 2, 140, 170, 170, 170, 170] }] } reinschreiben.

              Wenn das funktioniert, kannst du mit dem Automatisieren weiter machen.

              A Offline
              A Offline
              ab-bro
              schrieb am zuletzt editiert von
              #7

              @marc-berg Es hat funktioniert! Vielen Dank für Deine Hilfe!

              Marc BergM 1 Antwort Letzte Antwort
              0
              • A ab-bro

                @marc-berg Es hat funktioniert! Vielen Dank für Deine Hilfe!

                Marc BergM Offline
                Marc BergM Offline
                Marc Berg
                Most Active
                schrieb am zuletzt editiert von
                #8

                @ab-bro Aber jetzt hast du doch immer noch einen Fehler in deinem Skript, oder? Mein Hinweis war ja nur dafür gedacht, dass Ganze zu testen, ob es grundsätzlich läuft.

                NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

                Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                A 1 Antwort Letzte Antwort
                0
                • Marc BergM Marc Berg

                  @ab-bro Aber jetzt hast du doch immer noch einen Fehler in deinem Skript, oder? Mein Hinweis war ja nur dafür gedacht, dass Ganze zu testen, ob es grundsätzlich läuft.

                  A Offline
                  A Offline
                  ab-bro
                  schrieb am zuletzt editiert von ab-bro
                  #9

                  @marc-berg Mit dem Skript hatte ich erstmal nur versucht, das topic zu erzeugen. Das hat nun auf Deinem Weg geklappt. Das Einsetzen der Message in den neuen tx-Datenpunkt hat auch sofort dazu geführt, dass der Dongle einen neuen Datenpunkt rx für seine Antwort erzeugt hat.

                  Bildschirmfoto 2023-12-27 um 14.02.25.png

                  Und wenn ich die Abfrage-Message erneut in den tx-Datenpunkt schreibe, wird die Antwort auch sofort aktualisiert.
                  Jetzt muss ich nur noch ein Skript erstellen, das aus der rx-Antwort {"bus":"0","type":"rx","ts":5943,"frame":[{"id":2029,"dlc":8,"rtr":false,"extd":false,"data":[4,98,2,140,167,170,170,170]}]} den SOC entnimmt. Das ist in diesem Fall die 167. Dieser Wert muss dann nur noch durch 2.55 geteilt werden. Er steht immer an der gleichen Stelle. Ich muss also den entsprechenden Teilstring extrahieren.
                  Wenn ich diesen Skript-Teil habe, kann ich einen Trigger setzen, wenn die Status-Message des Dongle zeigt, dass er online ist und dann den SOC abzurufen. Anschließend könnte ich den SOC z.B. alle 15 Minuten abfragen, solange die Status-Message des Dongle nicht zeigt, dass er offline ist.

                  Ich hoffe, das bekomme ich irgendwie hin. Der Schritt, die Kommunikation überhaupt aufzusetzen war der, über den ich gar nichts wusste. Deshalb war dein Tipp so hilfreich!

                  Marc BergM 1 Antwort Letzte Antwort
                  0
                  • A ab-bro

                    @marc-berg Mit dem Skript hatte ich erstmal nur versucht, das topic zu erzeugen. Das hat nun auf Deinem Weg geklappt. Das Einsetzen der Message in den neuen tx-Datenpunkt hat auch sofort dazu geführt, dass der Dongle einen neuen Datenpunkt rx für seine Antwort erzeugt hat.

                    Bildschirmfoto 2023-12-27 um 14.02.25.png

                    Und wenn ich die Abfrage-Message erneut in den tx-Datenpunkt schreibe, wird die Antwort auch sofort aktualisiert.
                    Jetzt muss ich nur noch ein Skript erstellen, das aus der rx-Antwort {"bus":"0","type":"rx","ts":5943,"frame":[{"id":2029,"dlc":8,"rtr":false,"extd":false,"data":[4,98,2,140,167,170,170,170]}]} den SOC entnimmt. Das ist in diesem Fall die 167. Dieser Wert muss dann nur noch durch 2.55 geteilt werden. Er steht immer an der gleichen Stelle. Ich muss also den entsprechenden Teilstring extrahieren.
                    Wenn ich diesen Skript-Teil habe, kann ich einen Trigger setzen, wenn die Status-Message des Dongle zeigt, dass er online ist und dann den SOC abzurufen. Anschließend könnte ich den SOC z.B. alle 15 Minuten abfragen, solange die Status-Message des Dongle nicht zeigt, dass er offline ist.

                    Ich hoffe, das bekomme ich irgendwie hin. Der Schritt, die Kommunikation überhaupt aufzusetzen war der, über den ich gar nichts wusste. Deshalb war dein Tipp so hilfreich!

                    Marc BergM Offline
                    Marc BergM Offline
                    Marc Berg
                    Most Active
                    schrieb am zuletzt editiert von Marc Berg
                    #10

                    @ab-bro sagte in mqtt-Abruf WiCAN-OBD-Dongle mit mqtt-Adapter und Blockly:

                    Jetzt muss ich nur noch ein Skript erstellen, das aus der rx-Antwort {"bus":"0","type":"rx","ts":5943,"frame":[{"id":2029,"dlc":8,"rtr":false,"extd":false,"data":[4,98,2,140,167,170,170,170]}]} den SOC entnimmt. Das ist in diesem Fall die 167. Dieser Wert muss dann nur noch durch 2.55 geteilt werden. Er steht immer an der gleichen Stelle. Ich muss also den entsprechenden Teilstring extrahieren.

                    das geht über einen Alias und eine Read-Funktion JSON.parse(val).frame[0].data[4]/2.55

                    214c48df-0edd-4cba-83e4-1145f7a98799-grafik.png

                    Edit: "State ID" angepasst

                    NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

                    Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                    Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                    A 1 Antwort Letzte Antwort
                    0
                    • Marc BergM Marc Berg

                      @ab-bro sagte in mqtt-Abruf WiCAN-OBD-Dongle mit mqtt-Adapter und Blockly:

                      Jetzt muss ich nur noch ein Skript erstellen, das aus der rx-Antwort {"bus":"0","type":"rx","ts":5943,"frame":[{"id":2029,"dlc":8,"rtr":false,"extd":false,"data":[4,98,2,140,167,170,170,170]}]} den SOC entnimmt. Das ist in diesem Fall die 167. Dieser Wert muss dann nur noch durch 2.55 geteilt werden. Er steht immer an der gleichen Stelle. Ich muss also den entsprechenden Teilstring extrahieren.

                      das geht über einen Alias und eine Read-Funktion JSON.parse(val).frame[0].data[4]/2.55

                      214c48df-0edd-4cba-83e4-1145f7a98799-grafik.png

                      Edit: "State ID" angepasst

                      A Offline
                      A Offline
                      ab-bro
                      schrieb am zuletzt editiert von
                      #11

                      @marc-berg Auch das hat funktioniert. Kannte ich ebenfalls noch gar nicht ...
                      Vielen Dank!!!

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      310

                      Online

                      32.5k

                      Benutzer

                      81.8k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe