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

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    652

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

[Gelöst] TypeScript Kompilierfehler setObject

Geplant Angeheftet Gesperrt Verschoben JavaScript
19 Beiträge 6 Kommentatoren 1.3k 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.
  • 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

                      905

                      Online

                      32.6k

                      Benutzer

                      81.9k

                      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