Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Überführung funktionierendes node.js Script

    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

    Überführung funktionierendes node.js Script

    This topic has been deleted. Only users with topic management privileges can see it.
    • AlCalzone
      AlCalzone Developer @uwe72 last edited by AlCalzone

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

      @Thomas-Braun kann sicher helfen

      1 Reply Last reply Reply Quote 0
      • Thomas Braun
        Thomas Braun Most Active @uwe72 last edited by 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 1 Reply Last reply Reply Quote 0
        • U
          uwe72 @Thomas Braun last edited by 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 Braun 1 Reply Last reply Reply Quote 0
          • Thomas Braun
            Thomas Braun Most Active @uwe72 last edited by

            @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 1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer last edited by

              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 1 Reply Last reply Reply Quote 1
              • U
                uwe72 @Thomas Braun last edited by uwe72

                @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 Reply Last reply Reply Quote 0
                • U
                  uwe72 @AlCalzone last edited by 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 1 Reply Last reply Reply Quote 0
                  • U
                    uwe72 @uwe72 last edited by

                    @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));
                        });
                        
                    });
                    
                    AlCalzone 1 Reply Last reply Reply Quote 0
                    • AlCalzone
                      AlCalzone Developer @uwe72 last edited by

                      @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 1 Reply Last reply Reply Quote 0
                      • U
                        uwe72 @AlCalzone last edited by 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

                        AlCalzone 1 Reply Last reply Reply Quote 0
                        • AlCalzone
                          AlCalzone Developer @uwe72 last edited by

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

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          922
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          javascript
                          3
                          12
                          444
                          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