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.8k

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

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

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
55 Beiträge 10 Kommentatoren 6.2k 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.
  • 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 Offline
    HomoranH Offline
    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
                        • T ticaki

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

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

                          @ticaki

                          ah jetzt, hab nicht in den constructor geschaut.
                          so sieht es auch aus wenn du einen adapter entwickelst.
                          da bekommst du über das adapter attribut auch zugriff
                          aber ist nicht das selbe wie im adapter

                          hier ist übrigens die typeinformation für die befehle im javascript adapter.
                          https://github.com/ioBroker/ioBroker.javascript/blob/939b0b0a70dd857684afc10be6732467fb3a5208/lib/javascript.d.ts

                          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

                            ah jetzt, hab nicht in den constructor geschaut.
                            so sieht es auch aus wenn du einen adapter entwickelst.
                            da bekommst du über das adapter attribut auch zugriff
                            aber ist nicht das selbe wie im adapter

                            hier ist übrigens die typeinformation für die befehle im javascript adapter.
                            https://github.com/ioBroker/ioBroker.javascript/blob/939b0b0a70dd857684afc10be6732467fb3a5208/lib/javascript.d.ts

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

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

                            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                            Spenden

                            U 1 Antwort Letzte Antwort
                            1
                            • 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
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              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 Nicht stören
                                T Nicht stören
                                ticaki
                                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                                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
                                  schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                                  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 Nicht stören
                                    T Nicht stören
                                    ticaki
                                    schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
                                    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
                                      schrieb am zuletzt editiert von
                                      #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 Antwort Letzte Antwort
                                      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
                                        schrieb am zuletzt editiert von uwe72
                                        #46

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

                                        U 1 Antwort Letzte Antwort
                                        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
                                          schrieb am zuletzt editiert von
                                          #47

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

                                          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

                                          393

                                          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