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. ioBroker Allgemein
  4. Alias-Manager: Entfernung min & max aus Boolean Objektdaten

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Alias-Manager: Entfernung min & max aus Boolean Objektdaten

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
alias-managerskript
1 Beiträge 1 Kommentatoren 30 Aufrufe
  • Ä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.
  • S Online
    S Online
    schweiger2
    schrieb am zuletzt editiert von schweiger2
    #1

    Tach zusammen,

    da ich den Alias-Adapter gerne nutze, habe ich ein kleines bisschen Zeit investiert und ein kleine Besonderheit mit JS-Skripten gelöst.

    Offen und ehrlich: ChatGPT hat mir dabei geholfen und es hat auch ein paar Runden gebraucht, bis die Skripte funktionierten.

    Interessant: Ich habe die Umsetzung zuerst mit Claude versucht, aber der liebe Claude konnte das Problem nicht lösen, auch bei 5 oder 6 Iterationen, bei denen "er" sich im Kreis drehte. War aber auch die Umsonst-Version.

    Bei der Anlage von Aliasen erzeugt der Adapter in den Objektdaten von Boolean-Datenpunkten immer auch Zeilen mit max="" und min="", was im Protokoll immer zu Warnhinweisen führt - jedenfalls bei mir.

    Beispiel:

    {
    "common": {
      "alias": {
        "id": "hm-rpc.1.0001D709A0FFB8.1.PRESS_LONG_RELEASE"
      },
      "name": "EG Flur Aktor Zwischenstecker Lichterkette 1 PRESS_LONG_RELEASE",
      "role": "button.release",
      "type": "boolean",
      "unit": "",
      "min": "",
      "max": "",
      "read": false,
      "write": true
    },
    "native": {},
    "type": "state",
    "_id": "alias.0.EG.Flur.Aktor Zwischenstecker Lichterkette.1.PRESS_LONG_RELEASE",
    "acl": {
      "object": 1636,
      "state": 1636,
      "owner": "system.user.admin",
      "ownerGroup": "system.group.administrator"
    },
    "from": "system.adapter.admin.0",
    "user": "system.user.admin",
    "ts": 1770735186091
    }
    

    Folgende Skripte haben bei mir super funktioniert. Ich übernehme natürlich keine Gewähr und rate dringend, vor Anwendung ein Backup anzufertigen !

    1. Skript: Dry-Run (nur Test-Durchlauf, keine Veränderungen vorgenommen, Backup der erkannten Objektdaten in 0.userdata.0)
    const PREFIX = 'alias.0.';
    const EXPORT_STATE = '0_userdata.0.boolean_minmax_backup';
    
    let backup = [];
    let totalChecked = 0;
    let totalFound = 0;
    
    const states = $(PREFIX + '*');
    
    states.each(id => {
    
        totalChecked++;
    
        getObject(id, (err, obj) => {
    
            if (!obj || !obj.common) return;
    
            if (obj.common.type === 'boolean') {
    
                if (obj.common.hasOwnProperty('min') || obj.common.hasOwnProperty('max')) {
    
                    totalFound++;
    
                    backup.push({
                        id: id,
                        min: obj.common.hasOwnProperty('min') ? obj.common.min : "__NOT_EXISTING__",
                        max: obj.common.hasOwnProperty('max') ? obj.common.max : "__NOT_EXISTING__"
                    });
    
                    log(`[EXPORT] gefunden: ${id}`, 'info');
                }
            }
    
            // Wenn letzter State geprüft → speichern
            if (totalChecked === states.length) {
    
                createState(EXPORT_STATE, '', { type: 'string', role: 'json' }, () => {
    
                    setState(EXPORT_STATE, JSON.stringify(backup, null, 2), true);
    
                    log('=====================================');
                    log(`Backup erstellt: ${EXPORT_STATE}`);
                    log(`Gesicherte Objekte: ${totalFound}`);
                    log('=====================================');
                });
            }
    
        });
    
    });
    
    1. Skript: Change (Echtlauf)
    const PREFIX = 'alias.0.';
    
    let totalChecked = 0;
    let totalChanged = 0;
    
    const states = $(PREFIX + '*');
    
    states.each(id => {
    
        totalChecked++;
    
        getObject(id, (err, obj) => {
    
            if (!obj || !obj.common) return;
    
            if (obj.common.type === 'boolean') {
    
                let changed = false;
    
                if (obj.common.hasOwnProperty('min')) {
                    delete obj.common.min;
                    changed = true;
                }
    
                if (obj.common.hasOwnProperty('max')) {
                    delete obj.common.max;
                    changed = true;
                }
    
                if (changed) {
    
                    totalChanged++;
    
                    setObject(id, obj);
                    log(`[CHANGE] bereinigt: ${id}`, 'info');
                }
            }
    
            // Abschlussmeldung
            if (totalChecked === states.length) {
                log('=====================================');
                log(`Geprüfte States: ${totalChecked}`);
                log(`Geänderte States: ${totalChanged}`);
                log('=====================================');
            }
    
        });
    
    });
    
    1. Skript: Undo (optional: Wiederherstellung, falls notwendig oder gewünscht)
    const EXPORT_STATE = '0_userdata.0.boolean_minmax_backup';
    
    getState(EXPORT_STATE, (err, state) => {
    
        if (!state || !state.val) {
            log('Kein Backup gefunden!', 'error');
            return;
        }
    
        let backup;
    
        try {
            backup = JSON.parse(state.val);
        } catch (e) {
            log('Backup JSON fehlerhaft', 'error');
            return;
        }
    
        let totalProcessed = 0;
    
        backup.forEach(entry => {
    
            getObject(entry.id, (err, obj) => {
    
                if (!obj || !obj.common) return;
    
                if (entry.min !== "__NOT_EXISTING__") {
                    obj.common.min = entry.min;
                } else {
                    delete obj.common.min;
                }
    
                if (entry.max !== "__NOT_EXISTING__") {
                    obj.common.max = entry.max;
                } else {
                    delete obj.common.max;
                }
    
                setObject(entry.id, obj);
                totalProcessed++;
    
                log(`[UNDO] wiederhergestellt: ${entry.id}`, 'info');
    
                if (totalProcessed === backup.length) {
                    log('=====================================');
                    log(`Wiederhergestellte States: ${totalProcessed}`);
                    log('=====================================');
                }
    
            });
    
        });
    
    });
    
    
    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
    FAQ Cloud / IOT
    HowTo: Node.js-Update
    HowTo: Backup/Restore
    Downloads
    BLOG

    725

    Online

    32.6k

    Benutzer

    82.3k

    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