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. async, await mit selector oder schleife????

NEWS

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

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    554

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

async, await mit selector oder schleife????

Geplant Angeheftet Gesperrt Verschoben JavaScript
19 Beiträge 3 Kommentatoren 1.9k Aufrufe 3 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.
  • AlCalzoneA AlCalzone

    Dein Verständnis ist korrekt.

    @ple sagte in async, await mit selector oder schleife????:

    warum gibt es dann noch das return new Promise

    async/await ist eigentlich "nur" eine hübsche und aufgeräumte Variante mit Promises zu arbeiten, die aussieht wie synchroner Code.

    Eine async-Funktion gibt implizit einen Promise zurück. Wenn du jetzt aber per await eine Schnittstelle nutzen willst, die mit nicht mit Promises, sondern mit Callbacks arbeitest, musst du die irgendwie auf einen Promise umbiegen. Das geht indem du selbst einen Promise zurück gibst und selbst resolve bzw. reject mit den korrekten Werten aufrufst

    function bla() {
      return new Promise((resolve, reject) => {
        // ... mehr code
        // Funktion, die einen Callback nutzt:
        callExternalAPI(arg1, arg2, (err, result) => {
          if (err) { 
            // Bei Fehlern den Promise rejecten (dann throwt await einen Error)
            reject(err);
          } else {
            // Bei Erfolg das Ergebnis zurück geben (geht auch ohne result, wenn die Funktion keinen Wert zurück geben soll)
            resolve(result);
          }
        });
      });
    }
    

    Die Funktion bla muss dann übrigens nicht als async deklariert werden, weil du in ihr ja kein await nutzt.

    P Offline
    P Offline
    ple
    schrieb am zuletzt editiert von
    #5

    @alcalzone
    Kann man dir irgendwo ne Kaffee ausgeben :-)
    Wo ich dich gerade an der Strippe habe, hier ein paar Fragen mehr :-),

    Ok, also alles was kein async/await unterstützt muss mit

    return new Promise((resolve, reject) => {
    

    ausgeführt werden.
    Wäre es denn ein gehbarer Weg eine Schrittkette wie folgt aufzubauen?

    async function neueNummer() {
        console.log("STEP 10: neue Nummer wurde gelesen")
        Eingabe_sperren = true
        console.log("STEP 20: Daten werden gelöscht")
        await loeschen()
        console.log("STEP 30: Rezept wird gesucht")
        await Rezeptsuche()
        console.log("STEP 40: Stationsdaten werden gelesen")
        await Daten_lesen()
        console.log("STEP 50: Metadaten werden geschrieben")
        await Meta_schreiben()
        console.log("****************** update gesperrt: " + Eingabe_sperren)
    
    }
    
    

    ich müsste alt nur gucken, wie man es am es macht, das z.B. wirklich erst Step 40 ausgeführt wird, bevor es weiter geht?
    In Step 40 habe ich mir sowas z.B. zusammengetrimmert, denke es geht einfacher.
    Der Code macht ein Query auf ner MSSQL und soll mir Daten abholen und die in Datenpunkte schreiben. Es wäre wichtig, dass dieses auch komplett ausgeführt wurde, bevor es mit Step50 weitergeht. Kann der sendto async/await oder wie würde man da vorgehen.

    function Daten_lesen_SQL(Tabelle) {
        var Data;
        var i;
        var Spaltenname;
        var Data_Column = {};
     
    
        var DMC_Jahr_Nr = Number(getState("javascript.0.DMC_Kamera.Jahr_Nr").val);
        var DMC_Tag_Nr = Number(getState("javascript.0.DMC_Kamera.Tag_Nr").val);
        var DMC_Id_Nr = Number(getState("javascript.0.DMC_Kamera.Id_Nr").val);
    
        var sql_string = "USE XXXXXXXXXXXXX SELECT TOP (1) * \
                      FROM dbo.[" + Tabelle + "] \
                      WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                      ORDER BY id DESC"
    
        //console.log(sql_string)
        sendTo('sql.1', 'query', sql_string, function (result) {
            if (result.error) {
                console.error(result.error);
            } else {
    
                Data = ((result.result[0]));
                for (Spaltenname in Data) {
                    let x = Data[Spaltenname];
                    let Ergebnis = JSON.stringify(x);
    
                    if (typeof Data === 'undefined') {
                        log(Tabelle + " keine Daten vorhanden");
                    }
                    if (typeof Data !== 'undefined') {
                        // States anlegen
    
                        createState('Daten_lesen.' + Tabelle + '.' + Spaltenname, '', {
                            name: Spaltenname,
                            type: 'mixed',
                            unit: ''
                        });
    
                        /*
                                            createState('Daten_senden.' + Tabelle + '.' + Spaltenname, '', {
                                                name: Spaltenname,
                                                type: 'mixed',
                                                unit: ''
                                            });
                        */
    
                        let Daten = Ergebnis;
                        Daten = Daten.replace('"', '');
                        Daten = Daten.replace('"', '');
                        Daten = Daten.replace('Z', '');
    
                        if (Daten == 'true') {
                            Daten = true
                        }
                        if (Daten == 'false') {
                            Daten = false
                        }
    
                        // States beschreiben
                        setState('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten);
                    }
                }
            }
        }
    
    
        );
    
    }
    

    Intel Nuc + Proxmox

    1 Antwort Letzte Antwort
    0
    • AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      schrieb am zuletzt editiert von
      #6

      @ple sagte in async, await mit selector oder schleife????:

      Kann man dir irgendwo ne Kaffee ausgeben

      https://github.com/sponsors/AlCalzone oder https://paypal.me/dgriesel wäre ne Option.

      Wäre es denn ein gehbarer Weg eine Schrittkette wie folgt aufzubauen?

      Absolut! Wichtig ist es nur, die Kette bei Fehlern abzubrechen, daher am besten alles in try-catch packen:

      async function neueNummer() {
        try {
          console.log("STEP 10: neue Nummer wurde gelesen");
          Eingabe_sperren = true;
          console.log("STEP 20: Daten werden gelöscht");
          await loeschen();
          console.log("STEP 30: Rezept wird gesucht");
          await Rezeptsuche();
          console.log("STEP 40: Stationsdaten werden gelesen");
          await Daten_lesen();
          console.log("STEP 50: Metadaten werden geschrieben");
          await Meta_schreiben();
          console.log("****************** update gesperrt: " + Eingabe_sperren);
        } catch (e) {
          console.error("Fehler in neueNummer: " + e);
        } finally {
          // Egal was passiert, Eingabe wieder freigeben
          Eingabe_sperren = false;
        }
      }
      

      Kann der sendto async/await oder wie würde man da vorgehen.

      Nein, aber du kannst dir nen async wrapper dafür schreiben:

      function sendToAsync(instance, command, arg) {
      	return new Promise((resolve, reject) => {
      		sendTo(instance, command, arg, (result) => {
      			if (result.error) {
      				reject(result.error);
      			} else {
      				resolve(result.result);
      			}
      		});
      	});
      }
      

      und diesen dann mit await aufrufen:

      const result = await sendToAsync('sql.1', 'query', sql_string);
      Data = result[0];
      // ... wie bisher
      

      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

      P 2 Antworten Letzte Antwort
      0
      • AlCalzoneA AlCalzone

        @ple sagte in async, await mit selector oder schleife????:

        Kann man dir irgendwo ne Kaffee ausgeben

        https://github.com/sponsors/AlCalzone oder https://paypal.me/dgriesel wäre ne Option.

        Wäre es denn ein gehbarer Weg eine Schrittkette wie folgt aufzubauen?

        Absolut! Wichtig ist es nur, die Kette bei Fehlern abzubrechen, daher am besten alles in try-catch packen:

        async function neueNummer() {
          try {
            console.log("STEP 10: neue Nummer wurde gelesen");
            Eingabe_sperren = true;
            console.log("STEP 20: Daten werden gelöscht");
            await loeschen();
            console.log("STEP 30: Rezept wird gesucht");
            await Rezeptsuche();
            console.log("STEP 40: Stationsdaten werden gelesen");
            await Daten_lesen();
            console.log("STEP 50: Metadaten werden geschrieben");
            await Meta_schreiben();
            console.log("****************** update gesperrt: " + Eingabe_sperren);
          } catch (e) {
            console.error("Fehler in neueNummer: " + e);
          } finally {
            // Egal was passiert, Eingabe wieder freigeben
            Eingabe_sperren = false;
          }
        }
        

        Kann der sendto async/await oder wie würde man da vorgehen.

        Nein, aber du kannst dir nen async wrapper dafür schreiben:

        function sendToAsync(instance, command, arg) {
        	return new Promise((resolve, reject) => {
        		sendTo(instance, command, arg, (result) => {
        			if (result.error) {
        				reject(result.error);
        			} else {
        				resolve(result.result);
        			}
        		});
        	});
        }
        

        und diesen dann mit await aufrufen:

        const result = await sendToAsync('sql.1', 'query', sql_string);
        Data = result[0];
        // ... wie bisher
        
        P Offline
        P Offline
        ple
        schrieb am zuletzt editiert von
        #7

        @alcalzone
        Na das schaue ich mir mal an und versuche es umzusetzen mit dem Wrapper.
        ich denke, ich werde mich dazu noch mal melden :-)

        Intel Nuc + Proxmox

        1 Antwort Letzte Antwort
        0
        • AlCalzoneA AlCalzone

          @ple sagte in async, await mit selector oder schleife????:

          Kann man dir irgendwo ne Kaffee ausgeben

          https://github.com/sponsors/AlCalzone oder https://paypal.me/dgriesel wäre ne Option.

          Wäre es denn ein gehbarer Weg eine Schrittkette wie folgt aufzubauen?

          Absolut! Wichtig ist es nur, die Kette bei Fehlern abzubrechen, daher am besten alles in try-catch packen:

          async function neueNummer() {
            try {
              console.log("STEP 10: neue Nummer wurde gelesen");
              Eingabe_sperren = true;
              console.log("STEP 20: Daten werden gelöscht");
              await loeschen();
              console.log("STEP 30: Rezept wird gesucht");
              await Rezeptsuche();
              console.log("STEP 40: Stationsdaten werden gelesen");
              await Daten_lesen();
              console.log("STEP 50: Metadaten werden geschrieben");
              await Meta_schreiben();
              console.log("****************** update gesperrt: " + Eingabe_sperren);
            } catch (e) {
              console.error("Fehler in neueNummer: " + e);
            } finally {
              // Egal was passiert, Eingabe wieder freigeben
              Eingabe_sperren = false;
            }
          }
          

          Kann der sendto async/await oder wie würde man da vorgehen.

          Nein, aber du kannst dir nen async wrapper dafür schreiben:

          function sendToAsync(instance, command, arg) {
          	return new Promise((resolve, reject) => {
          		sendTo(instance, command, arg, (result) => {
          			if (result.error) {
          				reject(result.error);
          			} else {
          				resolve(result.result);
          			}
          		});
          	});
          }
          

          und diesen dann mit await aufrufen:

          const result = await sendToAsync('sql.1', 'query', sql_string);
          Data = result[0];
          // ... wie bisher
          
          P Offline
          P Offline
          ple
          schrieb am zuletzt editiert von
          #8

          @AlCalzone
          zunächst vielen Dank, das funktioniert soweit und ich komme da einigemaßen mit klar.
          Wo ich dich gerade an der Strippe habe, ich hätte da noch ein paar Fragen.

          1. Fürs Daten senden an den SQL mittels insert oder Update, gibt es da auch eine Rückantwort, dass ich sicher sein kann, dass die Daten geschrieben worden sind?

          Ein etwas anders Problem, ich habe noch per USB einen RFID Reader angeschlossen am Pi, dort wollte ich auf die Karten reagieren, das klappt auch soweit, es musste halt noch das NPM Modul "nfc-pcsc" installiert werden.
          nun ist es leider so, dass bei einem Neustart des Scripts anscheinen jeweils ein neuer "Stream", oder wie man es nennt, mit aufgebaut wird und die Daten jeweils n mal geschrieben werden. Erst wenn ich den Javascript Instanz neustarte, werden die Daten auch nur ein mal geschrieben, bis ich das Script entweder neustarte oder es neu speichere.
          Gibt es dafür vielleicht eine Lösung?

          Hier mal der Code und der Link zum NPM Modul
          https://www.npmjs.com/package/nfc-pcsc

          Gruß und Vielen Dank für deine Unterstützung.

          Intel Nuc + Proxmox

          AlCalzoneA 1 Antwort Letzte Antwort
          0
          • P ple

            @AlCalzone
            zunächst vielen Dank, das funktioniert soweit und ich komme da einigemaßen mit klar.
            Wo ich dich gerade an der Strippe habe, ich hätte da noch ein paar Fragen.

            1. Fürs Daten senden an den SQL mittels insert oder Update, gibt es da auch eine Rückantwort, dass ich sicher sein kann, dass die Daten geschrieben worden sind?

            Ein etwas anders Problem, ich habe noch per USB einen RFID Reader angeschlossen am Pi, dort wollte ich auf die Karten reagieren, das klappt auch soweit, es musste halt noch das NPM Modul "nfc-pcsc" installiert werden.
            nun ist es leider so, dass bei einem Neustart des Scripts anscheinen jeweils ein neuer "Stream", oder wie man es nennt, mit aufgebaut wird und die Daten jeweils n mal geschrieben werden. Erst wenn ich den Javascript Instanz neustarte, werden die Daten auch nur ein mal geschrieben, bis ich das Script entweder neustarte oder es neu speichere.
            Gibt es dafür vielleicht eine Lösung?

            Hier mal der Code und der Link zum NPM Modul
            https://www.npmjs.com/package/nfc-pcsc

            Gruß und Vielen Dank für deine Unterstützung.

            AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            schrieb am zuletzt editiert von
            #9

            @ple sagte in async, await mit selector oder schleife????:

            Gibt es dafür vielleicht eine Lösung?

            Wenn du uns deinen bisherigen Code verheimlichst, eher nicht ;)

            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

            P 1 Antwort Letzte Antwort
            0
            • AlCalzoneA AlCalzone

              @ple sagte in async, await mit selector oder schleife????:

              Gibt es dafür vielleicht eine Lösung?

              Wenn du uns deinen bisherigen Code verheimlichst, eher nicht ;)

              P Offline
              P Offline
              ple
              schrieb am zuletzt editiert von
              #10

              @alcalzone
              Man, da bin ich mal wieder sparsam mit Informationen :-)

              Code für den RFID Leser wäre folgender.

              // in ES6
              //import { NFC } from 'nfc-pcsc';
              
              // without Babel in ES2015
              var { NFC } = require('nfc-pcsc');
              
              var nfc = new NFC(); // optionally you can pass logger
              
              nfc.on('reader', reader => {
              
              	console.log(`${reader.reader.name}  device attached`);
              
              	// enable when you want to auto-process ISO 14443-4 tags (standard=TAG_ISO_14443_4)
              	// when an ISO 14443-4 is detected, SELECT FILE command with the AID is issued
              	// the response is available as card.data in the card event
              	// see examples/basic.js line 17 for more info
              	// reader.aid = 'F222222222';
              
              	reader.on('card', card => {
              
              		// card is object containing following data
              		// [always] String type: TAG_ISO_14443_3 (standard nfc tags like MIFARE) or TAG_ISO_14443_4 (Android HCE and others)
              		// [always] String standard: same as type
              		// [only TAG_ISO_14443_3] String uid: tag uid
              		// [only TAG_ISO_14443_4] Buffer data: raw data from select APDU response
              
              		console.log(`${reader.reader.name}  card detected`, card);
                      console.log(card.uid)
                     
              
              	});
              
              	reader.on('card.off', card => {
              		console.log(`${reader.reader.name}  card removed`, card);
                      reader.disconnect()
              	});
              
              	reader.on('error', err => {
              		console.log(`${reader.reader.name}  an error occurred`, err);
              	});
              
              	reader.on('end', () => {
              		console.log(`${reader.reader.name}  device removed`);
                       reader.disconnect()
              	});
              
              });
              
              nfc.on('error', err => {
              	console.log('an error occurred', err);
              });
              

              Und für Daten Schreiben auf dem SQL.

              async function Meta_schreiben() {
                  var SpeicherZeit = timeCon()
                  setState("javascript.0.Ablauf.Timestamp", SpeicherZeit)
                  var Rezept_Nr = getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val
                  var Tabelle
                  var DB = "Anlagen_Produktdaten";
              
              
                  if (Rezept_Nr <= 5) {
                      Tabelle = "2590C"
                  } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 6) {
                      Tabelle = "2590M"
                  } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 7) {
                      Tabelle = "2590E"
                  }
              
                  let ssql = "INSERT INTO [" + DB + "].[dbo].[" + Tabelle + "]\
                         ([Timestamp]\
                         ,[Jahr_Nr]\
                         ,[Tag_Nr]\
                         ,[Id_Nr]\
                         ,[Typ_Name]\
                         ,[Typ_Nr]\
                         ,[Bediener]\
                         ,[DMC]\
                         ,[DMC_Kz_Motor]\
                         ,[DMC_Kz_Hauptgruppe_Bauteil]\
                         ,[DMC_Kz_Teile_Typ]\
                         ,[DMC_Kz_Untergruppe_Bauteil]\
                         ,[DMC_Q_Status]\
                           ) VALUES ( \
               '" + SpeicherZeit + "' \
              ,'" + getState("javascript.0.DMC_Kamera.Jahr_Nr").val + "' \
              ,'" + getState("javascript.0.DMC_Kamera.Tag_Nr").val + "' \
              ,'" + getState("javascript.0.DMC_Kamera.Id_Nr").val + "' \
              ,'" + getState("javascript.0.Rezepte.Rezept_DS_Name").val + "' \
              ,'" + getState("javascript.0.Rezepte.Rezept_DS_Nr").val + "' \
              ,'" + getState("javascript.1.RFID_Name").val + "' \
              ,'" + getState("javascript.0.DMC_Kamera.DMC").val.slice(0, 36) + "' \
              ,'" + getState("javascript.0.DMC_Kamera.Kz_Motor").val + "' \
              ,'" + getState("javascript.0.DMC_Kamera.Kz_Hauptgruppe_Bauteil").val + "' \
              ,'" + getState("javascript.0.DMC_Kamera.Kz_Teile_Typ").val + "' \
              ,'" + getState("javascript.0.DMC_Kamera.Kz_Untergruppe_Bauteil").val + "' \
              ,'" + getState("javascript.0.DMC_Kamera.Qstatus").val + "' \
              )";
                  // SQL Daten schreiben
                  sendTo('sql.1', 'query', ssql);
                  console.log(ssql)
                  console.log("Metadaten wurde geschrieben")
              }
              

              Intel Nuc + Proxmox

              AlCalzoneA 1 Antwort Letzte Antwort
              0
              • P ple

                @alcalzone
                Man, da bin ich mal wieder sparsam mit Informationen :-)

                Code für den RFID Leser wäre folgender.

                // in ES6
                //import { NFC } from 'nfc-pcsc';
                
                // without Babel in ES2015
                var { NFC } = require('nfc-pcsc');
                
                var nfc = new NFC(); // optionally you can pass logger
                
                nfc.on('reader', reader => {
                
                	console.log(`${reader.reader.name}  device attached`);
                
                	// enable when you want to auto-process ISO 14443-4 tags (standard=TAG_ISO_14443_4)
                	// when an ISO 14443-4 is detected, SELECT FILE command with the AID is issued
                	// the response is available as card.data in the card event
                	// see examples/basic.js line 17 for more info
                	// reader.aid = 'F222222222';
                
                	reader.on('card', card => {
                
                		// card is object containing following data
                		// [always] String type: TAG_ISO_14443_3 (standard nfc tags like MIFARE) or TAG_ISO_14443_4 (Android HCE and others)
                		// [always] String standard: same as type
                		// [only TAG_ISO_14443_3] String uid: tag uid
                		// [only TAG_ISO_14443_4] Buffer data: raw data from select APDU response
                
                		console.log(`${reader.reader.name}  card detected`, card);
                        console.log(card.uid)
                       
                
                	});
                
                	reader.on('card.off', card => {
                		console.log(`${reader.reader.name}  card removed`, card);
                        reader.disconnect()
                	});
                
                	reader.on('error', err => {
                		console.log(`${reader.reader.name}  an error occurred`, err);
                	});
                
                	reader.on('end', () => {
                		console.log(`${reader.reader.name}  device removed`);
                         reader.disconnect()
                	});
                
                });
                
                nfc.on('error', err => {
                	console.log('an error occurred', err);
                });
                

                Und für Daten Schreiben auf dem SQL.

                async function Meta_schreiben() {
                    var SpeicherZeit = timeCon()
                    setState("javascript.0.Ablauf.Timestamp", SpeicherZeit)
                    var Rezept_Nr = getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val
                    var Tabelle
                    var DB = "Anlagen_Produktdaten";
                
                
                    if (Rezept_Nr <= 5) {
                        Tabelle = "2590C"
                    } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 6) {
                        Tabelle = "2590M"
                    } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 7) {
                        Tabelle = "2590E"
                    }
                
                    let ssql = "INSERT INTO [" + DB + "].[dbo].[" + Tabelle + "]\
                           ([Timestamp]\
                           ,[Jahr_Nr]\
                           ,[Tag_Nr]\
                           ,[Id_Nr]\
                           ,[Typ_Name]\
                           ,[Typ_Nr]\
                           ,[Bediener]\
                           ,[DMC]\
                           ,[DMC_Kz_Motor]\
                           ,[DMC_Kz_Hauptgruppe_Bauteil]\
                           ,[DMC_Kz_Teile_Typ]\
                           ,[DMC_Kz_Untergruppe_Bauteil]\
                           ,[DMC_Q_Status]\
                             ) VALUES ( \
                 '" + SpeicherZeit + "' \
                ,'" + getState("javascript.0.DMC_Kamera.Jahr_Nr").val + "' \
                ,'" + getState("javascript.0.DMC_Kamera.Tag_Nr").val + "' \
                ,'" + getState("javascript.0.DMC_Kamera.Id_Nr").val + "' \
                ,'" + getState("javascript.0.Rezepte.Rezept_DS_Name").val + "' \
                ,'" + getState("javascript.0.Rezepte.Rezept_DS_Nr").val + "' \
                ,'" + getState("javascript.1.RFID_Name").val + "' \
                ,'" + getState("javascript.0.DMC_Kamera.DMC").val.slice(0, 36) + "' \
                ,'" + getState("javascript.0.DMC_Kamera.Kz_Motor").val + "' \
                ,'" + getState("javascript.0.DMC_Kamera.Kz_Hauptgruppe_Bauteil").val + "' \
                ,'" + getState("javascript.0.DMC_Kamera.Kz_Teile_Typ").val + "' \
                ,'" + getState("javascript.0.DMC_Kamera.Kz_Untergruppe_Bauteil").val + "' \
                ,'" + getState("javascript.0.DMC_Kamera.Qstatus").val + "' \
                )";
                    // SQL Daten schreiben
                    sendTo('sql.1', 'query', ssql);
                    console.log(ssql)
                    console.log("Metadaten wurde geschrieben")
                }
                
                AlCalzoneA Offline
                AlCalzoneA Offline
                AlCalzone
                Developer
                schrieb am zuletzt editiert von
                #11

                @ple Na das ist doch schon besser. Allerdings verstehe ich noch nicht, was ganz spezifisch dein Problem ist.
                Vielleicht zeigst du das noch an einem Beispiel, z.B. mit logs oder so? Der Code sieht auf den ersten Blick nicht falsch aus.

                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                P 1 Antwort Letzte Antwort
                0
                • AlCalzoneA AlCalzone

                  @ple Na das ist doch schon besser. Allerdings verstehe ich noch nicht, was ganz spezifisch dein Problem ist.
                  Vielleicht zeigst du das noch an einem Beispiel, z.B. mit logs oder so? Der Code sieht auf den ersten Blick nicht falsch aus.

                  P Offline
                  P Offline
                  ple
                  schrieb am zuletzt editiert von
                  #12

                  @alcalzone
                  hier mal ein Beispiel, Javascript instanz neugestartet und RFID eingelesen, wurde auch nur 1 mal gelesen, so wie es auch sollte.
                  Danach das Script ein paar mal neu gestartet, danach kommt der Inhalt mehrmals, halt so oft wie das Script neu gestartet wurde. Denke der öffnet jeweils eine neue Verbindung zum Reader und somit kommt es öfters.

                  11:06:01.417	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                  11:06:01.418	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                  11:06:01.720	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:07.946	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:07.949	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:07.968	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:07.991	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:07.993	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:08.155	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.156	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.168	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:08.182	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:08.184	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:08.365	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.367	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.380	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:08.395	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:08.396	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:08.581	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.582	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.598	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:08.613	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:08.615	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:08.765	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.767	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.779	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:08.793	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:08.795	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:08.911	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.916	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:08.934	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:08.957	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:08.959	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:09.273	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:09.274	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:09.288	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:09.303	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:09.305	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:10.450	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:10.452	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:10.469	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:10.481	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:10.483	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:10.617	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:10.618	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:10.635	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:10.648	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:10.650	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:10.785	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:10.786	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:10.799	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:10.811	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:10.813	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:10.912	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:10.915	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:10.949	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:10.970	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:10.972	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:11.028	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.030	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.048	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:11.066	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:11.068	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:11.161	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.163	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.185	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:11.202	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:11.204	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:11.329	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.329	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.346	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:11.363	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:11.364	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:11.445	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.449	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.465	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:11.484	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:11.485	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:11.569	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.570	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.589	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:11.614	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:11.616	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:11.769	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.768	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.781	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:11.796	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:11.798	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:11.937	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.938	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                  11:06:11.962	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                  11:06:11.973	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                  11:06:11.975	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                  11:06:14.533	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                  11:06:14.534	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                  11:06:14.560	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                  11:06:14.561	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                  11:06:14.581	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                  11:06:14.581	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                  11:06:14.605	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                  11:06:14.605	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                  11:06:14.663	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:14.765	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:14.868	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:14.971	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.074	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.178	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.179	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.179	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.180	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.180	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.181	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.181	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.181	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.182	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.182	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.182	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.183	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.183	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.186	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.187	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.188	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.189	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.192	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.193	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.193	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.194	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.195	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.195	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.280	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.280	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.383	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.384	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  11:06:15.486	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                  11:06:15.487	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                  

                  Intel Nuc + Proxmox

                  AlCalzoneA 1 Antwort Letzte Antwort
                  0
                  • P ple

                    @alcalzone
                    hier mal ein Beispiel, Javascript instanz neugestartet und RFID eingelesen, wurde auch nur 1 mal gelesen, so wie es auch sollte.
                    Danach das Script ein paar mal neu gestartet, danach kommt der Inhalt mehrmals, halt so oft wie das Script neu gestartet wurde. Denke der öffnet jeweils eine neue Verbindung zum Reader und somit kommt es öfters.

                    11:06:01.417	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                    11:06:01.418	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                    11:06:01.720	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:07.946	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:07.949	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:07.968	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:07.991	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:07.993	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:08.155	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.156	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.168	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:08.182	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:08.184	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:08.365	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.367	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.380	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:08.395	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:08.396	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:08.581	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.582	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.598	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:08.613	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:08.615	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:08.765	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.767	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.779	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:08.793	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:08.795	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:08.911	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.916	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:08.934	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:08.957	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:08.959	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:09.273	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:09.274	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:09.288	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:09.303	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:09.305	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:10.450	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:10.452	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:10.469	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:10.481	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:10.483	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:10.617	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:10.618	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:10.635	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:10.648	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:10.650	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:10.785	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:10.786	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:10.799	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:10.811	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:10.813	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:10.912	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:10.915	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:10.949	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:10.970	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:10.972	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:11.028	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.030	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.048	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:11.066	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:11.068	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:11.161	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.163	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.185	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:11.202	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:11.204	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:11.329	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.329	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.346	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:11.363	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:11.364	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:11.445	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.449	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.465	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:11.484	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:11.485	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:11.569	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.570	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.589	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:11.614	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:11.616	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:11.769	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.768	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.781	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:11.796	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:11.798	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:11.937	info	javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.938	info	javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader
                    11:06:11.962	info	javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader
                    11:06:11.973	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules
                    11:06:11.975	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached
                    11:06:14.533	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                    11:06:14.534	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                    11:06:14.560	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                    11:06:14.561	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                    11:06:14.581	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                    11:06:14.581	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                    11:06:14.605	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected
                    11:06:14.605	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38
                    11:06:14.663	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:14.765	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:14.868	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:14.971	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.074	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.178	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.179	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.179	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.180	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.180	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.181	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.181	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.181	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.182	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.182	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.182	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.183	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.183	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.186	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.187	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.188	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.189	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.192	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.193	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.193	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.194	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.195	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.195	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.280	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.280	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.383	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.384	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    11:06:15.486	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred
                    11:06:15.487	info	javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
                    
                    AlCalzoneA Offline
                    AlCalzoneA Offline
                    AlCalzone
                    Developer
                    schrieb am zuletzt editiert von
                    #13

                    @ple Ich vermute, da müsste mindestens mal beim Skriptende die Verbindung geschlossen werden:

                    onStop(() => {
                      nfc.close();
                    });
                    

                    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                    P 1 Antwort Letzte Antwort
                    0
                    • AlCalzoneA AlCalzone

                      @ple Ich vermute, da müsste mindestens mal beim Skriptende die Verbindung geschlossen werden:

                      onStop(() => {
                        nfc.close();
                      });
                      
                      P Offline
                      P Offline
                      ple
                      schrieb am zuletzt editiert von
                      #14

                      @alcalzone sagte in async, await mit selector oder schleife????:

                      @ple Ich vermute, da müsste mindestens mal beim Skriptende die Verbindung geschlossen werden:

                      onStop(() => {
                        nfc.close();
                      });
                      

                      So, habs mal ein paar Wochen immer mal wieder probiert, klappt nicht wie gehofft, egal.
                      nun habe ich ein größeres Problem, anscheinend habe ich immer noch nicht gecheckt wie man am besten eine Schrittkette aufbaut, wenn in der Schrittkette eine weitere Schrittkette aufgerufen werden soll, so das der Code komplett asyncron aufgerufen wird. Ich muss echt noch viel lernen.
                      Also das was ich erreichen möchte ist folgendes.

                      In Main werden einzelne Funktionen aufgerufen
                      // alles asyncron
                      // alte Daten löschen
                      await loeschen()
                      // eine Rezeptsuche
                      await Rezeptsuche()
                      // Mehrere SQL Tabelle Daten abholen
                      await Daten_lesen()
                      // Danach Metadaten schreiben auf dem SQL
                      await Meta_schreiben()
                      

                      So, nun ist es so, dass ich in Daten_lesen() mehrere SQL Querys absetze und ich darauf warten möchte. Es kann mal sein, das keine Daten zurückkommen, z.B. wenn die Netzwerkverbindung abschmiert.
                      Also mehrere Funktionen verschachtelt, die asyncron ablaufen sollen, und genau da hänge ich.

                      Oft bekomme ich folgende Fehler, weil ich irgendwo asyncron abarbeite aber keine Fehlerbehandlung gemacht habe.

                      2022-06-21 08:12:29.120 - error: javascript.0 (19020) Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
                      2022-06-21 08:12:29.121 - error: javascript.0 (19020) unhandled promise rejection: undefined
                      2022-06-21 08:12:29.122 - error: javascript.0 (19020) undefined
                      

                      Würdest du mir da vielleicht noch ein paar Dinge erklären, wie man es am einfachsten macht, damit ich das verstehe? Denke das werde ich in Zukunft öfter gebrauchen müssen.

                      Anbei mal der vereinfachte Code.

                      var Meldungen
                      var DMC
                      
                      /************************* Main ******************************* */
                      async function main() {
                          
                          try {
                              setState(Meldungen, "Alte Daten werden gelöscht")
                              await loeschen()
                              await setStateAsync(Trigger_neue_Nummer, false);
                              setState(Meldungen, "Rezept wird gesucht")
                              await Rezeptsuche()
                              setState(Meldungen, "Daten werden gelesen")
                              await Daten_lesen()
                              await Meta_schreiben()
                          } catch (e) {
                              setState(Meldungen, ("Fehler in Main: " + e))
                              console.error("Fehler in Main: " + e);
                          } finally {
                          }
                      }
                      
                      
                      
                      /************************* alte Daten löschen ******************************* */
                      async function loeschen() {
                          await $('state[state.id=javascript.0.Daten_senden.A_654_Endkontrolle.*]').setStateAsync(false)
                          await $('state[state.id=javascript.0.Daten_lesen.A_654_Endkontrolle.*]').setStateAsync(false)
                          console.log("************ Daten gelöscht")
                      }
                      
                      //##############################################  Rezept suchen  ##############################################
                      async function Rezeptsuche() {
                          var DS_Nr = 0
                          var DS_gefunden = false
                          var Suche_beendet = false
                          var treffer = false
                      
                          for (i = 1; i <= 20; i++) {
                              var i = "000" + i;
                              i = i.substring(i.length - 2, i.length);
                              treffer = true
                              DS_gefunden = true
                              if (!getState('javascript.0.Rezepte.' + i + '.Rezept_aktiv').val) {
                                  treffer = false;
                                  DS_gefunden = false;
                              } else {
                                  for (a = 1; a <= 36; a++) {
                                      var a = "000" + a;
                                      a = a.substring(a.length - 2, a.length);
                                      if (getState('javascript.0.Rezepte.' + i + '.DMC_aktiv_' + a).val) {
                                          if (!(getState('javascript.0.Rezepte.' + i + '.DMC_Wert_' + a).val == (DMC.slice(a - 1, a)))) {
                                              treffer = false
                                              DS_gefunden = false
                                          }
                                      }
                                  }
                              }
                              if (treffer) {
                                  DS_Nr = i
                                  DS_gefunden = true
                                  await setStateAsync('javascript.0.Rezepte.Rezept_DS_gefunden', true)
                                  console.log("***** Rezept gefunden")
                                  break;
                              } else {
                              }
                          }
                          await setStateAsync("javascript.0.Rezepte.Rezept_DS_Nr", DS_Nr)
                          //console.log("Rezept gefunden: " + getState("javascript.0.Rezepte.Rezept_DS_Nr").val)
                          //console.log("***************   Rezept gefunden")
                      }
                      
                      
                      
                      //##############################################  Daten Lesen Main  ##############################################
                      async function Daten_lesen() {
                          if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val <= 5) {
                              await Daten_lesen_SQL('0265')
                              await Daten_lesen_SQL('U_654')
                              await Daten_lesen_SQL('U_655')
                              await Daten_lesen_SQL('A_656')
                          } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 6) {
                              await Daten_lesen_SQL('0290')
                              await Daten_lesen_SQL('A_656')
                          } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 7) {
                              await Daten_lesen_SQL('0290')
                              await Daten_lesen_SQL('A_656')
                          }
                      }
                      
                      
                      //##############################################  Daten Lesen der einzelnen Tabellen  ##############################################
                      async function Daten_lesen_SQL(Tabelle) {
                          var Data;
                          var i;
                          var Spaltenname;
                          var Data_Column = {};
                          var DB = "Testdaten";
                          var sql_string
                          switch (Tabelle) {
                              case '2590C':
                                  sql_string = "USE " + DB + " SELECT TOP (1) * \
                                        FROM dbo.[" + Tabelle + "] \
                                        WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                        ORDER BY id DESC"
                                  break;
                              case '2590M':
                                  sql_string = "USE " + DB + " SELECT TOP (1) * \
                                        FROM dbo.[" + Tabelle + "] \
                                        WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                        ORDER BY id DESC"
                                  break;
                              case '2590E':
                                  sql_string = "USE " + DB + " SELECT TOP (1) * \
                                        FROM dbo.[" + Tabelle + "] \
                                        WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                        ORDER BY id DESC"
                                  break;
                              case '0265':
                                  sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Jahr_Nr, Tag_Nr, Id_Nr \
                                        FROM dbo.[" + Tabelle + "] \
                                        WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                        ORDER BY id DESC"
                                  break;
                              case '0290':
                                  sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Jahr_Nr, Tag_Nr, Id_Nr \
                                        FROM dbo.[" + Tabelle + "] \
                                        WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                        ORDER BY id DESC"
                                  break;
                              case '0650':
                                  sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Jahr_Nr, Tag_Nr, Id_Nr \
                                        FROM dbo.[" + Tabelle + "] \
                                        WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                        ORDER BY id DESC"
                                  break;
                              case 'U_654':
                                  sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, AnlagenNr \
                                        FROM dbo.[" + Tabelle + "] \
                                        WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                        "
                                  break;
                              case 'U_655':
                                  sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Anlagen_Nr \
                                        FROM dbo.[" + Tabelle + "] \
                                        WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                        "
                                  break;
                              case 'A_656':
                                  sql_string = "USE " + DB + " SELECT TOP (1) * \
                                        FROM dbo.[" + Tabelle + "] \
                                        WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                        "
                                  break;
                              default:
                                  break;
                          }
                      
                          setState(Meldungen, "Lese Daten von Tabelle: " + Tabelle);
                          console.log("Lese Daten von Tabelle: " + Tabelle)
                          const result = await sendToAsync('sql.1', 'query', sql_string);
                          Data = (result[0]);
                          for (Spaltenname in Data) {
                              let x = Data[Spaltenname];
                              let Daten = JSON.stringify(x);
                              if (typeof Data === 'undefined') {
                                  //log(Tabelle + " keine Daten vorhanden");
                              }
                              if (typeof Data !== 'undefined') {
                                  // States anlegen
                                  if (await existsStateAsync('javascript.0.Daten_lesen.' + Tabelle + '.' + Spaltenname)) {
                                      //log(Spaltenname + "    " + Daten)
                                      if (Spaltenname == "Timestamp") {
                                          Daten = Daten.replace('Z', '');
                                      }
                                      Daten = Daten.replace('"', '');
                                      Daten = Daten.replace('"', '');
                                      await setStateAsync('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten);
                                  } else {
                      
                                      // Daten lesen Datenpunkte werden erzeugt
                                      await createStateAsync('javascript.0.Daten_lesen.' + Tabelle + '.' + Spaltenname, '', {
                                          name: Spaltenname,
                                          type: 'mixed',
                                          role: 'state'
                                      });
                                      await setStateAsync('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten);
                                      log("State wurde erstellt  " + 'javascript.0.Daten_lesen.' + Tabelle + '.' + Spaltenname)
                      
                      
                                      // Daten senden Datenpunkte werden erzeugt
                                      await createStateAsync('javascript.0.Daten_senden.' + Tabelle + '.' + Spaltenname, '', {
                                          name: Spaltenname,
                                          type: 'mixed',
                                          role: 'state'
                                      });
                                      await setStateAsync('javascript.0.Daten_senden.' + Tabelle + '.' + Spaltenname, Daten);
                                      log("State wurde erstellt  " + 'javascript.0.Daten_senden.' + Tabelle + '.' + Spaltenname)
                                  }
                              }
                          }
                      }
                      
                      
                      /******************************* Metadaten schreiben *********************** */
                      async function Meta_schreiben() {
                          await timeCon()
                          var Rezept_Nr = getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val
                          var Tabelle
                          var DB = "Test";
                      
                      
                          if (Rezept_Nr <= 5) {
                              Tabelle = "A_656"
                          } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 6) {
                              Tabelle = "A_656"
                          } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 7) {
                              Tabelle = "A_656"
                          }
                      
                          let ssql = "INSERT INTO [" + DB + "].[dbo].[" + Tabelle + "]\
                                 ([Timestamp]\
                                 ,[Typ_Nr]\
                                   ) VALUES ( \
                       '" + getState('javascript.0.Ablauf.Timestamp').val + "' \
                      ,'" + getState("javascript.0.Rezepte.Rezept_DS_Nr").val + "' \
                      )";
                          sendTo('sql.1', 'query', ssql);
                          console.log("******** Metadaten wurde geschrieben")
                      }
                      
                      
                      
                      /******************************* Timestamp für MS SQL zusammenstellen *********************** */
                      async function timeCon() {
                          var a = new Date(Date.now());
                          var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
                          var year = a.getFullYear();
                          var month = months[a.getMonth()];
                          var date = a.getDate();
                          var hour = a.getHours();
                          var min = a.getMinutes();
                          var sec = a.getSeconds();
                          var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec;
                          await setStateAsync('javascript.0.Ablauf.Timestamp', time)
                      }
                      
                      
                      /******************************** String to boolean ***************** */
                      function STB(Wert) {
                          switch (Wert.toLowerCase().trim()) {
                              case "true": case "yes": case "1": return true;
                              case "false": case "no": case "0": case null: case "null": return false;
                              //default: return Boolean(Wert);
                              default: return Wert;
                          }
                      }
                      
                      /******************************** Bit to integar ***************** */
                      function BTI(Wert) {
                          var Ergebnis
                          if (Wert) {
                              Ergebnis = 1
                          } else {
                              Ergebnis = 0
                          }
                          return Ergebnis
                      }
                      
                      /********************************SQL Sendto Wrapper ***************** */
                      function sendToAsync(instance, command, arg) {
                          return new Promise((resolve, reject) => {
                              sendTo(instance, command, arg,
                                  (result) => {
                                      if (result.error) {
                                          reject(result.error);
                                      } else {
                                          resolve(result.result);
                                      }
                                  });
                          });
                      }
                      

                      Intel Nuc + Proxmox

                      DutchmanD 1 Antwort Letzte Antwort
                      0
                      • P ple

                        @alcalzone sagte in async, await mit selector oder schleife????:

                        @ple Ich vermute, da müsste mindestens mal beim Skriptende die Verbindung geschlossen werden:

                        onStop(() => {
                          nfc.close();
                        });
                        

                        So, habs mal ein paar Wochen immer mal wieder probiert, klappt nicht wie gehofft, egal.
                        nun habe ich ein größeres Problem, anscheinend habe ich immer noch nicht gecheckt wie man am besten eine Schrittkette aufbaut, wenn in der Schrittkette eine weitere Schrittkette aufgerufen werden soll, so das der Code komplett asyncron aufgerufen wird. Ich muss echt noch viel lernen.
                        Also das was ich erreichen möchte ist folgendes.

                        In Main werden einzelne Funktionen aufgerufen
                        // alles asyncron
                        // alte Daten löschen
                        await loeschen()
                        // eine Rezeptsuche
                        await Rezeptsuche()
                        // Mehrere SQL Tabelle Daten abholen
                        await Daten_lesen()
                        // Danach Metadaten schreiben auf dem SQL
                        await Meta_schreiben()
                        

                        So, nun ist es so, dass ich in Daten_lesen() mehrere SQL Querys absetze und ich darauf warten möchte. Es kann mal sein, das keine Daten zurückkommen, z.B. wenn die Netzwerkverbindung abschmiert.
                        Also mehrere Funktionen verschachtelt, die asyncron ablaufen sollen, und genau da hänge ich.

                        Oft bekomme ich folgende Fehler, weil ich irgendwo asyncron abarbeite aber keine Fehlerbehandlung gemacht habe.

                        2022-06-21 08:12:29.120 - error: javascript.0 (19020) Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
                        2022-06-21 08:12:29.121 - error: javascript.0 (19020) unhandled promise rejection: undefined
                        2022-06-21 08:12:29.122 - error: javascript.0 (19020) undefined
                        

                        Würdest du mir da vielleicht noch ein paar Dinge erklären, wie man es am einfachsten macht, damit ich das verstehe? Denke das werde ich in Zukunft öfter gebrauchen müssen.

                        Anbei mal der vereinfachte Code.

                        var Meldungen
                        var DMC
                        
                        /************************* Main ******************************* */
                        async function main() {
                            
                            try {
                                setState(Meldungen, "Alte Daten werden gelöscht")
                                await loeschen()
                                await setStateAsync(Trigger_neue_Nummer, false);
                                setState(Meldungen, "Rezept wird gesucht")
                                await Rezeptsuche()
                                setState(Meldungen, "Daten werden gelesen")
                                await Daten_lesen()
                                await Meta_schreiben()
                            } catch (e) {
                                setState(Meldungen, ("Fehler in Main: " + e))
                                console.error("Fehler in Main: " + e);
                            } finally {
                            }
                        }
                        
                        
                        
                        /************************* alte Daten löschen ******************************* */
                        async function loeschen() {
                            await $('state[state.id=javascript.0.Daten_senden.A_654_Endkontrolle.*]').setStateAsync(false)
                            await $('state[state.id=javascript.0.Daten_lesen.A_654_Endkontrolle.*]').setStateAsync(false)
                            console.log("************ Daten gelöscht")
                        }
                        
                        //##############################################  Rezept suchen  ##############################################
                        async function Rezeptsuche() {
                            var DS_Nr = 0
                            var DS_gefunden = false
                            var Suche_beendet = false
                            var treffer = false
                        
                            for (i = 1; i <= 20; i++) {
                                var i = "000" + i;
                                i = i.substring(i.length - 2, i.length);
                                treffer = true
                                DS_gefunden = true
                                if (!getState('javascript.0.Rezepte.' + i + '.Rezept_aktiv').val) {
                                    treffer = false;
                                    DS_gefunden = false;
                                } else {
                                    for (a = 1; a <= 36; a++) {
                                        var a = "000" + a;
                                        a = a.substring(a.length - 2, a.length);
                                        if (getState('javascript.0.Rezepte.' + i + '.DMC_aktiv_' + a).val) {
                                            if (!(getState('javascript.0.Rezepte.' + i + '.DMC_Wert_' + a).val == (DMC.slice(a - 1, a)))) {
                                                treffer = false
                                                DS_gefunden = false
                                            }
                                        }
                                    }
                                }
                                if (treffer) {
                                    DS_Nr = i
                                    DS_gefunden = true
                                    await setStateAsync('javascript.0.Rezepte.Rezept_DS_gefunden', true)
                                    console.log("***** Rezept gefunden")
                                    break;
                                } else {
                                }
                            }
                            await setStateAsync("javascript.0.Rezepte.Rezept_DS_Nr", DS_Nr)
                            //console.log("Rezept gefunden: " + getState("javascript.0.Rezepte.Rezept_DS_Nr").val)
                            //console.log("***************   Rezept gefunden")
                        }
                        
                        
                        
                        //##############################################  Daten Lesen Main  ##############################################
                        async function Daten_lesen() {
                            if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val <= 5) {
                                await Daten_lesen_SQL('0265')
                                await Daten_lesen_SQL('U_654')
                                await Daten_lesen_SQL('U_655')
                                await Daten_lesen_SQL('A_656')
                            } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 6) {
                                await Daten_lesen_SQL('0290')
                                await Daten_lesen_SQL('A_656')
                            } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 7) {
                                await Daten_lesen_SQL('0290')
                                await Daten_lesen_SQL('A_656')
                            }
                        }
                        
                        
                        //##############################################  Daten Lesen der einzelnen Tabellen  ##############################################
                        async function Daten_lesen_SQL(Tabelle) {
                            var Data;
                            var i;
                            var Spaltenname;
                            var Data_Column = {};
                            var DB = "Testdaten";
                            var sql_string
                            switch (Tabelle) {
                                case '2590C':
                                    sql_string = "USE " + DB + " SELECT TOP (1) * \
                                          FROM dbo.[" + Tabelle + "] \
                                          WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                          ORDER BY id DESC"
                                    break;
                                case '2590M':
                                    sql_string = "USE " + DB + " SELECT TOP (1) * \
                                          FROM dbo.[" + Tabelle + "] \
                                          WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                          ORDER BY id DESC"
                                    break;
                                case '2590E':
                                    sql_string = "USE " + DB + " SELECT TOP (1) * \
                                          FROM dbo.[" + Tabelle + "] \
                                          WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                          ORDER BY id DESC"
                                    break;
                                case '0265':
                                    sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Jahr_Nr, Tag_Nr, Id_Nr \
                                          FROM dbo.[" + Tabelle + "] \
                                          WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                          ORDER BY id DESC"
                                    break;
                                case '0290':
                                    sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Jahr_Nr, Tag_Nr, Id_Nr \
                                          FROM dbo.[" + Tabelle + "] \
                                          WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                          ORDER BY id DESC"
                                    break;
                                case '0650':
                                    sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Jahr_Nr, Tag_Nr, Id_Nr \
                                          FROM dbo.[" + Tabelle + "] \
                                          WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                          ORDER BY id DESC"
                                    break;
                                case 'U_654':
                                    sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, AnlagenNr \
                                          FROM dbo.[" + Tabelle + "] \
                                          WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                          "
                                    break;
                                case 'U_655':
                                    sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Anlagen_Nr \
                                          FROM dbo.[" + Tabelle + "] \
                                          WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                          "
                                    break;
                                case 'A_656':
                                    sql_string = "USE " + DB + " SELECT TOP (1) * \
                                          FROM dbo.[" + Tabelle + "] \
                                          WHERE     (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \
                                          "
                                    break;
                                default:
                                    break;
                            }
                        
                            setState(Meldungen, "Lese Daten von Tabelle: " + Tabelle);
                            console.log("Lese Daten von Tabelle: " + Tabelle)
                            const result = await sendToAsync('sql.1', 'query', sql_string);
                            Data = (result[0]);
                            for (Spaltenname in Data) {
                                let x = Data[Spaltenname];
                                let Daten = JSON.stringify(x);
                                if (typeof Data === 'undefined') {
                                    //log(Tabelle + " keine Daten vorhanden");
                                }
                                if (typeof Data !== 'undefined') {
                                    // States anlegen
                                    if (await existsStateAsync('javascript.0.Daten_lesen.' + Tabelle + '.' + Spaltenname)) {
                                        //log(Spaltenname + "    " + Daten)
                                        if (Spaltenname == "Timestamp") {
                                            Daten = Daten.replace('Z', '');
                                        }
                                        Daten = Daten.replace('"', '');
                                        Daten = Daten.replace('"', '');
                                        await setStateAsync('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten);
                                    } else {
                        
                                        // Daten lesen Datenpunkte werden erzeugt
                                        await createStateAsync('javascript.0.Daten_lesen.' + Tabelle + '.' + Spaltenname, '', {
                                            name: Spaltenname,
                                            type: 'mixed',
                                            role: 'state'
                                        });
                                        await setStateAsync('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten);
                                        log("State wurde erstellt  " + 'javascript.0.Daten_lesen.' + Tabelle + '.' + Spaltenname)
                        
                        
                                        // Daten senden Datenpunkte werden erzeugt
                                        await createStateAsync('javascript.0.Daten_senden.' + Tabelle + '.' + Spaltenname, '', {
                                            name: Spaltenname,
                                            type: 'mixed',
                                            role: 'state'
                                        });
                                        await setStateAsync('javascript.0.Daten_senden.' + Tabelle + '.' + Spaltenname, Daten);
                                        log("State wurde erstellt  " + 'javascript.0.Daten_senden.' + Tabelle + '.' + Spaltenname)
                                    }
                                }
                            }
                        }
                        
                        
                        /******************************* Metadaten schreiben *********************** */
                        async function Meta_schreiben() {
                            await timeCon()
                            var Rezept_Nr = getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val
                            var Tabelle
                            var DB = "Test";
                        
                        
                            if (Rezept_Nr <= 5) {
                                Tabelle = "A_656"
                            } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 6) {
                                Tabelle = "A_656"
                            } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 7) {
                                Tabelle = "A_656"
                            }
                        
                            let ssql = "INSERT INTO [" + DB + "].[dbo].[" + Tabelle + "]\
                                   ([Timestamp]\
                                   ,[Typ_Nr]\
                                     ) VALUES ( \
                         '" + getState('javascript.0.Ablauf.Timestamp').val + "' \
                        ,'" + getState("javascript.0.Rezepte.Rezept_DS_Nr").val + "' \
                        )";
                            sendTo('sql.1', 'query', ssql);
                            console.log("******** Metadaten wurde geschrieben")
                        }
                        
                        
                        
                        /******************************* Timestamp für MS SQL zusammenstellen *********************** */
                        async function timeCon() {
                            var a = new Date(Date.now());
                            var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
                            var year = a.getFullYear();
                            var month = months[a.getMonth()];
                            var date = a.getDate();
                            var hour = a.getHours();
                            var min = a.getMinutes();
                            var sec = a.getSeconds();
                            var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec;
                            await setStateAsync('javascript.0.Ablauf.Timestamp', time)
                        }
                        
                        
                        /******************************** String to boolean ***************** */
                        function STB(Wert) {
                            switch (Wert.toLowerCase().trim()) {
                                case "true": case "yes": case "1": return true;
                                case "false": case "no": case "0": case null: case "null": return false;
                                //default: return Boolean(Wert);
                                default: return Wert;
                            }
                        }
                        
                        /******************************** Bit to integar ***************** */
                        function BTI(Wert) {
                            var Ergebnis
                            if (Wert) {
                                Ergebnis = 1
                            } else {
                                Ergebnis = 0
                            }
                            return Ergebnis
                        }
                        
                        /********************************SQL Sendto Wrapper ***************** */
                        function sendToAsync(instance, command, arg) {
                            return new Promise((resolve, reject) => {
                                sendTo(instance, command, arg,
                                    (result) => {
                                        if (result.error) {
                                            reject(result.error);
                                        } else {
                                            resolve(result.result);
                                        }
                                    });
                            });
                        }
                        
                        DutchmanD Offline
                        DutchmanD Offline
                        Dutchman
                        Developer Most Active Administrators
                        schrieb am zuletzt editiert von
                        #15

                        @ple

                        In Zeile 1-10 rufst du await functionen auf ohne Try/catch dadurch Schmiert dein Script gerade ab.

                        P 1 Antwort Letzte Antwort
                        0
                        • DutchmanD Dutchman

                          @ple

                          In Zeile 1-10 rufst du await functionen auf ohne Try/catch dadurch Schmiert dein Script gerade ab.

                          P Offline
                          P Offline
                          ple
                          schrieb am zuletzt editiert von
                          #16

                          @dutchman
                          Besten dank schon mal im voraus für deine Hilfe.
                          Um das für mich zu verstehen, was für andere wahrscheinlich selbstverständlich ist, benötigt man immer ein try and catch in jeder await funktion die ich so aufrufe? Würde dann beim einem Fehler in einer await funktion das catch greifen und damit würde das main trotzdem weitergehen?

                          also so dann ungefähr?

                          async function main() {
                          
                              try {
                                  setState(Meldungen, "Alte Daten werden gelöscht")
                                  await loeschen()
                                  await setStateAsync(Trigger_neue_Nummer, false);
                                  setState(Meldungen, "Rezept wird gesucht")
                                  await Rezeptsuche()
                                  setState(Meldungen, "Daten werden gelesen")
                                  await Daten_lesen()
                                  await Meta_schreiben()
                              } catch (e) {
                                  setState(Meldungen, ("Fehler in Main: " + e))
                                  console.error("Fehler in Main: " + e);
                              } finally {
                              }
                          }
                          
                          
                          
                          /************************* alte Daten löschen ******************************* */
                          async function loeschen() {
                              try {
                                  await $('state[state.id=javascript.0.Daten_senden.A_654_Endkontrolle.*]').setStateAsync(false)
                                  await $('state[state.id=javascript.0.Daten_lesen.A_654_Endkontrolle.*]').setStateAsync(false)
                                  console.log("************ Daten gelöscht")
                              } catch (e) {
                                  console.error("Fehler beim löschen: " + e)
                              }
                          }
                          

                          Hat einer vielleicht noch ne guten Tip für Schulungen zu Javascript, oder bietet vielleicht einer sowas auch an?

                          Gruß und Danke

                          Intel Nuc + Proxmox

                          DutchmanD 1 Antwort Letzte Antwort
                          0
                          • P ple

                            @dutchman
                            Besten dank schon mal im voraus für deine Hilfe.
                            Um das für mich zu verstehen, was für andere wahrscheinlich selbstverständlich ist, benötigt man immer ein try and catch in jeder await funktion die ich so aufrufe? Würde dann beim einem Fehler in einer await funktion das catch greifen und damit würde das main trotzdem weitergehen?

                            also so dann ungefähr?

                            async function main() {
                            
                                try {
                                    setState(Meldungen, "Alte Daten werden gelöscht")
                                    await loeschen()
                                    await setStateAsync(Trigger_neue_Nummer, false);
                                    setState(Meldungen, "Rezept wird gesucht")
                                    await Rezeptsuche()
                                    setState(Meldungen, "Daten werden gelesen")
                                    await Daten_lesen()
                                    await Meta_schreiben()
                                } catch (e) {
                                    setState(Meldungen, ("Fehler in Main: " + e))
                                    console.error("Fehler in Main: " + e);
                                } finally {
                                }
                            }
                            
                            
                            
                            /************************* alte Daten löschen ******************************* */
                            async function loeschen() {
                                try {
                                    await $('state[state.id=javascript.0.Daten_senden.A_654_Endkontrolle.*]').setStateAsync(false)
                                    await $('state[state.id=javascript.0.Daten_lesen.A_654_Endkontrolle.*]').setStateAsync(false)
                                    console.log("************ Daten gelöscht")
                                } catch (e) {
                                    console.error("Fehler beim löschen: " + e)
                                }
                            }
                            

                            Hat einer vielleicht noch ne guten Tip für Schulungen zu Javascript, oder bietet vielleicht einer sowas auch an?

                            Gruß und Danke

                            DutchmanD Offline
                            DutchmanD Offline
                            Dutchman
                            Developer Most Active Administrators
                            schrieb am zuletzt editiert von Dutchman
                            #17

                            @ple sagte in async, await mit selector oder schleife????:

                            Um das für mich zu verstehen, was für andere wahrscheinlich selbstverständlich ist, benötigt man immer ein try and catch in jeder await funktion die ich so aufrufe?

                            korrekt sollte man so machen, den die Meldung

                            Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
                            

                            kommt von der await function und das die promise (siehe erklaehrung @AlCalzone) ein throw error macht dieser error aber nicht abgefangen wird.

                            Mit try catch kannst du dies fehler dan im catch abfangen und Aktionen auslösen.
                            Kann mir z.b. vorstellen wenn einer der schritte schiefgeht, die anderen auch nicht stattfinden sollten?

                            @ple sagte in async, await mit selector oder schleife????:

                            Würde dann beim einem Fehler in einer await funktion das catch greifen und damit würde das main trotzdem weitergehen?

                            richtig verstanden, beachte hierbei aber ob der code weiter laufen darf wenn die function einen Fehler abgegeben hat, Beispiel :

                            Ich habe einige adapter die frage eine API ab, z.b. alle 10 min. Schlägt der API Aufruf fehl stoppt mein code (ohne Daten kann ich ja auch nichts verarbeiten)

                            @ple sagte in async, await mit selector oder schleife????:

                            also so dann ungefähr?

                            mja fast, denn jetzt hast du einen try um alle await, also geht einer schief stop der code im catch (wenn das so gewünscht ist alles gut !) Wen man separate die Rückgabe auswerten moechte sollte ein try/catch for jedem await anstatt in einem Block

                            @ple sagte in async, await mit selector oder schleife????:

                            Hat einer vielleicht noch ne guten Tip für Schulungen zu Javascript, oder bietet vielleicht einer sowas auch an?

                            Wir selber nicht wirklich, sind aber gerne bereit fragen zu beantworten und unnterstuetzen sowohl hier als auch im Discord wo wir eine live chat haben.
                            Allgemein aka ich die Kurse von Udemy sehr empfehlen, die kosten im Angebot oft nur 10-15 euro.

                            Ich kann z.b. "JavaScript: Understanding the Weird Parts" sehr empfehlen, ist ein eye opener wen man aus anderen programmier sprachen kommt, de gibt es glaube ich auch in Deutsch.

                            Bei fragen einfach melden, oder eventuell discord joinen dan kan man auch bissl live unterstützen :)

                            P 1 Antwort Letzte Antwort
                            0
                            • DutchmanD Dutchman

                              @ple sagte in async, await mit selector oder schleife????:

                              Um das für mich zu verstehen, was für andere wahrscheinlich selbstverständlich ist, benötigt man immer ein try and catch in jeder await funktion die ich so aufrufe?

                              korrekt sollte man so machen, den die Meldung

                              Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
                              

                              kommt von der await function und das die promise (siehe erklaehrung @AlCalzone) ein throw error macht dieser error aber nicht abgefangen wird.

                              Mit try catch kannst du dies fehler dan im catch abfangen und Aktionen auslösen.
                              Kann mir z.b. vorstellen wenn einer der schritte schiefgeht, die anderen auch nicht stattfinden sollten?

                              @ple sagte in async, await mit selector oder schleife????:

                              Würde dann beim einem Fehler in einer await funktion das catch greifen und damit würde das main trotzdem weitergehen?

                              richtig verstanden, beachte hierbei aber ob der code weiter laufen darf wenn die function einen Fehler abgegeben hat, Beispiel :

                              Ich habe einige adapter die frage eine API ab, z.b. alle 10 min. Schlägt der API Aufruf fehl stoppt mein code (ohne Daten kann ich ja auch nichts verarbeiten)

                              @ple sagte in async, await mit selector oder schleife????:

                              also so dann ungefähr?

                              mja fast, denn jetzt hast du einen try um alle await, also geht einer schief stop der code im catch (wenn das so gewünscht ist alles gut !) Wen man separate die Rückgabe auswerten moechte sollte ein try/catch for jedem await anstatt in einem Block

                              @ple sagte in async, await mit selector oder schleife????:

                              Hat einer vielleicht noch ne guten Tip für Schulungen zu Javascript, oder bietet vielleicht einer sowas auch an?

                              Wir selber nicht wirklich, sind aber gerne bereit fragen zu beantworten und unnterstuetzen sowohl hier als auch im Discord wo wir eine live chat haben.
                              Allgemein aka ich die Kurse von Udemy sehr empfehlen, die kosten im Angebot oft nur 10-15 euro.

                              Ich kann z.b. "JavaScript: Understanding the Weird Parts" sehr empfehlen, ist ein eye opener wen man aus anderen programmier sprachen kommt, de gibt es glaube ich auch in Deutsch.

                              Bei fragen einfach melden, oder eventuell discord joinen dan kan man auch bissl live unterstützen :)

                              P Offline
                              P Offline
                              ple
                              schrieb am zuletzt editiert von
                              #18

                              @dutchman
                              Sorry, die Kids haben mich ein wenig in Anspruch genommen, aber ne kleine Pause ist auch mal nicht schlecht um das geschriebene neu zu lesen :-)
                              Ok, grundsätzlich alles was await ist abfangen mit try und catch.
                              Müsste man es auch bei einem

                              await setStateAsync('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten);
                              

                              oder ist es in der function setStateAsync bereits mit eingebaut oder geht man davon aus, dass es garantiert beschrieben werden kann.

                              Zum Thema abbrechen und eine Fehlermeldung ausspucken.
                              Kann ich meine function Main irgendwie abbrechen, wenn ein error bei irgendein await auftritt? z.B, das die Metadaten nicht geschrieben werden können, weil der SQL nicht erreichbar ist? Dann sollte der Rest auch nicht mehr laufen.

                              Und nochmals herzlichen Dank für eure Unterstützung :-)
                              Einige Bücher werde ich mir mal zulegen bei Zeiten.
                              Gruß

                              Intel Nuc + Proxmox

                              AlCalzoneA 1 Antwort Letzte Antwort
                              1
                              • P ple

                                @dutchman
                                Sorry, die Kids haben mich ein wenig in Anspruch genommen, aber ne kleine Pause ist auch mal nicht schlecht um das geschriebene neu zu lesen :-)
                                Ok, grundsätzlich alles was await ist abfangen mit try und catch.
                                Müsste man es auch bei einem

                                await setStateAsync('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten);
                                

                                oder ist es in der function setStateAsync bereits mit eingebaut oder geht man davon aus, dass es garantiert beschrieben werden kann.

                                Zum Thema abbrechen und eine Fehlermeldung ausspucken.
                                Kann ich meine function Main irgendwie abbrechen, wenn ein error bei irgendein await auftritt? z.B, das die Metadaten nicht geschrieben werden können, weil der SQL nicht erreichbar ist? Dann sollte der Rest auch nicht mehr laufen.

                                Und nochmals herzlichen Dank für eure Unterstützung :-)
                                Einige Bücher werde ich mir mal zulegen bei Zeiten.
                                Gruß

                                AlCalzoneA Offline
                                AlCalzoneA Offline
                                AlCalzone
                                Developer
                                schrieb am zuletzt editiert von
                                #19

                                @ple sagte in async, await mit selector oder schleife????:

                                geht man davon aus, dass es garantiert beschrieben werden kann.

                                Nein, musst du selbst abfangen.

                                Kann ich meine function Main irgendwie abbrechen, wenn ein error bei irgendein await auftritt? z.B, das die Metadaten nicht geschrieben werden können, weil der SQL nicht erreichbar ist? Dann sollte der Rest auch nicht mehr laufen.

                                Ja, try-catch um jedes setStateAsync und im catch die Funktion mit return verlassen. (Wäre die Variante wo du am meisten Kontrolle hast).
                                Ansonsten kannst du auch den ganzen Schreibprozess in ein try-catch packen. Dann wird automatisch ins catch gesprungen, sobald ein Versuch fehlschlägt.

                                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                1 Antwort Letzte Antwort
                                1
                                Antworten
                                • In einem neuen Thema antworten
                                Anmelden zum Antworten
                                • Älteste zuerst
                                • Neuste zuerst
                                • Meiste Stimmen


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                840

                                Online

                                32.5k

                                Benutzer

                                81.8k

                                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