Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Eigene Typescript Module schreiben

    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

    Eigene Typescript Module schreiben

    This topic has been deleted. Only users with topic management privileges can see it.
    • OliverIO
      OliverIO @iob69 last edited by 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 1 Reply Last reply Reply Quote 0
      • I
        iob69 @uwe72 last edited by

        @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 Reply Last reply Reply Quote 0
        • I
          iob69 @OliverIO last edited by

          @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 Reply Last reply Reply Quote 0
          • I
            iob69 @iob69 last edited by

            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?

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @iob69 last edited by 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 1 Reply Last reply Reply Quote 1
              • I
                iob69 @OliverIO last edited by 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 1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer @iob69 last edited by

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

                  I 1 Reply Last reply Reply Quote 0
                  • I
                    iob69 @ticaki last edited by

                    @ticaki
                    Unter der Klasse "Kalender" steht:

                    module.exports = { Kalender};
                    
                    T Homoran 2 Replies Last reply Reply Quote 0
                    • T
                      ticaki Developer @iob69 last edited by ticaki

                      @iob69
                      übersehen sry.

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

                      1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @iob69 last edited by

                        @iob69 sagte in Eigene Typescript Module schreiben:

                        @ticaki
                        Unter der Klasse "Kalender" steht:

                        module.exports = { Kalender};
                        

                        ist das Leerzeichen gewollt und korrekt?

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        413
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

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