Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. syntax von createState für "custom"

    NEWS

    • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    syntax von createState für "custom"

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

      Wie ist der richtige syntax um per JS in einem Script den "custom" eintrag zu meinen Objektdaten zu erzeugen? siehe Code:

      "common": {
          "name": "Regenmenge Juli",
          "def": 0,
          "type": "number",
          "unit": "mm",
          "role": "value",
          "read": true,
          "write": true,
          "custom": {
            "influxdb.1": {
              "enabled": true,
              "storageType": "",
              "aliasId": "Regenwert.2025.Juli",
              "debounceTime": 0,
              "blockTime": 0,
              "changesOnly": false,
              "changesRelogInterval": 0,
              "changesMinDelta": 0,
              "ignoreBelowNumber": "",
              "disableSkippedValueLogging": false,
              "enableDebugLogs": false,
              "debounce": 1000
            }
          }
        }
      
      

      Den common habe ich schon per JS und einem script von hier erzeugen lassen, die
      Custom muss ich immer per Hand aktivieren (influxdb)

      createState('0_userdata.0.' + id, val, {name: Name, def: val, type: 'number', unit: 'mm', role: 'value', read: true, write: true}); 
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @BigMike71 last edited by

        @bigmike71
        Siehe hier.

        B F 2 Replies Last reply Reply Quote 1
        • B
          BigMike71 @paul53 last edited by

          @paul53
          vielen dank! 👍

          1 Reply Last reply Reply Quote 0
          • F
            Fritz 0 @paul53 last edited by

            @paul53
            da ich über 100 Datenpunkte unterhalb von 0_userdata anlegen will soll das per JS erfolgen.

            Die entsprechenden createState Kommandos erzeuge ich automatisch per Shellskript, welches sich die notwendigen Informationen aus einer (exportierten) Exceltabelle holt, das seht das z. B. so aus:

            // --------------------------------------------------------------------
            // Erstellung von Datenpunkten unterhalb von 0_userdata
            // --------------------------------------------------------------------
            
            function createDatapointUserdata(id,bezeichnung,typ,rolle,einheit,wert) {
                  if(!id.includes('0_userdata.0.'))
                  id = '0_userdata.0.' + id;
            
              log("id = " + id + " typ=" + typ + " rolle=" + rolle + " einheit= " + einheit + "  value=" + wert) ;
              createState(id,wert,{name: bezeichnung, type: typ, role: rolle, read: true, write: true, unit: einheit} ); 
            };
            
            createDatapointUserdata('Energiezaehler.Strom_Bezug','Stromzaehler-Bezug','number','value.power','kWh','5655,05');
            createDatapointUserdata('Energiezaehler.Strom_Einspeisung','Stromzaehler-Einspeisung','number','value.power','kWh','13230,27');
            createDatapointUserdata('Energiezaehler.Gas_Bezug','Gaszaehler-Bezug','number','value.power','m3','1808,736');
            
            

            Was mir noch fehlt ist im Prinzip die Anforderung wie sie bigmike71 hatte, allerdings müsste ich für jeden Datenpunkt ein eigenes custom-Objekt erstellen (da ich die Daten in unterschiedlichen Intervallen protokollieren möchte will ich dass über mehrere SQL-Instanzen lösen, z. B. sql.0 soll alle 60 Sekunden, sql.1 z. B. alle 15 Minuten protokollieren. Die Zuordnung pflege ich in einer Exceltabelle als Basis für ein Shellskript, was mir die JS-Kommandos erstellt. Daher suche ich eine Lösung, wie ich den für einen Datenpunkt korrekte SQL-Instanz direkt im Aufruf von createstate einbauen kann.

            Der markierte Bereich ist ja für common-Objekte:

            createState(id,wert,{name: bezeichnung, type: typ, role: rolle, read: true, write: true, unit: einheit} );

            wie bekomme ich in die Zeile noch die custom-Objekte rein?

            Hast Du dafür auch eine Lösung?

            Gruß
            Fritz

            PS: das von Dir entwickelte JS zum erstellen der Aliase ist bei mir im Einsatz und hat sich prima bewährt 🙂

            paul53 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @Fritz 0 last edited by paul53

              @fritz-0 sagte: wie bekomme ich in die Zeile noch die custom-Objekte rein?

              Versuche es mal so:

              const sqlObj = {
                      "enabled": true,
                      "storageType": "",
                      "counter": false,
                      "aliasId": "",
                      "debounceTime": 0,
                      "blockTime": 59999,
                      "changesOnly": true,
                      "changesRelogInterval": 60,
                      "changesMinDelta": 0,
                      "ignoreBelowNumber": "",
                      "disableSkippedValueLogging": false,
                      "retention": 31536000,
                      "customRetentionDuration": 365,
                      "maxLength": 100,
                      "enableDebugLogs": false,
                      "debounce": 1000
              };
              
              function createDatapointUserdata(id,bezeichnung,typ,rolle,einheit,wert, sqlinstanz) {
                  if(!id.includes('0_userdata.0.'))
                  id = '0_userdata.0.' + id;
                  const custom = {
                      [sqlinstanz]: sqlObj
                  };
               
                  log("id = " + id + " typ=" + typ + " rolle=" + rolle + " einheit= " + einheit + "  value=" + wert) ;
                  createState(id,wert,{name: bezeichnung, type: typ, role: rolle, read: true, write: true, unit: einheit, custom: custom}); 
              };
              

              Ob das gezeigte Objekt sqlObj zum SQL-Adapter passt, weiß ich nicht. Deshalb bitte anpassen.

              EDIT: Wie oft aufgezeichnet wird, kann man beim SQL-Adapter in der Instanz-Konfiguration einstellen?
              Die Voreinstellungen werden durch das Custom-Objekt im Datenpunkt ersetzt.

              F 1 Reply Last reply Reply Quote 0
              • F
                Fritz 0 @paul53 last edited by

                @paul53

                ich glaube damit kann ich was anfangen, ich werde das mal ausprobieren.

                Schon mal vielen Dank dafür 🙂

                Gruß
                Fritz

                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @Fritz 0 last edited by paul53

                  @fritz-0 sagte: sql.0 soll alle 60 Sekunden, sql.1 z. B. alle 15 Minuten protokollieren.

                  Da ich mir nicht vorstellen kann, dass man das Protokoll-Intervall in der Instanz vorgeben kann, würde ich es so versuchen (nur die Funktion dargestellt):

                  function createDatapointUserdata(id,bezeichnung,typ,rolle,einheit,wert, intervall) {
                      if(!id.includes('0_userdata.0.')) id = '0_userdata.0.' + id;
                      sqlObj.blockTime = 59999 * intervall;
                      sqlObj.changesRelogInterval = 60 * intervall;
                   
                      log("id = " + id + " typ=" + typ + " rolle=" + rolle + " einheit= " + einheit + "  value=" + wert) ;
                      createState(id,wert,{name: bezeichnung, type: typ, role: rolle, read: true, write: true, unit: einheit, custom: {'sql.0': sqlObj}}); 
                  };
                  

                  intervall enthält Minuten.

                  F 1 Reply Last reply Reply Quote 0
                  • F
                    Fritz 0 @paul53 last edited by

                    @paul53
                    bisher ging ich davon aus, dass ich in der jeweiligen Instanz diese Werte anpasse:

                    81702-1.jpg

                    Wobei ich mich schon gefragt habe, ob der Wert einer Stunde als ms nicht zu hoch wird und ob das überhaupt noch sauber funktioniert.

                    Dein Weg scheint mir sehr vielversprechend, werde ich auf jeden Fall auch ausprobieren.

                    Kennst Du einen Weg, z. B. über createstate o. ä., Räume zu erstellen? Das wäre so das i-Tüpfelchen der Automatisierung ...

                    paul53 2 Replies Last reply Reply Quote 0
                    • paul53
                      paul53 @Fritz 0 last edited by

                      @fritz-0 sagte: dass ich in der jeweiligen Instanz diese Werte anpasse:

                      Diese Werte werden nur bei manueller Erstellung zum Datenpunkt vorgeschlagen und durch die tatsächlichen Werte ersetzt. Für die Erstellung des Custom-Objektes per Skript haben sie keine Bedeutung.

                      1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Fritz 0 last edited by paul53

                        @fritz-0 sagte: Kennst Du einen Weg, z. B. über createstate o. ä., Räume zu erstellen?

                        Nein, nicht per createState().
                        Man kann Datenpunkte zu bestehenden Räumen hinzufügen. Siehe hier

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        903
                        Online

                        32.4k
                        Users

                        81.3k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        240
                        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