Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

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

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    23
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

[Gelöst] TypeScript Kompilierfehler setObject

Geplant Angeheftet Gesperrt Verschoben JavaScript
19 Beiträge 6 Kommentatoren 1.2k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • 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
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antworten Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • OliverIOO OliverIO

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

            U Offline
            U Offline
            uwe72
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            0
            • OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #15

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

                  AlCalzoneA 1 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                    0
                    • U uwe72

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

                      AlCalzoneA Offline
                      AlCalzoneA Offline
                      AlCalzone
                      Developer
                      schrieb am zuletzt editiert von
                      #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 Antworten Letzte Antwort
                      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
                        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                        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
                          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          670

                          Online

                          32.5k

                          Benutzer

                          81.7k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe