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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Eigene Typescript Module schreiben

NEWS

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

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

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

Eigene Typescript Module schreiben

Geplant Angeheftet Gesperrt Verschoben JavaScript
14 Beiträge 5 Kommentatoren 724 Aufrufe 3 Watching
  • Ä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.
  • I iob69

    @oliverio
    Hallo,
    soweit bin ich noch nicht ;-). Erst wollte ich das Modul auslagern. Aber wenn du das gerade ansprichst: kann ich das auch mit dem Befehl in der Win-Konsole machen? Das hab ich nämlich jetzt gerade versucht, da kam die Meldung:

    C:\Users\Admin>npx tsc kalender.ts
    
    
                    This is not the tsc command you are looking for
    
    
    To get access to the TypeScript compiler, tsc, from the command line either:
    
    - Use npm install typescript to first add TypeScript to your project before using npx
    - Use yarn to avoid accidentally running code from un-installed packages
    
    C:\Users\Admin>
    

    Ich weiss jetzt nicht, ob ich das einfach mit "npm install" machen darf, normalerweise sollte man ja soche dinge über iob machen?

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

    @iob69
    Theoretisch schon.
    Aber du musst in das richtige Verzeichnis.
    Woher soll der arme Befehl den wissen wo er die Datei finden soll.
    Lese dir die Beschreibung nochmal genau von vorne nach hinten durch und auch mal noch ein paar Posts danach.

    Transpilieren von TypeScript nach JavaScript
    kalender.ts muss zu kalender.js transpiliert werden.

    Copy to Clipboard
    npx tsc kalender.ts
    --> Es entsteht die Datei kalender.js im gleichen Verzeichnis.

    Den Satz mit Docker kannst ignorieren wenn du kein Docker verwendest. Ich hab den aus dem Zitat mal gelöscht

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

    I 1 Antwort Letzte Antwort
    0
    • U uwe72

      @iob69 zeige doch ein wenig mehr, wo liegen die Dateien, wie sieht dein Script aus in iobroker.

      I Offline
      I Offline
      iob69
      schrieb am zuletzt editiert von
      #6

      @uwe72
      Ich hab wie gesagt noch nicht mehr. Das Script das ich gepostet hab ist alles. Es kompiliert aber nicht, wegen dem Fehler.
      Deshalb wird wohl auch nichts erzeugt.
      hier das log:

      javascript.0	2025-07-06 08:49:27.271	error	at Script.runInContext (node:vm:149:12)
      javascript.0	2025-07-06 08:49:27.271	error	at script.js.Eigene_Scripte.HowTo.ModuleExportImport:23:1
      javascript.0	2025-07-06 08:49:27.271	error	ReferenceError: module is not defined
      javascript.0	2025-07-06 08:49:27.270	error	^
      javascript.0	2025-07-06 08:49:27.270	error	module.exports = { Kalender: Kalender };
      javascript.0	2025-07-06 08:49:27.270	error	script.js.Eigene_Scripte.HowTo.ModuleExportImport: script.js.Eigene_Scripte.HowTo.ModuleExportImport:23
      
      1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        @iob69
        Theoretisch schon.
        Aber du musst in das richtige Verzeichnis.
        Woher soll der arme Befehl den wissen wo er die Datei finden soll.
        Lese dir die Beschreibung nochmal genau von vorne nach hinten durch und auch mal noch ein paar Posts danach.

        Transpilieren von TypeScript nach JavaScript
        kalender.ts muss zu kalender.js transpiliert werden.

        Copy to Clipboard
        npx tsc kalender.ts
        --> Es entsteht die Datei kalender.js im gleichen Verzeichnis.

        Den Satz mit Docker kannst ignorieren wenn du kein Docker verwendest. Ich hab den aus dem Zitat mal gelöscht

        I Offline
        I Offline
        iob69
        schrieb am zuletzt editiert von
        #7

        @oliverio
        Mittlerweile hab ich herausgefunden, wie man dann wahrscheinlich kompilieren kann. Man muss ins Verzeichnis c:\iobroker wechseln und dort den befehl

        C:\ioBroker>npx tsc kalender.ts
        

        eingeben. Bei mir kommt im Moment noch:

        C:\ioBroker>npx tsc kalender.ts
        error TS6053: File 'kalender.ts' not found.
          The file is in the program because:
            Root file specified for compilation
        
        Found 1 error.
        

        Weil es ja offenbar noch keine Datei gibt. Ein Test mit einer selbst erstellten .ts - Datei hat funktioniert, ich müsste dann nur noch wissen, wo er die Datei hinschreibt, wenn er denn das Modul exportieren würde. Aber das finde ich dann schon heraus.
        Also mein Problem liegt noch darin, dass er das modul nicht exportieren will. Was fehlt in dieser Datei ganz oben?
        Zur Not könnte ich die Datei ja einfach von Hand dort rein kopieren, ich weiss aber nicht in welches Verzeichnis sie hingehört. Deshalb wäre es gut, wenn das "module.exports" funktionieren würde. Dann wäre das Modul gleich an der richtigen Stelle.
        @uwe72 könntest du vielleicht diese Datei nochmals testen und hier posten, vielleicht war da ja noch ein kleiner Fehler drin?

        I 1 Antwort Letzte Antwort
        0
        • I iob69

          @oliverio
          Mittlerweile hab ich herausgefunden, wie man dann wahrscheinlich kompilieren kann. Man muss ins Verzeichnis c:\iobroker wechseln und dort den befehl

          C:\ioBroker>npx tsc kalender.ts
          

          eingeben. Bei mir kommt im Moment noch:

          C:\ioBroker>npx tsc kalender.ts
          error TS6053: File 'kalender.ts' not found.
            The file is in the program because:
              Root file specified for compilation
          
          Found 1 error.
          

          Weil es ja offenbar noch keine Datei gibt. Ein Test mit einer selbst erstellten .ts - Datei hat funktioniert, ich müsste dann nur noch wissen, wo er die Datei hinschreibt, wenn er denn das Modul exportieren würde. Aber das finde ich dann schon heraus.
          Also mein Problem liegt noch darin, dass er das modul nicht exportieren will. Was fehlt in dieser Datei ganz oben?
          Zur Not könnte ich die Datei ja einfach von Hand dort rein kopieren, ich weiss aber nicht in welches Verzeichnis sie hingehört. Deshalb wäre es gut, wenn das "module.exports" funktionieren würde. Dann wäre das Modul gleich an der richtigen Stelle.
          @uwe72 könntest du vielleicht diese Datei nochmals testen und hier posten, vielleicht war da ja noch ein kleiner Fehler drin?

          I Offline
          I Offline
          iob69
          schrieb am zuletzt editiert von
          #8

          Bin nun etwas weiter gekommen. Hab die .ts-Datei von Hand kompiliert und dies hat folgende .js-Datei ergeben:

          var Kalender = /** @class */ (function () {
              function Kalender(adapter, myState) {
                  this.adapter = adapter;
                  this.myState = myState;
              }
              Kalender.prototype.getCurrentWeekdayAsInteger = function () {
                  var now = new Date();
                  return now.getDay();
              };
              Kalender.prototype.updateState = function () {
                  this.adapter.log("Update state within external file");
                  this.adapter.setState(this.myState, this.getCurrentWeekdayAsInteger());
              };
              Kalender.prototype.sendTelegram = function () {
                  this.adapter.log("Send telegram within external file");
                  this.adapter.sendTo("telegram.0", "Weekday is: " + this.getCurrentWeekdayAsInteger());
              };
              return Kalender;
          }());
          

          soweit, so gut.
          Nun wollte ich die Datei verwenden, wieder in einer typescript-Datei nach vorlage von @uwe72

          const { Kalender } = require('kalender.js');
          
          var myStateState = "0_userdata.0.html.test_module";
          
          createState(myStateState, -1, {
              name: myStateState,
              desc: myStateState,
              type: 'number', 
              read: true,
              write: true
          });
          
          setState(myStateState, -1);
          
          const myCalender = new Kalender(this, myStateState);
          log("Heute ist: " + myCalender.getCurrentWeekdayAsInteger());
          
          log("Wochentag is: " + getState(myStateState).val);
          myCalender.updateState();
          log("Wochentag is: " + getState(myStateState).val);
          

          Fehler:

          javascript.0	2025-07-06 09:41:03.285	error	at Script.runInContext (node:vm:149:12)
          javascript.0	2025-07-06 09:41:03.285	error	at script.js.Eigene_Scripte.HowTo.ModuleExportImport:41:18
          javascript.0	2025-07-06 09:41:03.284	error	TypeError: Kalender is not a constructor
          javascript.0	2025-07-06 09:41:03.284	error	^
          javascript.0	2025-07-06 09:41:03.284	error	var myCalender = new Kalender(this, myStateState);
          javascript.0	2025-07-06 09:41:03.284	error	script.js.Eigene_Scripte.HowTo.ModuleExportImport: script.js.Eigene_Scripte.HowTo.ModuleExportImport:41
          

          Importieren/einbinden kann er die Datei offenbar...
          Aber ich weiss nicht was bei mir fehlt, und wieso dass es bei uwe72 funktioniert, aber bei mir nicht?

          OliverIOO 1 Antwort Letzte Antwort
          0
          • I iob69

            Bin nun etwas weiter gekommen. Hab die .ts-Datei von Hand kompiliert und dies hat folgende .js-Datei ergeben:

            var Kalender = /** @class */ (function () {
                function Kalender(adapter, myState) {
                    this.adapter = adapter;
                    this.myState = myState;
                }
                Kalender.prototype.getCurrentWeekdayAsInteger = function () {
                    var now = new Date();
                    return now.getDay();
                };
                Kalender.prototype.updateState = function () {
                    this.adapter.log("Update state within external file");
                    this.adapter.setState(this.myState, this.getCurrentWeekdayAsInteger());
                };
                Kalender.prototype.sendTelegram = function () {
                    this.adapter.log("Send telegram within external file");
                    this.adapter.sendTo("telegram.0", "Weekday is: " + this.getCurrentWeekdayAsInteger());
                };
                return Kalender;
            }());
            

            soweit, so gut.
            Nun wollte ich die Datei verwenden, wieder in einer typescript-Datei nach vorlage von @uwe72

            const { Kalender } = require('kalender.js');
            
            var myStateState = "0_userdata.0.html.test_module";
            
            createState(myStateState, -1, {
                name: myStateState,
                desc: myStateState,
                type: 'number', 
                read: true,
                write: true
            });
            
            setState(myStateState, -1);
            
            const myCalender = new Kalender(this, myStateState);
            log("Heute ist: " + myCalender.getCurrentWeekdayAsInteger());
            
            log("Wochentag is: " + getState(myStateState).val);
            myCalender.updateState();
            log("Wochentag is: " + getState(myStateState).val);
            

            Fehler:

            javascript.0	2025-07-06 09:41:03.285	error	at Script.runInContext (node:vm:149:12)
            javascript.0	2025-07-06 09:41:03.285	error	at script.js.Eigene_Scripte.HowTo.ModuleExportImport:41:18
            javascript.0	2025-07-06 09:41:03.284	error	TypeError: Kalender is not a constructor
            javascript.0	2025-07-06 09:41:03.284	error	^
            javascript.0	2025-07-06 09:41:03.284	error	var myCalender = new Kalender(this, myStateState);
            javascript.0	2025-07-06 09:41:03.284	error	script.js.Eigene_Scripte.HowTo.ModuleExportImport: script.js.Eigene_Scripte.HowTo.ModuleExportImport:41
            

            Importieren/einbinden kann er die Datei offenbar...
            Aber ich weiss nicht was bei mir fehlt, und wieso dass es bei uwe72 funktioniert, aber bei mir nicht?

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

            @iob69

            Also ich weiß nicht was du genau vorhast.
            Lese doch bitte zuerst die komplette Beschreibung genau durch.
            Außer das du die Kalender klasse verwendest hast sehe ich nichts, was du aus der Beschreibung nach machst.

            Wo hast du den deine Datei abgelegt? Die sollte ja nicht irgendwo rumliegen.

            Beschreibe mal exakt, wo du deine Dateien ablegst.

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

            I 1 Antwort Letzte Antwort
            1
            • OliverIOO OliverIO

              @iob69

              Also ich weiß nicht was du genau vorhast.
              Lese doch bitte zuerst die komplette Beschreibung genau durch.
              Außer das du die Kalender klasse verwendest hast sehe ich nichts, was du aus der Beschreibung nach machst.

              Wo hast du den deine Datei abgelegt? Die sollte ja nicht irgendwo rumliegen.

              Beschreibe mal exakt, wo du deine Dateien ablegst.

              I Offline
              I Offline
              iob69
              schrieb am zuletzt editiert von iob69
              #10

              @oliverio
              Ich mache doch genau das was im Typesript-Beispiel steht, nur auf umwegen, weil module.exports nicht tut:

              • Typescript-Klasse geschrieben und in eine Datei abgespeichert
              • Datei kompiliert
              • Datei in richtigen Pfad kopiert
              • Datei in neuem Typescript einbinden

              Also eigentlich sollte ja das Script die Dateien ablegen. mit "module.exports = { Kalender};" oder nicht?
              Ich hab mittlerweile herausgefunden, wo Module eingerichtet werden, wenn man sie im Javascript adapter configuriert:
              C:\ioBroker\node_modules@iobroker-javascript.0
              Dort hab ich dann auch die kompilierte datei kalender.js hingetan. (C:\ioBroker\node_modules@iobroker-javascript.0\kalender\kalender.js)
              Das problem ist ja auch nicht der Pfad, denn er findet die Datei ja, sonst würde er ja nicht über etwas meckern, was dort drin steht...

              T 1 Antwort Letzte Antwort
              0
              • I iob69

                @oliverio
                Ich mache doch genau das was im Typesript-Beispiel steht, nur auf umwegen, weil module.exports nicht tut:

                • Typescript-Klasse geschrieben und in eine Datei abgespeichert
                • Datei kompiliert
                • Datei in richtigen Pfad kopiert
                • Datei in neuem Typescript einbinden

                Also eigentlich sollte ja das Script die Dateien ablegen. mit "module.exports = { Kalender};" oder nicht?
                Ich hab mittlerweile herausgefunden, wo Module eingerichtet werden, wenn man sie im Javascript adapter configuriert:
                C:\ioBroker\node_modules@iobroker-javascript.0
                Dort hab ich dann auch die kompilierte datei kalender.js hingetan. (C:\ioBroker\node_modules@iobroker-javascript.0\kalender\kalender.js)
                Das problem ist ja auch nicht der Pfad, denn er findet die Datei ja, sonst würde er ja nicht über etwas meckern, was dort drin steht...

                T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von
                #11

                @iob69
                Ich sehe da aber nichts in der lib, das ein export erzeugt.

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                I 1 Antwort Letzte Antwort
                0
                • T ticaki

                  @iob69
                  Ich sehe da aber nichts in der lib, das ein export erzeugt.

                  I Offline
                  I Offline
                  iob69
                  schrieb am zuletzt editiert von
                  #12

                  @ticaki
                  Unter der Klasse "Kalender" steht:

                  module.exports = { Kalender};
                  
                  T HomoranH 2 Antworten Letzte Antwort
                  0
                  • I iob69

                    @ticaki
                    Unter der Klasse "Kalender" steht:

                    module.exports = { Kalender};
                    
                    T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von ticaki
                    #13

                    @iob69
                    übersehen sry.

                    EDIT: Kenne mich mit reinem Javascript nicht so gut aus, aber sollte sich das nicht in der transpilierten Datei finden?

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    1 Antwort Letzte Antwort
                    0
                    • I iob69

                      @ticaki
                      Unter der Klasse "Kalender" steht:

                      module.exports = { Kalender};
                      
                      HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von
                      #14

                      @iob69 sagte in Eigene Typescript Module schreiben:

                      @ticaki
                      Unter der Klasse "Kalender" steht:

                      module.exports = { Kalender};
                      

                      ist das Leerzeichen gewollt und korrekt?

                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

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

                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                      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

                      377

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      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