Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Klassen Import mit jQuery möglich?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Klassen Import mit jQuery möglich?

    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      WolfgangFB last edited by

      Ich möchte eine Klasse per requite importierern. Prinzpiell geht das, Beispiel:

      class MyClass{
        constructor(){this.Hallo = "Hallo"}
      }
      
      const MyClass = require('./MyClass.js');
      const MyInstance = new MyClass();
      log(MyInstance.Hallo); => "Hallo"
      

      Wenn aber in der Klasse ein jquery Operator verwendet wir,

      this.LichtDP = $('alias.0.Licht.*Zustand');
      

      Dann klappt das nicht mehr, Fehlermeldung:

      ReferenceError: $ is not defined
      

      Frage: Kann man Klassen die jquery verwenden exportieren und importieren?

      OliverIO haus-automatisierung 2 Replies Last reply Reply Quote 0
      • OliverIO
        OliverIO @WolfgangFB last edited by OliverIO

        @wolfgangfb

        im Java Skript Adapter funktioniert jquery nicht.
        Jquery funktioniert nur in einem Browser
        im Java Skript Adapter arbeitest du aber mit Node in einer reinen Server Umgebung .
        Wenn du mit jquery ähnlichem Syntax in node arbeiten möchtest, musst du Cheerio laden
        https://www.npmjs.com/package/cheerio
        Bitte vorher immer checken, ob das von dir gewünschte auch unterstützt wird.
        Wie gesagt, alle direkten browserbezogenen Befehle stehen nicht zur Verfügung, da diese Objekte unter Node nicht zur Verfügung stehen

        Was deine Verwendung von jquery allerdings nun mit require und Klasse zu tun hat, hab ich noch nicht verstanden

        W 1 Reply Last reply Reply Quote 0
        • W
          WolfgangFB @OliverIO last edited by

          @oliverio sagte in Klassen Import mit jQuery möglich?:

          @wolfgangfb

          Was deine Verwendung von jquery allerdings nun mit require und Klasse zu tun hat, hab ich noch nicht verstanden

          Ich möchte Klassen in unterschiedliche Dateien auslagern (um die Übersichtlichkeit zu erhöhen).
          Ich habe bisher keine andere Möglichkeit als "require" gefunden um Klassen aus unterschiedlichen Dateien in ein JS Skript einzubinden (ich nehme gerne bessere Ideen an). Dabei ist mir eben aufgefallen, dass das nur so lange gut geht wie die ausgelagerte Klasse keine jquery Methode verwendet.
          Oder anderst ausgedrückt: Wie kann man eine Klasse die über jqeury einen Satz an Datenpunkten ermittelt in ein JS Skript einbinden, das sich in einer anderen Datei befindet?

          OliverIO 1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO @WolfgangFB last edited by OliverIO

            @wolfgangfb

            Wenn du etwas komplexeres programmieren möchtest, würde ich dir raten, deine Funktionalitäten in einen eigenständigen Adapter auszulagern.
            Eine Kommunikation zwischen einem Skript und einem Adapter kann dann entweder über datenpunkte oder über den sendto Befehl erfolgen.

            Wenn du dennoch diesen Weg weiter verfolgen willst, dann schaue dir den require Befehl an
            https://nodejs.org/docs/latest/api/modules.html#requireid
            Dort kann man Dateien entsprechend per Pfad oder Modul id laden

            Der Pfad aus der die Datei geladen wird, muss allerdings innerhalb der node hierarchie liegen.
            Da wir hier allerdings 2 Hierarchien untereinander haben (ioBroker und JavaScript Adapter) musst du ausprobieren, wo du den Pfad platzieren kannst. (Start einer Hierarchie ist immer der Ort wo die Datei package.json liegt und als eigenständiger Prozess gestartet wird.
            Also ganz sicher irgendwo unterhalb des Java Skript Adapters
            Idealerweise geht auch /opt/Iobroker/files
            Innerhalb des Java Skript Adapters ist halt unschön, da bei Aktualisierung diese Daten gelöscht werden.
            Leider hat node auch Probleme mit Dateisystem links.

            Die Möglichkeiten mit npm aus einem lokalen repository zu installieren lasse ich mal aus, da auch das bei einer Aktualisierung wieder weg wäre. In der Konfiguration des JavaScript einen lokalen Pfad einzutragen zu einem lokalen repo geht glaube ich nicht.

            Ich hoffe, dass ich dich mit diesen ganzen node details nicht verwirre.

            haus-automatisierung 1 Reply Last reply Reply Quote 0
            • haus-automatisierung
              haus-automatisierung Developer Most Active @WolfgangFB last edited by

              @wolfgangfb sagte in Klassen Import mit jQuery möglich?:

              Wenn aber in der Klasse ein jquery Operator verwendet wir,

              1. Das ist in der JavaScript-Sandbox kein jQuery, sondern ein $-Selektor. Siehe https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#---selector
              2. Der Code ist also durchaus gültig, hat nur halt nichts mit jQuery zu tun
              3. Die Funktion mit dem Namen $ ist in der sandbox vom JavaScript-Adapter definiert. Möchtest Du diese in der Klasse verwenden, ist es wahrscheinlich am einfachsten diese per this im Constructor mitzunehmen.
              class MyClass{
                constructor(sandbox){
                  this.sb = sandbox;
                }
              }
              
              const MyInstance = new MyClass(this);
              
              this.LichtDP = this.sb.$('alias.0.Licht.*Zustand');
              
              W 1 Reply Last reply Reply Quote 0
              • haus-automatisierung
                haus-automatisierung Developer Most Active @OliverIO last edited by

                @oliverio sagte in Klassen Import mit jQuery möglich?:

                Idealerweise geht auch /opt/Iobroker/files

                Das ginge, aber dort bitte nicht per Dateisystem irgendwelche Daten hinkopieren, sondern nur mit den ioBroker-Funktionen. Also entweder über das Dateien-Tab im Admin oder über die CLI-Funktionen. Sonst fehlen dem ioBroker die Meta-Daten.

                OliverIO 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @haus-automatisierung last edited by

                  @haus-automatisierung sagte in Klassen Import mit jQuery möglich?:

                  Sonst fehlen dem ioBroker die Meta-Daten

                  braucht man die nicht nur, wenn die datei über webserver abgerufen werden soll? node greift ja direkt über dateisystem zu.
                  allerdings sollten die dateien für den user iobroker lesbar sein

                  1 Reply Last reply Reply Quote 0
                  • W
                    WolfgangFB @haus-automatisierung last edited by

                    @haus-automatisierung

                    Super, vielen Dank, das mit der Sandbox funktioniert. Was noch nicht funktioniert ist der Zugrif auf die im JS Adapter gespiegelten Dateien, da bekomme ich immer die Meldung "nicht gefunden". Relative Pfaddangaben bekomme ich auch nich hin. Besonders nervend ist, dass bei jeder Änderung einer zu importierenden Datei der JS Adapter neu gestartet werden muss weil sonst die Änderungen nicht übernommen werde, gibt es da eine Abhilfe?

                    haus-automatisierung 1 Reply Last reply Reply Quote 0
                    • haus-automatisierung
                      haus-automatisierung Developer Most Active @WolfgangFB last edited by haus-automatisierung

                      @wolfgangfb sagte in Klassen Import mit jQuery möglich?:

                      Besonders nervend ist, dass bei jeder Änderung einer zu importierenden Datei der JS Adapter neu gestartet werden muss weil sonst die Änderungen nicht übernommen werde, gibt es da eine Abhilfe?

                      Naja - das Vorgehen ist ja so auch irgendwo dokumentiert oder empfohlen. Eigentlich müsste es aber reichen, das entsprechende Script neuzustarten (dann wird ja das require() erneut ausgeführt).

                      Seit Version v7.11.1 gibt es defaultDataDir in der Sandbox. Das zeigt auf /opt/iobroker/iobroker-data/ (oder wo auch immer der ioBroker läuft). Damit könnte man den Pfad leichter zusammenbauen.

                      Aber wie gesagt: Alles, was Du da versuchst, ist nicht empfohlen oder offiziell unterstützt. Warum die Klassen nicht als eigenes Script in global ablegen und dann verwenden?

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      682
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      294
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo