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. (ERLEDIGT!) TypeScript, viele common/global Scripte --> CPU

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.3k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

(ERLEDIGT!) TypeScript, viele common/global Scripte --> CPU

Scheduled Pinned Locked Moved Skripten / Logik
55 Posts 10 Posters 6.4k Views 7 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.
  • T ticaki

    @oliverio
    Danke da bin ich schon dran, das hier geht, muss nur noch types entfernen, bin aber zu faul :) Hab eine class SkriptAdapter in der javascript.d.ts in meinem repo hinzugefügt.
    https://github.com/ticaki/script-library-example/blob/b51649045526c4c1466da759a05d4edd26b1c871/.iobroker/types/javascript.d.ts#L1728

    https://github.com/ticaki/script-library-example

    class Person {
        private nachname: string;
        private vorname: string;
        private alter: string;
        private adapter: ScriptAdapter;
    
    U Offline
    U Offline
    uwe72
    wrote on last edited by
    #41

    @ticaki

    Habe zwar hier die letzten 2 Kommentare nicht mehr im Detail verstanden, den
    grundsätzlichen Ansatz aber schon. Freue mich das Ganze auszuprobieren. Leider erst ab der 2. Wochenhälfte. Auch wenn die Diskussionen auf 2-3 Threads verteilt waren, waren sie dennoch zielführend :-)

    Werde erst einmal die ursprüngliche Lösung, reines externe TS-File, dieses zu einem *.js "kompilieren" versuchen. Wenn man den Adapter im Konstruktor mit rein gibt, müsste es ja auch ohne Fehlermeldung die *.js Datei erstellen können.

    T 1 Reply Last reply
    0
    • U uwe72

      @ticaki

      Habe zwar hier die letzten 2 Kommentare nicht mehr im Detail verstanden, den
      grundsätzlichen Ansatz aber schon. Freue mich das Ganze auszuprobieren. Leider erst ab der 2. Wochenhälfte. Auch wenn die Diskussionen auf 2-3 Threads verteilt waren, waren sie dennoch zielführend :-)

      Werde erst einmal die ursprüngliche Lösung, reines externe TS-File, dieses zu einem *.js "kompilieren" versuchen. Wenn man den Adapter im Konstruktor mit rein gibt, müsste es ja auch ohne Fehlermeldung die *.js Datei erstellen können.

      T Do not disturb
      T Do not disturb
      ticaki
      wrote on last edited by ticaki
      #42

      @uwe72 sagte in (ERLEDIGT!) TypeScript, viele common/global Scripte --> CPU:

      @ticaki

      Habe zwar hier die letzten 2 Kommentare nicht mehr im Detail verstanden, den
      grundsätzlichen Ansatz aber schon.

      Dabei geht es um Typen - wenn du mein github repo als basis nimmst werden dort folgende Befehle kompiliert.

      // das ist richtig
      const irgendwas: ScriptAdapter;
      irgendwas = thisVomJavascriptadapter
      irgendwas.setState()
      
      // folgendes wird ebenfalls kompiliert ist aber falsch und geht nicht
      setState()
      // werde das die Tage noch aus der d.ts datei löschen.
      

      Wenn du vscode benutzt um zu programmieren, geht mit dem repo ebenfalls das Autovervollständigen und Tooltips zu Funktionen.

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      U 1 Reply Last reply
      0
      • T ticaki

        @uwe72 sagte in (ERLEDIGT!) TypeScript, viele common/global Scripte --> CPU:

        @ticaki

        Habe zwar hier die letzten 2 Kommentare nicht mehr im Detail verstanden, den
        grundsätzlichen Ansatz aber schon.

        Dabei geht es um Typen - wenn du mein github repo als basis nimmst werden dort folgende Befehle kompiliert.

        // das ist richtig
        const irgendwas: ScriptAdapter;
        irgendwas = thisVomJavascriptadapter
        irgendwas.setState()
        
        // folgendes wird ebenfalls kompiliert ist aber falsch und geht nicht
        setState()
        // werde das die Tage noch aus der d.ts datei löschen.
        

        Wenn du vscode benutzt um zu programmieren, geht mit dem repo ebenfalls das Autovervollständigen und Tooltips zu Funktionen.

        U Offline
        U Offline
        uwe72
        wrote on last edited by uwe72
        #43

        @ticaki Ok, ich werde mir deinen Weg auch noch anschauen.

        Aber eine sehr simple/schlichte Lösung ist die:

        Eine Datei buch.ts in einem externen Verzeichnis, ohne das drum herum

        class Buch  {
        
            private adapter: any;
        
            constructor(adapter) {
               this.adapter = adapter;
            }
        
            public getCurrentWeekdayAsString() : string {
                var now = new Date();
                let weekday = now.getDay();
        
                            this.adapter.sendTo("email.0", {
                                from:    "uwe.clement@gmail.com",                                                                
                                to:      "uwe.clement@gmail.com",
                                subject: "Test1",
                                html: "test2"
                            });	
        
        
                return this.getWeekdayAsString(weekday);
            }
        
            public getWeekdayAsString(weekday: number) : string {
                let weekdayAsString;
                if (weekday == 1) {
                    weekdayAsString = "Montag";
                } else if (weekday == 2) {
                    weekdayAsString = "Dienstag";
                } else if (weekday == 3) {
                    weekdayAsString = "Mittwoch";
                } else if (weekday == 4) {
                    weekdayAsString = "Donnerstag";
                } else if (weekday == 5) {
                    weekdayAsString = "Freitag";
                } else if (weekday == 6) {
                    weekdayAsString = "Samstag";
                } else if (weekday == 7) {
                    weekdayAsString = "Sonntag";
                } else if (weekday == 0) {
                    weekdayAsString = "Sonntag";
                }
                return weekdayAsString;
            }  
        
        }
        
        module.exports = { Buch};
        

        Buch.ts zu buch.js "kompilieren" (Sorry, Fachbegriff wieder vergessen). Unter Docker muss man im Container drin sein, d.h. z.B. docker exec -it iobroker bash

        npx tsc buch.ts
        

        In Iobroker:

        const { Buch } = require('/opt/iobroker/my_scripts/buch.js');
        const myBook = new Buch(this);
        log("Heute ist: " + myBook.getCurrentWeekdayAsString());
        

        Funktionierende Log + Emailversand:

        aecf0085-fbbb-41b0-a101-7420e3c30827-image.png

        3e55042d-6cb8-492d-bf51-173d1e2c928c-image.png

        Ich freue mich nun auf alle Fälle, dass ich alle global-Scripte eliminieren kann. Halte wie gesagt von dieser Architektur nicht so viel.

        T 1 Reply Last reply
        0
        • U uwe72

          @ticaki Ok, ich werde mir deinen Weg auch noch anschauen.

          Aber eine sehr simple/schlichte Lösung ist die:

          Eine Datei buch.ts in einem externen Verzeichnis, ohne das drum herum

          class Buch  {
          
              private adapter: any;
          
              constructor(adapter) {
                 this.adapter = adapter;
              }
          
              public getCurrentWeekdayAsString() : string {
                  var now = new Date();
                  let weekday = now.getDay();
          
                              this.adapter.sendTo("email.0", {
                                  from:    "uwe.clement@gmail.com",                                                                
                                  to:      "uwe.clement@gmail.com",
                                  subject: "Test1",
                                  html: "test2"
                              });	
          
          
                  return this.getWeekdayAsString(weekday);
              }
          
              public getWeekdayAsString(weekday: number) : string {
                  let weekdayAsString;
                  if (weekday == 1) {
                      weekdayAsString = "Montag";
                  } else if (weekday == 2) {
                      weekdayAsString = "Dienstag";
                  } else if (weekday == 3) {
                      weekdayAsString = "Mittwoch";
                  } else if (weekday == 4) {
                      weekdayAsString = "Donnerstag";
                  } else if (weekday == 5) {
                      weekdayAsString = "Freitag";
                  } else if (weekday == 6) {
                      weekdayAsString = "Samstag";
                  } else if (weekday == 7) {
                      weekdayAsString = "Sonntag";
                  } else if (weekday == 0) {
                      weekdayAsString = "Sonntag";
                  }
                  return weekdayAsString;
              }  
          
          }
          
          module.exports = { Buch};
          

          Buch.ts zu buch.js "kompilieren" (Sorry, Fachbegriff wieder vergessen). Unter Docker muss man im Container drin sein, d.h. z.B. docker exec -it iobroker bash

          npx tsc buch.ts
          

          In Iobroker:

          const { Buch } = require('/opt/iobroker/my_scripts/buch.js');
          const myBook = new Buch(this);
          log("Heute ist: " + myBook.getCurrentWeekdayAsString());
          

          Funktionierende Log + Emailversand:

          aecf0085-fbbb-41b0-a101-7420e3c30827-image.png

          3e55042d-6cb8-492d-bf51-173d1e2c928c-image.png

          Ich freue mich nun auf alle Fälle, dass ich alle global-Scripte eliminieren kann. Halte wie gesagt von dieser Architektur nicht so viel.

          T Do not disturb
          T Do not disturb
          ticaki
          wrote on last edited by ticaki
          #44

          @uwe72
          Das ist keine "simple" Lösung sondern einfach nur aufwendiger wie javascript zu schreiben. Typescript mit any ist javascript nur transpilierbar :D

          Aber im Ernst, die Lösung ist doch das gleich was ich weiter oben vorgeschlagen habe, der Nachschlag ist nur eine Verbesserung dazu.

          Mit Typen wird dir halt this.adapter.setstate() als Fehler angezeigt, weil es this.adapter.setState() sein müsste.

          Hat spass gemacht. :)

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          U 2 Replies Last reply
          0
          • T ticaki

            @uwe72
            Das ist keine "simple" Lösung sondern einfach nur aufwendiger wie javascript zu schreiben. Typescript mit any ist javascript nur transpilierbar :D

            Aber im Ernst, die Lösung ist doch das gleich was ich weiter oben vorgeschlagen habe, der Nachschlag ist nur eine Verbesserung dazu.

            Mit Typen wird dir halt this.adapter.setstate() als Fehler angezeigt, weil es this.adapter.setState() sein müsste.

            Hat spass gemacht. :)

            U Offline
            U Offline
            uwe72
            wrote on last edited by
            #45

            @ticaki Ich habe nun eben schon alles in TS, deswegen ist es für mich nicht aufwendiger.

            Eine Stufe simpler wäre, dass ich nur das buch.js schreibe, nicht transpilieren muss und es dennoch einbinden kann in iobroker.

            Dennoch verstehe ich noch nicht den Sinn von dem "drum herum", d.h. die vielen anderen Datei tsconfig,json,.../types/javascript.d.ts?

            U 1 Reply Last reply
            0
            • T ticaki

              @uwe72
              Das ist keine "simple" Lösung sondern einfach nur aufwendiger wie javascript zu schreiben. Typescript mit any ist javascript nur transpilierbar :D

              Aber im Ernst, die Lösung ist doch das gleich was ich weiter oben vorgeschlagen habe, der Nachschlag ist nur eine Verbesserung dazu.

              Mit Typen wird dir halt this.adapter.setstate() als Fehler angezeigt, weil es this.adapter.setState() sein müsste.

              Hat spass gemacht. :)

              U Offline
              U Offline
              uwe72
              wrote on last edited by uwe72
              #46

              @ticaki ok, das mit den Fehlermeldungen....da wirst Du wohl recht haben. So weit bin ich noch nicht :-)

              U 1 Reply Last reply
              0
              • U uwe72

                @ticaki ok, das mit den Fehlermeldungen....da wirst Du wohl recht haben. So weit bin ich noch nicht :-)

                U Offline
                U Offline
                uwe72
                wrote on last edited by
                #47

                @ticaki Auch wenn wir noch leicht unterschiedliche Lösungen haben, würde ich sagen, dass das gemeinsame Wochenende erfolgreich war.

                1 Reply Last reply
                0
                • U uwe72

                  @ticaki Ich habe nun eben schon alles in TS, deswegen ist es für mich nicht aufwendiger.

                  Eine Stufe simpler wäre, dass ich nur das buch.js schreibe, nicht transpilieren muss und es dennoch einbinden kann in iobroker.

                  Dennoch verstehe ich noch nicht den Sinn von dem "drum herum", d.h. die vielen anderen Datei tsconfig,json,.../types/javascript.d.ts?

                  U Offline
                  U Offline
                  uwe72
                  wrote on last edited by uwe72
                  #48

                  @ticaki und mal im Ernst, das ist schon eine krasse Verbesserung zum bisherigen Konzept, Code über die global.Scripte einzubinden. Man kann nun gezielt Code-Frakmente eibinden an Stellen wo man sie benötigt. Und dies auch noch in TS

                  1 Reply Last reply
                  0
                  • T Do not disturb
                    T Do not disturb
                    ticaki
                    wrote on last edited by
                    #49

                    Hab die Types noch in Ordnung gebracht. setState() ist jetzt ein Fehler.

                    Richtig:

                    const einVariablenName: ScriptAdapter = thisVomJavascriptAdapter;
                    einVariablenName.setState();
                    

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    U 1 Reply Last reply
                    0
                    • arteckA Offline
                      arteckA Offline
                      arteck
                      Developer Most Active
                      wrote on last edited by arteck
                      #50

                      @uwe72 sagte in (ERLEDIGT!) TypeScript, viele common/global Scripte --> CPU:

                      Ich habe aus ca. 40 (kleineren) Common-Scripte ca. 25 (größere) gemacht und von 8 global Scripten auf 5 reduziert.

                      Ich laufe nun zumindest nicht mehr in das CPU-Problem rein. Das Speichern nach dem Ändern eines Global-Script dauert nun ca. 5 Minuten.

                      Übrigens, das Ändern von Common-Scripten ist nie ein Problem, auch vor der "Optimierung" nicht.

                      ach.ne...hab ich dir das nicht auf Facebook gesagt... reduziere die Global scripte...
                      wie war nochmal deine Antwort..ach ja... ICH WEISS

                      zigbee hab ich, zwave auch, nuc's genauso und HA auch

                      U 1 Reply Last reply
                      -1
                      • arteckA arteck

                        @uwe72 sagte in (ERLEDIGT!) TypeScript, viele common/global Scripte --> CPU:

                        Ich habe aus ca. 40 (kleineren) Common-Scripte ca. 25 (größere) gemacht und von 8 global Scripten auf 5 reduziert.

                        Ich laufe nun zumindest nicht mehr in das CPU-Problem rein. Das Speichern nach dem Ändern eines Global-Script dauert nun ca. 5 Minuten.

                        Übrigens, das Ändern von Common-Scripten ist nie ein Problem, auch vor der "Optimierung" nicht.

                        ach.ne...hab ich dir das nicht auf Facebook gesagt... reduziere die Global scripte...
                        wie war nochmal deine Antwort..ach ja... ICH WEISS

                        U Offline
                        U Offline
                        uwe72
                        wrote on last edited by uwe72
                        #51

                        @arteck ich weiß, dass global-Scripte in common reinkopiert werden. Die Lösung ist es nicht nur global-Scripte zu reduzieren wenn das Ziel ist redundantfreien code zu erzeugen. Wenn du die threads vom Wochenende hier verfolgt, dann gibt es bessere Ansätze. Dein Hinweis brachte mir einfach keinen Mehrwert.

                        1 Reply Last reply
                        0
                        • Z Offline
                          Z Offline
                          zi_manuel
                          wrote on last edited by
                          #52

                          Hallo habe heute mal probiert wie bei uwe72 die class Buch von extern aufzurufen habe dafür mittlerweile sogar den gleichen Pfad eingerichtet aber leider ohne Erfolg hab auch zu der Fehlermeldung nichts gefunden. Kann mir dazu jemand weiterhelfen?

                          const { Buch } = require('/opt/iobroker/my_scripts/buch.js');
                          const myBook = new Buch(this);
                          log("Heute ist: " + myBook.getCurrentWeekdayAsString());
                          

                          66b47860-dcf7-48c3-b209-4fb659dfd927-image.png

                          das ist der Fehler und ich komme nicht darauf woher dieser kommt.

                          OliverIOO 1 Reply Last reply
                          0
                          • Z zi_manuel

                            Hallo habe heute mal probiert wie bei uwe72 die class Buch von extern aufzurufen habe dafür mittlerweile sogar den gleichen Pfad eingerichtet aber leider ohne Erfolg hab auch zu der Fehlermeldung nichts gefunden. Kann mir dazu jemand weiterhelfen?

                            const { Buch } = require('/opt/iobroker/my_scripts/buch.js');
                            const myBook = new Buch(this);
                            log("Heute ist: " + myBook.getCurrentWeekdayAsString());
                            

                            66b47860-dcf7-48c3-b209-4fb659dfd927-image.png

                            das ist der Fehler und ich komme nicht darauf woher dieser kommt.

                            OliverIOO Offline
                            OliverIOO Offline
                            OliverIO
                            wrote on last edited by
                            #53

                            @zi_manuel

                            Dazu
                            Muss man Buch.js sehen

                            Wahrscheinlich ist da keine Klasse definiert

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

                            Z 1 Reply Last reply
                            0
                            • OliverIOO OliverIO

                              @zi_manuel

                              Dazu
                              Muss man Buch.js sehen

                              Wahrscheinlich ist da keine Klasse definiert

                              Z Offline
                              Z Offline
                              zi_manuel
                              wrote on last edited by zi_manuel
                              #54

                              @oliverio als mit klassen bin ich erst vor kurzen dahinter gestiegen und versuche mich daran. sollte aber so passen. hab das von oberen Post heraus kopiert.

                              warum ist eigentlich bei module.exports = { Buch } in den klammern, genauso wie bein const { Buch } =?

                              class Buch {
                                  constructor(adapter) {
                                    this.adapter = adapter
                                  }
                                
                                  getCurrentWeekdayAsString() {
                                    var now = new Date()
                                    let weekday = now.getDay()
                                
                                    /*this.adapter.sendTo("email.0", {
                                      from: "uwe.clement@gmail.com",
                                      to: "uwe.clement@gmail.com",
                                      subject: "Test1",
                                      html: "test2"
                                    })*/
                                
                                    return this.getWeekdayAsString(weekday)
                                  }
                                
                                  getWeekdayAsString(weekday) {
                                    let weekdayAsString
                                    if (weekday == 1) {
                                      weekdayAsString = "Montag"
                                    } else if (weekday == 2) {
                                      weekdayAsString = "Dienstag"
                                    } else if (weekday == 3) {
                                      weekdayAsString = "Mittwoch"
                                    } else if (weekday == 4) {
                                      weekdayAsString = "Donnerstag"
                                    } else if (weekday == 5) {
                                      weekdayAsString = "Freitag"
                                    } else if (weekday == 6) {
                                      weekdayAsString = "Samstag"
                                    } else if (weekday == 7) {
                                      weekdayAsString = "Sonntag"
                                    } else if (weekday == 0) {
                                      weekdayAsString = "Sonntag"
                                    }
                                    return weekdayAsString
                                  }
                                }
                                
                                module.exports = { Buch }
                              
                              1 Reply Last reply
                              0
                              • T ticaki

                                Hab die Types noch in Ordnung gebracht. setState() ist jetzt ein Fehler.

                                Richtig:

                                const einVariablenName: ScriptAdapter = thisVomJavascriptAdapter;
                                einVariablenName.setState();
                                
                                U Offline
                                U Offline
                                uwe72
                                wrote on last edited by uwe72
                                #55

                                Habe für mich mal eine funktionierende Lösung in einem neuen Post aufgeschrieben:
                                https://forum.iobroker.net/topic/78632/info-auslagerung-von-scripte-aus-global-aufs-filesystem

                                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

                                804

                                Online

                                32.5k

                                Users

                                81.7k

                                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