Skip to content
  • 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
  1. ioBroker Community 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 ?
    apollon77A
    apollon77
    48
    3
    8.2k

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

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

syntax von createState für "custom"

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 3 Kommentatoren 282 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 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 Offline
      B Offline
      BigMike71
      schrieb am zuletzt editiert von
      #3

      @paul53
      vielen dank! 👍

      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

                      391

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      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
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe