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. Überführung funktionierendes node.js Script

NEWS

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

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

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

Überführung funktionierendes node.js Script

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
12 Beiträge 3 Kommentatoren 706 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.
  • U uwe72

    Ich habe ein Script, welches ich erfolgreich auch der Konsole ausführen kann:
    ab4479c0-71e5-4da8-8324-ede7c581d2a1-image.png

    Erfolgreiche Auführung:
    dc2a8aca-6c85-4885-9f03-890608ac55ea-image.png

    Mache ich das gleiche in ioBroker:
    f504c373-7a6a-43c7-936a-d80a28c28b98-image.png

    Bekomme ich eine Fehlermeldung:
    7d451bea-54c8-42e9-a431-9f748a860c83-image.png

    Kann mir hier jemand weiterhelfen. Das wäre super klasse!

    AlCalzoneA Offline
    AlCalzoneA Offline
    AlCalzone
    Developer
    schrieb am zuletzt editiert von AlCalzone
    #2

    @uwe72 Zwei unterschiedliche Node-Versionen installiert?
    fs.promises gibt es seit Node 10

    @Thomas-Braun kann sicher helfen

    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

    1 Antwort Letzte Antwort
    0
    • U uwe72

      Ich habe ein Script, welches ich erfolgreich auch der Konsole ausführen kann:
      ab4479c0-71e5-4da8-8324-ede7c581d2a1-image.png

      Erfolgreiche Auführung:
      dc2a8aca-6c85-4885-9f03-890608ac55ea-image.png

      Mache ich das gleiche in ioBroker:
      f504c373-7a6a-43c7-936a-d80a28c28b98-image.png

      Bekomme ich eine Fehlermeldung:
      7d451bea-54c8-42e9-a431-9f748a860c83-image.png

      Kann mir hier jemand weiterhelfen. Das wäre super klasse!

      Thomas BraunT Online
      Thomas BraunT Online
      Thomas Braun
      Most Active
      schrieb am zuletzt editiert von Thomas Braun
      #3

      @uwe72
      Bitte KonsolenTEXT in CodeTags posten.

      Die Ausgabe von

      which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
      

      schaut wie aus?
      Und als root hampelt man auch nicht herum.

      Linux-Werkzeugkasten:
      https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
      NodeJS Fixer Skript:
      https://forum.iobroker.net/topic/68035/iob-node-fix-skript
      iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

      U 1 Antwort Letzte Antwort
      0
      • Thomas BraunT Thomas Braun

        @uwe72
        Bitte KonsolenTEXT in CodeTags posten.

        Die Ausgabe von

        which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
        

        schaut wie aus?
        Und als root hampelt man auch nicht herum.

        U Online
        U Online
        uwe72
        schrieb am zuletzt editiert von uwe72
        #4

        @thomas-braun

        Auf der Konsole ausgeführt:

        /usr/bin/nodejs
        v10.19.0
        /usr/bin/node
        v10.19.0
        /usr/bin/npm
        6.14.4
        nodejs:
          Installed: 10.19.0~dfsg-3ubuntu1
          Candidate: 10.19.0~dfsg-3ubuntu1
          Version table:
         *** 10.19.0~dfsg-3ubuntu1 500
                500 http://de.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
                100 /var/lib/dpkg/status
        
        
        Thomas BraunT 1 Antwort Letzte Antwort
        0
        • U uwe72

          @thomas-braun

          Auf der Konsole ausgeführt:

          /usr/bin/nodejs
          v10.19.0
          /usr/bin/node
          v10.19.0
          /usr/bin/npm
          6.14.4
          nodejs:
            Installed: 10.19.0~dfsg-3ubuntu1
            Candidate: 10.19.0~dfsg-3ubuntu1
            Version table:
           *** 10.19.0~dfsg-3ubuntu1 500
                  500 http://de.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
                  100 /var/lib/dpkg/status
          
          
          Thomas BraunT Online
          Thomas BraunT Online
          Thomas Braun
          Most Active
          schrieb am zuletzt editiert von
          #5

          @uwe72
          Zwar sauber installiert, allerdings die 'falsche' Version.
          Du willst die von nodesource gepackte Variante haben:

          https://forum.iobroker.net/topic/35090/howto-nodejs-installation-und-upgrades-unter-debian

          Linux-Werkzeugkasten:
          https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
          NodeJS Fixer Skript:
          https://forum.iobroker.net/topic/68035/iob-node-fix-skript
          iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

          U 1 Antwort Letzte Antwort
          0
          • AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            schrieb am zuletzt editiert von
            #6

            Kommando zurück... Ich weiß woran es liegt.
            Der Skript-Adapter sandboxed das fs-Modul, damit da bestimmte Dinge nicht gemacht werden.

            Daher existiert fs.promises dort nicht. Ein Workaround wäre, die synchrone FS API zu nutzen.

            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

            U 1 Antwort Letzte Antwort
            1
            • Thomas BraunT Thomas Braun

              @uwe72
              Zwar sauber installiert, allerdings die 'falsche' Version.
              Du willst die von nodesource gepackte Variante haben:

              https://forum.iobroker.net/topic/35090/howto-nodejs-installation-und-upgrades-unter-debian

              U Online
              U Online
              uwe72
              schrieb am zuletzt editiert von uwe72
              #7

              @thomas-braun

              Ich muss mich leider korrigieren. Ich hatte einen Denkfehler. Bei mir läuft iobroker ja in einem Docker-Container. Die vorherige Logausgabe war von meinem NUC, und nicht vom ioBroker Docker Container.

              Diese ist die Ausgabe vom Container:

              
              /usr/bin/nodejs
              v12.20.1
              /usr/bin/node
              v12.20.1
              /usr/bin/npm
              6.14.10
              nodejs:
                Installiert:           12.20.1-1nodesource1
                Installationskandidat: 12.21.0-1nodesource1
                Versionstabelle:
                   12.21.0-1nodesource1 500
                      500 https://deb.nodesource.com/node_12.x buster/main amd64 Packages
               *** 12.20.1-1nodesource1 100
                      100 /var/lib/dpkg/status
                   10.24.0~dfsg-1~deb10u1 500
                      500 http://security.debian.org/debian-security buster/updates/main amd64 Packages
                   10.21.0~dfsg-1~deb10u1 500
                      500 http://deb.debian.org/debian buster/main amd64 Packages
              
              

              Aber auch auf der Konsole des ioBroker Docker containers läuft das Script auf der Konsole.

              1 Antwort Letzte Antwort
              0
              • AlCalzoneA AlCalzone

                Kommando zurück... Ich weiß woran es liegt.
                Der Skript-Adapter sandboxed das fs-Modul, damit da bestimmte Dinge nicht gemacht werden.

                Daher existiert fs.promises dort nicht. Ein Workaround wäre, die synchrone FS API zu nutzen.

                U Online
                U Online
                uwe72
                schrieb am zuletzt editiert von uwe72
                #8

                @alcalzone Versuche ich mal umzubauen

                Wobei ich vermutlich daran scheitere:

                Das ist ja der Ausgangszustand:

                 const cocoSsd = require('@tensorflow-models/coco-ssd');
                 const tf = require('@tensorflow/tfjs-node');
                 const fs2 = require('fs').promises;
                
                 // Load the Coco SSD model and image.
                 Promise.all([cocoSsd.load(), fs2.readFile('/home/iobroker/12-14-2020-tout.jpg')])
                 .then((results) => {
                   // First result is the COCO-SSD model object.
                   const model = results[0];
                   // Second result is image buffer.
                   const imgTensor = tf.node.decodeImage(new Uint8Array(results[1]), 3);
                   // Call detect() to run inference.
                   return model.detect(imgTensor);
                 })
                 .then((predictions) => {
                   console.log(JSON.stringify(predictions, null, 2));
                 });
                

                Das ist mein erster Versuch, funktioniert aber noch nicht:

                 const cocoSsd = require('@tensorflow-models/coco-ssd');
                 const tf = require('@tensorflow/tfjs-node');
                 const fs = require('fs');
                
                fs.readFile('/home/iobroker/12-14-2020-tout.jpg', function read(err, data) {
                    if (err) {
                        throw err;
                    }
                    
                    Promise.all([cocoSsd.load()])
                        .then((results) => {
                        const model = results[0];
                        const imgTensor = tf.node.decodeImage(new Uint8Array(data), 3);
                        return model.detect(imgTensor);
                    })
                    .then((predictions) => {
                        console.log(JSON.stringify(predictions, null, 2));
                    });
                    
                });
                
                

                Fehler:

                javascript.0	2021-02-25 11:41:39.008	error	(343176) at processTicksAndRejections (internal/process/task_queues.js:97:5)
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at runMicrotasks (<anonymous>)
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at script.js.common.000_Test6:14:35
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at Object.decodeImage (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/image.js:204:20)
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at decodeJpeg (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/image.js:100:19)
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at Object.tidy (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/globals.ts:192:17)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at Engine.tidy (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/engine.ts:440:17)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at Engine.scopedRun (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/engine.ts:453:19)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/engine.ts:442:20
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/image.js:102:14
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at NodeJSKernelBackend.decodeJpeg (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/nodejs_kernel_backend.js:333:33)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at Object.scalar (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/ops/scalar.ts:54:10)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at makeTensor (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/ops/tensor_ops_util.ts:39:11)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) script.js.common.000_Test6: Error: values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray
                
                U 1 Antwort Letzte Antwort
                0
                • U uwe72

                  @alcalzone Versuche ich mal umzubauen

                  Wobei ich vermutlich daran scheitere:

                  Das ist ja der Ausgangszustand:

                   const cocoSsd = require('@tensorflow-models/coco-ssd');
                   const tf = require('@tensorflow/tfjs-node');
                   const fs2 = require('fs').promises;
                  
                   // Load the Coco SSD model and image.
                   Promise.all([cocoSsd.load(), fs2.readFile('/home/iobroker/12-14-2020-tout.jpg')])
                   .then((results) => {
                     // First result is the COCO-SSD model object.
                     const model = results[0];
                     // Second result is image buffer.
                     const imgTensor = tf.node.decodeImage(new Uint8Array(results[1]), 3);
                     // Call detect() to run inference.
                     return model.detect(imgTensor);
                   })
                   .then((predictions) => {
                     console.log(JSON.stringify(predictions, null, 2));
                   });
                  

                  Das ist mein erster Versuch, funktioniert aber noch nicht:

                   const cocoSsd = require('@tensorflow-models/coco-ssd');
                   const tf = require('@tensorflow/tfjs-node');
                   const fs = require('fs');
                  
                  fs.readFile('/home/iobroker/12-14-2020-tout.jpg', function read(err, data) {
                      if (err) {
                          throw err;
                      }
                      
                      Promise.all([cocoSsd.load()])
                          .then((results) => {
                          const model = results[0];
                          const imgTensor = tf.node.decodeImage(new Uint8Array(data), 3);
                          return model.detect(imgTensor);
                      })
                      .then((predictions) => {
                          console.log(JSON.stringify(predictions, null, 2));
                      });
                      
                  });
                  
                  

                  Fehler:

                  javascript.0	2021-02-25 11:41:39.008	error	(343176) at processTicksAndRejections (internal/process/task_queues.js:97:5)
                  javascript.0	2021-02-25 11:41:39.008	error	(343176) at runMicrotasks (<anonymous>)
                  javascript.0	2021-02-25 11:41:39.008	error	(343176) at script.js.common.000_Test6:14:35
                  javascript.0	2021-02-25 11:41:39.008	error	(343176) at Object.decodeImage (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/image.js:204:20)
                  javascript.0	2021-02-25 11:41:39.008	error	(343176) at decodeJpeg (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/image.js:100:19)
                  javascript.0	2021-02-25 11:41:39.008	error	(343176) at Object.tidy (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/globals.ts:192:17)
                  javascript.0	2021-02-25 11:41:39.007	error	(343176) at Engine.tidy (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/engine.ts:440:17)
                  javascript.0	2021-02-25 11:41:39.007	error	(343176) at Engine.scopedRun (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/engine.ts:453:19)
                  javascript.0	2021-02-25 11:41:39.007	error	(343176) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/engine.ts:442:20
                  javascript.0	2021-02-25 11:41:39.007	error	(343176) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/image.js:102:14
                  javascript.0	2021-02-25 11:41:39.007	error	(343176) at NodeJSKernelBackend.decodeJpeg (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/nodejs_kernel_backend.js:333:33)
                  javascript.0	2021-02-25 11:41:39.007	error	(343176) at Object.scalar (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/ops/scalar.ts:54:10)
                  javascript.0	2021-02-25 11:41:39.007	error	(343176) at makeTensor (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/ops/tensor_ops_util.ts:39:11)
                  javascript.0	2021-02-25 11:41:39.007	error	(343176) script.js.common.000_Test6: Error: values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray
                  
                  U Online
                  U Online
                  uwe72
                  schrieb am zuletzt editiert von
                  #9

                  @AlCalzone

                  Danke Dir!

                  Habe es nun hinbekommen, musste noch das Uint8Array elimieren.

                  Das ist der funktionierende Umbau:

                   const cocoSsd = require('@tensorflow-models/coco-ssd');
                   const tf = require('@tensorflow/tfjs-node');
                  
                  fs.readFile('/home/clement/tfjs-project/826869587.jpg', function read(err, data) {
                      if (err) {
                          throw err;
                      }
                  
                      Promise.all([cocoSsd.load()])
                          .then((results) => {
                          const model = results[0];
                          const imgTensor = tf.node.decodeImage(data, 3);
                          return model.detect(imgTensor);
                      })
                      .then((predictions) => {
                          console.log(JSON.stringify(predictions, null, 2));
                      });
                      
                  });
                  
                  AlCalzoneA 1 Antwort Letzte Antwort
                  0
                  • U uwe72

                    @AlCalzone

                    Danke Dir!

                    Habe es nun hinbekommen, musste noch das Uint8Array elimieren.

                    Das ist der funktionierende Umbau:

                     const cocoSsd = require('@tensorflow-models/coco-ssd');
                     const tf = require('@tensorflow/tfjs-node');
                    
                    fs.readFile('/home/clement/tfjs-project/826869587.jpg', function read(err, data) {
                        if (err) {
                            throw err;
                        }
                    
                        Promise.all([cocoSsd.load()])
                            .then((results) => {
                            const model = results[0];
                            const imgTensor = tf.node.decodeImage(data, 3);
                            return model.detect(imgTensor);
                        })
                        .then((predictions) => {
                            console.log(JSON.stringify(predictions, null, 2));
                        });
                        
                    });
                    
                    AlCalzoneA Offline
                    AlCalzoneA Offline
                    AlCalzone
                    Developer
                    schrieb am zuletzt editiert von
                    #10

                    @uwe72 Zeilen 9-11 kannst du noch ein bisschen vereinfachen, da du ja jetzt nicht auf mehrere Promises wartest.

                    cocoSsd.load().then(model => {
                        const imgTensor = ...
                    

                    Evtl kannst du das hässliche .then Gedöns auch gegen async/await ersetzen:

                    const cocoSsd = require("@tensorflow-models/coco-ssd");
                    const tf = require("@tensorflow/tfjs-node");
                    
                    fs.readFile(
                      "/home/clement/tfjs-project/826869587.jpg",
                      async function read(err, data) {
                        if (err) {
                          throw err;
                        }
                    
                        const model = await cocoSsd.load();
                        const imgTensor = tf.node.decodeImage(data, 3);
                        const predictions = await model.detect(imgTensor); // ggf. ohne await (?)
                    
                        console.log(JSON.stringify(predictions, null, 2));
                      }
                    );
                    

                    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                    U 1 Antwort Letzte Antwort
                    0
                    • AlCalzoneA AlCalzone

                      @uwe72 Zeilen 9-11 kannst du noch ein bisschen vereinfachen, da du ja jetzt nicht auf mehrere Promises wartest.

                      cocoSsd.load().then(model => {
                          const imgTensor = ...
                      

                      Evtl kannst du das hässliche .then Gedöns auch gegen async/await ersetzen:

                      const cocoSsd = require("@tensorflow-models/coco-ssd");
                      const tf = require("@tensorflow/tfjs-node");
                      
                      fs.readFile(
                        "/home/clement/tfjs-project/826869587.jpg",
                        async function read(err, data) {
                          if (err) {
                            throw err;
                          }
                      
                          const model = await cocoSsd.load();
                          const imgTensor = tf.node.decodeImage(data, 3);
                          const predictions = await model.detect(imgTensor); // ggf. ohne await (?)
                      
                          console.log(JSON.stringify(predictions, null, 2));
                        }
                      );
                      
                      U Online
                      U Online
                      uwe72
                      schrieb am zuletzt editiert von uwe72
                      #11

                      @alcalzone Perfekt, danke! Code funktioniert, aber das untere await muss noch sein.

                      Off-Topic Frage: Weißt Du warum bei diesem Script nie beim Script das Log erscheint, sondern immer nur "im Hauptlog" im Reiter Log? Bei anderen Scripten zeigt es mir das Log auch unter dem Script an.

                      6e10be3f-84ff-49ee-98f0-0dbd5e5ffa03-image.png

                      AlCalzoneA 1 Antwort Letzte Antwort
                      0
                      • U uwe72

                        @alcalzone Perfekt, danke! Code funktioniert, aber das untere await muss noch sein.

                        Off-Topic Frage: Weißt Du warum bei diesem Script nie beim Script das Log erscheint, sondern immer nur "im Hauptlog" im Reiter Log? Bei anderen Scripten zeigt es mir das Log auch unter dem Script an.

                        6e10be3f-84ff-49ee-98f0-0dbd5e5ffa03-image.png

                        AlCalzoneA Offline
                        AlCalzoneA Offline
                        AlCalzone
                        Developer
                        schrieb am zuletzt editiert von
                        #12

                        @uwe72 Keine Ahnung - hab ich auch manchmal, konnte es aber nie gezielt reproduzieren.

                        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                        1 Antwort Letzte Antwort
                        1
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        791

                        Online

                        32.5k

                        Benutzer

                        81.6k

                        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