Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Hilfe bei der Verwendung von serialport

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Hilfe bei der Verwendung von serialport

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

      So sieht das bei den npm-Modulen aus:
      Screen.png

      Asgothian 1 Reply Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @BeneJan last edited by

        @benejan Versuch mal so:

        const { SerialPort } = require('serialport');
        var port = new SerialPort('COM3', {
          baudRate: 9600
        });
         
        port.write('Test');
        
        
        B 1 Reply Last reply Reply Quote 0
        • B
          BeneJan @Asgothian last edited by

          @asgothian Das serialport bleibt weiterhin rot unterstrichen, nur die Fehlermeldung hat sich geändert:

          javascript.0	09:31:46.062	error	script.js.common.Sensoren_allgemein.Skript_1: TypeError: "path" is not defined: undefined
          javascript.0	09:31:46.062	error	at script.js.common.Sensoren_allgemein.Skript_1:3:12
          javascript.0	09:31:46.062	error	at script.js.common.Sensoren_allgemein.Skript_1:12:3
          
          Asgothian 1 Reply Last reply Reply Quote 0
          • Asgothian
            Asgothian Developer @BeneJan last edited by

            @benejan hast du die Doku zum Serialport gelesen (die aktuelle, und nicht Beispiele zur Nutzung von vor x Jahren ?)

            da steht eindeutig:

            import { SerialPort } from 'serialport'
            
            const serialport = new SerialPort({ path: '/dev/example', baudRate: 9600 })
            serialport.write('ROBOT POWER ON')
            

            das import { SerialPort } from 'serialport' ist gleichzusetzen mit const { SerialPort } = require('serialport');

            A.

            bahnuhr B 2 Replies Last reply Reply Quote 0
            • bahnuhr
              bahnuhr Forum Testing Most Active @Asgothian last edited by

              @asgothian
              etwas off topic.

              Kannst du mir mal einen link geben warum man dies nun in {} setzt.

              Hab ich in keinem meiner Scripte.

              Asgothian 1 Reply Last reply Reply Quote 0
              • Asgothian
                Asgothian Developer @bahnuhr last edited by

                @bahnuhr sagte in Hilfe bei der Verwendung von serialport:

                @asgothian
                etwas off topic.

                Kannst du mir mal einen link geben warum man dies nun in {} setzt.

                Hab ich in keinem meiner Scripte.

                Das hat etwas damit zu tun was du importierst.

                Man nehme:

                ein Modul myModule welches 2 Klassen exportiert, A und B.

                Wenn du das benutzen willst kannst du das auf verschiedene Art tun:

                const module = require('myModule')
                const instance_of_a = new module.A();
                
                const classA = require('myModule').A
                const another_Instance_of_a = new classA()
                
                const {A} = require('myModule')
                const thirdinstanceofa = new A();
                
                const {A,B} = require('myModule');
                

                Insbesondere der letzte require Befehl ist dabei interessant - er gibt Dir zugriff auf beide Klassen ohne das du den Umweg über module.A und module.B machen musst.

                Ob diese Syntax also notwendig ist hängt davon ab was du per require importierst

                A.

                1 Reply Last reply Reply Quote 0
                • B
                  BeneJan @Asgothian last edited by

                  @asgothian Ja das hatte ich gelesen und auch schon ausprobiert.
                  Dann ist das serialport immer noch rot unterstrichen und es wird folgende Fehlermeldung ausgegeben:

                  javascript.0	16:37:39.743	error	script.js.common.Sensoren_allgemein.Skript_1 compile failed: at script.js.common.Sensoren_allgemein.Skript_1:2
                  
                  OliverIO Asgothian 3 Replies Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @BeneJan last edited by

                    @benejan

                    Das rot unterstrichene bedeutet, das der Editor den Typ nicht finden kann. Das ist aber nur eine Editor Geschichte und passiert immer dann wenn die Bibliothek keine typdefinitionen mitliefert.
                    Wenn der Code funktioniert, kann das ignoriert werden.

                    1 Reply Last reply Reply Quote 0
                    • Asgothian
                      Asgothian Developer @BeneJan last edited by

                      @benejan Du hast gelesen was ich über import und require geschrieben habe ?

                      A.

                      1 Reply Last reply Reply Quote 0
                      • OliverIO
                        OliverIO @BeneJan last edited by OliverIO

                        @benejan

                        Du musst dann nochmal den aktuellen Code zeigen.
                        Die Fehlermeldung bedeutet, das die Compilation, also die Übersetzung von typescript nach JavaScript nicht funktioniert.
                        Also hast Du da noch einen Syntax Fehler drin.

                        Zum selber lesen auch hier mal die Dokumentation
                        https://serialport.io/docs/api-serialport

                        Du musst allerdings, glaube ich, immer require verwenden,
                        Da der JavaScript Adapter noch commonjs ist und nicht ein richtiges Node Modul.

                        1 Reply Last reply Reply Quote 1
                        • B
                          BeneJan last edited by

                          Ja, in die Doku habe ich geschaut, aber kann dort nichts finden, was mich weiterbringt in diesem Fall. Als Code habe ich genau das zum testen genommen, was @Asgothian vorgegeben hat:

                          import { SerialPort } from 'serialport'
                           
                          const serialport = new SerialPort({ path: '/dev/example', baudRate: 9600 })
                          serialport.write('ROBOT POWER ON')
                          
                          OliverIO 1 Reply Last reply Reply Quote 0
                          • OliverIO
                            OliverIO @BeneJan last edited by OliverIO

                            @benejan

                            sorry, nein, du hast nicht das selbe wie @Asgothian übernommen.
                            Selbst nachdem ich es nochmals geschrieben habe (weil ich es vermutet habe)
                            Hast du das auch nicht übernommen.

                            Das läuft ohne Fehler:

                            const { SerialPort } = require('serialport');
                            const serialport = new SerialPort({ path: '/dev/example', baudRate: 9600 })
                            serialport.write('ROBOT POWER ON')
                            

                            Warum machen manche einem die Hilfe so schwer in dem sie die anghebotene Hilfe nicht sorgfältig genug lesen?

                            @asgothian sagte in Hilfe bei der Verwendung von serialport:

                                                                                                                                                        import { SerialPort } from 'serialport'                                                                                                                                                                                                                                                                                                                                                         const serialport = new SerialPort({ path: '/dev/example', baudRate: 9600 })                                                                                                                                                                            serialport.write('ROBOT POWER ON')                                            
                            

                            das import { SerialPort } from 'serialport' ist gleichzusetzen mit const { SerialPort } = require('serialport');

                            und

                            @oliverio sagte in Hilfe bei der Verwendung von serialport:

                            Du musst allerdings, glaube ich, immer require verwenden,
                            Da der JavaScript Adapter noch commonjs ist und nicht ein richtiges Node Modul.

                            Den konkreten Pfad musst du selbst herausfinden, da das Geräte und Hardwareabhängig ist auf deinem Rechner. /dev/example ist nur ein dummy wert

                            Ausserdem empfehle ich, die ; am Ende einer Befehlszeile immer zu setzen, da es ein paar Fälle gibt, wo javascript das Zeilenende nicht richtig interpretieren kann:
                            https://javascript.info/structure#semicolon

                            Nachtrag:
                            wei es mir erst gerade aufgefallen ist:

                            Der wahre Grund des Fehlers ist dann im iobroker log sichtbar, falls man debug level debug für den javascript adapter aktiviert hat:

                            javascript.0 2025-03-16 23:06:05.577	error	SyntaxError: Cannot use import statement outside a module
                            javascript.0 2025-03-16 23:06:05.576	error	^^^^^^
                            javascript.0 2025-03-16 23:06:05.576	error	import { SerialPort } from 'serialport'
                            javascript.0 2025-03-16 23:06:05.575	error	script.js.Skript_1 compile failed: at script.js.Skript_1:4
                            

                            wäre glaube ich auch mal etwas was man im skriptlog mit anzeigen könnte @haus-automatisierung
                            Nur die letzte Zeile im Skriptlog ist nicht immer ganz erklärend

                            haus-automatisierung 1 Reply Last reply Reply Quote 1
                            • haus-automatisierung
                              haus-automatisierung Developer Most Active @OliverIO last edited by

                              @oliverio sagte in Hilfe bei der Verwendung von serialport:

                              Nur die letzte Zeile im Skriptlog ist nicht immer ganz erklärend

                              Ja, das Problem ist, dass das Log innerhalb der Scripts nach der Script ID sucht. Alles, wo nicht die Script ID enthalten ist, wird ausgeblendet. Dadurch fehlt meistens die (wichtige) erste Zeile des Logs und nur der Stack wird angezeigt.

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              926
                              Online

                              31.7k
                              Users

                              79.6k
                              Topics

                              1.3m
                              Posts

                              5
                              14
                              205
                              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