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. ioBroker Allgemein
  4. [gelöst]Serielle Schnittstelle auslesen Heizölfüllstand Leveljet

NEWS

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

[gelöst]Serielle Schnittstelle auslesen Heizölfüllstand Leveljet

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
12 Beiträge 3 Kommentatoren 1.8k Aufrufe
  • Ä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.
  • F Offline
    F Offline
    Fussel
    schrieb am zuletzt editiert von
    #3

    Hab ich probiert, immer noch "Wrong CRC for frame" und keine Werte.

    1 Antwort Letzte Antwort
    0
    • wendy2702W Online
      wendy2702W Online
      wendy2702
      schrieb am zuletzt editiert von
      #4

      Kannst du erstmal mit nur einem Wert versuchen und dann auch mal unter Eingangsregister?

      Sind die Kommunikationseinstellungen im Adapter wirklich identisch zu deiner Füllstandsanzeige (welche überhaupt?) und stimmt "unsigned 16-bit" ?

      Und du bist sicher das es mit Script über Modbus lief und nicht etwas anderes ausgelesen wurde?

      Welche Adapter Version?

      Serialport installiert?

      Bitte keine Fragen per PN, die gehören ins Forum!

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      1 Antwort Letzte Antwort
      0
      • F Offline
        F Offline
        Fussel
        schrieb am zuletzt editiert von
        #5

        Die Kommunikationseinstellungen sind 19200,N,8,1, so wie hier www.projet.de/Software/Leveljet_seriell.pdf beschrieben. Dort steht auch die Bedeutung der 12 Bytes.

        Das script lief nicht über modbus, sondern über javascript, dieses hier:

        ! var SerialPort = require("serialport");
        ! var port = new SerialPort("/dev/ttyUSB0", {
        ! baudRate: 19200,
        ! xon: true,
        ! xoff: true,
        ! //flowControl: false
        ! //parser: SerialPort.parsers.byteDelimiter([2,4])
        ! platformOptions: {vmin: 0, vtime: 10, hupcl: false}
        ! },
        ! function (err) {
        ! if (err) {
        ! return console.log('Error: ', err.message);
        ! }
        ! // Flush input
        ! port.flush();
        ! });
        ! port.on('data', function (data) {
        ! console.log('Data: ' + data.toString('hex'));
        ! });
        ! port.on('open', function() {
        ! console.log('Connected');
        ! });
        ! port.on('error', function(err) {
        ! console.log('Error: ', err.message);
        ! });
        ! // close port if the script stopped (to be able to open it again)
        ! onStop(function (callback) {
        ! if (port && port.isOpen()) {
        ! port.close();
        ! console.log('port closed');
        ! }
        ! callback();
        ! });

        Mit dem Script hatte ich fortlaufend diese Werte auf der Schnittstelle:

        javascript.0 script.js.common.Leveljet: Data: 00105d00300092002200da93

        also genau die 12 Bytes:

        0010 Gerätekennung

        5d00 Distanz 0x005d=93

        3000 Füllhöhe 0x0030=48

        9200 Liter 0x0092=146

        22 Prozent 0x22=34

        00

        da93

        was den Werten auf der Anzeige entspricht.

        modbus brint auch bei nur einem Wert im Eingangsregister nichts.

        Wenn ich wüsste, wie man einzelne Bytes aus dem Datenblock rausnimmt und umrechnet und dann in einen Datenpunkt schreibt, würde ich das Ganze auch mit einem Script machen können (ohne modbus).

        1 Antwort Letzte Antwort
        0
        • wendy2702W Online
          wendy2702W Online
          wendy2702
          schrieb am zuletzt editiert von
          #6

          Dann kannst du den Modbus Adapter eh nicht nutzen. Scheinbar kann dein Device kein Modbus Protokoll sondern sendet einfach diesen String.

          Du musst das "zerlegen" ist aber ein anderes Thema und hat mal mit Modbus so gar nichts zu tun.

          Schau mal in einem von den beiden Threads findest du ein Script welches auch einen Datenstring zerlegt, das kannst du als Grundlage nehmen und anpassen.

          viewtopic.php?f=21&t=12203&hilit=M%C3%BChsam

          viewtopic.php?f=21&t=12008&hilit=Waterkotte

          Bitte keine Fragen per PN, die gehören ins Forum!

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          1 Antwort Letzte Antwort
          0
          • F Offline
            F Offline
            Fussel
            schrieb am zuletzt editiert von
            #7

            OK, das war dann wohl ein Verständnisfehler von mir, ich hatte gedacht mit modbus kann man generell serielle Schnittstellen auslesen.

            Mit dem folgenden Script funktioniert es auch, die Datenpunkte werden geschrieben.

            ! createState('Leveljet.Daten.Raw');
            ! createState('Leveljet.Daten.Distance');
            ! createState('Leveljet.Daten.Fillheight');
            ! createState('Leveljet.Daten.Volume');
            ! createState('Leveljet.Daten.Percent');
            ! createState('Leveljet.Daten.Status');
            ! // To use the ByteLength parser:
            ! const SerialPort = require('serialport');
            ! const ByteLength = SerialPort.parsers.ByteLength;
            ! const port = new SerialPort("/dev/ttyUSB0", {
            ! baudRate: 19200,
            ! dataBits : 8,
            ! parity : 'none',
            ! stopBits: 1
            ! // flowControl : false
            ! }, function (err) {
            ! if (err) {
            ! return console.log('Error1: ', err.message);
            ! }
            ! const parser = port.pipe(new ByteLength({ length: 12 }));
            ! parser.on('data', function (data) {
            ! console.log('Data received: ' + data.toString('hex'));
            ! //Rohdaten speichern
            ! var daten = data.toString('hex');
            ! setState('Leveljet.Daten.Raw', daten, true);
            ! //Distanz Lesekopf
            ! var distanz = parseInt(daten.substr(6,2) + daten.substr(4,2),16);
            ! setState('Leveljet.Daten.Distance',distanz,true);
            ! //Füllhöhe
            ! var fheight = parseInt(daten.substr(10,2) + daten.substr(8,2),16);
            ! setState('Leveljet.Daten.Fillheight',fheight,true);
            ! //Füllmenge, muss mit 10 multiplziert werden
            ! var fvol =10 * (parseInt(daten.substr(14,2) + daten.substr(12,2),16));
            ! setState('Leveljet.Daten.Volume',fvol,true);
            ! //Prozenzangabe Füllmenge, nur 1 Byte
            ! var pct = parseInt(daten.substr(16,2),16);
            ! setState('Leveljet.Daten.Percent',pct,true);
            ! //Status von 0-3 schreiben, zur optischen Anzeige in VIS
            ! var fstate = 0;
            ! if (pct > 40) {fstate = 3;} else
            ! if (pct > 25) {fstate = 2;} else
            ! if (pct > 10) {fstate = 1;} else
            ! fstate = 0;
            ! setState('Leveljet.Daten.Status',fstate,true);
            ! //Wenn ich hier nicht den Port schliesse, schreibt er jede Sekunde Datenpunkte, unnötig….
            ! port.close();
            ! return;
            ! });
            ! // Flush input
            ! port.flush();
            ! // send Data
            ! // port.close();
            ! });
            ! port.on('open', function() {
            ! console.log('Connected');
            ! });
            ! port.on('error', function(err) {
            ! console.log('Error2: ', err.message);
            ! // port.close();
            ! });
            ! // close port if the script stopped (to be able to open it again)
            ! onStop(function (callback) {
            ! if (port && port.isOpen) {
            ! port.close();
            ! console.log('port closed');
            ! }
            ! });

            Jetzt habe ich nur noch das Problem, dass, wenn ich den Port nach dem Einlesen nicht schließe, jede Sekunde Datenpunkte geschrieben werden, was völlig unnötig ist. Einmal am Tag würde reichen. Ein schedule an den Anfang zu stellen, hat nicht funktioniert, aber wahrscheinlich habe ich nur was falsch gemacht.

            1 Antwort Letzte Antwort
            0
            • wendy2702W Online
              wendy2702W Online
              wendy2702
              schrieb am zuletzt editiert von
              #8

              Ich starte das Script einmal am Tag und beende es über den dazugehörigen Datenpunkt Script.enabled.

              Dadurch wird auch der com Port sauber geschlossen.

              Gesendet von iPhone mit Tapatalk Pro

              Bitte keine Fragen per PN, die gehören ins Forum!

              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

              1 Antwort Letzte Antwort
              0
              • F Offline
                F Offline
                Fussel
                schrieb am zuletzt editiert von
                #9

                Das wars! Der Tipp mit script.enabled war der goldene Hinweis.

                Nach dem Einlesen der Daten setze ich im script selber .enabled auf 'false', gestartet wird einmal täglich über einen Blockly Zeitplan.

                Danke schön!

                So sieht das ganze derzeit in VIS aus:

                6003_vis-heiz_l.png

                1 Antwort Letzte Antwort
                0
                • wendy2702W Online
                  wendy2702W Online
                  wendy2702
                  schrieb am zuletzt editiert von
                  #10

                  Gerne!

                  Bitte den Betreff vom ersten Post noch um ein````
                  Gelöst

                  
                  Gesendet von iPhone mit Tapatalk Pro

                  Bitte keine Fragen per PN, die gehören ins Forum!

                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                  1 Antwort Letzte Antwort
                  0
                  • A Offline
                    A Offline
                    acidsubway
                    schrieb am zuletzt editiert von
                    #11

                    Hallo,

                    ich bin Newbie was ioBroker angeht.

                    Ich habe auch einen LevelJet jedoch für die Zisterne.

                    Jetzt wollt ich mal fragen wo ich das Script anlegen muss oder gibt es schon einen Adapter?

                    Ich möchte das er die Werte in eine Log schreibt, alle 4h Stunden damit man ein Diagramm erstellen kann.

                    Hab ihr da Ideen? Könnt ihr mir da helfen?

                    MfG

                    AcidSubway

                    1 Antwort Letzte Antwort
                    0
                    • wendy2702W Online
                      wendy2702W Online
                      wendy2702
                      schrieb am zuletzt editiert von
                      #12

                      Hi,

                      hast du den denn Javascript Adapter schon installiert auf dem System welches mit dem LevelJet verbunden ist?

                      Wenn ja musst du unter Javascript ein neues Script anlegen (nicht unter "Global"), einen Namen vergeben, es Speichern und bei bedarf starten.

                      Gruß

                      Bitte keine Fragen per PN, die gehören ins Forum!

                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                      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
                      FAQ Cloud / IOT
                      HowTo: Node.js-Update
                      HowTo: Backup/Restore
                      Downloads
                      BLOG

                      860

                      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