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. Datenpunkt neu erstellen und gleich beschrieben

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    512

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Datenpunkt neu erstellen und gleich beschrieben

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 3 Kommentatoren 793 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.
  • W Offline
    W Offline
    WolfgangFB
    schrieb am zuletzt editiert von
    #1

    Wie erzeuge ich einen neuen Datenpunkt und schreibe dann ein paar Zeilen später (also nicht im createstate) einen Wert hinein?

    var StatusDP = "javascript.0.ESP." + EspDevice + ".table"; 
    if (!existsState(StatusDP)){createState(StatusDP, "",{type: "string",name: 'HTML Tabelle des ESP', read: true,write: true,role: "value", unit: ""});};
    setState(StatusDP, Table);   
    
    

    liefert, sowohl mit createState als auch mit createStateAsync beim ersten Durchgang des Skriptes

    State "javascript.0.ESP.483FDA36363A.table" not found
    

    beim zweiten Durchgang klappt dann alles (weil der DP ja dann da ist))

    BananaJoeB paul53P 2 Antworten Letzte Antwort
    0
    • W WolfgangFB

      Wie erzeuge ich einen neuen Datenpunkt und schreibe dann ein paar Zeilen später (also nicht im createstate) einen Wert hinein?

      var StatusDP = "javascript.0.ESP." + EspDevice + ".table"; 
      if (!existsState(StatusDP)){createState(StatusDP, "",{type: "string",name: 'HTML Tabelle des ESP', read: true,write: true,role: "value", unit: ""});};
      setState(StatusDP, Table);   
      
      

      liefert, sowohl mit createState als auch mit createStateAsync beim ersten Durchgang des Skriptes

      State "javascript.0.ESP.483FDA36363A.table" not found
      

      beim zweiten Durchgang klappt dann alles (weil der DP ja dann da ist))

      BananaJoeB Offline
      BananaJoeB Offline
      BananaJoe
      Most Active
      schrieb am zuletzt editiert von
      #2

      @wolfgangfb Hier ein Beispiel aus einem meiner Skripts:

      // Funktionen
      async function CreateMyStatesAndStartup(){
          try {
              DebugWarning("Startup: Erstelle ggf. Datenpunkte ...");
              // POWER
              await createStateAsync(s_state_FullPath + ".POWER", false, {
                  type: 'boolean',
                  read: true, 
                  write: true, 
                  role: "switch",
                  name: s_DeviceName + s_Suffix + '.POWER'
              });
              // RSSI
              await createStateAsync(s_state_FullPath + ".RSII", 0, {
                  type: 'number',
                  read: true, 
                  write: false, 
                  name: 'WLAN Stärke in %'
              });
      }
          catch(error) {
              DebugWarning(error);
              log(error);
          }
      }
      // Hauptprogram
      CreateMyStatesAndStartup();
      

      Ich hab mir das in eine Funktion gepackt, nachdem diese ausgeführt ist sind die Datenpunkte vorhanden und nutzbar.
      Du kannst die Datenpunkte sogar innerhalb der Funktion schon nutzen, direkt nach dem Anlegen.

      Ich hatte die gleiche Frage damals auch gestellt: https://forum.iobroker.net/topic/44190/datenpunkt-erstellen-und-im-anschluss-sofort-nutzen

      Es war wichtig das das ganze in einer Funktion stattfindet, sonst funktioniert die await Geschichte nicht

      ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

      W 1 Antwort Letzte Antwort
      0
      • BananaJoeB BananaJoe

        @wolfgangfb Hier ein Beispiel aus einem meiner Skripts:

        // Funktionen
        async function CreateMyStatesAndStartup(){
            try {
                DebugWarning("Startup: Erstelle ggf. Datenpunkte ...");
                // POWER
                await createStateAsync(s_state_FullPath + ".POWER", false, {
                    type: 'boolean',
                    read: true, 
                    write: true, 
                    role: "switch",
                    name: s_DeviceName + s_Suffix + '.POWER'
                });
                // RSSI
                await createStateAsync(s_state_FullPath + ".RSII", 0, {
                    type: 'number',
                    read: true, 
                    write: false, 
                    name: 'WLAN Stärke in %'
                });
        }
            catch(error) {
                DebugWarning(error);
                log(error);
            }
        }
        // Hauptprogram
        CreateMyStatesAndStartup();
        

        Ich hab mir das in eine Funktion gepackt, nachdem diese ausgeführt ist sind die Datenpunkte vorhanden und nutzbar.
        Du kannst die Datenpunkte sogar innerhalb der Funktion schon nutzen, direkt nach dem Anlegen.

        Ich hatte die gleiche Frage damals auch gestellt: https://forum.iobroker.net/topic/44190/datenpunkt-erstellen-und-im-anschluss-sofort-nutzen

        Es war wichtig das das ganze in einer Funktion stattfindet, sonst funktioniert die await Geschichte nicht

        W Offline
        W Offline
        WolfgangFB
        schrieb am zuletzt editiert von
        #3

        @bananajoe

        Danke, werde ich ausprobieren. Aber richtig cool finde ich die Sache mit dem sich selbst neustartenden Script aus Deinem Thread. Das kann ich für viele andere Dinge brauchen.

        1 Antwort Letzte Antwort
        1
        • W Offline
          W Offline
          WolfgangFB
          schrieb am zuletzt editiert von
          #4

          @bananajoe
          Hi

          Irgendwas mache ich noch falsch:

          async function CreateIfNotExist(Name="", InitValue, common){
              console.log("Name: " + Name);
              if (!existsState(Name)){
                  await createStateAsync(Name, InitValue, common);
              }
          }
          CreateIfNotExist(StatusDP, "Hallo", {type: "string",name: 'S0 counter des ESP', read: true,write: true,role: "value", unit: "Flaschbier"});
          console.log("Datenpunkt existiert: " + existsState(StatusDP));
          
          

          liefert:

          Datenpunkt existiert: false
          

          Beim zweiten Aufruf ist der Datenpunkt beschreibbar (genau wie bei createState oder createStateAsync).

          1 Antwort Letzte Antwort
          0
          • W WolfgangFB

            Wie erzeuge ich einen neuen Datenpunkt und schreibe dann ein paar Zeilen später (also nicht im createstate) einen Wert hinein?

            var StatusDP = "javascript.0.ESP." + EspDevice + ".table"; 
            if (!existsState(StatusDP)){createState(StatusDP, "",{type: "string",name: 'HTML Tabelle des ESP', read: true,write: true,role: "value", unit: ""});};
            setState(StatusDP, Table);   
            
            

            liefert, sowohl mit createState als auch mit createStateAsync beim ersten Durchgang des Skriptes

            State "javascript.0.ESP.483FDA36363A.table" not found
            

            beim zweiten Durchgang klappt dann alles (weil der DP ja dann da ist))

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

            @wolfgangfb sagte: Wie erzeuge ich einen neuen Datenpunkt und schreibe dann ein paar Zeilen später (also nicht im createstate) einen Wert hinein?

            Mit common.def:

            const StatusDP = "javascript.0.ESP." + EspDevice + ".table"; 
            var Table = ...;
            
            if (existsState(StatusDP)) setState(StatusDP, Table, true);  
            else createState(StatusDP, Table,{type: "string", name: 'HTML Tabelle des ESP', read: true,write: true,role: "value", def: Table});
            

            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

            W 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @wolfgangfb sagte: Wie erzeuge ich einen neuen Datenpunkt und schreibe dann ein paar Zeilen später (also nicht im createstate) einen Wert hinein?

              Mit common.def:

              const StatusDP = "javascript.0.ESP." + EspDevice + ".table"; 
              var Table = ...;
              
              if (existsState(StatusDP)) setState(StatusDP, Table, true);  
              else createState(StatusDP, Table,{type: "string", name: 'HTML Tabelle des ESP', read: true,write: true,role: "value", def: Table});
              
              W Offline
              W Offline
              WolfgangFB
              schrieb am zuletzt editiert von
              #6

              @paul53 sagte in Datenpunkt neu erstellen und gleich beschrieben:

              @wolfgangfb sagte: Wie erzeuge ich einen neuen Datenpunkt und schreibe dann ein paar Zeilen später (also nicht im createstate) einen Wert hinein?

              Mit common.def:

              const StatusDP = "javascript.0.ESP." + EspDevice + ".table"; 
              var Table = ...;
              
              if (existsState(StatusDP)) setState(StatusDP, Table, true);  
              else createState(StatusDP, Table,{type: "string", name: 'HTML Tabelle des ESP', read: true,write: true,role: "value", def: Table});
              

              Hallo Paul

              Das funktioniert aber auch nur, wenn einmalig etwas in den Datenpunkt geschrieben wird.
              Mir (und ich glaube auch BananaJoe) geht es darum, in einem Skript, dass z.B. einen Wert überwacht und dann immer wieder einen passenden Datenpunkt beschreibt, dafür zu sorgen, dass der Datenpunkt auch vorhanden ist. Bei Deiner Lösung wäre bei der nächsten Änderung auch der Punkt nicht vorhanden.
              Beispiel: Ein Skript summiert über die aufgenommene Leistung einer Steckdose mit Leistungsmessung die Gesamtenergie und schreibt die für jeden Tag getrennt in einen Datenpunkt.
              Wenn jetzt ein neuer Tag beginnt muss zuerst der Datenpunkt neu angelegt werden und dann abhängig von der Leistung die Tagesenergie in den Datenpunkt geschrieben werden. Und das vielleicht schon nach wenigen Millisekunden mit einem neuen Wert, und dann ist der Datenpunkt eben noch nicht da.

              paul53P 1 Antwort Letzte Antwort
              0
              • W WolfgangFB

                @paul53 sagte in Datenpunkt neu erstellen und gleich beschrieben:

                @wolfgangfb sagte: Wie erzeuge ich einen neuen Datenpunkt und schreibe dann ein paar Zeilen später (also nicht im createstate) einen Wert hinein?

                Mit common.def:

                const StatusDP = "javascript.0.ESP." + EspDevice + ".table"; 
                var Table = ...;
                
                if (existsState(StatusDP)) setState(StatusDP, Table, true);  
                else createState(StatusDP, Table,{type: "string", name: 'HTML Tabelle des ESP', read: true,write: true,role: "value", def: Table});
                

                Hallo Paul

                Das funktioniert aber auch nur, wenn einmalig etwas in den Datenpunkt geschrieben wird.
                Mir (und ich glaube auch BananaJoe) geht es darum, in einem Skript, dass z.B. einen Wert überwacht und dann immer wieder einen passenden Datenpunkt beschreibt, dafür zu sorgen, dass der Datenpunkt auch vorhanden ist. Bei Deiner Lösung wäre bei der nächsten Änderung auch der Punkt nicht vorhanden.
                Beispiel: Ein Skript summiert über die aufgenommene Leistung einer Steckdose mit Leistungsmessung die Gesamtenergie und schreibt die für jeden Tag getrennt in einen Datenpunkt.
                Wenn jetzt ein neuer Tag beginnt muss zuerst der Datenpunkt neu angelegt werden und dann abhängig von der Leistung die Tagesenergie in den Datenpunkt geschrieben werden. Und das vielleicht schon nach wenigen Millisekunden mit einem neuen Wert, und dann ist der Datenpunkt eben noch nicht da.

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

                @wolfgangfb sagte: dann ist der Datenpunkt eben noch nicht da.

                Bei einem noch nicht vorhanden Datenpunkt wird der Wert mit createState() geschrieben, in allen anderen Fällen mit setState().

                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

                W 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @wolfgangfb sagte: dann ist der Datenpunkt eben noch nicht da.

                  Bei einem noch nicht vorhanden Datenpunkt wird der Wert mit createState() geschrieben, in allen anderen Fällen mit setState().

                  W Offline
                  W Offline
                  WolfgangFB
                  schrieb am zuletzt editiert von
                  #8

                  @paul53
                  Dann muss ich aber an jeder Stelle im Skript "setState" durch "if (existState()... else createstate(...)" ersetzen.

                  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

                  485

                  Online

                  32.6k

                  Benutzer

                  81.9k

                  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