Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. Wieder mal das System zerschossen

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    Wieder mal das System zerschossen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      Wie kommst du bei nodjs 6.x an npm 5.x?

      npm 5.x ist noch buggy.

      Gruß Rainer

      1 Reply Last reply Reply Quote 0
      • Lenny.CB
        Lenny.CB Most Active last edited by

        @Homoran:

        Wie kommst du bei nodjs 6.x an npm 5.x?

        npm 5.x ist noch buggy.

        Gruß Rainer `

        npm update -g
        

        mir war so das ich gelesen hätte, dass man problemlos auf 5.x wechseln kann.

        Ist dem wohl nicht so?

        hatte vorher 3.10.10 drauf.

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

          @Lenny.CB:

          Ist dem wohl nicht so?

          hatte vorher 3.10.10 drauf. `
          Ne, Homoran predigt das auch immer wieder 😉

          Man kann (fast) problemlos auf Node 8 upgraden, sollte dann aber unbedingt zurück auf npm 3

          1 Reply Last reply Reply Quote 0
          • Lenny.CB
            Lenny.CB Most Active last edited by

            @AlCalzone:

            @Lenny.CB:

            Ist dem wohl nicht so?

            hatte vorher 3.10.10 drauf. `
            Ne, Homoran predigt das auch immer wieder 😉

            Man kann (fast) problemlos auf Node 8 upgraden, sollte dann aber unbedingt zurück auf npm 3 `
            nun, dann wird das heut mein Abendwerk…

            1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators last edited by

              @AlCalzone:

              Ne, Homoran predigt das auch immer wieder 😉

              Man kann (fast) problemlos auf Node 8 upgraden, sollte dann aber unbedingt zurück auf npm 3 `

              Wenn ich heute mal dazu komme teste ich aktuell nochmal Node 8 mit npm 5.

              Sinnvoll wäre dann auch RasPi mit Stretch, oder?

              Gruß

              Rainer

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

                @Homoran:

                Wenn ich heute mal dazu komme teste ich aktuell nochmal Node 8 mit npm 5. `
                Ich hatte das ne Weile am Laufen. Dann hat der JS-Adapter bei jedem Neustart noble (und den kompletten Bluetooth-Stack) installiert weil er dachte es müsste in seinem Unterordner node_modules liegen. Mit npm3 war Ruhe.

                Ich fürchte dafür muss in ioBroker noch ein wenig Hand angelegt werden.

                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators last edited by

                  @AlCalzone:

                  Ich hatte das ne Weile am Laufen. Dann hat der JS-Adapter bei jedem Neustart noble (und den kompletten Bluetooth-Stack) installiert `
                  Da scheint es IMHO auch zu hängen. Es werden einige Installationenen beschrieben, bei denen nodejs 8.x mit npm 5.x problemlos funktionieren soll.

                  Erst die Instanziierung bestimmter Adapter können zu dem npm-Problem führen.

                  Gruß

                  Rainer

                  1 Reply Last reply Reply Quote 0
                  • Lenny.CB
                    Lenny.CB Most Active last edited by

                    so ich bins wieder.

                    System neu aufgesetzt.

                    nodejs 6.12.0

                    npm 3.10.10

                    iobroker installiert –> admin-Seite geht

                    den alten /opt rüber gespielt

                    ./reinstall.sh

                    admin-Seite tot.

                    Ergebinsse:

                    ps -A | grep iobroker

                    5702 ?        00:00:02 iobroker.js-con
                    

                    iobroker list instances

                    liefert keine Ergebnisse
                    

                    iobroker start admin

                    Cannot find any instances of "admin"
                    

                    iobroker add admin –port 8089

                    got /opt/iobroker/node_modules/iobroker.admin/admin
                    upload [2] admin.admin /opt/iobroker/node_modules/iobroker.admin/admin/words.js words.js application/javascript
                    upload [1] admin.admin /opt/iobroker/node_modules/iobroker.admin/admin/index.html index.html text/html
                    upload [0] admin.admin /opt/iobroker/node_modules/iobroker.admin/admin/admin.png admin.png image/png
                    host.odroid64 error: view instanceStats [object Object]
                    

                    node node_modules/iobroker.admin/admin.js –logs

                    2017-11-30 19:55:46.507  - info: host.odroid64 received SIGTERM
                    2017-11-30 19:55:46.516  - info: host.odroid64 terminated
                    2017-11-30 19:57:38.275  - info: host.odroid64 iobroker.js-controller version 1.2.3 js-controller starting
                    2017-11-30 19:57:38.292  - info: host.odroid64 Copyright (c) 2014-2017 bluefox, 2014 hobbyquaker
                    2017-11-30 19:57:38.293  - info: host.odroid64 hostname: odroid64, node: v6.12.0
                    2017-11-30 19:57:38.296  - info: host.odroid64 ip addresses: 192.168.2.42 fe80::21e:6ff:fe33:9927
                    2017-11-30 19:57:38.400  - info: host.odroid64  inMem-states listening on port 9000
                    2017-11-30 19:57:38.440  - info: host.odroid64  inMem-objects listening on port 9001
                    2017-11-30 19:57:38.465  - info: host.odroid64 InMemoryDB connected
                    2017-11-30 19:57:38.498  - error: host.odroid64 _design/system missing - call node iobroker.js setup
                    

                    Jemand Ideen? :shock: :shock: :shock:

                    1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators last edited by

                      @Lenny.CB:

                      Jemand Ideen? `
                      Ja, der alte /opt-Ordner ist defekt.

                      versuch es mal mit Teilen davon.

                      für dich wären die /iobroker_data wichtig.

                      Gruß

                      Rainer

                      1 Reply Last reply Reply Quote 0
                      • Lenny.CB
                        Lenny.CB Most Active last edited by

                        @Homoran:

                        für dich wären die /iobroker_data wichtig. `
                        versuche ich gleich…

                        sag mal ist das normal? ganz frisches System...

                        sudo npm install iobroker --unsafe-perm

                        ! root@odroid64:/opt/iobroker# sudo npm install iobroker –unsafe-perm
                        ! > iobroker@1.0.2 install /opt/iobroker/node_modules/iobroker
                        ! > node lib/setup.js
                        ! npm install iobroker.discovery --production --prefix /opt/iobroker
                        ! node-pre-gyp ERR! Tried to download(404): https://github.com/EmergingTechnologyAd ... m64.tar.gz
                        ! node-pre-gyp ERR! Pre-built binaries not found for serialport@4.0.7 and node@6.12.0 (node-v48 ABI) (falling back to source compile with node-gyp)
                        ! ../src/serialport.cpp: In function ‘int getIntFromObject(v8::Localv8::object, std::__cxx11::string)’:
                        ! ../src/serialport.cpp:90:52: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! return getValueFromObject(options, key)->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport.cpp: In function ‘double getDoubleFromObject(v8::Localv8::object, std::_cxx11::string)’:
                        ! ../src/serialport.cpp:102:53: warning: ‘v8::Local v8::numberv8::Value::ToNumber() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! return getValueFromObject(options, key)->ToNumber()->NumberValue();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8178:15: note: declared here
                        ! Local <number>Value::ToNumber() const {
                        ! ^
                        ! ../src/serialport.cpp: In function ‘void EIO_AfterOpen(uv_work_t*)’:
                        ! ../src/serialport.cpp:174:31: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! int fd = argv[1]->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Update(Nan::NAN_METHOD_ARGS_TYPE)’:
                        ! ../src/serialport.cpp:193:29: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! int fd = info[0]->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport.cpp:217:116: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! baton->baudRate = Nan::Get(options, Nan::Newv8::string("baudRate").ToLocalChecked()).ToLocalChecked()->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Write(Nan::NAN_METHOD_ARGS_TYPE)’:
                        ! ../src/serialport.cpp:252:29: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! int fd = info[0]->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Close(Nan::NAN_METHOD_ARGS_TYPE)’:
                        ! ../src/serialport.cpp:369:32: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! baton->fd = info[0]->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Flush(Nan::NAN_METHOD_ARGS_TYPE)’:
                        ! ../src/serialport.cpp:480:29: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! int fd = info[0]->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Set(Nan::NAN_METHOD_ARGS_TYPE)’:
                        ! ../src/serialport.cpp:528:29: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! int fd = info[0]->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Drain(Nan::NAN_METHOD_ARGS_TYPE)’:
                        ! ../src/serialport.cpp:585:29: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! int fd = info[0]->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport_unix.cpp: In function ‘OpenBatonPlatformOptions* ParsePlatformOptions(const v8::Localv8::object&)’:
                        ! ../src/serialport_unix.cpp:44:109: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! result->vmin = Nan::Get(options, Nan::Newv8::string("vmin").ToLocalChecked()).ToLocalChecked()->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport_unix.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport_unix.cpp:45:111: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! result->vtime = Nan::Get(options, Nan::Newv8::string("vtime").ToLocalChecked()).ToLocalChecked()->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/./serialport.h:7,
                        ! from ../src/serialport_unix.cpp:1:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! ../src/serialport_poller.cpp: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE SerialportPoller::New(Nan::NAN_METHOD_ARGS_TYPE)’:
                        ! ../src/serialport_poller.cpp:86:31: warning: ‘v8::Local v8::int32v8::Value::ToInt32() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
                        ! obj->fd
                        = info[0]->ToInt32()->Int32Value();
                        ! ^
                        ! In file included from /root/.node-gyp/6.12.0/include/node/node.h:42:0,
                        ! from ../../nan/nan.h:51,
                        ! from ../src/serialport_poller.cpp:5:
                        ! /root/.node-gyp/6.12.0/include/node/v8.h:8214:14: note: declared here
                        ! Local <int32>Value::ToInt32() const {
                        ! ^
                        ! npm WARN enoent ENOENT: no such file or directory, open '/opt/iobroker/package.json'
                        ! npm WARN iobroker No description
                        ! npm WARN iobroker No repository field.
                        ! npm WARN iobroker No README data
                        ! npm WARN iobroker No license field.
                        ! npm install iobroker.admin –production --prefix /opt/iobroker
                        ! npm WARN enoent ENOENT: no such file or directory, open '/opt/iobroker/package.json'
                        ! npm WARN iobroker No description
                        ! npm WARN iobroker No repository field.
                        ! npm WARN iobroker No README data
                        ! npm WARN iobroker No license field.
                        ! npm install iobroker.js-controller --production --prefix /opt/iobroker
                        ! npm WARN deprecated localhost.daplie.me-certificates@1.3.5: this package has been deprecated
                        ! npm WARN enoent ENOENT: no such file or directory, open '/opt/iobroker/package.json'
                        ! npm WARN iobroker No description
                        ! npm WARN iobroker No repository field.
                        ! npm WARN iobroker No README data
                        ! npm WARN iobroker No license field.
                        ! Write "./iobroker start" to start the ioBroker
                        ! Auto-start was enabled. Write "update-rc.d -f iobroker.sh remove" to disable auto-start
                        ! iobroker is started. Go to "http://ip-addr:8081" to open the admin UI.
                        ! /opt/iobroker
                        ! └─┬ iobroker@1.0.2
                        ! └─┬ yargs@7.1.0
                        ! ├── camelcase@3.0.0
                        ! ├─┬ cliui@3.2.0
                        ! │ ├─┬ strip-ansi@3.0.1
                        ! │ │ └── ansi-regex@2.1.1
                        ! │ └── wrap-ansi@2.1.0
                        ! ├── decamelize@1.2.0
                        ! ├── get-caller-file@1.0.2
                        ! ├─┬ os-locale@1.4.0
                        ! │ └─┬ lcid@1.0.0
                        ! │ └── invert-kv@1.0.0
                        ! ├─┬ read-pkg-up@1.0.1
                        ! │ ├─┬ find-up@1.1.2
                        ! │ │ ├── path-exists@2.1.0
                        ! │ │ └─┬ pinkie-promise@2.0.1
                        ! │ │ └── pinkie@2.0.4
                        ! │ └─┬ read-pkg@1.1.0
                        ! │ ├─┬ load-json-file@1.1.0
                        ! │ │ ├── graceful-fs@4.1.11
                        ! │ │ ├─┬ parse-json@2.2.0
                        ! │ │ │ └─┬ error-ex@1.3.1
                        ! │ │ │ └── is-arrayish@0.2.1
                        ! │ │ ├── pify@2.3.0
                        ! │ │ └─┬ strip-bom@2.0.0
                        ! │ │ └── is-utf8@0.2.1
                        ! │ ├─┬ normalize-package-data@2.4.0
                        ! │ │ ├── hosted-git-info@2.5.0
                        ! │ │ ├─┬ is-builtin-module@1.0.0
                        ! │ │ │ └── builtin-modules@1.1.1
                        ! │ │ ├── semver@5.4.1
                        ! │ │ └─┬ validate-npm-package-license@3.0.1
                        ! │ │ ├─┬ spdx-correct@1.0.2
                        ! │ │ │ └── spdx-license-ids@1.2.2
                        ! │ │ └── spdx-expression-parse@1.0.4
                        ! │ └── path-type@1.1.0
                        ! ├── require-directory@2.1.1
                        ! ├── require-main-filename@1.0.1
                        ! ├── set-blocking@2.0.0
                        ! ├─┬ string-width@1.0.2
                        ! │ ├── code-point-at@1.1.0
                        ! │ └─┬ is-fullwidth-code-point@1.0.0
                        ! │ └── number-is-nan@1.0.1
                        ! ├── which-module@1.0.0
                        ! ├── y18n@3.2.1
                        ! └── yargs-parser@5.0.0
                        ! npm WARN enoent ENOENT: no such file or directory, open '/opt/iobroker/package.json'
                        ! npm WARN iobroker No description
                        ! npm WARN iobroker No repository field.
                        ! npm WARN iobroker No README data
                        ! npm WARN iobroker No license field.
                        ! root@odroid64:/opt/iobroker#</int32></v8::int32></int32></v8::string></v8::int32></int32></v8::string></v8::int32></v8::object></int32></v8::int32></int32></v8::int32></int32></v8::int32></int32></v8::int32></int32></v8::int32></int32></v8::string></v8::int32></int32></v8::int32></int32></v8::int32></number></v8::number></v8::object></int32></v8::int32></v8::object>

                        1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators last edited by

                          @Lenny.CB:

                          sag mal ist das normal? ganz frisches System… `
                          Ja!

                          npm hat ein enormes Mitteilungsbedürfnis 😉

                          Gruß

                          Rainer

                          1 Reply Last reply Reply Quote 0
                          • Lenny.CB
                            Lenny.CB Most Active last edited by

                            glaube ich habe den Fehler gefunden:

                            die Datei "objects.json" im alten /opt Ordner ist offensichtlich Schrott. Mit einer früheren Datei geht es.

                            Mist, alle Scripte weg… :evil:

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

                              Verwende nicht mehr reinstall.sh, nur noch backup/restore.

                              Da mein eiBroker automatisch wöchentlich ein Backup anlegt und auf das NAS kopiert und ältere als 2 Monate löscht hab ich immer Reserven.

                              Ich brauch am neuen System nur ein leeres ioBroker installieren (ohne adaptersuche) den restore installiert sowieso alle adapter neu.

                              Einziges zusätzliches Problem: Wenn du eine Datenbank verwendest muss diese getrennt kopiert und vor dem restore wieder laufen mid den alten Daten so wie beim Backup.

                              Auch Dinge wie Redis sind natürlich vor dem Restore genauso zu installieren.

                              p.s.: Scripte und Adapter-Einstellungen sind auch im Backup!

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              949
                              Online

                              31.6k
                              Users

                              79.5k
                              Topics

                              1.3m
                              Posts

                              5
                              16
                              1238
                              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