Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Anlegen von States über script in alias.0

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Anlegen von States über script in alias.0

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @Blackmike last edited by

      @Blackmike sagte:

      ich will nun ein {common: {"Black":"reiner test"}} dem common hinzufügen.

      common.Black = 'reiner test';
      
      Blackmike 1 Reply Last reply Reply Quote 0
      • Blackmike
        Blackmike @paul53 last edited by

        @paul53 sagte in Anlegen von States über script in alias.0:

        @Blackmike sagte:

        ich will nun ein {common: {"Black":"reiner test"}} dem common hinzufügen.

        common.Black = 'reiner test';
        

        @paul53 , danke aber de allgemeine JSON Syntax war mir schon klar. Ich meine explizit diese Diskrepanz:

        in js 1.5.x:
        ein beispielhaftes Object
        "common": {
        "name": "State",
        "role": "",
        "type": "number",
        "read": true,
        "write": true,
        "desc": "Manuell erzeugt",
        "def": false}
        da führe ich aus extendObject (oID,{common:{min:0,max:2}})

        ergibt:
        "common": {
        "name": "State",
        "role": "",
        "type": "number",
        "read": true,
        "write": true,
        "desc": "Manuell erzeugt",
        "def": false,
        "min": 0,
        "max":2} also wird das ineinander gemerged

        in dem neuen Controller ergibt das

        "common": {
        "min": 0,
        "max":2}

        und das halte ich für buggy.
        extendObject
        extendObject(id, obj, callback);
        It is almost the same as setObject, but first it reads the object and tries to merge all settings together.
        Use it like this:
        // Stop instance
        extendObject('system.adapter.sayit.0', {common: {enabled: false}});

        im 2.1 wird das Object nicht gemergt, sondern ersetzt

        Black

        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Blackmike last edited by paul53

          @Blackmike
          Gerade getestet und Du hast recht: extendObject(id, obj) funktioniert nicht mehr wie beschrieben.
          js-controller 2.1.0
          javascript 4.3.1

          Blackmike 1 Reply Last reply Reply Quote 0
          • Blackmike
            Blackmike @paul53 last edited by

            @paul53 sagte in Anlegen von States über script in alias.0:

            @Blackmike
            Gerade getestet und Du hast recht: extendObject(id, obj) funktioniert nicht mehr wie beschrieben.
            js-controller 2.1.0
            javascript 4.3.1

            gut, oder auch nicht... stellt du das issue ?
            als workaround habe ich mal das probiert:

            var extCom= {};
            extCom.common= Object.assign (oID.common,{wrapper: wpath+sWrapID});
            extendObject (oID._id, extCom,function () {....;}
            

            kann aber nicht die generelle Lösung sein.
            aber kannst dir mein gesicht vorstellen , als bei Start damit binnen Sekenden alle meine States am Ar... waren und das log logischerweise von Zugriffsfehlern überlief. Zum Glück gibts bei proxmox die Snapshoots, ich hatte da keinen sinnigen fehler gefunden, da produktivsystem muss laufen, also rollback und die VM geklont, jontroller upgrade, und spurensuche...
            ich hab jetzt das Wrapperscript mit meinem Workaround angepasst und werd nun nochmal ein Upgrade des hauptsystems probieren (An den Snapshot hab ich auch gedacht)

            Danke für deine Mühe, Black

            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Blackmike last edited by

              @Blackmike sagte:

              stellt du das issue ?

              Ja, erledigt.

              Blackmike 1 Reply Last reply Reply Quote 0
              • Blackmike
                Blackmike @paul53 last edited by

                ok, so als zwischenmeldung, nach dem anpassen des wrapperscriptes auf den Workaround, snapshot und controllerupdate startete das produktivsystem sauber durch.

                Nicht destotrotz werd ich an der geschichte mit den aliases nun weitermachen, ist aber etwas der durck raus nun da fehelr gefunden. Im Enszustand soll dann aliases den part des wrappers übernehmen.

                Black

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

                  Sehr interessant. Auf reinem js-Controller Level gibt es sogar Tests für extendObject. Die hab ich jetzt noch erweitert. Da klappt das extend wie es soll ... hhhmmmmmm ......

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

                    @apollon77 sagte in Anlegen von States über script in alias.0:

                    Sehr interessant. Auf reinem js-Controller Level gibt es sogar Tests für extendObject. Die hab ich jetzt noch erweitert. Da klappt das extend wie es soll ... hhhmmmmmm ......

                    kann ich dir mit irgendwelchen Angaben weiterhelfen ?
                    paul53 konnte dies ja auch nachstellen.

                    Black

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

                      Mal frech gefragt: Eure Tests ... haben die mit controller 1.5 und 2.1 mit der gleichen javascript Adapter version stattgefunden? Wenn ja mit welcher?

                      Also wir sind gerade an folgendem Punkt: Scheinbar ändert "Vm2" (was die Sandbox ist in der die Skripte laufen) hier das Objekt etwas und daher wird es nicht mehr als ein Objekt erkannt an der Stelle wo die Daten gemerged werden.
                      Wenn das so ist, dann sollte dieses Problem aber seit javascript 3.7 oder so existieren (oder wann auch immer vm2 offiziell für alle an war ...)

                      Blackmike 1 Reply Last reply Reply Quote 0
                      • Blackmike
                        Blackmike @apollon77 last edited by Blackmike

                        @apollon77
                        javascriptadapter war immer der gleiche, der war schon vor dem controllerUpgrade auf 4.3.3

                        Stand war:
                        vor dem Upgrade lief js 1.5.14 mit jenigmn javascript adapter, ohne probleme (das war auch das Produktivsystem)

                        nach dem Upgrade auf 2.1.0 hats mir alle States zerschlagen, die der Wrapper angefasst hat, also eine ganze menge

                        (Ich habe mir angewöhnt schon seit längerem, immer zuerst den JS-Controller uozugraden, system beobachten udn erst dann evtl weitere Adapter nachzuziehen)

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

                          Seeeehr Strange ... wir überlegen wie wir die Ursache fixen.

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

                            Hey All, der war echt nice 😉

                            Also was passiert ist, ist das Objekte die in Javascript Skripten erzeugt werden quasi noch so ein bissl der "Sandbox" in der sie ausgeführt werden mit sich rumtragen.
                            Das war schon immer so. Die ganze "Objekt-Logik" (auch das echte "extendObject") hat im js-controller (und nur da) stattgefunden. Das Objekt wurde serialisiert und zum controller übertragen. Dadurch ist der "komische Teil" quasi abgeschüttelt worden. Deswegen hatte das keine Auswirkung.

                            Seit js-controller 2.0 übernimmt die Logik eine Library die vom Adapter direk genutzt wird und die "Datenbank" macht quasi nur noch "get" und "set". Das extend wird also quasi vom Adapter-Prozess gemacht und hier stolpert die "extend"-Funktion jetzt über den Sandbox-Teil im Objekt und arbeitet dadurch anders weil es kein echtes Objekt mehr ist sondern was komisches halt 🙂

                            Wir haben jetzt einen Fix dafür. Am Ende sind es aktuell zwei Stellen wo wir etwas geändert haben dafür, es sollte aber reichen wenn Ihr EINE davon nutzt!

                            1.) Es gibt eine neue Version der genannten Objects-Library. Jeder der den controller 2.1.0 nach heute 13:30 Uhr installiert hat sollte diese schon haben. Ansonsten kann diese aktualisiert werden: cd /opt/iobroker/node_modules/iobroker.js-controller dann dort npm update iobroker.objects-redis sollte die 1.2.7 der Library installieren. Danach mindesterns den javascript adapter neu starten (am besten gesamten controller)

                            2.) Installiert JavaScript vom GitHub. Kommt dann da in die nächste Version rein.

                            Ingo

                            paul53 1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @apollon77 last edited by

                              @apollon77
                              Habe Version 1 getestet: Musste mit sudo npm update iobroker.objects-redis installieren. Nach Neustart von ioBroker keine Veränderung: common wird ersetzt, nicht ergänzt.

                              apollon77 1 Reply Last reply Reply Quote 0
                              • apollon77
                                apollon77 @paul53 last edited by apollon77

                                @paul53 Hm ... kannst Du mal im "Node_modules" Baum sichen wo ggf diese Lib so alles rumliegt und wleche version installiert ist ... hat die npm ausgabe gezeigt das es getan hat und die 1.2.7 installiert wurde? sonst ggf mal "npm install iobroker.objects-redis@1.2.7" machen ?!

                                Ansomsten die einzige Änderung für Variabnte 2 ist: https://github.com/ioBroker/ioBroker.javascript/commit/e5f38b59f119961634eb59c677bfc848ac14bb2b

                                0 Apollon77 committed to ioBroker/ioBroker.javascript
                                * prevent "sandboxed" objects from being wrong used in extendObject
                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @apollon77 last edited by

                                  @apollon77 sagte:

                                  hat die npm ausgabe gezeigt das es getan hat und die 1.2.7 installiert wurde?

                                  Ja.

                                  Habe inzwischen auch die Änderung in sandbox.js, Zeile 2755 getestet: Mit dieser Änderung funktioniert es wie es soll.

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

                                    Ja ich weiss inzwischen auch warum das nicht klappt ... Ein js.controller 2.1.1 ist im Latest für kurzen Check ... Wer mag bitte checken

                                    paul53 1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 @apollon77 last edited by

                                      @apollon77
                                      Update auf js-controller 2.1.1 (Fixer war notwendig), Änderung in Zeile 2755 sandbox.js rückgängig gemacht, JS-Instanz neu gestartet und getetest: extendObject() funktioniert wie erwartet.

                                      1 Reply Last reply Reply Quote 1
                                      • Blackmike
                                        Blackmike last edited by Blackmike

                                        Ich seh den 2.1.1 noch nicht in latest ... wenn ich ihn hab probiere ich auch

                                        paul53 1 Reply Last reply Reply Quote 0
                                        • paul53
                                          paul53 @Blackmike last edited by

                                          @Blackmike sagte:

                                          Ich seh den 2.1.1 noch nicht in latest

                                          Adapterinformationen aktualisieren (Reiter "Adapter").

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          821
                                          Online

                                          32.0k
                                          Users

                                          80.4k
                                          Topics

                                          1.3m
                                          Posts

                                          states script erzeugen
                                          6
                                          29
                                          1792
                                          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