Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Verwendung des externen JS-Modules three.js

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    895

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Verwendung des externen JS-Modules three.js

Scheduled Pinned Locked Moved JavaScript
6 Posts 2 Posters 520 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    ExMatador
    wrote on last edited by
    #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 Reply Last reply
    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
      wrote on last edited by
      #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 Reply Last reply
      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
        wrote on last edited by
        #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 Reply Last reply
        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
          wrote on last edited by
          #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 Reply Last reply
          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
            wrote on last edited by 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 Reply Last reply
            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
              wrote on last edited by
              #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 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              636

              Online

              32.6k

              Users

              82.1k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Home
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe