Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript… und mühsam ernährt sich das Eichhörnchen!

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    JavaScript… und mühsam ernährt sich das Eichhörnchen!

    This topic has been deleted. Only users with topic management privileges can see it.
    • wendy2702
      wendy2702 last edited by

      Habe mal versucht einen Parser zu verwenden. Serialport auf ich auf dem Test System auf 6.1.1 upgedatet.

      Wenn ich jetzt im JS Adapter dieses Script starte:

      ! ````
      //createState('Waterkotte.Daten.Rohdaten');
      //var SerialPort = require("serialport");
      ! // To use the ByteLength parser:
      const SerialPort = require('serialport');
      const ByteLength = SerialPort.parsers.ByteLength;
      //const port = new SerialPort('/dev/ttyUSB0');
      const parser = port.pipe(new ByteLength({length: 8}));
      ! var buffer = new Buffer(12);
      buffer[0] = 0x10;
      buffer[1] = 0x02;
      buffer[2] = 0x01;
      buffer[3] = 0x15;
      buffer[4] = 0x00;
      buffer[5] = 0x00;
      buffer[6] = 0x00;
      buffer[7] = 0xf3;
      buffer[8] = 0x10;
      buffer[9] = 0x03;
      buffer[10] = 0x7c;
      buffer[11] = 0x32;
      const port = new SerialPort("/dev/ttyUSB0", {
      baudRate: 9600,
      dataBits : 8,
      parity : 'none',
      stopBits: 1
      //flowControl : false
      },
      function (err) {
      if (err) {
      return console.log('Error1: ', err.message);
      ! }
      ! port.on('data', function (data) {
      //parser.on('data', console.log) // will have 8 bytes per data event
      console.log('Data: ' + data.toString('hex'));
      var daten=[];
      daten=data.toString('hex');
      setState('Waterkotte.Daten.Rohdaten', daten,true);
      //port.close();
      });
      ! // Flush input
      port.flush();
      ! // send hello
      port.write(buffer, function(err) {
      if (err) {
      return console.log('Error on write: ', err.message);
      ! }
      console.log('Daten gesendet');
      // 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');
      }
      // callback();
      ! });

      
      Bekomme ich diesen Fehler:
      
      

      19:52:47.787 [error] javascript.0 script.js.Parser: script.js.Parser:8
      19:52:47.788 [error] javascript.0 at script.js.Parser:8:21

      
      Das ist aus dem Script diese Zeile:
      
      

      const parser = port.pipe(new ByteLength({length: 8}));

      
      Und wenn ich das richtig interpretiere ab dem "21" Zeichen –> "pipe" !?
      
      Die Parser Funktion habe ich aus der Aktuellen Serial Port Doku zum testen benutzen wollen.
      
      Liegt das jetzt am JS Adapter 3.6.4 das er das nicht kennt?
      
      Danke für eure Hilfe
      1 Reply Last reply Reply Quote 0
      • P
        pafra last edited by

        @wendy2702:

        Jemand einen Tipp warum ich die nicht in den Datenpunkt geschrieben werden? Der steht auf "0": `
        Hi,

        versuch mal das hier:

        setState('Waterkotte.Daten.Rohdaten', daten);

        Gruß

        Franz

        1 Reply Last reply Reply Quote 0
        • wendy2702
          wendy2702 last edited by

          Hi Franz,

          Mache ich morgen.

          Danke !

          Gute Nacht

          Edit: keine Ruhe gehabt. Hat nichts geändert.

          Morgen will mein Sohn mal gucken. [emoji9]

          Gesendet von iPhone mit Tapatalk Pro

          1 Reply Last reply Reply Quote 0
          • P
            Pman last edited by

            Du hast zu diesem Zeitpunkt keine Variable "port", also kannst du auch nicht port.pipe machen.

            Ich finde super, dass du dich mit deinen begrenzten Vorkenntnissen an so ein Projekt wagst und du machst ja auch Fortschritte, also bitte folgendes nicht falsch verstehen:

            Es ist grundsätzlich nicht auszuschließen, dass der Javascript Adapter Bugs hat, aber es ist sehr unwahrscheinlich, dass bei deinen Skills ein Fehler tatsächlich am Adapter liegt und nicht an deinem Code. Es hilft auch nicht, wenn hier jemand liest und dann einen Bug im Adapter sucht. Vielleicht änderst du mal den Titel in etwas sinnvolleres.

            1 Reply Last reply Reply Quote 0
            • wendy2702
              wendy2702 last edited by

              Hallo Pman,

              Das mit dem Titel mache ich.

              Der ist ja auch noch zu Beginn entstanden.

              Ja, die lieben Anfänger…

              Das mit dem Port.pipe hat mein Sohn mir gestern Nacht im Vorbeigehen auch gesagt.

              Da war der Beitrag schon geschrieben und ich zu müde das im Script noch irgendwie richtig zu versuchen.

              Gesendet von iPhone mit Tapatalk Pro

              1 Reply Last reply Reply Quote 0
              • P
                pafra last edited by

                Hallo Mirko,

                was passiert, wenn Du die Variable "daten" auf der Console ausgeben lässt?

                Gruß

                Franz

                1 Reply Last reply Reply Quote 0
                • wendy2702
                  wendy2702 last edited by

                  Hi Franz,

                  wenn ich das richtig verstehe ist die variable "daten" nichts anderes als die Ausgabe von:

                  console.log('Data: ' + data.toString('hex'));
                  

                  Wenn ich also zum testen ein:

                  console.log('Daten: ' + daten);
                  

                  einfüge, erhalte ich in der Ausgabe jeweils zwei Zeilen mit demselben Inhalt: Beispiel Auszug –>

                  08:19:11.522	[info]	javascript.0 script.js.Parser: Data: 0000000127008901270028
                  08:19:11.522	[info]	javascript.0 script.js.Parser: Daten: 0000000127008901270028
                  08:19:11.538	[info]	javascript.0 script.js.Parser: Data: 351210038929ff
                  08:19:11.538	[info]	javascript.0 script.js.Parser: Daten: 351210038929ff
                  

                  Oder meintest du das anders?

                  Mirko

                  1 Reply Last reply Reply Quote 0
                  • P
                    pafra last edited by

                    Hi Mirko,

                    ja, genau so.

                    Die Daten stehen also in der Variable "daten".

                    Und damit landet dann wirklich nichts hier?

                    setState('Waterkotte.Daten.Rohdaten', daten);

                    Was passiert, wenn Du das manuell machst?

                    var test = 1234

                    Waterkotte.Daten.Rohdaten', test);

                    Gruß

                    Franz

                    1 Reply Last reply Reply Quote 0
                    • wendy2702
                      wendy2702 last edited by

                      Hallo Franz,

                      doch, es landet etwas in dem Datenpunkt.

                      Aber immer nur das letzte der Ausgabe und nicht der komplette String.

                      z.B.

                      Ergebnis der Abfrage in der Console:

                      08:54:57.546	[info]	javascript.0 script.js.Parser: Data: ff
                      08:54:57.562	[info]	javascript.0 script.js.Parser: Data: 100200171fbe120c0603052918
                      08:54:57.577	[info]	javascript.0 script.js.Parser: Data: 33cdc01191bfc0ffe9d3c0fb56
                      08:54:57.592	[info]	javascript.0 script.js.Parser: Data: d8413d84de4165fb0742d3
                      08:54:57.608	[info]	javascript.0 script.js.Parser: Data: ff334212c928425238dec20000
                      08:54:57.625	[info]	javascript.0 script.js.Parser: Data: 704156ee5abeefa68dc0d000
                      08:54:57.640	[info]	javascript.0 script.js.Parser: Data: 01c1c5c011429a9999bf0000
                      08:54:57.656	[info]	javascript.0 script.js.Parser: Data: 0000b1e7933f61560341fb56
                      08:54:57.673	[info]	javascript.0 script.js.Parser: Data: d8413d84de41000090413d84de
                      08:54:57.689	[info]	javascript.0 script.js.Parser: Data: 4112c928421333090103126a
                      08:54:57.704	[info]	javascript.0 script.js.Parser: Data: 2f5d46eaf01b46ea05834500
                      08:54:57.720	[info]	javascript.0 script.js.Parser: Data: 00000001010101010101010101
                      08:54:57.737	[info]	javascript.0 script.js.Parser: Data: 01010000000000c753000002
                      08:54:57.752	[info]	javascript.0 script.js.Parser: Data: 09252a1212010d01e3200000
                      08:54:57.768	[info]	javascript.0 script.js.Parser: Data: 4e5b1dc082e9434092e61740
                      08:54:57.785	[info]	javascript.0 script.js.Parser: Data: e151fe3e096f1442b58b0042cc
                      08:54:57.800	[info]	javascript.0 script.js.Parser: Data: 771b413f3f474202000000
                      08:54:57.816	[info]	javascript.0 script.js.Parser: Data: a04100000000000000002cc502
                      08:54:57.833	[info]	javascript.0 script.js.Parser: Data: 0002a320002000000002000000
                      08:54:57.848	[info]	javascript.0 script.js.Parser: Data: 0000000003010808000000
                      08:54:57.864	[info]	javascript.0 script.js.Parser: Data: 00000000012700890127002835
                      08:54:57.880	[info]	javascript.0 script.js.Parser: Data: 1210039197ff
                      

                      Eintrag im Datenpunkt:

                      999_waterkotte_daten.jpg

                      Das versuche ich jetzt zu lösen…

                      1 Reply Last reply Reply Quote 0
                      • wendy2702
                        wendy2702 last edited by

                        Also vorausgesetzt die Antwort der WP ist immer 253 Zeichen lang kommt es jetzt so im Datenpunkt an:

                        999_waterkotte_daten_komplett.jpg

                        Kannst du das so mit deinem Script weiterverarbeiten oder musst du die Leerzeichen haben?

                        1 Reply Last reply Reply Quote 0
                        • P
                          pafra last edited by

                          Hi Mirko,

                          nein, ich brauche jetzt keine Leerzeichen mehr.

                          Das habe ich gelöst.

                          Hast Du die Antwort jetzt generell auf 253 Zeichen begrenzt?

                          Die ist nämlich variabel und kann mehr oder weniger Zeichen haben.

                          Eine "0x10" wird nämlich verdoppelt.

                          Aber lass uns das mal einfach testen.

                          Kannst Du mir das Script vielleicht erst mal per PN schicken?

                          Ich würde es dann ausprobieren, ob mein Auswertescript damit klar kommt.

                          Wenn ja, dann schick ich Dir das Auswertescript und wir können beide mal ausführlich testen und ggf. Fehler ausmerzen.

                          Gruß

                          Franz

                          1 Reply Last reply Reply Quote 0
                          • P
                            Pman last edited by

                            Du setzt den State jedes mal neu, wenn Teile (on "data") der Übertragung eintreffen, du hast am Ende also auch nur den letzten Teil der Übertragung drin. Daher solltest du warten bis die WP die Übertragung abgeschlossen hat, das wird meist durch eine ganz bestimmte Bit-Folge signalisiert.

                            Diese Arbeit sollte eigentlich der Parser von serial-port übernehmen, du sagst ihm was dein Übertragungsende-Zeichen ist und er sammelt die Daten bis zu diesem Zeichen und übergibt der dir dann alles auf einmal.

                            EDIT:

                            Achja, der ByteLength-parser macht genau das, wonach er sich anhört, er gibt alle x Bytes etwas aus. Das ist nur sinnvoll, wenn vorher schon klar ist, welche länge die Übertragung hat.

                            1 Reply Last reply Reply Quote 0
                            • wendy2702
                              wendy2702 last edited by

                              Hallo Pman,

                              liege ich denn da mit dem "Readline" Parser richtig?

                              Dem kann ich ja eine Delimiter mitgeben.

                              Jetzt habe ich nur das Problem das die ersten bytes am Anfang und am Ende immer FF sind, kann ich also so nicht verwenden.

                              Das Ende ist allerdings, danke an Franz, immer so:

                              10 03 xx xx FF (xx = CRC)
                              

                              Versuche das jetzt einzubauen, wobei ich noch nicht weiß wie ich das mit der CRC Summe mache. Gibt es für den Delimiter einen "Platzhalter" ?

                              Bedeutet ich setzte den Delimiter z.B.: ({ delimiter: '1003%%%%FF' }));

                              Das Prozent ist nur ein Beispiel da ich den Platzhalter nicht kenne und noch nicht weiß ob es den gibt.

                              Danke für deine Denkanstöße

                              Mirko

                              1 Reply Last reply Reply Quote 0
                              • P
                                Pman last edited by

                                Ich bin auch kein Experte für das Serialport-Modul, aber ich denke da ist der RegexParser das richtige:

                                https://node-serialport.github.io/node- … arser.html

                                vielleicht mit:

                                { regex: /\x10\x30..\xFF/ }
                                

                                Irgendwas sagt mir aber, dass du auch auf das Encoding aufpassen musst, ich weiß nicht ob das Modul standardmäßig die Daten als utf-8 oder ascii interpretiert.

                                Du kannst natürlich auch ohne Parser arbeiten und mit "on('data')" selber die Daten sammeln, bis die gewünschte Sequenz ankommt.

                                1 Reply Last reply Reply Quote 0
                                • wendy2702
                                  wendy2702 last edited by

                                  Hi Pman,

                                  mit dem Regex muss ich mal schauen. Auf die schnelle eingebaut bringt es mir keine Ausgabe.

                                  Aber das mit dem "on.('data')… ist es nicht das was wir hier benutzen:

                                  port.on('data', function (data) {
                                  

                                  Mirko

                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    Pman last edited by

                                    @wendy2702:

                                    Aber das mit dem "on.('data')… ist es nicht das was wir hier benutzen:

                                    port.on('data', function (data) {
                                    ```` `  
                                    

                                    Ja korrekt, du musst dann nur erstmal selber die Daten sammeln, bevor du sie in den State schreibst, dann hast du praktisch einen eigenen Parser gebaut.

                                    1 Reply Last reply Reply Quote 0
                                    • wendy2702
                                      wendy2702 last edited by

                                      Das hat leider nicht funktioniert ohne den Bytelength parser.

                                      Da wurde ja der lange String immer in mehrere Zeilen aufgeteilt.

                                      Wie man erst alle Daten sammelt ohne einen anderen Parser habe ich noch nicht herausgefunden.

                                      I 1 Reply Last reply Reply Quote 0
                                      • I
                                        ioStarter @wendy2702 last edited by

                                        @wendy2702
                                        Hi,
                                        dieses Thema ist ja nun schon etwas älter. Gibt es denn hier letztendlich einen Erfolg und die Daten lassen sich auslesen?
                                        Viele Grüße
                                        Thomas

                                        wendy2702 1 Reply Last reply Reply Quote 0
                                        • wendy2702
                                          wendy2702 @ioStarter last edited by

                                          @ioStarter

                                          Ja. Auslesen geht. Irgendwo im Forum ist das Script dazu.

                                          Kann ich nur am Handy gerade schlecht finden.

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          608
                                          Online

                                          31.8k
                                          Users

                                          80.0k
                                          Topics

                                          1.3m
                                          Posts

                                          5
                                          30
                                          2724
                                          Loading More Posts
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          The ioBroker Community 2014-2023
                                          logo