Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Node-Red
  5. ich brauche etwas Nachhilfe mit Node Red und RS232

NEWS

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    8
    1
    957

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.5k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    6.0k

ich brauche etwas Nachhilfe mit Node Red und RS232

Geplant Angeheftet Gesperrt Verschoben Node-Red
31 Beiträge 5 Kommentatoren 181 Aufrufe 3 Beobachtet
  • Ä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 andibr

    Vielen Dank, bin gerade unterwegs, werde das aber morgen mal testen. Der Inhalt des Debug sieht schon sehr vielversprechend aus. Damit lässt sich glaub dann relativ einfach ein Datenpunkt für den Iobroker erstellen. Ich meinte ich habe solche Filter auch schon gebaut beim auslesen der Victron Forcast aus dem VRM.
    Ich werde auf alle Fälle mal den ganzen String nochmals "nackt" hier einstellen.
    Mit den Terminal Tools lassen sich den BMS noch ganz viele Dinge entlocken, habe unteranderem festgestellt, dass meine 8 Pytes mehrere verschiedene BMS Versionen und auch entsprechend verschiedene Firmeware haben. Sogar solche die ich zusammen gekauft habe.

    HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    schrieb am zuletzt editiert von
    #18

    @andibr sagte:

    beim auslesen der Victron Forcast aus dem VRM.

    Wieder [OT]
    Hängt die pytes bereits per CAN am BMS-CAN vom Cerbo?
    Und zusätzlich gehst du an den rj45 für RS232?
    Geht das problemlos?
    Hab mich das nämlich noch nicht getraut.

    kein Support per PN! - Fragen im Forum stellen - Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    A 1 Antwort Letzte Antwort
    0
    • HomoranH Homoran

      @andibr sagte:

      beim auslesen der Victron Forcast aus dem VRM.

      Wieder [OT]
      Hängt die pytes bereits per CAN am BMS-CAN vom Cerbo?
      Und zusätzlich gehst du an den rj45 für RS232?
      Geht das problemlos?
      Hab mich das nämlich noch nicht getraut.

      A Offline
      A Offline
      andibr
      schrieb am zuletzt editiert von andibr
      #19

      @Homoran
      Absolut richtig erkannt. Mein Cerbo GX kommuniziert weiterhin über den BMS-CAN direckt mit dem Master BMS und holt sich die Daten die es braucht.

      Mein Ansatz ist eben, dass Victron und Pytes zusammen die Sache machen sollen und ich eigentlich nur ein Visualisierung der Zellen haben will. Weil die Erfahrung der letzten 1 1/2 Jahren hat mir gezeigt, dass die beiden das sehr gut machen und ich da keinerlei Eingriffe machen muss.
      Wenn ich letzten Sonntag nicht etwas vorlaut gewesen wäre in einer Diskussion um die angebliche "Bombe und Brandbeschleuniger" in meinem Keller, würden wir hier kaum diskutieren.
      Ein absoluter Verbrennerfan wollte mir erklären das alles zu gefährlich ist und sich nie rechnen würde. Da habe ich eben behauptet das mein Akku besser überwacht wird als sein Benzintank. Nun muss ich halt Beweise liefern.

      Ich werde das ganze nochmals zusammenfassen und in einen kompletten Eintrag schreiben, dass auch jemand ohne alles zu lesen etwas versteht.

      OliverIOO HomoranH 2 Antworten Letzte Antwort
      0
      • A andibr

        @Homoran
        Absolut richtig erkannt. Mein Cerbo GX kommuniziert weiterhin über den BMS-CAN direckt mit dem Master BMS und holt sich die Daten die es braucht.

        Mein Ansatz ist eben, dass Victron und Pytes zusammen die Sache machen sollen und ich eigentlich nur ein Visualisierung der Zellen haben will. Weil die Erfahrung der letzten 1 1/2 Jahren hat mir gezeigt, dass die beiden das sehr gut machen und ich da keinerlei Eingriffe machen muss.
        Wenn ich letzten Sonntag nicht etwas vorlaut gewesen wäre in einer Diskussion um die angebliche "Bombe und Brandbeschleuniger" in meinem Keller, würden wir hier kaum diskutieren.
        Ein absoluter Verbrennerfan wollte mir erklären das alles zu gefährlich ist und sich nie rechnen würde. Da habe ich eben behauptet das mein Akku besser überwacht wird als sein Benzintank. Nun muss ich halt Beweise liefern.

        Ich werde das ganze nochmals zusammenfassen und in einen kompletten Eintrag schreiben, dass auch jemand ohne alles zu lesen etwas versteht.

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von OliverIO
        #20

        @andibr

        Ein absoluter Verbrennerfan wollte mir erklären das alles zu gefährlich ist und sich nie rechnen würde.

        Wenn es die Kategorie von Menschen ist, was ich aktuell vor Auge hab, merk dir, wenn es dir zu viel wird:
        Hör rechtzeitig auf mit diskutieren. Einige von dieser Kategorie wirst du nie überzeugen/zufriedenstellen stellen

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        A 1 Antwort Letzte Antwort
        1
        • OliverIOO OliverIO

          @andibr

          Ein absoluter Verbrennerfan wollte mir erklären das alles zu gefährlich ist und sich nie rechnen würde.

          Wenn es die Kategorie von Menschen ist, was ich aktuell vor Auge hab, merk dir, wenn es dir zu viel wird:
          Hör rechtzeitig auf mit diskutieren. Einige von dieser Kategorie wirst du nie überzeugen/zufriedenstellen stellen

          A Offline
          A Offline
          andibr
          schrieb am zuletzt editiert von
          #21

          @OliverIO
          Da wirst du absolut Recht habe, nur ist es etwas schwierig wenn das der Pate eines meiner Kinder ist. Da kann man nur versuchen nicht darüber zu sprechen. Aber wenn er damit beginnt ist es dann etwas heikel.

          A 1 Antwort Letzte Antwort
          0
          • A andibr

            @Homoran
            Absolut richtig erkannt. Mein Cerbo GX kommuniziert weiterhin über den BMS-CAN direckt mit dem Master BMS und holt sich die Daten die es braucht.

            Mein Ansatz ist eben, dass Victron und Pytes zusammen die Sache machen sollen und ich eigentlich nur ein Visualisierung der Zellen haben will. Weil die Erfahrung der letzten 1 1/2 Jahren hat mir gezeigt, dass die beiden das sehr gut machen und ich da keinerlei Eingriffe machen muss.
            Wenn ich letzten Sonntag nicht etwas vorlaut gewesen wäre in einer Diskussion um die angebliche "Bombe und Brandbeschleuniger" in meinem Keller, würden wir hier kaum diskutieren.
            Ein absoluter Verbrennerfan wollte mir erklären das alles zu gefährlich ist und sich nie rechnen würde. Da habe ich eben behauptet das mein Akku besser überwacht wird als sein Benzintank. Nun muss ich halt Beweise liefern.

            Ich werde das ganze nochmals zusammenfassen und in einen kompletten Eintrag schreiben, dass auch jemand ohne alles zu lesen etwas versteht.

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            schrieb am zuletzt editiert von
            #22

            @andibr sagte:

            die angebliche "Bombe und Brandbeschleuniger" in meinem Keller

            Dann kennt der den Unterschied zwischen Li-Ion und LFP nicht.
            Der soll sich mal die videos ansehen, in denen die Chinesen auf die LFP Zellen mit Pistolen schießen...ohne Konsequenzen!

            @andibr sagte:

            und ich eigentlich nur ein Visualisierung der Zellen haben will.

            Genau darum geht's mir auch.

            Ich hab schon reichlich Informationen
            2389.jpg

            Wüsste aber auch gerne mehr über die Einzelzellen.

            Danke!

            kein Support per PN! - Fragen im Forum stellen - Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
            Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            A 1 Antwort Letzte Antwort
            0
            • A andibr

              @OliverIO
              Da wirst du absolut Recht habe, nur ist es etwas schwierig wenn das der Pate eines meiner Kinder ist. Da kann man nur versuchen nicht darüber zu sprechen. Aber wenn er damit beginnt ist es dann etwas heikel.

              A Offline
              A Offline
              andibr
              schrieb am zuletzt editiert von andibr
              #23

              Ich habe den Flow einfach mal rasch bei mir importiert und den aktuellen Output aus der Schnittstelle per copie-paste reingefügt, aber da kommt etwas Müll raus. Die Sortierung kommt irgendwie durcheinander.

              5658dee2-ab1c-4313-997a-8b9b340301d9-image.jpeg

              Wie bekomme ich einen HEX Output?

              Edit: habe da gerade noch was herausgefunden:
              Bildschirmfoto vom 2026-08-09 11-32-18.png

              Zum Glück gibt es noch brauchbare Terminal-Software: jede Zeile endet mit 0X00D 0X00D 0X00A (den letzten sieht man nicht). Die "Leerzeichen sind alle 0X020
              Das ganze habe ich jetzt mit folgendem Flow erzeugt: (ist eigentlich ganz einfach)
              Bildschirmfoto vom 2026-08-09 11-37-08.png
              Dann kann man beim Node "write file" angeben wohin

              Edit2:
              mit dieser Art kann man sich ein kompletes File mit allen Parameter von allen Zellen erstellen, denn Node-Red ist so schlau und öffnet das File und fügt den neuen Teil unten an und schliesst es wieder.

              Komando "help"

              @
              Local command:
              bat      Battery data show - bat [pwr][index]
              data     History data load - data [event/history][item]
              datalist Show recorded data - datalist {event/history}{item}}
              disp     Display Info at regular intervals - disp [(pwrs pwrNo)/val]/[(bats batNo)/volt/curr/temp]
              help     Help [cmd]
              info     Device infomation - info
              log      Log information show - log
              login    Login Admin mode - login [password]
              logout   user mode  - logout
              pwr      Power data show - pwr [index]
              shut     Shut down - shut
              soh      State of health - soh [addr]
              stat     Statistic data show - stat
              time     Time - time [year] [month] [day] [hour] [minute] [second]
              trst     Test Soft Reset - trst
              updata   updata system - updata
              ver      firmware info - ver
              **********************************************************
              Remote command:
              Press [Enter] to be continued,other key to exit
              
              OliverIOO 1 Antwort Letzte Antwort
              0
              • HomoranH Homoran

                @andibr sagte:

                die angebliche "Bombe und Brandbeschleuniger" in meinem Keller

                Dann kennt der den Unterschied zwischen Li-Ion und LFP nicht.
                Der soll sich mal die videos ansehen, in denen die Chinesen auf die LFP Zellen mit Pistolen schießen...ohne Konsequenzen!

                @andibr sagte:

                und ich eigentlich nur ein Visualisierung der Zellen haben will.

                Genau darum geht's mir auch.

                Ich hab schon reichlich Informationen
                2389.jpg

                Wüsste aber auch gerne mehr über die Einzelzellen.

                Danke!

                A Offline
                A Offline
                andibr
                schrieb am zuletzt editiert von
                #24

                @Homoran
                So wie ich das chemische Verständnis dieser Person einschätze kann er den Unterschied zwischen den verschiedenen Zell-Chemien gar nicht erkennen. Das beste, aber auch irgendwie übliche, Arrgument war dann die "Kinderarbeit" zur Kobalt gewinnung. Spätestens da habe ich begriffen das er nicht will. Möchte eigentlich nicht wissen wieviel "Sklavenarbeit" im Oel-Sektor drin steckt.

                Aber es bringt nichts mit solchen Leute über solche Dinge zu sprechen, irgenwiw kann man nur Müde lächeln und sich fragen wie soviel Unwissen und Desinteresse her kommt, aber trotzdem damit diskutieren wollen.

                Hast du diese Infos alle aus dem Cerbo, ich gehe davon aus per Modbus aus den Register? Da hole ich auch ein paar DInge raus, habe aber festgestellt, dass es via MQTT fast zuverläsiger kommt.
                Zudem gibt es mit der "MQTT-Bridge" die Möglichkeit, den ganzen Cerbo zu sich in einen eigenen Broker zu holen.

                HomoranH 1 Antwort Letzte Antwort
                1
                • A andibr

                  Ich habe den Flow einfach mal rasch bei mir importiert und den aktuellen Output aus der Schnittstelle per copie-paste reingefügt, aber da kommt etwas Müll raus. Die Sortierung kommt irgendwie durcheinander.

                  5658dee2-ab1c-4313-997a-8b9b340301d9-image.jpeg

                  Wie bekomme ich einen HEX Output?

                  Edit: habe da gerade noch was herausgefunden:
                  Bildschirmfoto vom 2026-08-09 11-32-18.png

                  Zum Glück gibt es noch brauchbare Terminal-Software: jede Zeile endet mit 0X00D 0X00D 0X00A (den letzten sieht man nicht). Die "Leerzeichen sind alle 0X020
                  Das ganze habe ich jetzt mit folgendem Flow erzeugt: (ist eigentlich ganz einfach)
                  Bildschirmfoto vom 2026-08-09 11-37-08.png
                  Dann kann man beim Node "write file" angeben wohin

                  Edit2:
                  mit dieser Art kann man sich ein kompletes File mit allen Parameter von allen Zellen erstellen, denn Node-Red ist so schlau und öffnet das File und fügt den neuen Teil unten an und schliesst es wieder.

                  Komando "help"

                  @
                  Local command:
                  bat      Battery data show - bat [pwr][index]
                  data     History data load - data [event/history][item]
                  datalist Show recorded data - datalist {event/history}{item}}
                  disp     Display Info at regular intervals - disp [(pwrs pwrNo)/val]/[(bats batNo)/volt/curr/temp]
                  help     Help [cmd]
                  info     Device infomation - info
                  log      Log information show - log
                  login    Login Admin mode - login [password]
                  logout   user mode  - logout
                  pwr      Power data show - pwr [index]
                  shut     Shut down - shut
                  soh      State of health - soh [addr]
                  stat     Statistic data show - stat
                  time     Time - time [year] [month] [day] [hour] [minute] [second]
                  trst     Test Soft Reset - trst
                  updata   updata system - updata
                  ver      firmware info - ver
                  **********************************************************
                  Remote command:
                  Press [Enter] to be continued,other key to exit
                  
                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von OliverIO
                  #25

                  @andibr

                  hm eigentlich kein müll nur nicht die letzte version

                  [
                     {
                         "id": "593468e.75a0498",
                         "type": "tab",
                         "label": "Flow 1",
                         "disabled": false,
                         "info": ""
                     },
                     {
                         "id": "6602913b9103c8e9",
                         "type": "function",
                         "z": "593468e.75a0498",
                         "name": "bereitstellung text",
                         "func": "msg.payload = `@\nBattery  Volt     Tempr     Base State   Volt. State  Curr. State  Temp. State  Coulomb\n0        3467     29000     Idle         Normal       Normal       Normal       97%       95988 mAH\n1        3474     29000     Idle         Normal       Normal       Normal       97%       96070 mAH\n2        3463     29000     Idle         Normal       Normal       Normal       96%       95549 mAH\n3        3473     29000     Idle         Normal       Normal       Normal       97%       96070 mAH\n4        3468     29000     Idle         Normal       Normal       Normal       97%       95906 mAH\n5        3465     28000     Idle         Normal       Normal       Normal       96%       95329 mAH\n6        3459     28000     Idle         Normal       Normal       Normal       96%       95220 mAH\n7        3471     28000     Idle         Normal       Normal       Normal       97%       95906 mAH\n`;\n\nreturn msg;",
                         "outputs": 1,
                         "timeout": 0,
                         "noerr": 0,
                         "initialize": "",
                         "finalize": "",
                         "libs": [],
                         "x": 130,
                         "y": 120,
                         "wires": [
                             [
                                 "2df68931298f6d99"
                             ]
                         ]
                     },
                     {
                         "id": "2df68931298f6d99",
                         "type": "function",
                         "z": "593468e.75a0498",
                         "name": "convert to msgs",
                         "func": "const text = msg.payload;\n\nif (typeof text !== \"string\") {\n    node.error(\"msg.payload ist kein String\", msg);\n    return null;\n}\n\n// In einzelne Zeilen zerlegen\nconst lines = text\n    .split(/\\r?\\n/)\n    .map(line => line.trim())\n    .filter(line => line !== \"\");\n\n// Nur Zeilen berücksichtigen, die mit einer Batterienummer beginnen\nconst dataLines = lines.filter(line => /^\\d+\\s/.test(line));\n\nconst messages = [];\n\nfor (const line of dataLines) {\n\n    // Spalten sind durch mindestens 2 Leerzeichen getrennt\n    const columns = line.split(/\\s{2,}/);\n\n    if (columns.length < 9) {\n        node.warn(\"Zeile konnte nicht verarbeitet werden: \" + line);\n        continue;\n    }\n\n    const battery = {\n        battery: Number(columns[0]),\n        volt: Number(columns[1]),\n        tempr: Number(columns[2]),\n        baseState: columns[3],\n        voltState: columns[4],\n        currState: columns[5],\n        tempState: columns[6],\n        coulomb: Number(columns[7].replace(\"%\", \"\")),\n        capacity: Number(columns[8].replace(/[^\\d]/g, \"\"))\n    };\n\n    messages.push({\n        ...msg,\n        payload: battery\n    });\n}\n\n// Alle Nachrichten nacheinander über denselben Ausgang senden\nreturn [messages];",
                         "outputs": 1,
                         "timeout": 0,
                         "noerr": 0,
                         "initialize": "",
                         "finalize": "",
                         "libs": [],
                         "x": 320,
                         "y": 120,
                         "wires": [
                             [
                                 "dd25a6c986c48c9a"
                             ]
                         ]
                     },
                     {
                         "id": "c972ab9ba4b7bebd",
                         "type": "debug",
                         "z": "593468e.75a0498",
                         "name": "debug 1",
                         "active": true,
                         "tosidebar": true,
                         "console": false,
                         "tostatus": false,
                         "complete": "true",
                         "targetType": "full",
                         "statusVal": "",
                         "statusType": "auto",
                         "x": 400,
                         "y": 200,
                         "wires": []
                     },
                     {
                         "id": "a349e5287a176ccf",
                         "type": "inject",
                         "z": "593468e.75a0498",
                         "name": "Start button",
                         "props": [
                             {
                                 "p": "payload"
                             },
                             {
                                 "p": "topic",
                                 "vt": "str"
                             }
                         ],
                         "repeat": "",
                         "crontab": "",
                         "once": false,
                         "onceDelay": 0.1,
                         "topic": "",
                         "payload": "",
                         "payloadType": "date",
                         "x": 110,
                         "y": 60,
                         "wires": [
                             [
                                 "6602913b9103c8e9"
                             ]
                         ]
                     },
                     {
                         "id": "941c0f521bd7fa84",
                         "type": "ioBroker out",
                         "z": "593468e.75a0498",
                         "name": "",
                         "topic": "",
                         "ack": "true",
                         "autoCreate": "true",
                         "stateName": "",
                         "role": "",
                         "payloadType": "",
                         "readonly": "",
                         "stateUnit": "",
                         "stateMin": "",
                         "stateMax": "",
                         "x": 420,
                         "y": 240,
                         "wires": []
                     },
                     {
                         "id": "dd25a6c986c48c9a",
                         "type": "function",
                         "z": "593468e.75a0498",
                         "name": "function 1",
                         "func": "const battery = msg.payload;\n\nif (!battery || battery.battery === undefined) {\n    node.error(\"Ungültiges Battery-Objekt\", msg);\n    return null;\n}\n\nconst batteryId = battery.battery;\n\nconst states = [\n    {\n        id: \"voltage\",\n        value: battery.volt,\n        name: \"Voltage\",\n        role: \"value.voltage\",\n        type: \"number\",\n        readonly: true,\n        unit: \"mV\",\n        min: 0\n    },\n    {\n        id: \"temperature\",\n        value: battery.tempr / 1000,\n        name: \"Temperature\",\n        role: \"value.temperature\",\n        type: \"number\",\n        readonly: true,\n        unit: \"°C\"\n    },\n    {\n        id: \"baseState\",\n        value: battery.baseState,\n        name: \"Base State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"voltageState\",\n        value: battery.voltState,\n        name: \"Voltage State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"currentState\",\n        value: battery.currState,\n        name: \"Current State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"temperatureState\",\n        value: battery.tempState,\n        name: \"Temperature State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"charge\",\n        value: battery.coulomb,\n        name: \"Charge\",\n        role: \"value.battery\",\n        type: \"number\",\n        readonly: true,\n        unit: \"%\",\n        min: 0,\n        max: 100\n    },\n    {\n        id: \"capacity\",\n        value: battery.capacity,\n        name: \"Capacity\",\n        role: \"value\",\n        type: \"number\",\n        readonly: true,\n        unit: \"mAh\",\n        min: 0\n    }\n];\n\nconst messages = [];\n\nfor (const state of states) {\n    const out = {\n        topic: `0_userdata.0.noderedbattery.${batteryId}.${state.id}`,\n        payload: state.value,\n\n        stateName: state.name,\n        stateRole: state.role,\n        stateType: state.type,\n        stateReadonly: state.readonly\n    };\n\n    if (state.unit !== undefined) {\n        out.stateUnit = state.unit;\n    }\n\n    if (state.min !== undefined) {\n        out.stateMin = state.min;\n    }\n\n    if (state.max !== undefined) {\n        out.stateMax = state.max;\n    }\n\n    messages.push(out);\n}\n\nreturn [messages];",
                         "outputs": 1,
                         "timeout": 0,
                         "noerr": 0,
                         "initialize": "",
                         "finalize": "",
                         "libs": [],
                         "x": 160,
                         "y": 200,
                         "wires": [
                             [
                                 "941c0f521bd7fa84",
                                 "c972ab9ba4b7bebd"
                             ]
                         ]
                     }
                  ]
                  

                  hier dann noch 2 extra nodes für den hexoutput

                  [
                     {
                         "id": "dab2b49175d7bf2f",
                         "type": "function",
                         "z": "593468e.75a0498",
                         "name": "to hex",
                         "func": "let buf;\n\nif (Buffer.isBuffer(msg.payload)) {\n    buf = msg.payload;\n} else {\n    buf = Buffer.from(msg.payload, \"latin1\");\n}\n\nmsg.payload = Array.from(buf)\n    .map(b => b.toString(16).padStart(2, \"0\"))\n    .join(\" \");\n\nreturn msg;",
                         "outputs": 1,
                         "timeout": 0,
                         "noerr": 0,
                         "initialize": "",
                         "finalize": "",
                         "libs": [],
                         "x": 150,
                         "y": 340,
                         "wires": [
                             [
                                 "3f831e8c6ac1095e"
                             ]
                         ]
                     },
                     {
                         "id": "3f831e8c6ac1095e",
                         "type": "debug",
                         "z": "593468e.75a0498",
                         "name": "debug 2",
                         "active": true,
                         "tosidebar": true,
                         "console": false,
                         "tostatus": false,
                         "complete": "payload",
                         "targetType": "msg",
                         "statusVal": "",
                         "statusType": "auto",
                         "x": 300,
                         "y": 340,
                         "wires": []
                     }
                  ]
                  

                  die function node einfach mit dem ausgang der rs232 node verbinden.
                  da ich nicht weiß was für ein datentyp aus rs232 rauskommt kann diese mit Buffer und mit string umgehen
                  Ausgabe sieht dann so aus
                  b5edaf7c-005b-4cfa-93e3-0000f122a749-image.jpeg
                  das ist zwar gekürzt (...) aber das reicht zum analysieren

                  bitte als markieren und als text hier reinstellen

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  A 1 Antwort Letzte Antwort
                  0
                  • A andibr

                    @Homoran
                    So wie ich das chemische Verständnis dieser Person einschätze kann er den Unterschied zwischen den verschiedenen Zell-Chemien gar nicht erkennen. Das beste, aber auch irgendwie übliche, Arrgument war dann die "Kinderarbeit" zur Kobalt gewinnung. Spätestens da habe ich begriffen das er nicht will. Möchte eigentlich nicht wissen wieviel "Sklavenarbeit" im Oel-Sektor drin steckt.

                    Aber es bringt nichts mit solchen Leute über solche Dinge zu sprechen, irgenwiw kann man nur Müde lächeln und sich fragen wie soviel Unwissen und Desinteresse her kommt, aber trotzdem damit diskutieren wollen.

                    Hast du diese Infos alle aus dem Cerbo, ich gehe davon aus per Modbus aus den Register? Da hole ich auch ein paar DInge raus, habe aber festgestellt, dass es via MQTT fast zuverläsiger kommt.
                    Zudem gibt es mit der "MQTT-Bridge" die Möglichkeit, den ganzen Cerbo zu sich in einen eigenen Broker zu holen.

                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    schrieb am zuletzt editiert von Homoran
                    #26

                    @andibr sagte:

                    diese Infos alle aus dem Cerbo, ich gehe davon aus per Modbus aus den Register

                    Ich auch
                    Restlaufzeit ist über ein Blockly gerechnet
                    Bis minimal SoC bei Entladung, bis max SoC (96%bei 56V) bei Ladung

                    Wirkungsgrad auch: Verhältnis eingespeicherte Energie zu ausgespeicherter Energie

                    @andibr sagte:

                    diese Infos alle aus dem Cerbo, ich gehe davon aus per Modbus aus den Register

                    Ich im Prinzip auch

                    Restlaufzeit ist über ein Blockly gerechnet
                    Bis minimal SoC bei Entladung, bis max SoC (96%bei 56V) bei Ladung

                    Und Zyklen ist ebenfalls einfach ein counter der bei erreichen einer vollen Kapazität hochzählt

                    kein Support per PN! - Fragen im Forum stellen - Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    1 Antwort Letzte Antwort
                    0
                    • OliverIOO OliverIO

                      @andibr

                      hm eigentlich kein müll nur nicht die letzte version

                      [
                         {
                             "id": "593468e.75a0498",
                             "type": "tab",
                             "label": "Flow 1",
                             "disabled": false,
                             "info": ""
                         },
                         {
                             "id": "6602913b9103c8e9",
                             "type": "function",
                             "z": "593468e.75a0498",
                             "name": "bereitstellung text",
                             "func": "msg.payload = `@\nBattery  Volt     Tempr     Base State   Volt. State  Curr. State  Temp. State  Coulomb\n0        3467     29000     Idle         Normal       Normal       Normal       97%       95988 mAH\n1        3474     29000     Idle         Normal       Normal       Normal       97%       96070 mAH\n2        3463     29000     Idle         Normal       Normal       Normal       96%       95549 mAH\n3        3473     29000     Idle         Normal       Normal       Normal       97%       96070 mAH\n4        3468     29000     Idle         Normal       Normal       Normal       97%       95906 mAH\n5        3465     28000     Idle         Normal       Normal       Normal       96%       95329 mAH\n6        3459     28000     Idle         Normal       Normal       Normal       96%       95220 mAH\n7        3471     28000     Idle         Normal       Normal       Normal       97%       95906 mAH\n`;\n\nreturn msg;",
                             "outputs": 1,
                             "timeout": 0,
                             "noerr": 0,
                             "initialize": "",
                             "finalize": "",
                             "libs": [],
                             "x": 130,
                             "y": 120,
                             "wires": [
                                 [
                                     "2df68931298f6d99"
                                 ]
                             ]
                         },
                         {
                             "id": "2df68931298f6d99",
                             "type": "function",
                             "z": "593468e.75a0498",
                             "name": "convert to msgs",
                             "func": "const text = msg.payload;\n\nif (typeof text !== \"string\") {\n    node.error(\"msg.payload ist kein String\", msg);\n    return null;\n}\n\n// In einzelne Zeilen zerlegen\nconst lines = text\n    .split(/\\r?\\n/)\n    .map(line => line.trim())\n    .filter(line => line !== \"\");\n\n// Nur Zeilen berücksichtigen, die mit einer Batterienummer beginnen\nconst dataLines = lines.filter(line => /^\\d+\\s/.test(line));\n\nconst messages = [];\n\nfor (const line of dataLines) {\n\n    // Spalten sind durch mindestens 2 Leerzeichen getrennt\n    const columns = line.split(/\\s{2,}/);\n\n    if (columns.length < 9) {\n        node.warn(\"Zeile konnte nicht verarbeitet werden: \" + line);\n        continue;\n    }\n\n    const battery = {\n        battery: Number(columns[0]),\n        volt: Number(columns[1]),\n        tempr: Number(columns[2]),\n        baseState: columns[3],\n        voltState: columns[4],\n        currState: columns[5],\n        tempState: columns[6],\n        coulomb: Number(columns[7].replace(\"%\", \"\")),\n        capacity: Number(columns[8].replace(/[^\\d]/g, \"\"))\n    };\n\n    messages.push({\n        ...msg,\n        payload: battery\n    });\n}\n\n// Alle Nachrichten nacheinander über denselben Ausgang senden\nreturn [messages];",
                             "outputs": 1,
                             "timeout": 0,
                             "noerr": 0,
                             "initialize": "",
                             "finalize": "",
                             "libs": [],
                             "x": 320,
                             "y": 120,
                             "wires": [
                                 [
                                     "dd25a6c986c48c9a"
                                 ]
                             ]
                         },
                         {
                             "id": "c972ab9ba4b7bebd",
                             "type": "debug",
                             "z": "593468e.75a0498",
                             "name": "debug 1",
                             "active": true,
                             "tosidebar": true,
                             "console": false,
                             "tostatus": false,
                             "complete": "true",
                             "targetType": "full",
                             "statusVal": "",
                             "statusType": "auto",
                             "x": 400,
                             "y": 200,
                             "wires": []
                         },
                         {
                             "id": "a349e5287a176ccf",
                             "type": "inject",
                             "z": "593468e.75a0498",
                             "name": "Start button",
                             "props": [
                                 {
                                     "p": "payload"
                                 },
                                 {
                                     "p": "topic",
                                     "vt": "str"
                                 }
                             ],
                             "repeat": "",
                             "crontab": "",
                             "once": false,
                             "onceDelay": 0.1,
                             "topic": "",
                             "payload": "",
                             "payloadType": "date",
                             "x": 110,
                             "y": 60,
                             "wires": [
                                 [
                                     "6602913b9103c8e9"
                                 ]
                             ]
                         },
                         {
                             "id": "941c0f521bd7fa84",
                             "type": "ioBroker out",
                             "z": "593468e.75a0498",
                             "name": "",
                             "topic": "",
                             "ack": "true",
                             "autoCreate": "true",
                             "stateName": "",
                             "role": "",
                             "payloadType": "",
                             "readonly": "",
                             "stateUnit": "",
                             "stateMin": "",
                             "stateMax": "",
                             "x": 420,
                             "y": 240,
                             "wires": []
                         },
                         {
                             "id": "dd25a6c986c48c9a",
                             "type": "function",
                             "z": "593468e.75a0498",
                             "name": "function 1",
                             "func": "const battery = msg.payload;\n\nif (!battery || battery.battery === undefined) {\n    node.error(\"Ungültiges Battery-Objekt\", msg);\n    return null;\n}\n\nconst batteryId = battery.battery;\n\nconst states = [\n    {\n        id: \"voltage\",\n        value: battery.volt,\n        name: \"Voltage\",\n        role: \"value.voltage\",\n        type: \"number\",\n        readonly: true,\n        unit: \"mV\",\n        min: 0\n    },\n    {\n        id: \"temperature\",\n        value: battery.tempr / 1000,\n        name: \"Temperature\",\n        role: \"value.temperature\",\n        type: \"number\",\n        readonly: true,\n        unit: \"°C\"\n    },\n    {\n        id: \"baseState\",\n        value: battery.baseState,\n        name: \"Base State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"voltageState\",\n        value: battery.voltState,\n        name: \"Voltage State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"currentState\",\n        value: battery.currState,\n        name: \"Current State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"temperatureState\",\n        value: battery.tempState,\n        name: \"Temperature State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"charge\",\n        value: battery.coulomb,\n        name: \"Charge\",\n        role: \"value.battery\",\n        type: \"number\",\n        readonly: true,\n        unit: \"%\",\n        min: 0,\n        max: 100\n    },\n    {\n        id: \"capacity\",\n        value: battery.capacity,\n        name: \"Capacity\",\n        role: \"value\",\n        type: \"number\",\n        readonly: true,\n        unit: \"mAh\",\n        min: 0\n    }\n];\n\nconst messages = [];\n\nfor (const state of states) {\n    const out = {\n        topic: `0_userdata.0.noderedbattery.${batteryId}.${state.id}`,\n        payload: state.value,\n\n        stateName: state.name,\n        stateRole: state.role,\n        stateType: state.type,\n        stateReadonly: state.readonly\n    };\n\n    if (state.unit !== undefined) {\n        out.stateUnit = state.unit;\n    }\n\n    if (state.min !== undefined) {\n        out.stateMin = state.min;\n    }\n\n    if (state.max !== undefined) {\n        out.stateMax = state.max;\n    }\n\n    messages.push(out);\n}\n\nreturn [messages];",
                             "outputs": 1,
                             "timeout": 0,
                             "noerr": 0,
                             "initialize": "",
                             "finalize": "",
                             "libs": [],
                             "x": 160,
                             "y": 200,
                             "wires": [
                                 [
                                     "941c0f521bd7fa84",
                                     "c972ab9ba4b7bebd"
                                 ]
                             ]
                         }
                      ]
                      

                      hier dann noch 2 extra nodes für den hexoutput

                      [
                         {
                             "id": "dab2b49175d7bf2f",
                             "type": "function",
                             "z": "593468e.75a0498",
                             "name": "to hex",
                             "func": "let buf;\n\nif (Buffer.isBuffer(msg.payload)) {\n    buf = msg.payload;\n} else {\n    buf = Buffer.from(msg.payload, \"latin1\");\n}\n\nmsg.payload = Array.from(buf)\n    .map(b => b.toString(16).padStart(2, \"0\"))\n    .join(\" \");\n\nreturn msg;",
                             "outputs": 1,
                             "timeout": 0,
                             "noerr": 0,
                             "initialize": "",
                             "finalize": "",
                             "libs": [],
                             "x": 150,
                             "y": 340,
                             "wires": [
                                 [
                                     "3f831e8c6ac1095e"
                                 ]
                             ]
                         },
                         {
                             "id": "3f831e8c6ac1095e",
                             "type": "debug",
                             "z": "593468e.75a0498",
                             "name": "debug 2",
                             "active": true,
                             "tosidebar": true,
                             "console": false,
                             "tostatus": false,
                             "complete": "payload",
                             "targetType": "msg",
                             "statusVal": "",
                             "statusType": "auto",
                             "x": 300,
                             "y": 340,
                             "wires": []
                         }
                      ]
                      

                      die function node einfach mit dem ausgang der rs232 node verbinden.
                      da ich nicht weiß was für ein datentyp aus rs232 rauskommt kann diese mit Buffer und mit string umgehen
                      Ausgabe sieht dann so aus
                      b5edaf7c-005b-4cfa-93e3-0000f122a749-image.jpeg
                      das ist zwar gekürzt (...) aber das reicht zum analysieren

                      bitte als markieren und als text hier reinstellen

                      A Offline
                      A Offline
                      andibr
                      schrieb am zuletzt editiert von andibr
                      #27

                      @OliverIO sagte:

                      40 0d 0d 0a 42 61 74 74 65 72 79 20 20 56 6f 6c 74 20 20 20 20 20 54 65 6d 70 72 20 20 20 20 42 61 73 65 20 53 74 61 74 65 20 20 20 56 6f 6c 74 2e 20 53 74 61 74 65 20 20 43 75 72 72 2e 20 53 74 61 74 65 20 20 54 65 6d 70 2e 20 53 74 61 74 65 20 20 43 6f 75 6c 6f 6d 62 20 20 20 20 20 0d 0d 0a 30 20 20 20 20 20 20 20 20 33 34 36 35 20 20 20 20 20 32 39 30 30 30 20 20 20 20 49 64 6c 65 20 20 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 20 39 36 25 20 20 20 20 20 20 39 35 32 35 38 20 6d 41 48 0d 0d 0a 31 20 20 20 20 20 20 20 20 33 34 36 39 20 20 20 20 20 32 39 30 30 30 20 20 20 20 49 64 6c 65 20 20 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 20 39 37 25 20 20 20 20 20 20 39 36 30 33 36 20 6d 41 48 0d 0d 0a 32 20 20 20 20 20 20 20 20 33 34 36 30 20 20 20 20 20 32 39 30 30 30 20 20 20 20 49 64 6c 65 20 20 2...
                      

                      Du meinst so?

                      Edit:
                      Also ich habe jetzt mal den Flow von dir einfach importiert und gestartet, das sieht im Iobroker sehr gut aus. Also müssen wir die Aufbereitung des payload aus dem RS232 Node noch irgendwie anderst machen. Ich frage mich gerade ob der aufbereitung auch gleich noch die Batterie-Nr. vom aufruf mit geben könnten? Denn es sind jetzt bei mir ja 8 Batterien an je 16 Zellen. Sprich in den Datenpunkten müsste ja dann auch irgendwo noch das "bat x" drin stehen. Ich weiss das gibt unendliche viele Datenpunkte, aber es sind da bei mir ja auch 128 einzelne Zellen. Einzelne Datenpunkte werden nie jemand interessieren, aber es wird einfacher sein, die einfach drin zu lassen?

                      OliverIOO 1 Antwort Letzte Antwort
                      0
                      • A andibr

                        @OliverIO sagte:

                        40 0d 0d 0a 42 61 74 74 65 72 79 20 20 56 6f 6c 74 20 20 20 20 20 54 65 6d 70 72 20 20 20 20 42 61 73 65 20 53 74 61 74 65 20 20 20 56 6f 6c 74 2e 20 53 74 61 74 65 20 20 43 75 72 72 2e 20 53 74 61 74 65 20 20 54 65 6d 70 2e 20 53 74 61 74 65 20 20 43 6f 75 6c 6f 6d 62 20 20 20 20 20 0d 0d 0a 30 20 20 20 20 20 20 20 20 33 34 36 35 20 20 20 20 20 32 39 30 30 30 20 20 20 20 49 64 6c 65 20 20 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 20 39 36 25 20 20 20 20 20 20 39 35 32 35 38 20 6d 41 48 0d 0d 0a 31 20 20 20 20 20 20 20 20 33 34 36 39 20 20 20 20 20 32 39 30 30 30 20 20 20 20 49 64 6c 65 20 20 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 20 20 20 20 20 20 20 39 37 25 20 20 20 20 20 20 39 36 30 33 36 20 6d 41 48 0d 0d 0a 32 20 20 20 20 20 20 20 20 33 34 36 30 20 20 20 20 20 32 39 30 30 30 20 20 20 20 49 64 6c 65 20 20 2...
                        

                        Du meinst so?

                        Edit:
                        Also ich habe jetzt mal den Flow von dir einfach importiert und gestartet, das sieht im Iobroker sehr gut aus. Also müssen wir die Aufbereitung des payload aus dem RS232 Node noch irgendwie anderst machen. Ich frage mich gerade ob der aufbereitung auch gleich noch die Batterie-Nr. vom aufruf mit geben könnten? Denn es sind jetzt bei mir ja 8 Batterien an je 16 Zellen. Sprich in den Datenpunkten müsste ja dann auch irgendwo noch das "bat x" drin stehen. Ich weiss das gibt unendliche viele Datenpunkte, aber es sind da bei mir ja auch 128 einzelne Zellen. Einzelne Datenpunkte werden nie jemand interessieren, aber es wird einfacher sein, die einfach drin zu lassen?

                        OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        schrieb am zuletzt editiert von OliverIO
                        #28

                        @andibr

                        ok die bestehende function node passt für die daten.
                        eine ungewöhlichkeit gibt es 0d 0d 0a
                        entweder verwendet man nur 0d oder 0d 0a,
                        gemischt ist ungewöhlich, aber das hat sich der liebe hersteller halt so ausgedacht.
                        wahrscheinlich ist

                        @ <CR> 
                        

                        für ihn ein art beginnzeichen.

                        nun zum müll.
                        was ist dir da aufgefallen? wieso reihenfolge?
                        abfolge des flows ist

                        rs232
                        |
                        tabelle parsen und jede zeile in ein battery objekt umwandeln.
                        jede zeile ist eine eigene message
                        |
                        für jede message (also für jede zeile) die daten für iobroker aufbereiten, so das notfalls der state angelegt werden kann, also mit unit, beschreibung, etc.
                        |
                        die letzte iobroker node hat keine konfiguration, da sie direkt die aufbereiteten daten nehemn und dann nach iobroker schreiben kann.

                        also nimm den flow aus dem letzten post, importier ihn, beachte mein hinweis weiter oben zur konfiguration von node-red, damit er auch states nach 0_userdata schreiben darf.
                        lass den flow laufen. dann findest du unterhalb des datenpunkts
                        0_userdata.0.noderedbattery
                        die komplette struktur. screenshot habe ich gestern schon eingefügt.
                        je battery id werden nun diverse states angelegt mit den werten aus der tabelle
                        wenn du den datenpunktnamen ändern willst, dann kannst du das in der node zur aufbereitung der iobroker daten

                        352751ed-0c3c-4492-9cb5-3665b1cf616a-image.jpeg

                        Meine Adapter und Widgets
                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                        Links im Profil

                        A 1 Antwort Letzte Antwort
                        0
                        • OliverIOO OliverIO

                          @andibr

                          ok die bestehende function node passt für die daten.
                          eine ungewöhlichkeit gibt es 0d 0d 0a
                          entweder verwendet man nur 0d oder 0d 0a,
                          gemischt ist ungewöhlich, aber das hat sich der liebe hersteller halt so ausgedacht.
                          wahrscheinlich ist

                          @ <CR> 
                          

                          für ihn ein art beginnzeichen.

                          nun zum müll.
                          was ist dir da aufgefallen? wieso reihenfolge?
                          abfolge des flows ist

                          rs232
                          |
                          tabelle parsen und jede zeile in ein battery objekt umwandeln.
                          jede zeile ist eine eigene message
                          |
                          für jede message (also für jede zeile) die daten für iobroker aufbereiten, so das notfalls der state angelegt werden kann, also mit unit, beschreibung, etc.
                          |
                          die letzte iobroker node hat keine konfiguration, da sie direkt die aufbereiteten daten nehemn und dann nach iobroker schreiben kann.

                          also nimm den flow aus dem letzten post, importier ihn, beachte mein hinweis weiter oben zur konfiguration von node-red, damit er auch states nach 0_userdata schreiben darf.
                          lass den flow laufen. dann findest du unterhalb des datenpunkts
                          0_userdata.0.noderedbattery
                          die komplette struktur. screenshot habe ich gestern schon eingefügt.
                          je battery id werden nun diverse states angelegt mit den werten aus der tabelle
                          wenn du den datenpunktnamen ändern willst, dann kannst du das in der node zur aufbereitung der iobroker daten

                          352751ed-0c3c-4492-9cb5-3665b1cf616a-image.jpeg

                          A Offline
                          A Offline
                          andibr
                          schrieb am zuletzt editiert von
                          #29

                          @OliverIO
                          Bitte höfflichst um entschuldigung. Jetzt scheint es zu gehen.
                          Ich habe den letzten Flow genommen und die konvertierung an den Ausgang des Aufrufs gehängt und gestartet. Jetzt werden im Iob alle Datenpunkte sauber erstellt.
                          Bildschirmfoto vom 2026-08-09 12-45-59.png

                          und ja, das "@" scheint eine Art Markierung für die Antwort zu sein, die kommt bei allen Abfragen immer als erstes, egal was man sich holt.

                          Wieso auch immer das vorher jedes Datenfeld in eine eigene msg geschrieben hat, weiss ich nicht, aber das habe ich gemeint.

                          Vielen Dank für deine aufwendige Arbeit, ich bin da eben echt eher der Handwerker und tue mich mit Software erstellen meist sehr schwer. Ich baue mir jetzt da mal rund um ein Flow der mir periodisch alle Zellen abholt und in die Datenpunkte schreibt.
                          Sobald ich das habe, stelle ich das hier zur Verfügung.

                          OliverIOO 1 Antwort Letzte Antwort
                          0
                          • A andibr

                            @OliverIO
                            Bitte höfflichst um entschuldigung. Jetzt scheint es zu gehen.
                            Ich habe den letzten Flow genommen und die konvertierung an den Ausgang des Aufrufs gehängt und gestartet. Jetzt werden im Iob alle Datenpunkte sauber erstellt.
                            Bildschirmfoto vom 2026-08-09 12-45-59.png

                            und ja, das "@" scheint eine Art Markierung für die Antwort zu sein, die kommt bei allen Abfragen immer als erstes, egal was man sich holt.

                            Wieso auch immer das vorher jedes Datenfeld in eine eigene msg geschrieben hat, weiss ich nicht, aber das habe ich gemeint.

                            Vielen Dank für deine aufwendige Arbeit, ich bin da eben echt eher der Handwerker und tue mich mit Software erstellen meist sehr schwer. Ich baue mir jetzt da mal rund um ein Flow der mir periodisch alle Zellen abholt und in die Datenpunkte schreibt.
                            Sobald ich das habe, stelle ich das hier zur Verfügung.

                            OliverIOO Offline
                            OliverIOO Offline
                            OliverIO
                            schrieb am zuletzt editiert von
                            #30

                            @andibr
                            Alles gut, dadurch lernt man und evtl weckt es interesse an einem komplett neuen Gebiet. Es gibt auch andere Handwerker hier die mittlerweile komplette Adapter erstellen.

                            Als tip. mit KI (auch schon die kostenlosen wie chatgpt,claude,gemini), kann man sich sehr viel erklären lassen.
                            Von den ganzen function nodes habe ich selbst keine einzige Zeile selbst geschrieben.
                            Ich könnte zwar, aber die KI macht das mittlerweile in sekunden. Die Kunst ist nur, es ihr richtig zu beschreiben. Im Zweifel einfach Copy/Paste und ein wenig Kontext, woher es kommt, welches Umfeld du nutzt und was du versuchst zu erreichen. Im einfachsten Fall einfach nur das Ziel eintippen und dich leiten lassen.

                            Dann noch meine Kritik an den Low und "NoCode" Tools wie node-red, n8n,blockly.
                            Wenn es dir zu beginn einfacher fällt mit einer grafischen Darstellung zu arbeiten, alles gut. Aber diese Tools begrenzen dich irgendwann.
                            Klar könnte man durch installation weiterer nodes auch dieses Problem rein grafisch und Konfiguration lösen können, aber kürzer sind immer ein paar echte Programmzeilen.
                            Wenn du mal den kompletten flow bereitstellst, dann werde ich mal ein javascript für den iobroker erstellen (lassen) der das gleiche macht.
                            Hier haben wir eigentlich schon viel javascript verwendet, weil bei so speziellen Dingen dann die Standards schnell am Ende sind.
                            Aber für den Anfang um etwas über Abläufe, Struktur, Ursache/Wirkung zu lernen alles gut.

                            Meine Adapter und Widgets
                            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                            Links im Profil

                            A 1 Antwort Letzte Antwort
                            0
                            • OliverIOO OliverIO

                              @andibr
                              Alles gut, dadurch lernt man und evtl weckt es interesse an einem komplett neuen Gebiet. Es gibt auch andere Handwerker hier die mittlerweile komplette Adapter erstellen.

                              Als tip. mit KI (auch schon die kostenlosen wie chatgpt,claude,gemini), kann man sich sehr viel erklären lassen.
                              Von den ganzen function nodes habe ich selbst keine einzige Zeile selbst geschrieben.
                              Ich könnte zwar, aber die KI macht das mittlerweile in sekunden. Die Kunst ist nur, es ihr richtig zu beschreiben. Im Zweifel einfach Copy/Paste und ein wenig Kontext, woher es kommt, welches Umfeld du nutzt und was du versuchst zu erreichen. Im einfachsten Fall einfach nur das Ziel eintippen und dich leiten lassen.

                              Dann noch meine Kritik an den Low und "NoCode" Tools wie node-red, n8n,blockly.
                              Wenn es dir zu beginn einfacher fällt mit einer grafischen Darstellung zu arbeiten, alles gut. Aber diese Tools begrenzen dich irgendwann.
                              Klar könnte man durch installation weiterer nodes auch dieses Problem rein grafisch und Konfiguration lösen können, aber kürzer sind immer ein paar echte Programmzeilen.
                              Wenn du mal den kompletten flow bereitstellst, dann werde ich mal ein javascript für den iobroker erstellen (lassen) der das gleiche macht.
                              Hier haben wir eigentlich schon viel javascript verwendet, weil bei so speziellen Dingen dann die Standards schnell am Ende sind.
                              Aber für den Anfang um etwas über Abläufe, Struktur, Ursache/Wirkung zu lernen alles gut.

                              A Offline
                              A Offline
                              andibr
                              schrieb am zuletzt editiert von
                              #31

                              @OliverIO
                              Für mich als ex. Elektroninstallateur ist es eben vielfach einfacher in einer Maske zu sehen was der Code eigentlich machen sollte, als in einem strukturierten Text.

                              Wir verwenden bei uns im Job auch sehr viel strukturierte Text für Steuerungsfunktionen, aber das ist in der Regel eine andere Abteilung, ich bin nur zuständig, dass die Elektropläne korrekt und vollständig für alle sind.

                              Klar, dass interesse an den Möglichkeiten ist schon lange geweckt, aber wie bei allem, wenn man das nicht oft macht, vergisst man sehr vieles wieder. Bei mir ist entstehen solche Dinge eben manchmal aus "dummen" Ideen, oder eben aus "herausforderungen" die man nicht direkt sucht.

                              Ich arbeite mich jetzt mal rund um und schaue was da raus kommt.
                              Nochmals herzlichen Dank

                              Gruss Andi
                              (aus der überhitzten Schweiz)

                              1 Antwort Letzte Antwort
                              0

                              Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                              Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                              Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                              Registrieren Anmelden
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              453

                              Online

                              33.0k

                              Benutzer

                              83.6k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2026
                              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