Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Hilfe bei der Verwendung von serialport

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

Hilfe bei der Verwendung von serialport

Scheduled Pinned Locked Moved JavaScript
14 Posts 5 Posters 577 Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    BeneJan
    wrote on last edited by
    #1

    Guten Morgen,

    über einen Arduino erhalte ich zyklisch alle 5 Sekunden Messwerte (Temperatur, Luftfeuchte und CO2) über ein serielle Schnittstelle. Die Messwerte kommen sauber an und werden z.B. in hterm angezeigt. Jetzt würde ich die Werte gerne in Datenpunkte in iobroker schreiben, um sie weiter zu verarbeiten. Folgendes Testprogramm verwende ich in JS, um die Kommunikation zu testen (Erstmal öffnen der Schnittstelle und etwas schreiben):

    var SerialPort = require('serialport');
    var port = new SerialPort('COM3', {
      baudRate: 9600
    });
     
    port.write('Test');
    

    Bei mir wird 'serialport' rot unterstrichen und ich erhalte folgende Fehlermeldung:

    javascript.0	07:22:42.312	error	script.js.common.Sensoren_allgemein.Skript_1: TypeError: SerialPort is not a constructor
    javascript.0	07:22:42.312	error	at script.js.common.Sensoren_allgemein.Skript_1:3:12
    javascript.0	07:22:42.312	error	at script.js.common.Sensoren_allgemein.Skript_1:12:3
    

    Unter der Instanz javascript.0 habe ich bei zusätzlichen npm-Modulen serialport eingetragen.
    Woran könnte der Fehler noch liegen? iobroker ist auf einem Windows 10 PC installiert.
    Schon einmal danke. Ich bin etwas ratlos.

    1 Reply Last reply
    0
    • B Offline
      B Offline
      BeneJan
      wrote on last edited by
      #2

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

      AsgothianA 1 Reply Last reply
      0
      • B BeneJan

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

        AsgothianA Offline
        AsgothianA Offline
        Asgothian
        Developer
        wrote on last edited by
        #3

        @benejan Versuch mal so:

        const { SerialPort } = require('serialport');
        var port = new SerialPort('COM3', {
          baudRate: 9600
        });
         
        port.write('Test');
        
        

        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

        B 1 Reply Last reply
        0
        • AsgothianA Asgothian

          @benejan Versuch mal so:

          const { SerialPort } = require('serialport');
          var port = new SerialPort('COM3', {
            baudRate: 9600
          });
           
          port.write('Test');
          
          
          B Offline
          B Offline
          BeneJan
          wrote on last edited by
          #4

          @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
          
          AsgothianA 1 Reply Last reply
          0
          • B BeneJan

            @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
            
            AsgothianA Offline
            AsgothianA Offline
            Asgothian
            Developer
            wrote on last edited by
            #5

            @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.

            ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
            "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

            bahnuhrB B 2 Replies Last reply
            0
            • AsgothianA Asgothian

              @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.

              bahnuhrB Online
              bahnuhrB Online
              bahnuhr
              Forum Testing Most Active
              wrote on last edited by
              #6

              @asgothian
              etwas off topic.

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

              Hab ich in keinem meiner Scripte.


              Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
              Danke.
              gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
              ScreenToGif :https://www.screentogif.com/downloads.html

              AsgothianA 1 Reply Last reply
              0
              • bahnuhrB bahnuhr

                @asgothian
                etwas off topic.

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

                Hab ich in keinem meiner Scripte.

                AsgothianA Offline
                AsgothianA Offline
                Asgothian
                Developer
                wrote on last edited by
                #7

                @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.

                ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                1 Reply Last reply
                0
                • AsgothianA Asgothian

                  @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.

                  B Offline
                  B Offline
                  BeneJan
                  wrote on last edited by
                  #8

                  @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
                  
                  OliverIOO AsgothianA 3 Replies Last reply
                  0
                  • B BeneJan

                    @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
                    
                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    wrote on last edited by
                    #9

                    @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.

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

                    1 Reply Last reply
                    0
                    • B BeneJan

                      @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
                      
                      AsgothianA Offline
                      AsgothianA Offline
                      Asgothian
                      Developer
                      wrote on last edited by
                      #10

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

                      A.

                      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                      1 Reply Last reply
                      0
                      • B BeneJan

                        @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
                        
                        OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        wrote on last edited by OliverIO
                        #11

                        @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.

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

                        1 Reply Last reply
                        1
                        • B Offline
                          B Offline
                          BeneJan
                          wrote on last edited by
                          #12

                          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')
                          
                          OliverIOO 1 Reply Last reply
                          0
                          • B BeneJan

                            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')
                            
                            OliverIOO Offline
                            OliverIOO Offline
                            OliverIO
                            wrote on last edited by OliverIO
                            #13

                            @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

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

                            haus-automatisierungH 1 Reply Last reply
                            1
                            • OliverIOO 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-automatisierungH Offline
                              haus-automatisierungH Offline
                              haus-automatisierung
                              Developer Most Active
                              wrote on last edited by
                              #14

                              @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.

                              🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                              🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                              📚 Meine inoffizielle ioBroker Dokumentation

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              847

                              Online

                              32.4k

                              Users

                              81.6k

                              Topics

                              1.3m

                              Posts
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Home
                              • Recent
                              • Tags
                              • Unread 0
                              • Categories
                              • Unreplied
                              • Popular
                              • GitHub
                              • Docu
                              • Hilfe