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. syntax von createState für "custom"

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.0k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

syntax von createState für "custom"

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 3 Kommentatoren 364 Aufrufe 2 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.
  • B Online
    B Online
    BigMike71
    schrieb am zuletzt editiert von BigMike71
    #1

    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}); 
    
    paul53P 1 Antwort Letzte Antwort
    0
    • B 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}); 
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @bigmike71
      Siehe hier.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      B F 2 Antworten Letzte Antwort
      1
      • paul53P paul53

        @bigmike71
        Siehe hier.

        B Online
        B Online
        BigMike71
        schrieb am zuletzt editiert von
        #3

        @paul53
        vielen dank! :+1:

        1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @bigmike71
          Siehe hier.

          F Offline
          F Offline
          Fritz 0
          schrieb am zuletzt editiert von
          #4

          @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 :-)

          paul53P 2 Antworten Letzte Antwort
          0
          • F Fritz 0

            @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 :-)

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #5

            @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.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            F 1 Antwort Letzte Antwort
            0
            • paul53P 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 Offline
              F Offline
              Fritz 0
              schrieb am zuletzt editiert von
              #6

              @paul53

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

              Schon mal vielen Dank dafür :-)

              Gruß
              Fritz

              1 Antwort Letzte Antwort
              0
              • F Fritz 0

                @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 :-)

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #7

                @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.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                F 1 Antwort Letzte Antwort
                0
                • paul53P 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 Offline
                  F Offline
                  Fritz 0
                  schrieb am zuletzt editiert von
                  #8

                  @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 ...

                  paul53P 2 Antworten Letzte Antwort
                  0
                  • F Fritz 0

                    @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 ...

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    @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.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    F 1 Antwort Letzte Antwort
                    0
                    • F Fritz 0

                      @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 ...

                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von paul53
                      #10

                      @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

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      1 Antwort Letzte Antwort
                      0
                      • paul53P paul53

                        @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.

                        F Offline
                        F Offline
                        Fritz 0
                        schrieb am zuletzt editiert von
                        #11

                        @paul53
                        das war ein wichtiger Hinweis, hatte ich zwar anders gehofft, aber das ist dann eben so.

                        Das setzen der Werte im custom-Bereich hat wunderbar funktioniert, ich konnte auch eine zweite Definition für die History-Instanz mit einsetzen.

                        Genau das habe ich gesucht, vielen Dank, Dein Hinweis hat mir viel Zeit gespart....

                        Gruß
                        Fritz

                        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

                        753

                        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