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 erstellen und im Anschluss sofort nutzen

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

  • 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

Datenpunkt erstellen und im Anschluss sofort nutzen

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 4 Kommentatoren 2.0k Aufrufe 5 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.
  • BananaJoeB BananaJoe

    In praktisch jedem meiner Skripte erstelle ich am Anfang ggf. benötigte Datenpunkte.
    Danach kommt in der Regel eine "Erst-Befüllung" der Datenpunkte und dann ggf. Subscriptions.

    Wenn der Datenpunkt gerade erstellt wurde kann ich diesen aber 2 Zeilen später noch nicht nutzen:

    // Datenpunkt erstellen
    createState("javascript.0.Testumgebung.Test1", "Eins", {
      type: 'string',
      read: true, 
      write: true
    });
    
    // Datenpunkt ändern
    setState("javascript.0.Testumgebung.Test1", "Zwei");
    

    7a8a787e-2382-4754-812b-3eb176814092-image.png

    Ich drücke dann immer einmal auf Neustart und dann geht es.
    Wie bekomme ich es hin das erst weitermacht wenn der Datenpunkt erstellt ist?

    Das ich natürlich die Erstbefüllung mit dem Erstellen der Datenpunkte verbinden könnte ist mir klar, aber ich hatte das Problem auch schon in anderen Konstellationen, z.B. wenn sich 2 getrennte Skripte über einen Datenpunkt abstimmen sollten (Ich laufe gerade, mach du nichts), das hat auch nicht geklappt weil für das andere Skript der Wert noch gar nicht geschrieben war.

    dslraserD Offline
    dslraserD Offline
    dslraser
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #2

    @bananajoe
    mit einem timeout probiert ?

    Bildschirmfoto 2021-04-14 um 20.57.18.png

    Aus der JS Ansicht

    var timeout;
    
    
    createState("jsState", 'eins', JSON.parse('{ "role" : "string" , "type" : "string" , "name" : "A" }'), async function () {
    });
    (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
    timeout = setTimeout(async function () {
      setStateDelayed('javascript.0.jsState', 'zwei', true, parseInt(0, 10), false);
    }, 1000);
    
    BananaJoeB 1 Antwort Letzte Antwort
    0
    • BananaJoeB BananaJoe

      In praktisch jedem meiner Skripte erstelle ich am Anfang ggf. benötigte Datenpunkte.
      Danach kommt in der Regel eine "Erst-Befüllung" der Datenpunkte und dann ggf. Subscriptions.

      Wenn der Datenpunkt gerade erstellt wurde kann ich diesen aber 2 Zeilen später noch nicht nutzen:

      // Datenpunkt erstellen
      createState("javascript.0.Testumgebung.Test1", "Eins", {
        type: 'string',
        read: true, 
        write: true
      });
      
      // Datenpunkt ändern
      setState("javascript.0.Testumgebung.Test1", "Zwei");
      

      7a8a787e-2382-4754-812b-3eb176814092-image.png

      Ich drücke dann immer einmal auf Neustart und dann geht es.
      Wie bekomme ich es hin das erst weitermacht wenn der Datenpunkt erstellt ist?

      Das ich natürlich die Erstbefüllung mit dem Erstellen der Datenpunkte verbinden könnte ist mir klar, aber ich hatte das Problem auch schon in anderen Konstellationen, z.B. wenn sich 2 getrennte Skripte über einen Datenpunkt abstimmen sollten (Ich laufe gerade, mach du nichts), das hat auch nicht geklappt weil für das andere Skript der Wert noch gar nicht geschrieben war.

      F Offline
      F Offline
      fastfoot
      schrieb am zuletzt editiert von fastfoot
      #3

      @bananajoe nutze await/async. Ich such dir mal was raus wie ich das mache.

      hier mal ein Fragment wie ich es in fast allen meinen Skripts mittlerweile nutze

      const idBase = '0_userdata.0.Corona.RLP';
      
      async function main(){
      
          let firstRun = await createDatapoints();
          //dein Code
      }
      
      // create data points if not existing
      async function createDatapoints() {
          let dp,
              idKey,
              firstRun = false;
          
          const stateAttributes = {
              "json":{"name":"Daten","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":""},
              "Refresh":{"name":"Refresh","type":"boolean","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":false},
              "Excel":{"name":"Hole Exceldatei","type":"boolean","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":false},
          }
      
          for(let key in stateAttributes) {
      
              idKey = idBase + '.' + key;
      
              if (!(await existsStateAsync(idKey))) {
                  dp = stateAttributes[key];
                  firstRun = true;
                  await createStateAsync(idKey, dp);
              }
          }
      
          return firstRun;
      
      }
      
      main();
      

      iobroker läuft unter Docker auf QNAP TS-451+
      SkriptRecovery: https://forum.iobroker.net/post/930558

      BananaJoeB 1 Antwort Letzte Antwort
      2
      • dslraserD dslraser

        @bananajoe
        mit einem timeout probiert ?

        Bildschirmfoto 2021-04-14 um 20.57.18.png

        Aus der JS Ansicht

        var timeout;
        
        
        createState("jsState", 'eins', JSON.parse('{ "role" : "string" , "type" : "string" , "name" : "A" }'), async function () {
        });
        (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
        timeout = setTimeout(async function () {
          setStateDelayed('javascript.0.jsState', 'zwei', true, parseInt(0, 10), false);
        }, 1000);
        
        BananaJoeB Offline
        BananaJoeB Offline
        BananaJoe
        Most Active
        schrieb am zuletzt editiert von
        #4

        @dslraser hatte ich schon probiert, funktioniert 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

        dslraserD 2 Antworten Letzte Antwort
        0
        • F fastfoot

          @bananajoe nutze await/async. Ich such dir mal was raus wie ich das mache.

          hier mal ein Fragment wie ich es in fast allen meinen Skripts mittlerweile nutze

          const idBase = '0_userdata.0.Corona.RLP';
          
          async function main(){
          
              let firstRun = await createDatapoints();
              //dein Code
          }
          
          // create data points if not existing
          async function createDatapoints() {
              let dp,
                  idKey,
                  firstRun = false;
              
              const stateAttributes = {
                  "json":{"name":"Daten","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":""},
                  "Refresh":{"name":"Refresh","type":"boolean","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":false},
                  "Excel":{"name":"Hole Exceldatei","type":"boolean","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":false},
              }
          
              for(let key in stateAttributes) {
          
                  idKey = idBase + '.' + key;
          
                  if (!(await existsStateAsync(idKey))) {
                      dp = stateAttributes[key];
                      firstRun = true;
                      await createStateAsync(idKey, dp);
                  }
              }
          
              return firstRun;
          
          }
          
          main();
          

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

          @fastfoot sieht gut aus, teste ich und melde mich dann wieder

          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

          1 Antwort Letzte Antwort
          0
          • BananaJoeB BananaJoe

            @dslraser hatte ich schon probiert, funktioniert nicht

            dslraserD Offline
            dslraserD Offline
            dslraser
            Forum Testing Most Active
            schrieb am zuletzt editiert von
            #6

            @bananajoe sagte in Datenpunkt erstellen und im Anschluss sofort nutzen:

            @dslraser hatte ich schon probiert, funktioniert nicht

            Ich habe es auch probiert und es hat funktioniert.
            Besser ist aber sicher die Variante von @fastfoot

            F 1 Antwort Letzte Antwort
            0
            • BananaJoeB BananaJoe

              @dslraser hatte ich schon probiert, funktioniert nicht

              dslraserD Offline
              dslraserD Offline
              dslraser
              Forum Testing Most Active
              schrieb am zuletzt editiert von dslraser
              #7

              @bananajoe sagte in Datenpunkt erstellen und im Anschluss sofort nutzen:

              @dslraser hatte ich schon probiert, funktioniert nicht

              Bildschirmfoto 2021-04-14 um 22.31.03.png

              14.4.2021, 22:30:53.699	[info ]: javascript.0 (11217) Stop script script.js.99_Test.DP
              14.4.2021, 22:30:53.714	[info ]: javascript.0 (11217) Start javascript script.js.99_Test.DP
              14.4.2021, 22:30:53.719	[info ]: javascript.0 (11217) script.js.99_Test.DP: registered 0 subscriptions and 0 schedules
              14.4.2021, 22:30:53.719	[info ]: javascript.0 (11217) script.js.99_Test.DP: State existiert nicht !
              14.4.2021, 22:30:54.720	[info ]: javascript.0 (11217) script.js.99_Test.DP: Init Wert: eins
              14.4.2021, 22:30:56.726	[info ]: javascript.0 (11217) script.js.99_Test.DP: neuer Wert: zwei
              

              <xml xmlns="https://developers.google.com/blockly/xml">
               <variables>
                 <variable id="[axQ$oH/ZZy.k67+iBx/">id</variable>
                 <variable id="Qs_%`%)=dTI}Bs8Bed4{">Test_DP</variable>
                 <variable type="timeout" id="start">start</variable>
                 <variable type="timeout" id="timeout">timeout</variable>
                 <variable type="timeout" id="timeout2">timeout2</variable>
               </variables>
               <block type="procedures_defcustomreturn" id="7R:L*9?)7Wl^RqVg+G`q" x="13" y="13">
                 <mutation statements="false">
                   <arg name="id" varid="[axQ$oH/ZZy.k67+iBx/"></arg>
                 </mutation>
                 <field name="NAME">existiert_State</field>
                 <field name="SCRIPT">aWYoZXhpc3RzU3RhdGUoaWQpKXJldHVybiB0cnVlOw==</field>
                 <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
               </block>
               <block type="variables_set" id=";XB7Ok*88;t28inG4lUb" x="13" y="63">
                 <field name="VAR" id="Qs_%`%)=dTI}Bs8Bed4{">Test_DP</field>
                 <value name="VALUE">
                   <block type="text" id="g_F5IjXtZsF/PuOv2JC@">
                     <field name="TEXT"></field>
                   </block>
                 </value>
                 <next>
                   <block type="variables_set" id="uek3a!SO(r8$hw@O~Jmk">
                     <field name="VAR" id="Qs_%`%)=dTI}Bs8Bed4{">Test_DP</field>
                     <value name="VALUE">
                       <block type="field_oid" id="X(V59#cpR+Y+~bvQ@i|6">
                         <field name="oid">javascript.0.jsState</field>
                       </block>
                     </value>
                     <next>
                       <block type="create" id="HHlmtV`-A_7.m9zR85D$">
                         <field name="NAME">jsState</field>
                         <value name="VALUE">
                           <block type="text" id="K[|K_Qfm2(TDG0Y?k*IS">
                             <field name="TEXT">eins</field>
                           </block>
                         </value>
                         <value name="COMMON">
                           <block type="text" id="s,QEs/JoRn:|wD~*,1/-">
                             <field name="TEXT">{ "role" : "string" , "type" : "string" , "name" : "A" }</field>
                           </block>
                         </value>
                         <next>
                           <block type="controls_if" id="_{}vOCCEYp^bA_$yLjRQ">
                             <mutation else="1"></mutation>
                             <value name="IF0">
                               <block type="procedures_callcustomreturn" id="NAI$cx_]gw]ScNlY8sHv">
                                 <mutation name="existiert_State">
                                   <arg name="id"></arg>
                                 </mutation>
                                 <value name="ARG0">
                                   <block type="variables_get" id="!quqAfEJA-(COD^#(^}!">
                                     <field name="VAR" id="Qs_%`%)=dTI}Bs8Bed4{">Test_DP</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                             <statement name="DO0">
                               <block type="debug" id="ex84XR81#x^{i;u$9tL4">
                                 <field name="Severity">log</field>
                                 <value name="TEXT">
                                   <shadow type="text" id="FcUwAVUCPp9c!,OSBi#i">
                                     <field name="TEXT">State existiert</field>
                                   </shadow>
                                 </value>
                               </block>
                             </statement>
                             <statement name="ELSE">
                               <block type="debug" id=")Je::,`YVl$ajVfV{T|z">
                                 <field name="Severity">log</field>
                                 <value name="TEXT">
                                   <shadow type="text" id="uL9YI2CjEl/%O2h1^^9W">
                                     <field name="TEXT">State existiert nicht !</field>
                                   </shadow>
                                 </value>
                               </block>
                             </statement>
                             <next>
                               <block type="timeouts_cleartimeout" id="Q0LjqdL7H{!bg4-!59xY">
                                 <field name="NAME">start</field>
                                 <next>
                                   <block type="timeouts_settimeout" id="SDTJ`3Zfu,,kyDzZdkW=">
                                     <field name="NAME">start</field>
                                     <field name="DELAY">1000</field>
                                     <field name="UNIT">ms</field>
                                     <statement name="STATEMENT">
                                       <block type="debug" id=".ib`nDWC_CW+BWX(bWDf">
                                         <field name="Severity">log</field>
                                         <value name="TEXT">
                                           <shadow type="text">
                                             <field name="TEXT">test</field>
                                           </shadow>
                                           <block type="text_join" id="G+6-C_G}iF{a3MknWJ#$">
                                             <mutation items="2"></mutation>
                                             <value name="ADD0">
                                               <block type="text" id="@yU`(/.UlIQ@#6)Hnljv">
                                                 <field name="TEXT">Init Wert: </field>
                                               </block>
                                             </value>
                                             <value name="ADD1">
                                               <block type="get_value" id="U^wowRz}Hb)m)CD1kVzs">
                                                 <field name="ATTR">val</field>
                                                 <field name="OID">javascript.0.jsState</field>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                       </block>
                                     </statement>
                                     <next>
                                       <block type="timeouts_cleartimeout" id="~jy7A|=)c+Gual-U23@E">
                                         <field name="NAME">timeout</field>
                                         <next>
                                           <block type="timeouts_settimeout" id="?HBGpk^/~g~Yei?H`H.P">
                                             <field name="NAME">timeout</field>
                                             <field name="DELAY">2000</field>
                                             <field name="UNIT">ms</field>
                                             <statement name="STATEMENT">
                                               <block type="control_ex" id="kFMZS@qF.mQq@SKi?BRa" inline="true">
                                                 <field name="TYPE">true</field>
                                                 <field name="CLEAR_RUNNING">FALSE</field>
                                                 <value name="OID">
                                                   <shadow type="field_oid" id="o63hWk+tRd)eW?[LG`ic">
                                                     <field name="oid">javascript.0.jsState</field>
                                                   </shadow>
                                                 </value>
                                                 <value name="VALUE">
                                                   <shadow type="logic_boolean" id="YWLv`cI;MnL$:ROj/+go">
                                                     <field name="BOOL">TRUE</field>
                                                   </shadow>
                                                   <block type="text" id="Pqzi@{ywJhPhb1v-e5=D">
                                                     <field name="TEXT">zwei</field>
                                                   </block>
                                                 </value>
                                                 <value name="DELAY_MS">
                                                   <shadow type="math_number" id="%;SkD6-ulX==N)$=%Rn:">
                                                     <field name="NUM">0</field>
                                                   </shadow>
                                                 </value>
                                               </block>
                                             </statement>
                                             <next>
                                               <block type="timeouts_cleartimeout" id="y(^O#,e:*4$}%mfIEDmw">
                                                 <field name="NAME">timeout2</field>
                                                 <next>
                                                   <block type="timeouts_settimeout" id="9x}cpSoW-a)uSCUe!.$M">
                                                     <field name="NAME">timeout2</field>
                                                     <field name="DELAY">3000</field>
                                                     <field name="UNIT">ms</field>
                                                     <statement name="STATEMENT">
                                                       <block type="debug" id=")loTA?exp*K-#=)ujNhu">
                                                         <field name="Severity">log</field>
                                                         <value name="TEXT">
                                                           <shadow type="text" id="RMbHk^2Y)g|dimF[evPk">
                                                             <field name="TEXT">test</field>
                                                           </shadow>
                                                           <block type="text_join" id="W-TClT~P;89/qj@QW`qh">
                                                             <mutation items="2"></mutation>
                                                             <value name="ADD0">
                                                               <block type="text" id="HVC{,(].e0X6]}_}^FxV">
                                                                 <field name="TEXT">neuer Wert: </field>
                                                               </block>
                                                             </value>
                                                             <value name="ADD1">
                                                               <block type="get_value" id="Wi%ull^FE?3+X+Ay6_Z(">
                                                                 <field name="ATTR">val</field>
                                                                 <field name="OID">javascript.0.jsState</field>
                                                               </block>
                                                             </value>
                                                           </block>
                                                         </value>
                                                       </block>
                                                     </statement>
                                                   </block>
                                                 </next>
                                               </block>
                                             </next>
                                           </block>
                                         </next>
                                       </block>
                                     </next>
                                   </block>
                                 </next>
                               </block>
                             </next>
                           </block>
                         </next>
                       </block>
                     </next>
                   </block>
                 </next>
               </block>
              </xml>
              

              EDIT: Test Blockly nochmal erweitert...

              1 Antwort Letzte Antwort
              0
              • dslraserD dslraser

                @bananajoe sagte in Datenpunkt erstellen und im Anschluss sofort nutzen:

                @dslraser hatte ich schon probiert, funktioniert nicht

                Ich habe es auch probiert und es hat funktioniert.
                Besser ist aber sicher die Variante von @fastfoot

                F Offline
                F Offline
                fastfoot
                schrieb am zuletzt editiert von
                #8

                @dslraser sagte in Datenpunkt erstellen und im Anschluss sofort nutzen:

                @bananajoe sagte in Datenpunkt erstellen und im Anschluss sofort nutzen:

                @dslraser hatte ich schon probiert, funktioniert nicht

                Ich habe es auch probiert und es hat funktioniert.
                Besser ist aber sicher die Variante von @fastfoot

                die xxxStateAsync() Funktionen sind relativ neu im JS-Controller. Sie ermöglichen in Verbindung mit await auf das Ende der Ausführung zu warten, gleichzeitig blockiert dieses Warten aber nicht das gesamte restliche System, d.h. jegliche Events werden trotzdem abgearbeitet. Natürlich müsste man das nicht so aufblähen wie im Beispiel, es ist speziell als 'Vorspann' für Skripte gedacht, so dass sichergestellt ist dass benötigte Datenpunkte verfügbar sind. Zu beachten ist dass await nur in einer Funktion aufgerufen werden darf die mit async definiert wurde. Meines Wissens nach bietet Blockly (noch?) kein createStateAsync(), man müsste das dann dort mit einer JS-Function machen. Ein Timeout birgt immer die Gefahr dass er zu kurz ist, wählt man ihn zu groß dann ärgert man sich :-) Mit await/async spart man sich dieses Ärgernis...

                Hier noch ne Minimalversion:

                let idKey = "0_userdata.0.test.MyDP";
                let dp = {"name":"Daten","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":""};
                async function test(){
                    await createStateAsync(idKey, dp);
                    setState(idKey, 'Mein Wert');
                }
                

                iobroker läuft unter Docker auf QNAP TS-451+
                SkriptRecovery: https://forum.iobroker.net/post/930558

                dslraserD 1 Antwort Letzte Antwort
                2
                • F fastfoot

                  @dslraser sagte in Datenpunkt erstellen und im Anschluss sofort nutzen:

                  @bananajoe sagte in Datenpunkt erstellen und im Anschluss sofort nutzen:

                  @dslraser hatte ich schon probiert, funktioniert nicht

                  Ich habe es auch probiert und es hat funktioniert.
                  Besser ist aber sicher die Variante von @fastfoot

                  die xxxStateAsync() Funktionen sind relativ neu im JS-Controller. Sie ermöglichen in Verbindung mit await auf das Ende der Ausführung zu warten, gleichzeitig blockiert dieses Warten aber nicht das gesamte restliche System, d.h. jegliche Events werden trotzdem abgearbeitet. Natürlich müsste man das nicht so aufblähen wie im Beispiel, es ist speziell als 'Vorspann' für Skripte gedacht, so dass sichergestellt ist dass benötigte Datenpunkte verfügbar sind. Zu beachten ist dass await nur in einer Funktion aufgerufen werden darf die mit async definiert wurde. Meines Wissens nach bietet Blockly (noch?) kein createStateAsync(), man müsste das dann dort mit einer JS-Function machen. Ein Timeout birgt immer die Gefahr dass er zu kurz ist, wählt man ihn zu groß dann ärgert man sich :-) Mit await/async spart man sich dieses Ärgernis...

                  Hier noch ne Minimalversion:

                  let idKey = "0_userdata.0.test.MyDP";
                  let dp = {"name":"Daten","type":"string","role":"","read":true,"write":true,"desc":"von Skript erstellt","def":""};
                  async function test(){
                      await createStateAsync(idKey, dp);
                      setState(idKey, 'Mein Wert');
                  }
                  
                  dslraserD Offline
                  dslraserD Offline
                  dslraser
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von dslraser
                  #9

                  @fastfoot
                  vielen Dank für Deine Beispiele.
                  Bisher habe ich das Script benutzt

                  https://github.com/Mic-M/iobroker-createUserStates

                  bzw.

                  https://github.com/Mic-M/iobroker-createUserStates/blob/master/createUserStates.js

                  F 1 Antwort Letzte Antwort
                  0
                  • dslraserD dslraser

                    @fastfoot
                    vielen Dank für Deine Beispiele.
                    Bisher habe ich das Script benutzt

                    https://github.com/Mic-M/iobroker-createUserStates

                    bzw.

                    https://github.com/Mic-M/iobroker-createUserStates/blob/master/createUserStates.js

                    F Offline
                    F Offline
                    fastfoot
                    schrieb am zuletzt editiert von
                    #10

                    @dslraser sagte in Datenpunkt erstellen und im Anschluss sofort nutzen:

                    Bisher habe ich das Script benutzt
                    https://github.com/Mic-M/iobroker-createUserStates

                    Ich kenne das Skript kaum, denke aber der Hauptfokus lag seinerzeit auf der Erstellung in 0_userdata.0, was nicht vom JS Adapter unterstützt wurde. Das Skript arbeitet auch noch mit Timeout. Schön zu sehen wie sehr sich iobroker weiterentwickelt hat, wenn man es vergleicht mit den paar Zeilen meines ersten Beispiels. Wäre sehr interessant zu erfahren was der Autor dazu zu sagen hat, evtl. hat es auch heute noch seine Berechtigung, das kann ich nicht beurteilen. Für meine Anwendungen reicht aber das was ich gepostet habe vollkommen aus

                    iobroker läuft unter Docker auf QNAP TS-451+
                    SkriptRecovery: https://forum.iobroker.net/post/930558

                    1 Antwort Letzte Antwort
                    0
                    • BananaJoeB BananaJoe

                      In praktisch jedem meiner Skripte erstelle ich am Anfang ggf. benötigte Datenpunkte.
                      Danach kommt in der Regel eine "Erst-Befüllung" der Datenpunkte und dann ggf. Subscriptions.

                      Wenn der Datenpunkt gerade erstellt wurde kann ich diesen aber 2 Zeilen später noch nicht nutzen:

                      // Datenpunkt erstellen
                      createState("javascript.0.Testumgebung.Test1", "Eins", {
                        type: 'string',
                        read: true, 
                        write: true
                      });
                      
                      // Datenpunkt ändern
                      setState("javascript.0.Testumgebung.Test1", "Zwei");
                      

                      7a8a787e-2382-4754-812b-3eb176814092-image.png

                      Ich drücke dann immer einmal auf Neustart und dann geht es.
                      Wie bekomme ich es hin das erst weitermacht wenn der Datenpunkt erstellt ist?

                      Das ich natürlich die Erstbefüllung mit dem Erstellen der Datenpunkte verbinden könnte ist mir klar, aber ich hatte das Problem auch schon in anderen Konstellationen, z.B. wenn sich 2 getrennte Skripte über einen Datenpunkt abstimmen sollten (Ich laufe gerade, mach du nichts), das hat auch nicht geklappt weil für das andere Skript der Wert noch gar nicht geschrieben war.

                      grrfieldG Offline
                      grrfieldG Offline
                      grrfield
                      schrieb am zuletzt editiert von
                      #11

                      @bananajoe Hallo, ich gehe da einen pragmatischen Weg: nach dem Erstellen der States frage ich ab, ob der letzte State bereits existiert und starte das Skript neu, bis er erstellt wurde:

                      createState("javascript.0.Testumgebung.Test1", "Eins", {
                        type: 'string',
                        read: true, 
                        write: true
                      });
                      createState("javascript.0.Testumgebung.Test2", "Zwei", {
                        type: 'string',
                        read: true, 
                        write: true
                      });
                      
                      // Restart, wenn letzter State noch nicht geschrieben
                      if(!existsState("javascript.0.Testumgebung.Test2")) runScript();
                      

                      Da das Neustarten nur beim ersten Anlegen der Datenpunkte passiert, stört es nicht weiter.

                      BananaJoeB 1 Antwort Letzte Antwort
                      0
                      • grrfieldG grrfield

                        @bananajoe Hallo, ich gehe da einen pragmatischen Weg: nach dem Erstellen der States frage ich ab, ob der letzte State bereits existiert und starte das Skript neu, bis er erstellt wurde:

                        createState("javascript.0.Testumgebung.Test1", "Eins", {
                          type: 'string',
                          read: true, 
                          write: true
                        });
                        createState("javascript.0.Testumgebung.Test2", "Zwei", {
                          type: 'string',
                          read: true, 
                          write: true
                        });
                        
                        // Restart, wenn letzter State noch nicht geschrieben
                        if(!existsState("javascript.0.Testumgebung.Test2")) runScript();
                        

                        Da das Neustarten nur beim ersten Anlegen der Datenpunkte passiert, stört es nicht weiter.

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

                        @grrfield sagte in Datenpunkt erstellen und im Anschluss sofort nutzen:

                        if(!existsState("javascript.0.Testumgebung.Test2")) runScript();
                        

                        Da das Neustarten nur beim ersten Anlegen der Datenpunkte passiert, stört es nicht weiter.

                        Cool, Skripte können sich selbst neu starten. Wieder was gelernt.

                        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

                        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

                        335

                        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