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

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. (ERLEDIGT!) TypeScript, viele common/global Scripte --> CPU

NEWS

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

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

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

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
55 Beiträge 10 Kommentatoren 6.1k Aufrufe 7 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.
  • HomoranH Homoran

    @gombersiob sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

    Aber die Scripte machen doch in der Regel nichts beim Neustart

    doch! sie weden kompiliert

    ArmilarA Offline
    ArmilarA Offline
    Armilar
    Most Active Forum Testing
    schrieb am zuletzt editiert von
    #19

    @homoran sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

    Aber die Scripte machen doch in der Regel nichts beim Neustart

    doch! sie weden kompiliert

    Aber nur wenn es Änderungen gibt...

    609df1d8-c90a-48aa-812b-d20d8c289793-image.png

    Ansonsten wird die Version aus dem Cache genutzt.

    Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
    https://github.com/joBr99/nspanel-lovelace-ui/wiki

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

    paul53P 1 Antwort Letzte Antwort
    0
    • ArmilarA Armilar

      @homoran sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

      Aber die Scripte machen doch in der Regel nichts beim Neustart

      doch! sie weden kompiliert

      Aber nur wenn es Änderungen gibt...

      609df1d8-c90a-48aa-812b-d20d8c289793-image.png

      Ansonsten wird die Version aus dem Cache genutzt.

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #20

      @armilar sagte: Ansonsten wird die Version aus dem Cache genutzt.

      Das betrifft anscheinend den Precompiler TypeScript --> Javascript.
      Skripte werden bei jedem Neustart kompiliert, da beim Stoppen der RAM freigegeben wurde.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      U 1 Antwort Letzte Antwort
      1
      • paul53P paul53

        @armilar sagte: Ansonsten wird die Version aus dem Cache genutzt.

        Das betrifft anscheinend den Precompiler TypeScript --> Javascript.
        Skripte werden bei jedem Neustart kompiliert, da beim Stoppen der RAM freigegeben wurde.

        U Offline
        U Offline
        uwe72
        schrieb am zuletzt editiert von uwe72
        #21

        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.

        U 1 Antwort Letzte Antwort
        0
        • U uwe72

          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.

          U Offline
          U Offline
          uwe72
          schrieb am zuletzt editiert von uwe72
          #22

          Generell mache ich sehr viel mit Scripten und stoße aktuell an Grenzen mit den Rahmenbedingungen:

          • TypeScript
          • ca. 40 common-Scripte
          • ca. 5-8 global-Scripte (mit teilweise bis zu 3000 Zeilen Code)

          Ich spiele in einer anderen ioBroker-Umgebung mit dem Thema "messageTo" herum mit dem Ziel ganz auf global-Scripte verzichten zu können.

          Ist ein wenig ein konstruiertes Beispiel, aber ganze Klassen(-inhalte) bekommt man nicht verschickt, oder? Sondern vermutlich nur "primitive" Datentypen oder vermutlich json?

          export class TestPosition {
              private threeQuarter:   number;
              private half:         number;
              private oneQuarter:     number;
          
              constructor(threeQuarter: number, half: number, oneQuarter: number) {
                  this.threeQuarter = threeQuarter;
                  this.half = half;
                  this.oneQuarter = oneQuarter;
              }
          
              public getThreeQuarter() : number {
                  return this.threeQuarter;
              }
              public getHalf() : number {
                  return this.half;
              }
              public getOneQuarter() : number {
                  return this.oneQuarter;
              }
          }
          
          //var data = "uwe";
          var data = new TestPosition(10,20,30);
          
          messageTo({ instance: 'javascript.0', script: 'script.js.common.Test2', message: 'message1' }, data, {timeout: 1000}, result =>
              console.log(JSON.stringify(result)));
          
          //@ts-expect-error
          onMessage('message1', (data, callback) => {
              console.log(`UWE !!! Received data: ${data}`); callback({ result: Date.now() });
              var my = data.getThreeQuarter();
              log("YIPIEEEEEEEEEEEEEEEEEE: " + my);
          });
          
          Error in callback: TypeError: data.getThreeQuarter is not a function
          
          paul53P T 2 Antworten Letzte Antwort
          0
          • U uwe72

            Generell mache ich sehr viel mit Scripten und stoße aktuell an Grenzen mit den Rahmenbedingungen:

            • TypeScript
            • ca. 40 common-Scripte
            • ca. 5-8 global-Scripte (mit teilweise bis zu 3000 Zeilen Code)

            Ich spiele in einer anderen ioBroker-Umgebung mit dem Thema "messageTo" herum mit dem Ziel ganz auf global-Scripte verzichten zu können.

            Ist ein wenig ein konstruiertes Beispiel, aber ganze Klassen(-inhalte) bekommt man nicht verschickt, oder? Sondern vermutlich nur "primitive" Datentypen oder vermutlich json?

            export class TestPosition {
                private threeQuarter:   number;
                private half:         number;
                private oneQuarter:     number;
            
                constructor(threeQuarter: number, half: number, oneQuarter: number) {
                    this.threeQuarter = threeQuarter;
                    this.half = half;
                    this.oneQuarter = oneQuarter;
                }
            
                public getThreeQuarter() : number {
                    return this.threeQuarter;
                }
                public getHalf() : number {
                    return this.half;
                }
                public getOneQuarter() : number {
                    return this.oneQuarter;
                }
            }
            
            //var data = "uwe";
            var data = new TestPosition(10,20,30);
            
            messageTo({ instance: 'javascript.0', script: 'script.js.common.Test2', message: 'message1' }, data, {timeout: 1000}, result =>
                console.log(JSON.stringify(result)));
            
            //@ts-expect-error
            onMessage('message1', (data, callback) => {
                console.log(`UWE !!! Received data: ${data}`); callback({ result: Date.now() });
                var my = data.getThreeQuarter();
                log("YIPIEEEEEEEEEEEEEEEEEE: " + my);
            });
            
            Error in callback: TypeError: data.getThreeQuarter is not a function
            
            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #23

            @uwe72 sagte: ca. 5-8 global-Scripte (mit teilweise bis zu 3000 Zeilen Code)

            Das ist eindeutig viel zu viel. Dafür sind "globale" Skripte nicht vorgesehen.
            So viele häufig verwendete eigene Funktionen?

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            U 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @uwe72 sagte: ca. 5-8 global-Scripte (mit teilweise bis zu 3000 Zeilen Code)

              Das ist eindeutig viel zu viel. Dafür sind "globale" Skripte nicht vorgesehen.
              So viele häufig verwendete eigene Funktionen?

              U Offline
              U Offline
              uwe72
              schrieb am zuletzt editiert von uwe72
              #24

              Bitte löschen.

              paul53P 1 Antwort Letzte Antwort
              0
              • U uwe72

                Bitte löschen.

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #25

                @uwe72
                Ist die Struktur der ioBroker-Objekte inkl. Aufzählungen so schlecht, dass man eigene globale Datenstrukturen benötigt?

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                U 1 Antwort Letzte Antwort
                0
                • U uwe72

                  Generell mache ich sehr viel mit Scripten und stoße aktuell an Grenzen mit den Rahmenbedingungen:

                  • TypeScript
                  • ca. 40 common-Scripte
                  • ca. 5-8 global-Scripte (mit teilweise bis zu 3000 Zeilen Code)

                  Ich spiele in einer anderen ioBroker-Umgebung mit dem Thema "messageTo" herum mit dem Ziel ganz auf global-Scripte verzichten zu können.

                  Ist ein wenig ein konstruiertes Beispiel, aber ganze Klassen(-inhalte) bekommt man nicht verschickt, oder? Sondern vermutlich nur "primitive" Datentypen oder vermutlich json?

                  export class TestPosition {
                      private threeQuarter:   number;
                      private half:         number;
                      private oneQuarter:     number;
                  
                      constructor(threeQuarter: number, half: number, oneQuarter: number) {
                          this.threeQuarter = threeQuarter;
                          this.half = half;
                          this.oneQuarter = oneQuarter;
                      }
                  
                      public getThreeQuarter() : number {
                          return this.threeQuarter;
                      }
                      public getHalf() : number {
                          return this.half;
                      }
                      public getOneQuarter() : number {
                          return this.oneQuarter;
                      }
                  }
                  
                  //var data = "uwe";
                  var data = new TestPosition(10,20,30);
                  
                  messageTo({ instance: 'javascript.0', script: 'script.js.common.Test2', message: 'message1' }, data, {timeout: 1000}, result =>
                      console.log(JSON.stringify(result)));
                  
                  //@ts-expect-error
                  onMessage('message1', (data, callback) => {
                      console.log(`UWE !!! Received data: ${data}`); callback({ result: Date.now() });
                      var my = data.getThreeQuarter();
                      log("YIPIEEEEEEEEEEEEEEEEEE: " + my);
                  });
                  
                  Error in callback: TypeError: data.getThreeQuarter is not a function
                  
                  T Nicht stören
                  T Nicht stören
                  ticaki
                  schrieb am zuletzt editiert von
                  #26

                  @uwe72
                  Hab das da zwar noch nicht probiert, aber als ich das mit Funktionen ausprobiert habe, hat es nicht funktioniert. Dann wird es IMHO wohl auch nicht mit Klassen gehen.

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  1 Antwort Letzte Antwort
                  1
                  • paul53P paul53

                    @uwe72
                    Ist die Struktur der ioBroker-Objekte inkl. Aufzählungen so schlecht, dass man eigene globale Datenstrukturen benötigt?

                    U Offline
                    U Offline
                    uwe72
                    schrieb am zuletzt editiert von uwe72
                    #27

                    @paul53 Hab das Beispiel noch ausgetauscht. Es ist nicht nur Datenstruktur, sondern auch viel Logik für generische Anwendungszwecke. Z.B. generische Alexasteuerung über IOT-Adapter, d.h. man gibt nur Alexanamen an und alles andere funktioniert automatisch (Registrierung der Datenpunkte im iot-Adapter, Lampen ein/aus,...).

                    Kann dennoch drüber nachdenken wie ich es schaffe, das aus dem global-Bereich rauszubekommen, zumindest große Teile davon nach common zu verschieben.

                    Ob, man mein Beispiel nun gut oder schlecht findet, wollte ich nur darauf hinweisen, dass ich eben mit den Rahmenbedingungen an Grenzen stoße.

                    Vielleicht stoßen andere mit "sinnvollen" Anwendungszwecken eben auch mal an diese Grenzen.

                    HomoranH 1 Antwort Letzte Antwort
                    0
                    • U uwe72

                      @paul53 Hab das Beispiel noch ausgetauscht. Es ist nicht nur Datenstruktur, sondern auch viel Logik für generische Anwendungszwecke. Z.B. generische Alexasteuerung über IOT-Adapter, d.h. man gibt nur Alexanamen an und alles andere funktioniert automatisch (Registrierung der Datenpunkte im iot-Adapter, Lampen ein/aus,...).

                      Kann dennoch drüber nachdenken wie ich es schaffe, das aus dem global-Bereich rauszubekommen, zumindest große Teile davon nach common zu verschieben.

                      Ob, man mein Beispiel nun gut oder schlecht findet, wollte ich nur darauf hinweisen, dass ich eben mit den Rahmenbedingungen an Grenzen stoße.

                      Vielleicht stoßen andere mit "sinnvollen" Anwendungszwecken eben auch mal an diese Grenzen.

                      HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von
                      #28

                      @uwe72 sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

                      gut oder schlecht findet

                      ist jetzt nicht die Frage.

                      Aber im Prinzip scheinst du ganze Programmteile von ioBroker mit eigenen Funktionen überstülpen zu wollen.

                      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 -

                      U 1 Antwort Letzte Antwort
                      0
                      • HomoranH Homoran

                        @uwe72 sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

                        gut oder schlecht findet

                        ist jetzt nicht die Frage.

                        Aber im Prinzip scheinst du ganze Programmteile von ioBroker mit eigenen Funktionen überstülpen zu wollen.

                        U Offline
                        U Offline
                        uwe72
                        schrieb am zuletzt editiert von
                        #29

                        @homoran Alles gut ;-)

                        1 Antwort Letzte Antwort
                        0
                        • OliverIOO OliverIO

                          @uwe72
                          Das allerbeste wäre alles in ein lokales NPM Paket zu legen und das dann in die Konfiguration des Java Skript Adapters zu packen.
                          Allerdings weiß ich nicht, ob die Konfigurationsseite mit lokalen NPM Pfaden umgehen kann.
                          https://www.stefanjudis.com/today-i-learned/npm-install-supports-local-packages/

                          U Offline
                          U Offline
                          uwe72
                          schrieb am zuletzt editiert von uwe72
                          #30

                          @oliverio habe deinen Hinweis mal ein wenig verfolgt. Habe es prinzipiell auch hinbekommen ein eigenes Modul auf https://www.npmjs.com/ anzulegen. Dieses Modul habe ich dann in ioBroker der Instanz hinzugefügt und konnte auch auf die Inhalte des Moduls innerhalb der ioBroker Scripte zugreifen. War allerdings alles mit JavaScript.

                          Was ich gerade gar nicht hinkriege ist, das Ganze noch mit Typescript zu machen. Müsste dies grundsätzlich funktionieren?

                          1 Antwort Letzte Antwort
                          0
                          • OliverIOO Offline
                            OliverIOO Offline
                            OliverIO
                            schrieb am zuletzt editiert von
                            #31

                            @uwe72
                            Ah ok, sogar auf NPM publiziert

                            NPM hat auch die Möglichkeit, Pakete einfach auf der Festplatte über Dateipfad zu referenzieren. Das meinte ich eigentlich.

                            Klar geht das auch mit Typescript.
                            Aber du weißt, dass Typescript nativ nicht ausgeführt wird, sondern vorher erst nach Javascript transpiliert werden muss.
                            Dazu werden im Paket entsprechende Tools installiert, die das dann voll automatisch machen.

                            Es gibt ja einige Adapter, die in Typescript erstellt worden sind. Da kannst du mal schauen.

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

                            U 2 Antworten Letzte Antwort
                            1
                            • OliverIOO OliverIO

                              @uwe72
                              Ah ok, sogar auf NPM publiziert

                              NPM hat auch die Möglichkeit, Pakete einfach auf der Festplatte über Dateipfad zu referenzieren. Das meinte ich eigentlich.

                              Klar geht das auch mit Typescript.
                              Aber du weißt, dass Typescript nativ nicht ausgeführt wird, sondern vorher erst nach Javascript transpiliert werden muss.
                              Dazu werden im Paket entsprechende Tools installiert, die das dann voll automatisch machen.

                              Es gibt ja einige Adapter, die in Typescript erstellt worden sind. Da kannst du mal schauen.

                              U Offline
                              U Offline
                              uwe72
                              schrieb am zuletzt editiert von uwe72
                              #32

                              @oliverio Über NPM Publizierung und per JS habe ich es mal hinbekommen:
                              https://forum.iobroker.net/topic/70069/einfügen-von-js-klassen-aus-eigenem-npm-modul/13

                              Werde es aber noch versuchen ohne Publizierung und mit TS. Ja ich weiß, dass zur Laufzeit nur JS verwendet wird. Ich weiß auch, dass Du es so meintest, dass man die Module lokal ablegt, ohne Publizierung.

                              1 Antwort Letzte Antwort
                              0
                              • OliverIOO OliverIO

                                @uwe72
                                Ah ok, sogar auf NPM publiziert

                                NPM hat auch die Möglichkeit, Pakete einfach auf der Festplatte über Dateipfad zu referenzieren. Das meinte ich eigentlich.

                                Klar geht das auch mit Typescript.
                                Aber du weißt, dass Typescript nativ nicht ausgeführt wird, sondern vorher erst nach Javascript transpiliert werden muss.
                                Dazu werden im Paket entsprechende Tools installiert, die das dann voll automatisch machen.

                                Es gibt ja einige Adapter, die in Typescript erstellt worden sind. Da kannst du mal schauen.

                                U Offline
                                U Offline
                                uwe72
                                schrieb am zuletzt editiert von
                                #33

                                @oliverio Mittlerweile funktioniert es ohne über NPM zu publizieren und auch mit TypeScript.

                                Ein externes .ts (liegt in einem Verzeichnis innerhalb iobroker) wird zu .js "kompiliert" (fehlt gerade der Fachbegriff) und im iobroker-TS-Script über require eingebunden.

                                Was noch nicht funktioniert ist, wenn im externen Script "Dinge" wir sendTo() verwendet werden. Dieses wird dann in iobroker angemeckert, da unbekannt.

                                Hast Du dazu noch eine Idee?

                                Gerne im Thread, ganz unten:
                                https://forum.iobroker.net/topic/70069/einfügen-von-js-klassen-aus-eigenem-npm-modul/47

                                1 Antwort Letzte Antwort
                                0
                                • OliverIOO Offline
                                  OliverIOO Offline
                                  OliverIO
                                  schrieb am zuletzt editiert von OliverIO
                                  #34

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

                                  sendTo

                                  ja das externe script hat ersteinmal keinen bezug zum aktuellen context in dem die funktionen verfügbar sind.

                                  wenn du testweise in einem separaten script von iobroker das folgende ausführst,
                                  dann siehst du alles was im script context verfügbar ist.
                                  wenn du an dein externes script this mit übergibst, dann kannst du dann unter der empfangenden variable dort, alle befehle erreichen.

                                  console.log(Object.keys(this).join(",\n"));
                                  

                                  Beipsiel

                                  iobroker script

                                  const xx=require("externesSkript");
                                  xx.externeFunktion(this)
                                  

                                  externes Skript

                                  export Function externeFunktion(iob) {
                                    iob.log("Logausgabe im iobroker log");
                                  }
                                  

                                  Hab das jetzt nicht direkt getestet, aber so müsste es grob laufen.

                                  Wenn du im externen script mit vscode arbeitest, dann erwarte da ersteinmal keine syntax überprüfung, da müsste man sciherlich noch eine type definition hinzufügen. aber da weiß ich auch nix

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

                                  U T 2 Antworten Letzte Antwort
                                  2
                                  • OliverIOO OliverIO

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

                                    sendTo

                                    ja das externe script hat ersteinmal keinen bezug zum aktuellen context in dem die funktionen verfügbar sind.

                                    wenn du testweise in einem separaten script von iobroker das folgende ausführst,
                                    dann siehst du alles was im script context verfügbar ist.
                                    wenn du an dein externes script this mit übergibst, dann kannst du dann unter der empfangenden variable dort, alle befehle erreichen.

                                    console.log(Object.keys(this).join(",\n"));
                                    

                                    Beipsiel

                                    iobroker script

                                    const xx=require("externesSkript");
                                    xx.externeFunktion(this)
                                    

                                    externes Skript

                                    export Function externeFunktion(iob) {
                                      iob.log("Logausgabe im iobroker log");
                                    }
                                    

                                    Hab das jetzt nicht direkt getestet, aber so müsste es grob laufen.

                                    Wenn du im externen script mit vscode arbeitest, dann erwarte da ersteinmal keine syntax überprüfung, da müsste man sciherlich noch eine type definition hinzufügen. aber da weiß ich auch nix

                                    U Offline
                                    U Offline
                                    uwe72
                                    schrieb am zuletzt editiert von
                                    #35

                                    @oliverio Danke dir! Werde ich mir anschauen. VG

                                    1 Antwort Letzte Antwort
                                    0
                                    • OliverIOO OliverIO

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

                                      sendTo

                                      ja das externe script hat ersteinmal keinen bezug zum aktuellen context in dem die funktionen verfügbar sind.

                                      wenn du testweise in einem separaten script von iobroker das folgende ausführst,
                                      dann siehst du alles was im script context verfügbar ist.
                                      wenn du an dein externes script this mit übergibst, dann kannst du dann unter der empfangenden variable dort, alle befehle erreichen.

                                      console.log(Object.keys(this).join(",\n"));
                                      

                                      Beipsiel

                                      iobroker script

                                      const xx=require("externesSkript");
                                      xx.externeFunktion(this)
                                      

                                      externes Skript

                                      export Function externeFunktion(iob) {
                                        iob.log("Logausgabe im iobroker log");
                                      }
                                      

                                      Hab das jetzt nicht direkt getestet, aber so müsste es grob laufen.

                                      Wenn du im externen script mit vscode arbeitest, dann erwarte da ersteinmal keine syntax überprüfung, da müsste man sciherlich noch eine type definition hinzufügen. aber da weiß ich auch nix

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

                                      @oliverio
                                      Danke geht:

                                      const { Person } = require('/home/iobroker/library/lib.js');
                                      const joe = new Person("Joe", "Müller", 31, this);
                                      log(joe.information());
                                      joe.log();
                                      

                                      lib.ts

                                      class Person {
                                          private nachname: string;
                                          private vorname: string;
                                          private alter: string;
                                          private adapter: any;
                                          constructor(vorname, nachname, alter, adapter) {
                                            this.vorname = vorname;
                                            this.nachname = nachname;
                                            this.alter = alter;
                                            this.adapter = adapter;
                                          }
                                        
                                          information(): string {
                                            return (`Mein Name ist ${this.vorname} ${this.nachname} und ich bin ${this.alter} Jahre alt!!!!1`);
                                          }
                                          log(): void {
                                              this.adapter.log(this.information());
                                          }
                                        }
                                       
                                      module.exports = { Person};
                                      

                                      muss nur noch raus bekommen welchen Type adapter haben sollte.

                                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                      Spenden

                                      OliverIOO 1 Antwort Letzte Antwort
                                      0
                                      • T ticaki

                                        @oliverio
                                        Danke geht:

                                        const { Person } = require('/home/iobroker/library/lib.js');
                                        const joe = new Person("Joe", "Müller", 31, this);
                                        log(joe.information());
                                        joe.log();
                                        

                                        lib.ts

                                        class Person {
                                            private nachname: string;
                                            private vorname: string;
                                            private alter: string;
                                            private adapter: any;
                                            constructor(vorname, nachname, alter, adapter) {
                                              this.vorname = vorname;
                                              this.nachname = nachname;
                                              this.alter = alter;
                                              this.adapter = adapter;
                                            }
                                          
                                            information(): string {
                                              return (`Mein Name ist ${this.vorname} ${this.nachname} und ich bin ${this.alter} Jahre alt!!!!1`);
                                            }
                                            log(): void {
                                                this.adapter.log(this.information());
                                            }
                                          }
                                         
                                        module.exports = { Person};
                                        

                                        muss nur noch raus bekommen welchen Type adapter haben sollte.

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

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

                                        this.adapter.log(this.information());

                                        hm, geht wahrscheinlich nix kauptt, aber ich würde dann lieber this.log nehmen.
                                        this.adapter.log ist die funktion des javascript adapters.
                                        damit umgehst du wahrscheinlich eigene log verarbeitung des javascript-adapters.
                                        ich würde alles was bei this.adapter verfügbar ist in ruhe lassen und nicht verwenden.

                                        wäre glaube ich ein hinsweis darauf, das die sandbox des javascript-adapters ein loch hat

                                        lustig ist das adapter in der auflistung, des kleinen testscripts nicht mit aufgeführt wird

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

                                        T 1 Antwort Letzte Antwort
                                        0
                                        • OliverIOO OliverIO

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

                                          this.adapter.log(this.information());

                                          hm, geht wahrscheinlich nix kauptt, aber ich würde dann lieber this.log nehmen.
                                          this.adapter.log ist die funktion des javascript adapters.
                                          damit umgehst du wahrscheinlich eigene log verarbeitung des javascript-adapters.
                                          ich würde alles was bei this.adapter verfügbar ist in ruhe lassen und nicht verwenden.

                                          wäre glaube ich ein hinsweis darauf, das die sandbox des javascript-adapters ein loch hat

                                          lustig ist das adapter in der auflistung, des kleinen testscripts nicht mit aufgeführt wird

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

                                          @oliverio
                                          Lese den Code nochmal this ist Person this.adapter ist this im javascript adapter :)

                                          Heißt

                                          ---lib ------------------ Javascript Adapter
                                          this.adapter.log('bla') == this.log('bla')
                                          

                                          Hab das extra in adapter umbenannt, weils auch so im adapter gemacht wird (zumindest von mir)

                                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                          Spenden

                                          OliverIOO 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

                                          798

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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