Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. [gelöst] Adapterinstallation - node gyp error

    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

    SOLVED [gelöst] Adapterinstallation - node gyp error

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Sundance @Ralla66 last edited by

      @Ralla66 Stimmt.. der Link hier müsste es wohl sein laut repo:

      https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.5.0/canvas-v2.5.0-node-v64-linux-glibc-x64.tar.gz

      Da ist im link ein "ARM" zu viel.. aber passt die Version dann überhaupt noch? Was müsste ich anpassen, damit ich es installieren kann?

      1 Reply Last reply Reply Quote 0
      • Ralla66
        Ralla66 Most Active last edited by

        @Sundance sagte in Adapterinstallation schlägt fehl - node-gyp Fehler:

        https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.5.0/canvas-v2.5.0-node-v64-linux-glibc-x64.tar.gz

        Der Link geht ja, versuch über die URL zu installieren.

        Canvas.jpg

        S 1 Reply Last reply Reply Quote 0
        • S
          Sundance @Ralla66 last edited by

          @Ralla66 das scheint nicht zu klappen:

          $ ./iobroker url "https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.5.0/canvas-v2.5.0-node-v64-linux-glibc-x64.tar.gz" --debug
          install https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.5.0/canvas-v2.5.0-node-v64-linux-glibc-x64.tar.gz
          npm install https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.5.0/canvas-v2.5.0-node-v64-linux-glibc-x64.tar.gz --production --save --prefix "/opt/iobroker" (System call)
          npm
           ERR! code ENOPACKAGEJSON
          npm
           
          ERR!
           
          package.json Non-registry package missing package.json: https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.5.0/canvas-v2.5.0-node-v64-linux-glibc-x64.tar.gz.npm
           ERR! package.json
           npm can't find a package.json file in your current directory.
          
          npm
           ERR! A complete log of this run can be found in:
          npm ERR!     /home/iobroker/.npm/_logs/2019-08-08T13_53_17_665Z-debug.log
          process exited with code 0
          
          1 Reply Last reply Reply Quote 0
          • Ralla66
            Ralla66 Most Active last edited by

            @Sundance sagte in Adapterinstallation schlägt fehl - node-gyp Fehler:

            npm can't find a package.json file in your current directory.

            Da kann ich nicht mehr weiter helfen.
            Dir scheint ein package.json file zu fehlen oder liegt im falschen directory.

            1 Reply Last reply Reply Quote 0
            • S
              Sundance last edited by

              @Ralla66 - okay, dann gebe ich mich erstmal geschlagen! Danke trotzdem für deine Hilfe!

              1 Reply Last reply Reply Quote 0
              • Zefau
                Zefau last edited by

                Installier mal canvas 2.6

                S 1 Reply Last reply Reply Quote 0
                • S
                  Sundance @Zefau last edited by

                  @Zefau - danke für den hinweis. hast du einen Tipp wo und wie genau ich das installieren soll? Der Fehler mit "package.json" kommt leider auch bei dem entsprechendem Link von der 2.6 Version..

                  Ich habe als root einfach folgendes gemacht:

                  npm install https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.6.0/canvas-v2.6.0-node-v64-linux-glibc-x64.tar.gz
                  

                  Aber der Fehler mit dem package.json bleibt:

                  root@HOME:/home/pi# npm install https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.6.0/canvas-v2.6.0-node-v64-linux-glibc-x64.tar.gz
                  npm ERR! code ENOPACKAGEJSON
                  npm ERR! package.json Non-registry package missing package.json: https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.6.0/canvas-v2.6.0-node-v64-linux-glibc-x64.tar.gz.
                  npm ERR! package.json npm can't find a package.json file in your current directory.
                  
                  npm ERR! A complete log of this run can be found in:
                  npm ERR!     /root/.npm/_logs/2019-08-08T16_25_34_957Z-debug.log
                  

                  Hast du einen Tipp?

                  1 Reply Last reply Reply Quote 0
                  • Zefau
                    Zefau last edited by Zefau

                    Sorry, war noch unterwegs, daher die knappe Antwort.

                    Hast du die build-essentials installiert?

                    sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
                    

                    Danach dann einfach canvas 2.6.0 von npm:

                    sudo npm install canvas@2.6.0 --unsafe-perm=true
                    

                    EDIT: den zweiten Befehl im iobroker.roomba Ordner ausführen. Also unter /opt/iobroker/node_modules/iobroker.roomba.

                    EDIT2: Hab jetzt den Verlauf nicht komplett gelesen, aber die fehlende package.json liegt daran, dass du in einem völlig falschen Ordner bist (/home/pi?). Die Befehle müssen im iobroker.roomba Ordner ausgeführt werden, wenn diese dafür greifen sollen.

                    S 1 Reply Last reply Reply Quote 1
                    • S
                      Sundance @Zefau last edited by

                      @Zefau kein Problem, danke für deine Unterstützung.

                      Auch die Installtion von 2.6.0 schlägt fehl (404), allerdings scheint das Problem in einem falschen Link in dem package zu liegen. Habe diese Issue hier gefunden: https://github.com/node-gfx/node-canvas-prebuilt/issues/84

                      Dann muss man aktuell wohl warten, bis das seitens der entwickler von node-canvas behoben ist, wenn ich das richtig verstehe?

                      denniskawurek created this issue in node-gfx/node-canvas-prebuilt

                      open Electron build fails (Pre-built binaries not found) #84

                      Zefau 1 Reply Last reply Reply Quote 0
                      • Zefau
                        Zefau @Sundance last edited by Zefau

                        @Sundance Kannst du das Log bitte posten? Welche URL wirft 404? Siehe https://github.com/node-gfx/node-canvas-prebuilt/releases welche prebuilts es gibt.

                        Die prebuilds gibt es nur für LTS Versionen von node, also v8, v10 und v12. Du solltest von v11 zurück auf v10 gehen.

                        Davon unabhängig: Wenn er keine prebuilts findet, dann kompiliert Linux eigl. selbst. Versucht das System dies bei dir gar nicht, oder kommt dann dein node-gyp Fehler?

                        S 1 Reply Last reply Reply Quote 0
                        • S
                          Sundance @Zefau last edited by

                          @Zefau Aktuell bin ich auf node Version 10.16.2 - müsste also passen, oder? Hier das log von der installation von canvas 2.6.0:

                          root@HOME:/home/pi# sudo npm install canvas@2.6.0 --unsafe-perm=true
                          
                          > canvas@2.6.0 install /home/pi/node_modules/canvas
                          > node-pre-gyp install --fallback-to-build
                          
                          node-pre-gyp WARN Using request for node-pre-gyp https download 
                          node-pre-gyp WARN Tried to download(404): https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.6.0/canvas-v2.6.0-node-v64-linux-glibc-arm.tar.gz 
                          node-pre-gyp WARN Pre-built binaries not found for canvas@2.6.0 and node@10.16.2 (node-v64 ABI, glibc) (falling back to source compile with node-gyp) 
                          make: Entering directory '/home/pi/node_modules/canvas/build'
                            SOLINK_MODULE(target) Release/obj.target/canvas-postbuild.node
                            COPY Release/canvas-postbuild.node
                            CXX(target) Release/obj.target/canvas/src/backend/Backend.o
                            CXX(target) Release/obj.target/canvas/src/backend/ImageBackend.o
                            CXX(target) Release/obj.target/canvas/src/backend/PdfBackend.o
                            CXX(target) Release/obj.target/canvas/src/backend/SvgBackend.o
                            CXX(target) Release/obj.target/canvas/src/bmp/BMPParser.o
                          ../src/bmp/BMPParser.cc: In member function 'void BMPParser::Parser::parse(uint8_t*, int, uint8_t*)':
                          ../src/bmp/BMPParser.cc:189:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                             E(ptr - data > imgdOffset, "image data overlaps with another structure");
                               ~~~~~~~~~~~^~~
                          ../src/bmp/BMPParser.cc:10:25: note: in definition of macro 'E'
                           #define E(cond, msg) if(cond) return setErr(msg)
                                                   ^~~~
                          ../src/bmp/BMPParser.cc:204:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                             E(ptr - data + imgdSize > len, "not enough image data");
                               ~~~~~~~~~~~~~~~~~~~~~~^~~
                          ../src/bmp/BMPParser.cc:10:25: note: in definition of macro 'E'
                           #define E(cond, msg) if(cond) return setErr(msg)
                                                   ^~~~
                            CXX(target) Release/obj.target/canvas/src/Backends.o
                            CXX(target) Release/obj.target/canvas/src/Canvas.o
                          ../src/Canvas.cc: In static member function 'static Nan::NAN_METHOD_RETURN_TYPE Canvas::ToBuffer(Nan::NAN_METHOD_ARGS_TYPE)':
                          ../src/Canvas.cc:415:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                               if (canvas->nBytes() > node::Buffer::kMaxLength) {
                                   ~~~~~~~~~~~~~~~~~^~~~~~
                            CXX(target) Release/obj.target/canvas/src/CanvasGradient.o
                            CXX(target) Release/obj.target/canvas/src/CanvasPattern.o
                            CXX(target) Release/obj.target/canvas/src/CanvasRenderingContext2d.o
                            CXX(target) Release/obj.target/canvas/src/closure.o
                            CXX(target) Release/obj.target/canvas/src/color.o
                            CXX(target) Release/obj.target/canvas/src/Image.o
                            CXX(target) Release/obj.target/canvas/src/ImageData.o
                            CXX(target) Release/obj.target/canvas/src/init.o
                            CXX(target) Release/obj.target/canvas/src/register_font.o
                            SOLINK_MODULE(target) Release/obj.target/canvas.node
                            COPY Release/canvas.node
                          make: Leaving directory '/home/pi/node_modules/canvas/build'
                          npm WARN saveError ENOENT: no such file or directory, open '/home/pi/package.json'
                          npm WARN enoent ENOENT: no such file or directory, open '/home/pi/package.json'
                          npm WARN pi No description
                          npm WARN pi No repository field.
                          npm WARN pi No README data
                          npm WARN pi No license field.
                          
                          + canvas@2.6.0
                          added 62 packages from 35 contributors and audited 741 packages in 127.47s
                          found 0 vulnerabilities
                          
                          
                          

                          Ich habe danach einfach nochmal die adapter installation versucht, aber sie schlägt weiterhin mit folgendem Log fehl:

                          root@HOME:/home/pi# iobroker install iobroker.roomba
                          ^[fNPM version: 6.9.0
                          npm install iobroker.roomba@1.0.0 --production --save --prefix "/opt/iobroker" (System call)
                          node-pre-gyp WARN Using request for node-pre-gyp https download 
                          node-pre-gyp WARN Tried to download(404): https://github.com/node-gfx/node-canvas-prebuilt/releases/download/v2.5.0/canvas-v2.5.0-node-v64-linux-glibc-arm.tar.gz 
                          node-pre-gyp WARN Pre-built binaries not found for canvas@2.5.0 and node@10.16.2 (node-v64 ABI, glibc) (falling back to source compile with node-gyp) 
                          ../src/bmp/BMPParser.cc: In member function 'void BMPParser::Parser::parse(uint8_t*, int, uint8_t*)':
                          ../src/bmp/BMPParser.cc:193:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                             E(ptr - data > imgdOffset, "image data overlaps with another structure");
                               ~~~~~~~~~~~^~~
                          ../src/bmp/BMPParser.cc:10:25: note: in definition of macro 'E'
                           #define E(cond, msg) if(cond) return setErr(msg)
                                                   ^~~~
                          ../src/bmp/BMPParser.cc:208:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                             E(ptr - data + imgdSize > len, "not enough image data");
                               ~~~~~~~~~~~~~~~~~~~~~~^~~
                          ../src/bmp/BMPParser.cc:10:25: note: in definition of macro 'E'
                           #define E(cond, msg) if(cond) return setErr(msg)
                                                   ^~~~
                          ../src/CanvasRenderingContext2d.cc: In static member function 'static Nan::NAN_METHOD_RETURN_TYPE Context2d::DrawImage(Nan::NAN_METHOD_ARGS_TYPE)':
                          ../src/CanvasRenderingContext2d.cc:1291:45: error: call of overloaded 'abs(double&)' is ambiguous
                             double current_scale_x = abs(transforms[1]);
                                                                       ^
                          In file included from /usr/include/c++/6/cstdlib:75:0,
                                           from /usr/include/c++/6/ext/string_conversions.h:41,
                                           from /usr/include/c++/6/bits/basic_string.h:5417,
                                           from /usr/include/c++/6/string:52,
                                           from /usr/include/c++/6/stdexcept:39,
                                           from /usr/include/c++/6/array:39,
                                           from /usr/include/c++/6/tuple:39,
                                           from /usr/include/c++/6/functional:55,
                                           from /usr/include/c++/6/memory:79,
                                           from /home/iobroker/.node-gyp/10.16.2/include/node/v8.h:21,
                                           from /home/iobroker/.node-gyp/10.16.2/include/node/node.h:63,
                                           from ../../nan/nan.h:54,
                                           from ../src/backend/Backend.h:6,
                                           from ../src/Canvas.h:5,
                                           from ../src/CanvasRenderingContext2d.h:6,
                                           from ../src/CanvasRenderingContext2d.cc:3:
                          /usr/include/stdlib.h:735:12: note: candidate: int abs(int)
                           extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
                                      ^~~
                          In file included from /usr/include/c++/6/ext/string_conversions.h:41:0,
                                           from /usr/include/c++/6/bits/basic_string.h:5417,
                                           from /usr/include/c++/6/string:52,
                                           from /usr/include/c++/6/stdexcept:39,
                                           from /usr/include/c++/6/array:39,
                                           from /usr/include/c++/6/tuple:39,
                                           from /usr/include/c++/6/functional:55,
                                           from /usr/include/c++/6/memory:79,
                                           from /home/iobroker/.node-gyp/10.16.2/include/node/v8.h:21,
                                           from /home/iobroker/.node-gyp/10.16.2/include/node/node.h:63,
                                           from ../../nan/nan.h:54,
                                           from ../src/backend/Backend.h:6,
                                           from ../src/Canvas.h:5,
                                           from ../src/CanvasRenderingContext2d.h:6,
                                           from ../src/CanvasRenderingContext2d.cc:3:
                          /usr/include/c++/6/cstdlib:180:3: note: candidate: long long int std::abs(long long int)
                             abs(long long __x) { return __builtin_llabs (__x); }
                             ^~~
                          /usr/include/c++/6/cstdlib:172:3: note: candidate: long int std::abs(long int)
                             abs(long __i) { return __builtin_labs(__i); }
                             ^~~
                          ../src/CanvasRenderingContext2d.cc:1292:45: error: call of overloaded 'abs(double&)' is ambiguous
                             double current_scale_y = abs(transforms[2]);
                                                                       ^
                          In file included from /usr/include/c++/6/cstdlib:75:0,
                                           from /usr/include/c++/6/ext/string_conversions.h:41,
                                           from /usr/include/c++/6/bits/basic_string.h:5417,
                                           from /usr/include/c++/6/string:52,
                                           from /usr/include/c++/6/stdexcept:39,
                                           from /usr/include/c++/6/array:39,
                                           from /usr/include/c++/6/tuple:39,
                                           from /usr/include/c++/6/functional:55,
                                           from /usr/include/c++/6/memory:79,
                                           from /home/iobroker/.node-gyp/10.16.2/include/node/v8.h:21,
                                           from /home/iobroker/.node-gyp/10.16.2/include/node/node.h:63,
                                           from ../../nan/nan.h:54,
                                           from ../src/backend/Backend.h:6,
                                           from ../src/Canvas.h:5,
                                           from ../src/CanvasRenderingContext2d.h:6,
                                           from ../src/CanvasRenderingContext2d.cc:3:
                          /usr/include/stdlib.h:735:12: note: candidate: int abs(int)
                           extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
                                      ^~~
                          In file included from /usr/include/c++/6/ext/string_conversions.h:41:0,
                                           from /usr/include/c++/6/bits/basic_string.h:5417,
                                           from /usr/include/c++/6/string:52,
                                           from /usr/include/c++/6/stdexcept:39,
                                           from /usr/include/c++/6/array:39,
                                           from /usr/include/c++/6/tuple:39,
                                           from /usr/include/c++/6/functional:55,
                                           from /usr/include/c++/6/memory:79,
                                           from /home/iobroker/.node-gyp/10.16.2/include/node/v8.h:21,
                                           from /home/iobroker/.node-gyp/10.16.2/include/node/node.h:63,
                                           from ../../nan/nan.h:54,
                                           from ../src/backend/Backend.h:6,
                                           from ../src/Canvas.h:5,
                                           from ../src/CanvasRenderingContext2d.h:6,
                                           from ../src/CanvasRenderingContext2d.cc:3:
                          /usr/include/c++/6/cstdlib:180:3: note: candidate: long long int std::abs(long long int)
                             abs(long long __x) { return __builtin_llabs (__x); }
                             ^~~
                          /usr/include/c++/6/cstdlib:172:3: note: candidate: long int std::abs(long int)
                             abs(long __i) { return __builtin_labs(__i); }
                             ^~~
                          make: *** [Release/obj.target/canvas/src/CanvasRenderingContext2d.o] Error 1
                          gyp ERR! build error 
                          gyp ERR! stack Error: `make` failed with exit code: 2
                          gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
                          gyp ERR! stack     at ChildProcess.emit (events.js:198:13)
                          gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
                          gyp ERR! System Linux 4.19.57-v7+
                          gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--module=/opt/iobroker/node_modules/canvas/build/Release/canvas.node" "--module_name=canvas" "--module_path=/opt/iobroker/node_modules/canvas/build/Release" "--napi_version=4" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v64"
                          gyp ERR! cwd /opt/iobroker/node_modules/canvas
                          gyp ERR! node -v v10.16.2
                          gyp ERR! node-gyp -v v3.8.0
                          gyp ERR! not ok 
                          node-pre-gyp ERR! build error 
                          node-pre-gyp ERR! stack Error: Failed to execute '/usr/bin/node /usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/opt/iobroker/node_modules/canvas/build/Release/canvas.node --module_name=canvas --module_path=/opt/iobroker/node_modules/canvas/build/Release --napi_version=4 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v64' (1)
                          node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/opt/iobroker/node_modules/canvas/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
                          node-pre-gyp ERR! stack     at ChildProcess.emit (events.js:198:13)
                          node-pre-gyp ERR! stack     at maybeClose (internal/child_process.js:982:16)
                          node-pre-gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
                          node-pre-gyp ERR! System Linux 4.19.57-v7+
                          node-pre-gyp ERR! command "/usr/bin/node" "/opt/iobroker/node_modules/canvas/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
                          node-pre-gyp ERR! cwd /opt/iobroker/node_modules/canvas
                          node-pre-gyp ERR! node -v v10.16.2
                          node-pre-gyp ERR! node-pre-gyp -v v0.11.0
                          node-pre-gyp ERR! not ok 
                          npm WARN bl@0.7.0 requires a peer of stream-browserify@* but none is installed. You must install peer dependencies yourself.
                          npm WARN optional SKIPPING OPTIONAL DEPENDENCY: osx-temperature-sensor@1.0.3 (node_modules/osx-temperature-sensor):
                          npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for osx-temperature-sensor@1.0.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})
                          
                          npm ERR! code ELIFECYCLE
                          npm ERR! errno 1
                          npm ERR! canvas@2.5.0 install: `node-pre-gyp install --fallback-to-build`
                          npm ERR! Exit status 1
                          npm ERR! 
                          npm ERR! Failed at the canvas@2.5.0 install script.
                          npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
                          
                          npm ERR! A complete log of this run can be found in:
                          npm ERR!     /home/iobroker/.npm/_logs/2019-08-08T18_50_01_882Z-debug.log
                          host.HOME Adapter directory "null" does not exists
                          Cannot parse null/io-package.json:Error: ENOENT: no such file or directory, open 'null/io-package.json'
                          
                          Zefau 1 Reply Last reply Reply Quote 0
                          • Zefau
                            Zefau @Sundance last edited by

                            @Sundance Sieht an sich gut aus. Die Installation von Canvas 2.6.0 läuft durch, die von 2.5.0 (die aktuell noch bei ioBroker.roomba gezogen wird) nicht.

                            Versuch mal die aktuelle Version vom Repository zu installieren: iobroker url https://github.com/Zefau/ioBroker.roomba.
                            Github habe ich jetzt auf 2.6.0 aktualisiert, dann sollte es passen.

                            S 1 Reply Last reply Reply Quote 1
                            • S
                              Sundance @Zefau last edited by

                              @Zefau - Danke für das Update, jetzt hat es funktioniert! 🙂

                              Adapter lies sich jetzt problemlos installieren - den 404 Fehler im Installationsdurchlauf zeigt er zwar immernoch an, aber es hat trotzdem geklappt.

                              Vielen dank 🙂 bin gespannt auf den Adapter

                              Zefau Glasfaser 2 Replies Last reply Reply Quote 0
                              • Zefau
                                Zefau @Sundance last edited by

                                @Sundance Klasse, freut mich! 🙂

                                1 Reply Last reply Reply Quote 1
                                • Glasfaser
                                  Glasfaser @Sundance last edited by

                                  @Sundance
                                  Na dann läuft ja alles .

                                  Sundance  vor 22 Stunden     
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  789
                                  Online

                                  31.8k
                                  Users

                                  80.0k
                                  Topics

                                  1.3m
                                  Posts

                                  adapter installation installation node-pre-gyp err
                                  6
                                  47
                                  4786
                                  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