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. JavaScript
  5. Verwendung des externen JS-Modules three.js

NEWS

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

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

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

Verwendung des externen JS-Modules three.js

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 2 Kommentatoren 466 Aufrufe 2 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.
  • E Offline
    E Offline
    ExMatador
    schrieb am zuletzt editiert von
    #1

    Hallo,
    ich verwende des öfteren ein basic-HTML-Widget mit genau einem DP, in dem im Grunde ein html-Dokument als Sourcecode inkl. Javascript-Teile abgelegt ist (Client-seitige Verarbeitung).
    Funktioniert auch ziemlich gut.
    Jetzt möchte ich die 3D Bibliothek three.js verwenden. Bei dieser gibt es jedoch immer den Fehler

    ReferenceError: THREE is not defined
    

    Eingebunden im Head

    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r73/three.min.js" ></script>
    <script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/175711/OrbitControls-2.js" ></script>
    

    Mache ich das in einem separaten html-Dokument, klappt alles - im ioBroker nicht.
    Was mache ich hier falsch? Jemand eine Idee?

    Vielen Dank
    Gruß ExMatador

    Intel(R) Core(TM) i7 | 32GB | 1TB SSD
    Virtualization: wsl2 | Ubuntu 22.04 | Docker
    ESPeasy | ESP8266 | ESP32 | ESP32CAM
    Zigbee | Coral | Lupus XT2 | Ender 3 S1 Pro
    Frigate | Influx | Grafana | GPX-Tracking | usw.

    E 1 Antwort Letzte Antwort
    0
    • E ExMatador

      Hallo,
      ich verwende des öfteren ein basic-HTML-Widget mit genau einem DP, in dem im Grunde ein html-Dokument als Sourcecode inkl. Javascript-Teile abgelegt ist (Client-seitige Verarbeitung).
      Funktioniert auch ziemlich gut.
      Jetzt möchte ich die 3D Bibliothek three.js verwenden. Bei dieser gibt es jedoch immer den Fehler

      ReferenceError: THREE is not defined
      

      Eingebunden im Head

      <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r73/three.min.js" ></script>
      <script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/175711/OrbitControls-2.js" ></script>
      

      Mache ich das in einem separaten html-Dokument, klappt alles - im ioBroker nicht.
      Was mache ich hier falsch? Jemand eine Idee?

      Vielen Dank
      Gruß ExMatador

      E Offline
      E Offline
      ExMatador
      schrieb am zuletzt editiert von
      #2

      @OliverIO
      Hallo, ich wende mich mal direkt an Dich.
      Ich habe diesen Sourcecode-Ausschnitt jetzt im body eingebunden

      <body>
          <audio id="song" src="" style="display:none;"></audio>
          <div class="container">
              <div class="play-btn">PLAY</div>
          </div>
          <div id="three-container"></div>
      
          <script type="module">
           
          import * as THREE from "https://cdnjs.cloudflare.com/ajax/libs/three.js/r73/three.min.js";
          import { OrbitControls } from "https://s3-us-west-2.amazonaws.com/s.cdpn.io/175711/OrbitControls-2.js";
      
      

      Kommt natürlich noch viel mehr.
      Ist das so in Ordnung?
      Vermutlich nicht, denn es kommen merkwürdige vis-Fehler.
      Als HTML-Dokument im Browser läuft es aber.

      Ich habe das Thema "module" eher noch nicht richtig verstanden, sorry.
      Danke
      Gruß ExMatador

      Intel(R) Core(TM) i7 | 32GB | 1TB SSD
      Virtualization: wsl2 | Ubuntu 22.04 | Docker
      ESPeasy | ESP8266 | ESP32 | ESP32CAM
      Zigbee | Coral | Lupus XT2 | Ender 3 S1 Pro
      Frigate | Influx | Grafana | GPX-Tracking | usw.

      OliverIOO 1 Antwort Letzte Antwort
      0
      • E ExMatador

        @OliverIO
        Hallo, ich wende mich mal direkt an Dich.
        Ich habe diesen Sourcecode-Ausschnitt jetzt im body eingebunden

        <body>
            <audio id="song" src="" style="display:none;"></audio>
            <div class="container">
                <div class="play-btn">PLAY</div>
            </div>
            <div id="three-container"></div>
        
            <script type="module">
             
            import * as THREE from "https://cdnjs.cloudflare.com/ajax/libs/three.js/r73/three.min.js";
            import { OrbitControls } from "https://s3-us-west-2.amazonaws.com/s.cdpn.io/175711/OrbitControls-2.js";
        
        

        Kommt natürlich noch viel mehr.
        Ist das so in Ordnung?
        Vermutlich nicht, denn es kommen merkwürdige vis-Fehler.
        Als HTML-Dokument im Browser läuft es aber.

        Ich habe das Thema "module" eher noch nicht richtig verstanden, sorry.
        Danke
        Gruß ExMatador

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

        @exmatador

        das problem bei vis ist, das die html oberfläche von vis mit seinen widgets dynamisch erstellt wird.
        wenn du in einem vis html widget ein script tag einfügst, dann wird dies erst der dom (document object model) hinzugefügt, wenn das eigentliche rahmen html schon geladen ist. leider haben wir keine möglichkeit dem vis solche bibliotheken schon so mitzugeben, das sie, wenn alles fertig geladen ist schon verfügbar sind.

        wenn du nun in einem vis widget so eine bibliohtek ladest, da ist sie nach einer gewissen Zeit (das kann von millisekunden bis zu sekunden dauern) verfügbar. wenn du aber schon vor abschluss des ladevorgangs auf die variablen bspw THREE oder OrbitControls zugreifen willst, dann kommen fehler. das musst du code technisch abfangen und solange mit deinem code warten bist das abgeschlossen.

        also so ungefähr so wie das folgende. ich schreib das nur mal so grob zusammen, ohne das es getestet ist, aber die idee sollte rüberkommen.

        // Funktion, um zu überprüfen, ob THREE und OrbitControls geladen sind
        function checkDependencies() {
            if (window.THREE && window.THREE.OrbitControls) {
                clearInterval(dependencyCheckInterval);  // Stoppt das Intervall, wenn die Abhängigkeiten geladen sind
                initializeScene();  // Hier rufst du deine Funktion auf, die die Szene initialisiert
            }
        }
        
        // Funktion, die die Szene initialisiert
        function initializeScene() {
            // Dein nachfolgender Code, der auf THREE und OrbitControls angewiesen ist
            const scene = new THREE.Scene();
            const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
            const renderer = new THREE.WebGLRenderer();
            document.body.appendChild(renderer.domElement);
        
            const controls = new THREE.OrbitControls(camera, renderer.domElement);
            
            // Weitere Logik...
        }
        
        // Intervall starten, um nach den Abhängigkeiten zu suchen
        const dependencyCheckInterval = setInterval(checkDependencies, 100);  // Alle 100ms prüfen
        

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

        E 1 Antwort Letzte Antwort
        1
        • OliverIOO OliverIO

          @exmatador

          das problem bei vis ist, das die html oberfläche von vis mit seinen widgets dynamisch erstellt wird.
          wenn du in einem vis html widget ein script tag einfügst, dann wird dies erst der dom (document object model) hinzugefügt, wenn das eigentliche rahmen html schon geladen ist. leider haben wir keine möglichkeit dem vis solche bibliotheken schon so mitzugeben, das sie, wenn alles fertig geladen ist schon verfügbar sind.

          wenn du nun in einem vis widget so eine bibliohtek ladest, da ist sie nach einer gewissen Zeit (das kann von millisekunden bis zu sekunden dauern) verfügbar. wenn du aber schon vor abschluss des ladevorgangs auf die variablen bspw THREE oder OrbitControls zugreifen willst, dann kommen fehler. das musst du code technisch abfangen und solange mit deinem code warten bist das abgeschlossen.

          also so ungefähr so wie das folgende. ich schreib das nur mal so grob zusammen, ohne das es getestet ist, aber die idee sollte rüberkommen.

          // Funktion, um zu überprüfen, ob THREE und OrbitControls geladen sind
          function checkDependencies() {
              if (window.THREE && window.THREE.OrbitControls) {
                  clearInterval(dependencyCheckInterval);  // Stoppt das Intervall, wenn die Abhängigkeiten geladen sind
                  initializeScene();  // Hier rufst du deine Funktion auf, die die Szene initialisiert
              }
          }
          
          // Funktion, die die Szene initialisiert
          function initializeScene() {
              // Dein nachfolgender Code, der auf THREE und OrbitControls angewiesen ist
              const scene = new THREE.Scene();
              const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
              const renderer = new THREE.WebGLRenderer();
              document.body.appendChild(renderer.domElement);
          
              const controls = new THREE.OrbitControls(camera, renderer.domElement);
              
              // Weitere Logik...
          }
          
          // Intervall starten, um nach den Abhängigkeiten zu suchen
          const dependencyCheckInterval = setInterval(checkDependencies, 100);  // Alle 100ms prüfen
          
          E Offline
          E Offline
          ExMatador
          schrieb am zuletzt editiert von
          #4

          @oliverio
          Hi,
          vielen Dank für deine Unterstützung, hab’s so eingebaut - was soll ich sagen: die Ladefehler sind weg 🙏
          Jetzt hab ich vermutlich noch ein weiteres zeitliches Problem, denn manchmal kommt die Animation, aber häufig auch nicht.
          Das liegt irgendwie am Audio-Element, das ja über createMediaStreamSource(stream) gebunden wird.
          Ich ändere das Audio-Objekt an anderer Stelle, damit gibts noch Probleme.

          Aber dank deiner Hilfe bin ich ein großes Stück weitergekommen.
          VG
          ExMatador

          Intel(R) Core(TM) i7 | 32GB | 1TB SSD
          Virtualization: wsl2 | Ubuntu 22.04 | Docker
          ESPeasy | ESP8266 | ESP32 | ESP32CAM
          Zigbee | Coral | Lupus XT2 | Ender 3 S1 Pro
          Frigate | Influx | Grafana | GPX-Tracking | usw.

          E 1 Antwort Letzte Antwort
          0
          • E ExMatador

            @oliverio
            Hi,
            vielen Dank für deine Unterstützung, hab’s so eingebaut - was soll ich sagen: die Ladefehler sind weg 🙏
            Jetzt hab ich vermutlich noch ein weiteres zeitliches Problem, denn manchmal kommt die Animation, aber häufig auch nicht.
            Das liegt irgendwie am Audio-Element, das ja über createMediaStreamSource(stream) gebunden wird.
            Ich ändere das Audio-Objekt an anderer Stelle, damit gibts noch Probleme.

            Aber dank deiner Hilfe bin ich ein großes Stück weitergekommen.
            VG
            ExMatador

            E Offline
            E Offline
            ExMatador
            schrieb am zuletzt editiert von ExMatador
            #5

            @OliverIO

            Hi,
            So sieht jetzt das Ergebnis des THREE.js visualizer aus, der einen mp3-Radio-Stream verarbeitet.
            War echt mühevoll, die 3D Engine im iobroker anzusprechen, kleinere Fehler sind beim Wechsel von Vis-Views immer noch vorhanden..
            Danke dir für die Unterstützung.

            Gruß ExMatador
            Screen_Recording_20250429_195500_Chrome_001_001~2.mp4

            Copyright (c) 2025 by Szenia Zadvornykh (https://codepen.io/zadvorsky/pen/vNVNYr)

            Intel(R) Core(TM) i7 | 32GB | 1TB SSD
            Virtualization: wsl2 | Ubuntu 22.04 | Docker
            ESPeasy | ESP8266 | ESP32 | ESP32CAM
            Zigbee | Coral | Lupus XT2 | Ender 3 S1 Pro
            Frigate | Influx | Grafana | GPX-Tracking | usw.

            OliverIOO 1 Antwort Letzte Antwort
            0
            • E ExMatador

              @OliverIO

              Hi,
              So sieht jetzt das Ergebnis des THREE.js visualizer aus, der einen mp3-Radio-Stream verarbeitet.
              War echt mühevoll, die 3D Engine im iobroker anzusprechen, kleinere Fehler sind beim Wechsel von Vis-Views immer noch vorhanden..
              Danke dir für die Unterstützung.

              Gruß ExMatador
              Screen_Recording_20250429_195500_Chrome_001_001~2.mp4

              Copyright (c) 2025 by Szenia Zadvornykh (https://codepen.io/zadvorsky/pen/vNVNYr)

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

              @exmatador

              Sieht gut aus.
              Fehler beim View Wechsel entstehen wahrscheinlich dadurch, das das javascript weiterläuft, aber die html Elemente wo reingemalt wird, dann nicht mehr ansprechbar sind (weil hidden).
              Man müsste das pausieren und bei Reaktivierung der View dann wieder einschalten.
              Hängt aber auch von der genauen Fehlermeldung ab.

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

              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

              520

              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