Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Datenbank Mapping von Objekten sichern/kopieren/editieren

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Datenbank Mapping von Objekten sichern/kopieren/editieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • Percy
      Percy last edited by

      Hallo Zusammen,

      ich schreibe die Änderungen vieler Datenpunkte in eine Datenbank (in meinem Fall InfluxDB, aber mit MySQL/MariaDB ist der Vorgang identisch).
      Ich hatte bereits mehrmals das Vergnügen, nach einer Neuinstallation von Adaptern die Konfiguration für viele Datenpunkte erneut vornehmen zu müssen (z.B. nach Problemen mit dem KNX Adapter). Für jedes Objekt auf Einstellungen klicken, Konfiguration vornehmen und den richtigen Namen für das bereits existierende Objekt in der Datenbank vergeben... sehr zeitaufwändig.

      Ich frage mich daher, ob es nicht auch eine Möglichkeit gibt, diese Zuordnung irgendwie zu speichern und z.B. textbasiert in eine bestimmte Datei zurückzuschreiben, wenn es notwendig sein sollte. Einen ähnlichen Ansatz hat z.B. OpenHab, hier ist die Konfiguration textbasiert verfügbar, speichern, zurückspielen oder editieren geht daher recht leicht von der Hand.

      Für Ideen und Anregungen wäre ich dankbar.

      Grüße,

      Percy

      L 1 Reply Last reply Reply Quote 0
      • L
        lessthanmore @Percy last edited by lessthanmore

        @percy Mit Alias sollte das klappen.
        Musst dann nur den Alias neu verknüpfen nach einer Änderung.

        Percy 1 Reply Last reply Reply Quote 0
        • Percy
          Percy @lessthanmore last edited by Percy

          @lessthanmore
          über das Alias klappt die Zuweisung einwandfrei, das ist nicht das Problem. Aber wenn ich 100 Objekte in die Datenbank schreiben möchte, muss ich 100x bei dem jeweiligen Objekt die Einstellungen für Datentyp/Intervall/Alias vornehmen, das kostet je nach Menge der Objekte mehrere Stunden.

          EDIT: Auf Github hat sich der Entwickler des InfluxDB Adapters geäußert und einen Lösungsvorschlag gemacht. Da die Konfiguration im Objekt selbst gespeichert wird, kann eine textbasierte Konfiguration nicht ohne weiteres vorgenommen werden. Als Workaround kann die Konfiguration über ein Javascript vorgenommen werden, das erlaubt ein einfaches speichern/editieren/wiederherstellen

          https://github.com/ioBroker/ioBroker.influxdb/issues/180

          Percy2Live created this issue in ioBroker/ioBroker.influxdb

          closed Enable Access to text based configuration for backup/editing purpose #180

          Percy 1 Reply Last reply Reply Quote 0
          • Percy
            Percy @Percy last edited by Percy

            Mithilfe des Vorschlages von Apollon77 habe ich ein Skript ausgearbeitet, welches ich gerne jedem, der vor ähnlichen Problemen steht, zur Verfügung stellen möchte.

            Einfach jeweils "gleichartige" Objekte (im Sinne der Konfiguration für die Aufzeichnung) in einem Skript zusammenfassen. Im 2 dimensionalen Array listOfObjects jeweils die ID des Datenpunkts und den Namen, mit dem er in der Datenbank angelegt werden soll angeben. Im unteren Teil einfach die Einstellungen anpassen, die für alle Datenpunkte gelten sollen.

            Kann auch gut verwendet werden, um Einstellungen für die unter listOfObjects gelisteten Datenpunkte zu ändern.

            var listOfObjects = [
                ['knx.1.Licht.Rückmeldung_Schalten_(Ein-Aus)_1_Bit.EG-HWR-Deckenlicht-Schalten-R', "licht_eg_hwr"],
                ['knx.1.Licht.Rückmeldung_Schalten_(Ein-Aus)_1_Bit.EG-Garderobe-Deckenlicht-Schalten-R', "licht_eg_garderobe"]
                //weitere Objekte hier ergänzen
            ]
            
            
            for(let index = 0, len = listOfObjects.length; index < len; ++index){
                sendTo('influxdb.0', 'enableHistory', {
                id: listOfObjects[index] [0],
                options: {
                    changesOnly:  true,
                    debounce:     500,
                    retention:    0,
                    changesMinDelta: 0,
                    storageType: "Boolean",
                    aliasId: listOfObjects[index] [1]
                }
            }, function (result) { if (result.error) { console.log(result.error); } if (result.success) {   }});
            }
            
            liv-in-sky 1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @Percy last edited by liv-in-sky

              @percy

              falls interesse:

              mit diesem "schnipsel" durchläufst du alle dp einer instanz (oben definiert) und findest diejenigen, welchen einen history eintrag haben

              auch damit könntest du die werte setzen
              dein listOfObjects =wird ganz unten geschrieben

              damit musst du oben nicht alle id's mit namen eintragen - unten in der log ausgabe kann man dann die mit gleichen eintägen filtern

              let instanzen=["sonoff.0","iot.0"]; // eingabe der instanzen, welche durchsucht werden sollen
              let theJsonArr=[];   //array mit objecten, die einen history eintrag haben
              let jsonInfoHistory=[];  // array  mit objecten, die einen history eintrag haben und darin id, name, history definitionen
              let listOfObjects=[] ;
              
              for(let index = 0; index<instanzen.length; index++){
              
                   let selektor=instanzen[index]+".*"
              
                       $(selektor).each(function(id, i) {
                 // log(id)
                                                        if (getObject(id).common.hasOwnProperty("custom") ){
                                                        if (getObject(id).common.custom.hasOwnProperty("sql.0")  || getObject(id).common.custom.hasOwnProperty("history.0") || getObject(id).common.custom.hasOwnProperty("influxdb.0") ) {
                                                                    log(id)
                                                                    theJsonArr.push(getObject(id))
                                                                    let theKey;
                                                                     if (getObject(id).common.custom.hasOwnProperty("sql.0")) {theKey="sql"}
                                                                     else if (getObject(id).common.custom.hasOwnProperty("history.0")) {theKey="history"}
                                                                     else if (getObject(id).common.custom.hasOwnProperty("influxdb.0")) {theKey="influxdb"}
                                                                     log(theKey)
                                                                    jsonInfoHistory.push({"id":id,"name":getObject(id).common.name,"values":getObject(id).common.custom[theKey+'.0']})
              
                                                                     }
                                                        }
                       });
              }
              
              // anzeige im log
              for (let i=0;i<jsonInfoHistory.length;i++){
              
                  log(JSON.stringify(jsonInfoHistory[i].values.enabled))
                  // oder bestimmt gesuchte
                  if(Number(jsonInfoHistory[i].values.retention)==604800 && jsonInfoHistory[i].id.includes("sonoff") ) {log("retention ist gesucht : "+JSON.stringify(jsonInfoHistory[i].values.retention+" ID: "+jsonInfoHistory[i].id));
                                                                          listOfObjects.push([jsonInfoHistory[i].id,jsonInfoHistory[i].name])
                                                                         }
                  }
                
               log(String(listOfObjects))
              
              1 Reply Last reply Reply Quote 1
              • Percy
                Percy last edited by

                Super, werde ich mal ausprobieren, danke!

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate
                FAQ Cloud / IOT
                HowTo: Node.js-Update
                HowTo: Backup/Restore
                Downloads
                BLOG

                888
                Online

                31.9k
                Users

                80.2k
                Topics

                1.3m
                Posts

                3
                6
                566
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo