Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Gelöst] TypeScript Kompilierfehler setObject

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    885

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[Gelöst] TypeScript Kompilierfehler setObject

Scheduled Pinned Locked Moved JavaScript
19 Posts 6 Posters 1.3k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • U uwe72

    @oliverio Danke dir.

    Für mich ist dies allerdings auch ein Bug im TypeScript "Adapter", den dieser (sinnfreie) Code hier sollte eigentlich schon funktionieren?!

    const objId = 'shelly.0.SHPLG2-1#49FE33#1.online';
    let obj = getObject(objId);
    setObject(objId, obj);
    

    Bringt aber den gleichen Fehler. Eigentlich hole ich mir ja die Struktur und möchte diese nur anreichern. Von dem her sollte das .name Property ja gefüllt bzw. vorhanden sein?!

    ```javascript.1 (486) script.js.common.Berechnungen.Test_Statistics: TypeScript compilation failed: setObject(objId, obj); ^ ERROR: Argument of type '{ common: { [x: string]: any; [x: number]: any; }; type: "state" | "channel" | "folder" | "device"; acl: { object: number; state: number; owner: string; ownerGroup: string; }; _id: string; native: { [x: string]: any; }; enums: { ...; }; from: string; user: string; ts: number; }' is not assignable to parameter of type '(Omit<StateObject, "acl" | "_id"> & { _id?: string; acl?: StateACL; }) | (Omit<InstanceObject, "acl" | "_id"> & { _id?: string; acl?: ObjectACL; }) | ... 10 more ... | (Omit<...> & { ...; })'. Type '{ common: { [x: string]: any; [x: number]: any; }; type: "state" | "channel" | "folder" | "device"; acl: { object: number; state: number; owner: string; ownerGroup: string; }; _id: string; native: { [x: string]: any; }; enums: { ...; }; from: string; user: string; ts: number; }' is not assignable to type 'Omit<OtherObject, "acl" | "_id"> & { _id?: string; acl?: ObjectACL; }'. Type '{ common: { [x: string]: any; [x: number]: any; }; type: "state" | "channel" | "folder" | "device"; acl: { object: number; state: number; owner: string; ownerGroup: string; }; _id: string; native: { [x: string]: any; }; enums: { ...; }; from: string; user: string; ts: number; }' is not assignable to type 'Omit<OtherObject, "acl" | "_id">'. Types of property 'common' are incompatible. Property 'name' is missing in type '{ [x: string]: any; [x: number]: any; }' but required in type 'OtherCommon'.
    
    U Offline
    U Offline
    uwe72
    wrote on last edited by
    #6

    So scheint es zu funktionieren:

    const originalDatenpunkt = 'shelly.0.SHPLG2-1#49FE33#1.online';
    
    setObject(originalDatenpunkt, {
        type: 'state',
            common: {
            name: getObject(originalDatenpunkt).common.name, 
            type: getObject(originalDatenpunkt).common.type,  
            unit: getObject(originalDatenpunkt).common.unit,    
            read: true,
            write: true,
            role: getObject(originalDatenpunkt).common.role,    
            alias: {
                id: originalDatenpunkt
            },
            custom: {
                "statistics.0": {
                    "enabled": true,
                    "count": false,
                    "fiveMin": false,
                    "sumCount": false,
                    "impUnitPerImpulse": 1,
                    "impUnit": "",
                    "timeCount": true,
                    "avg": false,
                    "minmax": false,
                    "sumDelta": false,
                    "sumIgnoreMinus": false,
                    "groupFactor": 1,
                    "logName": "online2"
                } 
            }       
        },
        native: {}
    });
    
    haus-automatisierungH 1 Reply Last reply
    0
    • U uwe72

      So scheint es zu funktionieren:

      const originalDatenpunkt = 'shelly.0.SHPLG2-1#49FE33#1.online';
      
      setObject(originalDatenpunkt, {
          type: 'state',
              common: {
              name: getObject(originalDatenpunkt).common.name, 
              type: getObject(originalDatenpunkt).common.type,  
              unit: getObject(originalDatenpunkt).common.unit,    
              read: true,
              write: true,
              role: getObject(originalDatenpunkt).common.role,    
              alias: {
                  id: originalDatenpunkt
              },
              custom: {
                  "statistics.0": {
                      "enabled": true,
                      "count": false,
                      "fiveMin": false,
                      "sumCount": false,
                      "impUnitPerImpulse": 1,
                      "impUnit": "",
                      "timeCount": true,
                      "avg": false,
                      "minmax": false,
                      "sumDelta": false,
                      "sumIgnoreMinus": false,
                      "groupFactor": 1,
                      "logName": "online2"
                  } 
              }       
          },
          native: {}
      });
      
      haus-automatisierungH Online
      haus-automatisierungH Online
      haus-automatisierung
      Developer Most Active
      wrote on last edited by
      #7

      @uwe72 sagte in TypeScript Kompilierfehler setObject:

      So scheint es zu funktionieren:

      Damit wäre ich aber vorsichtig, da Du die Objekte änderst (z.B. read und write) und auch andere custom settings verwirfst. Bitte produktiv nicht so verwenden.

      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
      📚 Meine inoffizielle ioBroker Dokumentation

      U 1 Reply Last reply
      0
      • haus-automatisierungH haus-automatisierung

        @uwe72 sagte in TypeScript Kompilierfehler setObject:

        So scheint es zu funktionieren:

        Damit wäre ich aber vorsichtig, da Du die Objekte änderst (z.B. read und write) und auch andere custom settings verwirfst. Bitte produktiv nicht so verwenden.

        U Offline
        U Offline
        uwe72
        wrote on last edited by uwe72
        #8

        @haus-automatisierung

        Gebe ich dir recht, insbesondere bei read/write. Dies könnte ich noch analog den anderen Einstellungen ändern.

        Bei custom hatte ich auch die Sorge, dass wenn da schon andere Custom-Einstellungen existieren für andere Adapter, z.B. Telegram, dass dies dann überschrieben wird und somit entfernt wird. Der Test hatte aber funktioniert.

        So oder so, wäre es nur ein hässlicher Workarround, der ja, ggf. auch Schaden anrichtet.

        Hast Du mir ein Verbesserungsvorschlag für meinen initialen Versuch? Danke dir.

        Vermutlich aber gar nicht so einfach, siehe #5
        https://forum.iobroker.net/topic/57264/typescript-kompilierfehler-setobject/5
        Für mich sieht dies nach einem Bug im TypeScript "Adapter" aus.

        AlCalzoneA 1 Reply Last reply
        0
        • U uwe72

          @haus-automatisierung

          Gebe ich dir recht, insbesondere bei read/write. Dies könnte ich noch analog den anderen Einstellungen ändern.

          Bei custom hatte ich auch die Sorge, dass wenn da schon andere Custom-Einstellungen existieren für andere Adapter, z.B. Telegram, dass dies dann überschrieben wird und somit entfernt wird. Der Test hatte aber funktioniert.

          So oder so, wäre es nur ein hässlicher Workarround, der ja, ggf. auch Schaden anrichtet.

          Hast Du mir ein Verbesserungsvorschlag für meinen initialen Versuch? Danke dir.

          Vermutlich aber gar nicht so einfach, siehe #5
          https://forum.iobroker.net/topic/57264/typescript-kompilierfehler-setobject/5
          Für mich sieht dies nach einem Bug im TypeScript "Adapter" aus.

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          wrote on last edited by
          #9

          @uwe72 Rein beim Drüberschauen würde ich vermuten, dass anhand der Objekt-ID nicht 100% klar ist, was das genau für ein Objekt ist. Wenn du TS auf die Sprünge hilfst, z.B.(

          let obj: iobJS.StateObject = getObject(objId);
          

          für einen State, oder

          let obj: iobJS.ChannelObject = getObject(objId);
          

          für einen Channel, etc., dann sollte die Zuweisung auch klappen (hoffentlich). Sonst muss ich nochmal schauen, ob das etwas weniger "auf die Fresse" geht :D

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

          U 2 Replies Last reply
          1
          • AlCalzoneA AlCalzone

            @uwe72 Rein beim Drüberschauen würde ich vermuten, dass anhand der Objekt-ID nicht 100% klar ist, was das genau für ein Objekt ist. Wenn du TS auf die Sprünge hilfst, z.B.(

            let obj: iobJS.StateObject = getObject(objId);
            

            für einen State, oder

            let obj: iobJS.ChannelObject = getObject(objId);
            

            für einen Channel, etc., dann sollte die Zuweisung auch klappen (hoffentlich). Sonst muss ich nochmal schauen, ob das etwas weniger "auf die Fresse" geht :D

            U Offline
            U Offline
            uwe72
            wrote on last edited by
            #10

            @alcalzone said in TypeScript Kompilierfehler setObject:

            let obj: iobJS.StateObject = getObject(objId);

            Ich habe es nun so:

            const originalDatenpunkt = 'shelly.0.SHPLG2-1#49FE33#1.online';
            let obj: iobJS.StateObject = getObject(originalDatenpunkt);
            

            Bekomme diesen Fehler:

            javascript.1 (486) script.js.common.Berechnungen.Test_Statistics: TypeScript compilation failed: let obj: iobJS.StateObject = getObject(originalDatenpunkt); ^ ERROR: Type '{ common: { [x: string]: any; [x: number]: any; }; type: "state" | "channel" | "folder" | "device"; acl: { object: number; state: number; owner: string; ownerGroup: string; }; _id: string; native: { [x: string]: any; }; enums: { ...; }; from: string; user: string; ts: number; }' is not assignable to type 'StateObject'. Types of property 'type' are incompatible. Type '"state" | "channel" | "folder" | "device"' is not assignable to type '"state"'. Type '"channel"' is not assignable to type '"state"'.
            

            D.h. "obj" wird schon im Editor angemeckert:
            89e5ddda-12cc-4378-abd6-74f2f91520dc-image.png

            OliverIOO 1 Reply Last reply
            0
            • U uwe72

              @alcalzone said in TypeScript Kompilierfehler setObject:

              let obj: iobJS.StateObject = getObject(objId);

              Ich habe es nun so:

              const originalDatenpunkt = 'shelly.0.SHPLG2-1#49FE33#1.online';
              let obj: iobJS.StateObject = getObject(originalDatenpunkt);
              

              Bekomme diesen Fehler:

              javascript.1 (486) script.js.common.Berechnungen.Test_Statistics: TypeScript compilation failed: let obj: iobJS.StateObject = getObject(originalDatenpunkt); ^ ERROR: Type '{ common: { [x: string]: any; [x: number]: any; }; type: "state" | "channel" | "folder" | "device"; acl: { object: number; state: number; owner: string; ownerGroup: string; }; _id: string; native: { [x: string]: any; }; enums: { ...; }; from: string; user: string; ts: number; }' is not assignable to type 'StateObject'. Types of property 'type' are incompatible. Type '"state" | "channel" | "folder" | "device"' is not assignable to type '"state"'. Type '"channel"' is not assignable to type '"state"'.
              

              D.h. "obj" wird schon im Editor angemeckert:
              89e5ddda-12cc-4378-abd6-74f2f91520dc-image.png

              OliverIOO Offline
              OliverIOO Offline
              OliverIO
              wrote on last edited by
              #11

              @uwe72
              Und was steht im iobroker was für ein Typ das Objekt ist?

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              U 1 Reply Last reply
              0
              • OliverIOO OliverIO

                @uwe72
                Und was steht im iobroker was für ein Typ das Objekt ist?

                U Offline
                U Offline
                uwe72
                wrote on last edited by uwe72
                #12

                @oliverio

                Da steht das gleiche wie oben als Text gepostet:
                95d7a7d4-8749-4b44-a5ec-1fadf9b163d9-image.png

                javascript.1 (486) script.js.common.Berechnungen.Test_Statistics: TypeScript compilation failed: let obj: iobJS.StateObject = getObject(originalDatenpunkt); ^ ERROR: Type '{ common: { [x: string]: any; [x: number]: any; }; type: "state" | "channel" | "folder" | "device"; acl: { object: number; state: number; owner: string; ownerGroup: string; }; _id: string; native: { [x: string]: any; }; enums: { ...; }; from: string; user: string; ts: number; }' is not assignable to type 'StateObject'. Types of property 'type' are incompatible. Type '"state" | "channel" | "folder" | "device"' is not assignable to type '"state"'. Type '"channel"' is not assignable to type '"state"'.
                
                1 Reply Last reply
                0
                • OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  wrote on last edited by OliverIO
                  #13

                  @uwe72
                  ich denke das in der Ansicht des Objektbaums bei Typ
                  channel dran steht.
                  Auf Typ channel kannst du kein typ state setzen., da channel kein attribut common.custom besitzt
                  oder es ist umgekehrt, das kann ich nicht so richtig rauslesen

                  @uwe72 sagte in TypeScript Kompilierfehler setObject:

                  Type '"channel"' is not assignable to type '"state"'.

                  warum willst du unbedingt in custom was reinschreiben? ganz davon abgesehen, das es schon gehen muss, aber wenn du eine objektstruktur in einem datenpunkt ablegen willst, dann würde ich einfach mit
                  getState und setState arbeiten und das Objekt dort einfach mit JSON.stringify und JSON.parse schreiben und lesen.

                  und was mir noch aufgefallen ist:
                  statistics.0 ist kein eigener datenpunkt
                  das erste richtige objekt in der hierarchie ist
                  statistics.0.save und
                  statistics.0.temp

                  statistics.0 sieht zwar so aus, existiert für sich aber nicht als eigenständiges objekt
                  dies ist erkennbar, das im objektbaum bei typ nix dran steht.

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  U haus-automatisierungH 2 Replies Last reply
                  0
                  • OliverIOO OliverIO

                    @uwe72
                    ich denke das in der Ansicht des Objektbaums bei Typ
                    channel dran steht.
                    Auf Typ channel kannst du kein typ state setzen., da channel kein attribut common.custom besitzt
                    oder es ist umgekehrt, das kann ich nicht so richtig rauslesen

                    @uwe72 sagte in TypeScript Kompilierfehler setObject:

                    Type '"channel"' is not assignable to type '"state"'.

                    warum willst du unbedingt in custom was reinschreiben? ganz davon abgesehen, das es schon gehen muss, aber wenn du eine objektstruktur in einem datenpunkt ablegen willst, dann würde ich einfach mit
                    getState und setState arbeiten und das Objekt dort einfach mit JSON.stringify und JSON.parse schreiben und lesen.

                    und was mir noch aufgefallen ist:
                    statistics.0 ist kein eigener datenpunkt
                    das erste richtige objekt in der hierarchie ist
                    statistics.0.save und
                    statistics.0.temp

                    statistics.0 sieht zwar so aus, existiert für sich aber nicht als eigenständiges objekt
                    dies ist erkennbar, das im objektbaum bei typ nix dran steht.

                    U Offline
                    U Offline
                    uwe72
                    wrote on last edited by
                    #14

                    @oliverio Ich möchte ja programmatisch für einen Datenpunkt den Statistic-Adapter aktivieren.

                    Habe ein Array mit allen Devices (ca. 200-250). So kann ich generisch wie gesagt für alle Devices den StatisticAdapter aktivieren.

                    1 Reply Last reply
                    0
                    • AlCalzoneA AlCalzone

                      @uwe72 Rein beim Drüberschauen würde ich vermuten, dass anhand der Objekt-ID nicht 100% klar ist, was das genau für ein Objekt ist. Wenn du TS auf die Sprünge hilfst, z.B.(

                      let obj: iobJS.StateObject = getObject(objId);
                      

                      für einen State, oder

                      let obj: iobJS.ChannelObject = getObject(objId);
                      

                      für einen Channel, etc., dann sollte die Zuweisung auch klappen (hoffentlich). Sonst muss ich nochmal schauen, ob das etwas weniger "auf die Fresse" geht :D

                      U Offline
                      U Offline
                      uwe72
                      wrote on last edited by
                      #15

                      @alcalzone Siehe zuvor. Hättest Du mir noch einen Tipp? Grüße aus Brasilien. Uwe

                      AlCalzoneA 1 Reply Last reply
                      0
                      • OliverIOO OliverIO

                        @uwe72
                        ich denke das in der Ansicht des Objektbaums bei Typ
                        channel dran steht.
                        Auf Typ channel kannst du kein typ state setzen., da channel kein attribut common.custom besitzt
                        oder es ist umgekehrt, das kann ich nicht so richtig rauslesen

                        @uwe72 sagte in TypeScript Kompilierfehler setObject:

                        Type '"channel"' is not assignable to type '"state"'.

                        warum willst du unbedingt in custom was reinschreiben? ganz davon abgesehen, das es schon gehen muss, aber wenn du eine objektstruktur in einem datenpunkt ablegen willst, dann würde ich einfach mit
                        getState und setState arbeiten und das Objekt dort einfach mit JSON.stringify und JSON.parse schreiben und lesen.

                        und was mir noch aufgefallen ist:
                        statistics.0 ist kein eigener datenpunkt
                        das erste richtige objekt in der hierarchie ist
                        statistics.0.save und
                        statistics.0.temp

                        statistics.0 sieht zwar so aus, existiert für sich aber nicht als eigenständiges objekt
                        dies ist erkennbar, das im objektbaum bei typ nix dran steht.

                        haus-automatisierungH Online
                        haus-automatisierungH Online
                        haus-automatisierung
                        Developer Most Active
                        wrote on last edited by haus-automatisierung
                        #16

                        @oliverio sagte in TypeScript Kompilierfehler setObject:

                        statistics.0 sieht zwar so aus, existiert für sich aber nicht als eigenständiges objekt
                        dies ist erkennbar, das im objektbaum bei typ nix dran steht.

                        Das ist normal und auch richtig so. Bei einigen Adaptern wird das als Objekt für den File-Meta-Storage angelegt (z.B. vis). Aber das ist ganz selten und hat mit dem Problem nichts zu tun.

                        🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                        🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                        📚 Meine inoffizielle ioBroker Dokumentation

                        1 Reply Last reply
                        0
                        • U uwe72

                          @alcalzone Siehe zuvor. Hättest Du mir noch einen Tipp? Grüße aus Brasilien. Uwe

                          AlCalzoneA Offline
                          AlCalzoneA Offline
                          AlCalzone
                          Developer
                          wrote on last edited by
                          #17

                          @uwe72 Ok dann anders:

                          const originalDatenpunkt = 'shelly.0.SHPLG2-1#49FE33#1.online';
                          let obj = getObject(originalDatenpunkt) as iobJS.StateObject;
                          

                          Der Unterschied zur vorherigen Variante ist dass du TS jetzt sagst: "Ich bin mir sicher, das ist ein StateObject". Das andere hat bedeutet: "obj ist ein State, lese mir da das Objekt xyz rein" (was nicht garantiert ein StateObject ist)

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

                          U 2 Replies Last reply
                          0
                          • AlCalzoneA AlCalzone

                            @uwe72 Ok dann anders:

                            const originalDatenpunkt = 'shelly.0.SHPLG2-1#49FE33#1.online';
                            let obj = getObject(originalDatenpunkt) as iobJS.StateObject;
                            

                            Der Unterschied zur vorherigen Variante ist dass du TS jetzt sagst: "Ich bin mir sicher, das ist ein StateObject". Das andere hat bedeutet: "obj ist ein State, lese mir da das Objekt xyz rein" (was nicht garantiert ein StateObject ist)

                            U Offline
                            U Offline
                            uwe72
                            wrote on last edited by uwe72
                            #18

                            @alcalzone Perfekt, danke dir! Bin wirklich sehr dankbar nun eine funktionierende programmatische Lösung zu haben (für das "Aktivieren" vom Statistikadapter, o.ä.) Hat nun funktioniert:

                            const objId = 'shelly.0.SHPLG2-1#49FE33#1.online';
                            let obj = getObject(objId) as iobJS.StateObject;
                            
                            if (!obj.common.custom) {
                              obj.common.custom = {};
                            }
                             
                            obj.common.custom['statistics.0'] = {
                              "enabled": true,
                              "count": false,
                              "sumCount": false,
                              "timeCount": true,
                              "fiveMin": false,
                              "impUnitPerImpulse": 1,
                              "impUnit": "",
                              "avg": false,
                              "minmax": false,
                              "sumDelta": false,
                              "sumIgnoreMinus": false,
                              "groupFactor": 1,
                              "logName": "online_script_trockner"
                            };
                             
                            setObject(objId, obj);
                            
                            1 Reply Last reply
                            1
                            • AlCalzoneA AlCalzone

                              @uwe72 Ok dann anders:

                              const originalDatenpunkt = 'shelly.0.SHPLG2-1#49FE33#1.online';
                              let obj = getObject(originalDatenpunkt) as iobJS.StateObject;
                              

                              Der Unterschied zur vorherigen Variante ist dass du TS jetzt sagst: "Ich bin mir sicher, das ist ein StateObject". Das andere hat bedeutet: "obj ist ein State, lese mir da das Objekt xyz rein" (was nicht garantiert ein StateObject ist)

                              U Offline
                              U Offline
                              uwe72
                              wrote on last edited by uwe72
                              #19

                              Bitte diesen Kommentar löschen, habe ein neues Ticket aufgemacht:
                              https://forum.iobroker.net/topic/57367/typescript-zugriff-iobjs-stateobject-innerhalb-foreach

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              451

                              Online

                              32.6k

                              Users

                              82.1k

                              Topics

                              1.3m

                              Posts
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Home
                              • Recent
                              • Tags
                              • Unread 0
                              • Categories
                              • Unreplied
                              • Popular
                              • GitHub
                              • Docu
                              • Hilfe