Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. ist Objekid in mysql vorhanden

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    ist Objekid in mysql vorhanden

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mrbelvedere58 last edited by

      Hallo zusammen,
      ich habe ein kleines Problem mit der Verbindung von Objektid und SQL.
      ich bin was dieses angeht noch Anfänger und habe das ganze so zusammen gepuzzelt.
      ich schreibe 3 werte als string in die Datenbank diese sind auch vorhanden ts_string
      id=55 ts=1732173193906 val=Name des Anrufers
      id=56 ts=1732173193906 val=Telefonnummer des Anrufers
      id=57 ts=1732173193906 val=Bild Pfad des Anrufers zb. /vis.0/main/img/anrufer/peter.png
      diese kann ich auch abrufen.

      const telefonnummer = '030655555'; // diese nummer soll von einer Objektid kommen
      
      sendTo('sql.0', 'query', `SELECT val, ts, id FROM homematic.ts_string WHERE val LIKE '%${telefonnummer}%'`, (result) => {
          const uniqueTimestamps = new Set(); result.result.forEach(row => { uniqueTimestamps.add(row.ts); });
              uniqueTimestamps.forEach(timestamp => {
                  sendTo('sql.0', 'query', `SELECT val, ts, id FROM homematic.ts_string WHERE ts = ${timestamp}`, (result) => {
                      result.result.forEach(row => {
                          const { val, id } = row;
                              if (id == "55") {
                                  console.log(`${val}`); // hier kommt schreiben rein für Bild
                              }
                              if (id == "56") {
                                  console.log(`${val}`); // hier kommt schreiben rein für Name
                              }
                              if (id == "57") {
                                  console.log(`${val}`); // hier kommt schreiben rein für tel Nummer
                              }
                      });
                  });
              });
      });
      

      soweit geht das
      jetzt habe ich ver sucht das ganze über eine Objektid zu lösen wenn objektid sich aktualisiert wird dann soll die dort eingetragene Telefonnummer in eine variable gesetzt werden. das geht
      es soll nun geprüft werden ob es diese Nummer in der Datenbank gibt wenn ja dann aktualisire Objektid mit den in der DB vorhandenen Daten.

      on({ id: [].concat(['0_userdata.0.HandyZustand.Anrufer-Nummer']), change: 'any' }, async (obj) => {
        const telefonnummer = obj.state ? obj.state.val.trim().toLowerCase() : '';
          console.log(`${telefonnummer}`); // die nummer wird ausgegeben
            const  result = await sendToAsync('sql.0', 'query', `SELECT val, ts, id FROM homematic.ts_string WHERE val LIKE '%${telefonnummer}%'`, (result) => {
            if (result.length >= 0) {
          const uniqueTimestamps = new Set(); result.result.forEach(row => { uniqueTimestamps.add(row.ts); });
              uniqueTimestamps.forEach(timestamp => {
                  sendTo('sql.0', 'query', `SELECT val, ts, id FROM homematic.ts_string WHERE ts = ${timestamp}`, (result) => {
                      result.result.forEach(row => {
                          const { val, id } = row;
                              if (id == "55") {
                                  console.log(`${val}`); // hier für Bild
                              }
                              if (id == "56") {
                                  console.log(`${val}`); // hier für Name
                              }
                              if (id == "57") {
                                  console.log(`${val}`); // hier für Telefonnummer
                              }
                      });
                  });
              });
      } else {
                console.log(`kein zugrif auf db`);
             }
      });
      });
      

      als Ausgabe bekomme ich nur kein zugrif auf db wo liegt hier das Problem ich komme nicht weiter vielleicht hat ja einer eine idee

      T 1 Reply Last reply Reply Quote 0
      • T
        TT-Tom @mrbelvedere58 last edited by TT-Tom

        @mrbelvedere58

        Warum baust du die Anfrage der
        Nummer nicht genau so auf wie vom timestamp?
        Ohne const und await.
        Zusätzlich würde ich mir das result von der Nummer im log mal ausgeben um zu wissen was zurück kommt.

        M 1 Reply Last reply Reply Quote 0
        • M
          mrbelvedere58 @TT-Tom last edited by

          @tt-tom das soll ein Telefonbuch werden in Verbindung mi dem tr-064 Adapter und vom Handy über macrodroid was auch alles geht daher brauche ich die Nummer ich habe ja mehrere Einträge in der db.
          der timestamp ist immer 3x gleich für die einträge in der db daher kann ich nur die val mit der Telefonnummer abfragen. C

          bei result kommt nichts zurück er geht gar nicht erst dort hin habe es auch mit diesem Scrip probiert er geht nicht in die db

          on({ id: [].concat(['0_userdata.0.HandyZustand.Anrufer-Nummer']), change: 'any' }, async (obj) => {
            const telefonnummer = obj.state ? obj.state.val.trim().toLowerCase() : '';
              console.log(`${telefonnummer}`); // die nummer wird ausgegeben
          
          
              sendTo('sql.0', 'query', `SELECT val, ts, id FROM homematic.ts_string WHERE val LIKE '%${telefonnummer}%'`, (result) => {
                  const uniqueTimestamps = new Set(); result.result.forEach(row => { uniqueTimestamps.add(row.ts); });
                      uniqueTimestamps.forEach(timestamp => {
                          sendTo('sql.0', 'query', `SELECT val, ts, id FROM homematic.ts_string WHERE ts = ${timestamp}`, (result) => {
                              result.result.forEach(row => {
                                 const { val, id } = row;
                                      if (id == "55") {
                                      console.log(`${val}`); // hier kommt schreiben rein für Bild
                                      }
                                     if (id == "56") {
                                      console.log(`${val}`); // hier kommt schreiben rein für Name
                                      }
                                      if (id == "57") {
                                      console.log(`${val}`); // hier kommt schreiben rein für tel Nummer
                                      }
                              });
                          });
                      });
              });
          });
          

          es wird nur das obere log ausgegeben aber nichts aus der db

          M 1 Reply Last reply Reply Quote 0
          • M
            mrbelvedere58 @mrbelvedere58 last edited by

            @mrbelvedere58 hat sich erledigt die Nummer in der db hatten ein Leerzeichen drin
            trotzdem vielen dank

            M 1 Reply Last reply Reply Quote 0
            • M
              mrbelvedere58 @mrbelvedere58 last edited by

              @mrbelvedere58 [Gelöst]

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              860
              Online

              31.7k
              Users

              79.7k
              Topics

              1.3m
              Posts

              2
              5
              143
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo