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. Probleme mit set Object beim theObject.common.custom Bereich

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

Probleme mit set Object beim theObject.common.custom Bereich

Geplant Angeheftet Gesperrt Verschoben JavaScript
1 Beiträge 1 Kommentatoren 147 Aufrufe 1 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.
  • R Offline
    R Offline
    Ralf 2
    schrieb am zuletzt editiert von
    #1

    Was ich will: Ich habe früher mit einigen Adaptern gespielt, setze diese jedoch nicht mehr ein. Adapter wie "influxdb.0" und "lovelace.0" haben sich dadurch in vielen Datenpunkten verewigt. Beim löschen der Adapter wurden diese Einträge jedoch nicht gelöscht. Ich möchte nun diese Einträge mit einem Script bereinigen.

    Mein Problem: Beim Speichern mittels "setObject" werden zwar Werte wie theObject.common.role = "state"; korrekt übernommen, aber der Bereich theObject.common.custom; wird nach dem löschen des entsprechenden Eintrags nicht in der DP-Datenbank aktualisiert. Was ich seltsam finde: Starte ich das Script ein zweites mal, dann hat der Javascript-Adapter den geänderten Wert, im Reiter Objekte ist jedoch keine Änderung zu sehen. Nach Neustart des Javascript-Adapters hat auch dieser wieder seinen alten Wert. Er cached also den korrekten Wert, aber transportiert diesen nicht in die State-Datenbank.

    Wo habe ich hier einen Denkfehler?
    Weiß einer, wie ich das am sinnvollsten erledigen kann?

    Das Script:

    var anzahl = 0;
    var treffer = 0;
    var theKey = "sql.0";
    
    //var SelectorALL = $('channel[state.id=*]');
    var SelectorALL = $('channel[state.id=0_userdata.0.Temp.*]');
    SelectorALL.each(function (id, i) {
        anzahl++;
        let theObject = getObject(id);
        theObject.common.role = "state";// +++++ dieser Wert wird übernommen
        //extendObject(id, theObject);
        //setObject(id, theObject, (err) => {
        //    if (err) log('Cannot write object: ' + err);
        //});
        console.debug("ID: " + id);
        //console.debug("TheObject ####-> " + JSON.stringify(theObject));
        let theObjectKeys1 = Object.keys(theObject);
        if (theObjectKeys1.includes("common")) {
            let theObjectKeys2 = Object.keys(theObject.common);
            //log(theObjectKeys2);
            if (theObjectKeys2.includes("custom")) {
                let theObjectKeys3 = Object.keys(theObject.common.custom);
                //log(theObjectKeys3);
                //if theObjectKeys3.includes("influxdb.0"){
                if (theObjectKeys3.includes(theKey)) {
                    treffer++;
                    let customwert = theObject.common.custom;
                    console.debug("Customwert: " + JSON.stringify(customwert));
                    delete theObject.common.custom[theKey];// ++++++ diese Änderung wird nicht übernommen
                    customwert = theObject.common.custom;
                    console.debug("Customwert nach delete: " + JSON.stringify(customwert));
                    console.debug("ID: " + id);
                    //extendObject(id, theObject); 
    
                    //setObject(id, theObject);
                    console.debug("TheID: " + id);
                    setObject(id, theObject, (err) => {
                        if (err) log('Cannot write object: ' + err);
                    });
                    console.debug("--> " + JSON.stringify(theObject));
                }
            }
        }
    });
    console.debug("Anzahl: " + anzahl + " Treffer: " + treffer);
    
    
    
    /*
    Beispiele aus dem Forum:
    
    const obj = getObject('knx.0.Multimedia(MM).Gar__Wkst_.MM_-WS-HifiBerry-Favorit_Set-_(cmdPlayFavorite)');
    obj.common.type = 'number';
    obj.common.read = false;
    obj.common.min = 3;
    obj.common.max = 253;
    setObject('knx.0.Multimedia(MM).Gar__Wkst_.MM_-WS-HifiBerry-Favorit_Set-_(cmdPlayFavorite)', obj);
    
    
    Warum nicht alles einfach in einem einzigen extendObject Aufruf?
    
    extendObject('...id...', {
      common: {
        read: false,
        write: true,
        role: "ICH333",
        // ... rest
      }
    });
    Das ursprüngliche Problem ist, dass extendObject asynchron arbeitet und die ersten Aufrufe noch gar nicht abgearbeitet sind, wenn der letzte zuschlägt (und letztendlich gewinnt).
    
    Wenn es wirklich nacheinander sein muss:
    
    await extendObjectAsync('...id', { common: {read: false} } );
    await extendObjectAsync('...id', { common: {write: true} } );
    // ...
    aber das ist nicht zu empfehlen, da es in deinem Fall 6x das Objekt ändert, statt nur 1x.
    */
    

    und hier das formatierte Log-File, erster Lauf:

    19.12.2024, 19:14:05.513	[info ]: javascript.1 (81151) Stopping script script.js.System.RI-RepairCommonData_MissingAdapter2
    19.12.2024, 19:14:48.101	[info ]: javascript.1 (81151) Stopping script script.js.System.RI-RepairCommonData_MissingAdapter2
    19.12.2024, 19:14:54.551	[info ]: javascript.3 (81510) Start JavaScript script.js.System.RI-RepairCommonData_MissingAdapter2 (JavaScript/js)
    19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: ID: 0_userdata.0.Temp.BaumAusString
    19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: ID: 0_userdata.0.Temp.BaumEinString
    19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: ID: 0_userdata.0.Temp.testzahl
    19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: 
    Customwert: 
    {
        "statistics.0": {
            "enabled": true,
            "count": false,
            "fiveMin": false,
            "sumCount": false,
            "impUnitPerImpulse": 1,
            "impUnit": "",
            "timeCount": false,
            "avg": false,
            "minmax": false,
            "sumDelta": false,
            "sumIgnoreMinus": false,
            "groupFactor": 1,
            "logName": "testzahl"
        },
        "sql.0": {
            "enabled": true,
            "storageType": "",
            "counter": false,
            "aliasId": "",
            "debounceTime": 0,
            "blockTime": 60000,
            "changesOnly": true,
            "changesRelogInterval": 0,
            "changesMinDelta": 0,
            "ignoreBelowNumber": "",
            "disableSkippedValueLogging": false,
            "retention": 31536000,
            "customRetentionDuration": 365,
            "maxLength": 0,
            "enableDebugLogs": false,
            "debounce": 1000
        }
    }
    
    19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: 
    Customwert nach delete: 
    {
        "statistics.0": {
            "enabled": true,
            "count": false,
            "fiveMin": false,
            "sumCount": false,
            "impUnitPerImpulse": 1,
            "impUnit": "",
            "timeCount": false,
            "avg": false,
            "minmax": false,
            "sumDelta": false,
            "sumIgnoreMinus": false,
            "groupFactor": 1,
            "logName": "testzahl"
        }
    }
    
    
    19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: ID: 0_userdata.0.Temp.testzahl
    19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: TheID: 0_userdata.0.Temp.testzahl
    19.12.2024, 19:14:54.800	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: --> 
    {
        "common": {
            "name": "testzahl",
            "desc": "Manuell erzeugt",
            "role": "state",
            "type": "number",
            "read": true,
            "write": true,
            "def": 0,
            "custom": {
                "statistics.0": {
                    "enabled": true,
                    "count": false,
                    "fiveMin": false,
                    "sumCount": false,
                    "impUnitPerImpulse": 1,
                    "impUnit": "",
                    "timeCount": false,
                    "avg": false,
                    "minmax": false,
                    "sumDelta": false,
                    "sumIgnoreMinus": false,
                    "groupFactor": 1,
                    "logName": "testzahl"
                }
            }
        },
        "type": "state",
        "native": {},
        "_id": "0_userdata.0.Temp.testzahl",
        "acl": {
            "object": 1638,
            "state": 1638,
            "owner": "system.user.admin",
            "ownerGroup": "system.group.administrator"
        },
        "from": "system.adapter.admin.0",
        "user": "system.user.admin",
        "ts": 1734611500825
    }
    
    
    19.12.2024, 19:14:54.801	[debug]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: Anzahl: 3 Treffer: 1
    19.12.2024, 19:14:54.801	[info ]: javascript.3 (81510) script.js.System.RI-RepairCommonData_MissingAdapter2: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
    

    Beim zweiten Lauf findet er keinen Treffer mehr.

    Gruß Ralf

    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

    736

    Online

    32.5k

    Benutzer

    81.6k

    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