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. Русский
  3. ioBroker
  4. Ошибка
  5. ioBroker ошибки
  6. Ошибка в логе при запросе SQL

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.0k

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Ошибка в логе при запросе SQL

Geplant Angeheftet Gesperrt Verschoben ioBroker ошибки
14 Beiträge 3 Kommentatoren 8.3k Aufrufe
  • Ä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.
  • E Offline
    E Offline
    evgeny_nd
    schrieb am zuletzt editiert von
    #3

    @spectrekr:

    В запросе не выбрана база данных из которой идет выборка. Правильно будет:

    sendTo('sql.0', 'query', 'SELECT * FROM datapoints.название базы', function (result) {

    if (result.error) {

    console.error(result.error);

    } else {

    // show result

    console.log('Rows: ' + JSON.stringify(result.result));

    }

    }); `

    Спасибо :), этот вариант заработал, но только с такой конструкцией:

    sendTo('sql.0', 'query', 'SELECT * FROM название базы.datapoints', function (result) {…

    А со вторым вариантом не подскажете что не так делаю?

    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      spectrekr
      schrieb am zuletzt editiert von
      #4

      sendTo полностью рабочий вариант, все свои скрипты переписал на данный вариант, раньше был с дополнительным пакетом mysql. Чтоб заработал второй вариант, надо в настройках драйвера javascript, в строке "Дополнительные NPM Модули" дописать mysql. Тогда он установит пакет, дальше в скрипте в начале инициализировать подключение:

      ! var mysql = require('mysql'); ! var connection = mysql.createConnection({ host: 'localhost', user: 'user_name', password: 'password', database: 'database_name', socketPath: '/var/run/mysqld/mysqld.sock' }); ! connection.connect(function(err) { if (err) { log('error connecting: ' + err.stack); return; } ! log('connected as id ' + connection.threadId); }); !
      А потом уже использовать:

      ! connection.query('SELECT max(id) AS id FROM inbox', function(err, res_id, fields) { if (err) throw err; setState('sms.in.id', res_id[0].id); }); !

      1 Antwort Letzte Antwort
      0
      • E Offline
        E Offline
        evgeny_nd
        schrieb am zuletzt editiert von
        #5

        @spectrekr:

        sendTo полностью рабочий вариант, все свои скрипты переписал на данный вариант, раньше был с дополнительным пакетом mysql. Чтоб заработал второй вариант, надо в настройках драйвера javascript, в строке "Дополнительные NPM Модули" дописать mysql. Тогда он установит пакет, дальше в скрипте в начале инициализировать подключение:

        ! var mysql = require('mysql'); ! var connection = mysql.createConnection({ host: 'localhost', user: 'user_name', password: 'password', database: 'database_name', socketPath: '/var/run/mysqld/mysqld.sock' }); ! connection.connect(function(err) { if (err) { log('error connecting: ' + err.stack); return; } ! log('connected as id ' + connection.threadId); }); !
        А потом уже использовать:

        ! connection.query('SELECT max(id) AS id FROM inbox', function(err, res_id, fields) { if (err) throw err; setState('sms.in.id', res_id[0].id); }); ! `

        Professional, а может вы подскажете почему скрипт отрабатывает с ошибкой?

        sendTo('sql.0', 'query', 'SELECT SUM(val) FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) {
                if (result.error) {
                    console.error(result.error);
                } else {
                    log ('RES: ' + result.result[0].val);
                    console.log('Rows1: ' + JSON.stringify(result.result));
                }
            });
        

        Лог:

        23:02:27.439	[info]	javascript.0 script.js.common.Примеры.SQL: RES: undefined
        23:02:27.439	[info]	javascript.0 script.js.common.Примеры.SQL: Rows1: [{"SUM(val)":1047.4444444444448}]
        
        

        Я дальше хочу значение суммы передать в переменную, созданную вручную. А ее значение почему-то выдает undefined, хотя массив заполнен верной суммой.

        1 Antwort Letzte Antwort
        0
        • BluefoxB Offline
          BluefoxB Offline
          Bluefox
          schrieb am zuletzt editiert von
          #6

          @evgeny_nd:

          @spectrekr:

          sendTo полностью рабочий вариант, все свои скрипты переписал на данный вариант, раньше был с дополнительным пакетом mysql. Чтоб заработал второй вариант, надо в настройках драйвера javascript, в строке "Дополнительные NPM Модули" дописать mysql. Тогда он установит пакет, дальше в скрипте в начале инициализировать подключение:

          ! var mysql = require('mysql'); ! var connection = mysql.createConnection({ host: 'localhost', user: 'user_name', password: 'password', database: 'database_name', socketPath: '/var/run/mysqld/mysqld.sock' }); ! connection.connect(function(err) { if (err) { log('error connecting: ' + err.stack); return; } ! log('connected as id ' + connection.threadId); }); !
          А потом уже использовать:

          ! connection.query('SELECT max(id) AS id FROM inbox', function(err, res_id, fields) { if (err) throw err; setState('sms.in.id', res_id[0].id); }); ! `

          Professional, а может вы подскажете почему скрипт отрабатывает с ошибкой?

          sendTo('sql.0', 'query', 'SELECT SUM(val) FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) {
                  if (result.error) {
                      console.error(result.error);
                  } else {
                      log ('RES: ' + result.result[0].val);
                      console.log('Rows1: ' + JSON.stringify(result.result));
                  }
              });
          

          Лог:

          23:02:27.439	[info]	javascript.0 script.js.common.Примеры.SQL: RES: undefined
          23:02:27.439	[info]	javascript.0 script.js.common.Примеры.SQL: Rows1: [{"SUM(val)":1047.4444444444448}]
          
          

          Я дальше хочу значение суммы передать в переменную, созданную вручную. А ее значение почему-то выдает undefined, хотя массив заполнен верной суммой. `
          Вот так должно работать.

          sendTo('sql.0', 'query', 'SELECT SUM(val) FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) {
                  if (result.error) {
                      console.error(result.error);
                  } else {
                      log ('RES: ' + result.result["SUM(val)"].val);
                      console.log('Rows1: ' + JSON.stringify(result.result));
                  }
              });
          
          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            spectrekr
            schrieb am zuletzt editiert von
            #7

            @evgeny_nd:

            Professional, а может вы подскажете почему скрипт отрабатывает с ошибкой?

            sendTo('sql.0', 'query', 'SELECT SUM(val) FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) {

            if (result.error) {

            console.error(result.error);

            } else {

            log ('RES: ' + result.result[0].val);

            console.log('Rows1: ' + JSON.stringify(result.result));

            }

            });

            Лог:

            23:02:27.439 [info] javascript.0 script.js.common.Примеры.SQL: RES: undefined

            23:02:27.439 [info] javascript.0 script.js.common.Примеры.SQL: Rows1: [{"SUM(val)":1047.4444444444448}]

            Я дальше хочу значение суммы передать в переменную, созданную вручную. А ее значение почему-то выдает undefined, хотя массив заполнен верной суммой. `

            Так, если у вас result.result[0].val вещественное число, то попробуйте parseFloat(result.result[0].val). Это если вдруг вам потом надо будет работать как с числом, если просто как значение, то тоже через JSON.stringify.

            Я бы реализовал так:

            ! sendTo('sql.0', 'query', 'SELECT sum FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) { if (result.error) { console.error(result.error); } else { log ('RES: ' + JSON.stringify(result.result[0].sum)); setState('sum', parseFloat(result.result[0].sum)); } }); !

            1 Antwort Letzte Antwort
            0
            • E Offline
              E Offline
              evgeny_nd
              schrieb am zuletzt editiert von
              #8

              @Bluefox:

              @evgeny_nd:

              @spectrekr:

              sendTo полностью рабочий вариант, все свои скрипты переписал на данный вариант, раньше был с дополнительным пакетом mysql. Чтоб заработал второй вариант, надо в настройках драйвера javascript, в строке "Дополнительные NPM Модули" дописать mysql. Тогда он установит пакет, дальше в скрипте в начале инициализировать подключение:

              ! var mysql = require('mysql'); ! var connection = mysql.createConnection({ host: 'localhost', user: 'user_name', password: 'password', database: 'database_name', socketPath: '/var/run/mysqld/mysqld.sock' }); ! connection.connect(function(err) { if (err) { log('error connecting: ' + err.stack); return; } ! log('connected as id ' + connection.threadId); }); !
              А потом уже использовать:

              ! connection.query('SELECT max(id) AS id FROM inbox', function(err, res_id, fields) { if (err) throw err; setState('sms.in.id', res_id[0].id); }); ! `

              Professional, а может вы подскажете почему скрипт отрабатывает с ошибкой?

              sendTo('sql.0', 'query', 'SELECT SUM(val) FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) {
                      if (result.error) {
                          console.error(result.error);
                      } else {
                          log ('RES: ' + result.result[0].val);
                          console.log('Rows1: ' + JSON.stringify(result.result));
                      }
                  });
              

              Лог:

              23:02:27.439	[info]	javascript.0 script.js.common.Примеры.SQL: RES: undefined
              23:02:27.439	[info]	javascript.0 script.js.common.Примеры.SQL: Rows1: [{"SUM(val)":1047.4444444444448}]
              
              

              Я дальше хочу значение суммы передать в переменную, созданную вручную. А ее значение почему-то выдает undefined, хотя массив заполнен верной суммой. `
              Вот так должно работать.

              sendTo('sql.0', 'query', 'SELECT SUM(val) FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) {
                      if (result.error) {
                          console.error(result.error);
                      } else {
                          log ('RES: ' + result.result["SUM(val)"].val);
                          console.log('Rows1: ' + JSON.stringify(result.result));
                      }
                  });
              ```` `  
              

              BlueFox,

              Ругается на строчку:

              TypeError: Cannot read property 'val' of undefined at Object.cb (script.js.common.Примеры.SQL:42:52) at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2155:71) at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30) at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:131:20) at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:270:10) at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:228:12) at Manager. (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15) at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:131:20) at Manager.ondecoded (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:332:8) at Decoder. (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15)

              1 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                spectrekr
                schrieb am zuletzt editiert von
                #9

                А по моему примеру пробовали?

                1 Antwort Letzte Antwort
                0
                • BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  schrieb am zuletzt editiert von
                  #10
                  sendTo('sql.0', 'query', 'SELECT SUM(val) FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) {
                          if (result.error) {
                              console.error(result.error);
                          } else {
                              log ('RES: ' + result.result["SUM(val)"]);
                              console.log('Rows1: ' + JSON.stringify(result.result));
                          }
                      });
                  
                  1 Antwort Letzte Antwort
                  0
                  • E Offline
                    E Offline
                    evgeny_nd
                    schrieb am zuletzt editiert von
                    #11

                    @spectrekr:

                    А по моему примеру пробовали? `

                    По вашему примеру нет, т.к. вы в коде указали значение столбца sum, а я суммирую значение столбца val - SUM(val).

                    Поэтому я думаю дело как раз в том что из-за скобок JSON и не обрабатывает.

                    1 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      spectrekr
                      schrieb am zuletzt editiert von
                      #12

                      @evgeny_nd:

                      @spectrekr:

                      А по моему примеру пробовали? `

                      По вашему примеру нет, т.к. вы в коде указали значение столбца sum, а я суммирую значение столбца val - SUM(val).

                      Поэтому я думаю дело как раз в том что из-за скобок JSON и не обрабатывает. `

                      Ну тогда так:

                      ! ````
                      sendTo('sql.0', 'query', 'SELECT SUM(val) as sum FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) {
                      if (result.error) {
                      console.error(result.error);
                      } else {
                      log ('RES: ' + JSON.stringify(result.result[0].sum));
                      setState('sum', parseFloat(result.result[0].sum));
                      }
                      });

                      1 Antwort Letzte Antwort
                      0
                      • E Offline
                        E Offline
                        evgeny_nd
                        schrieb am zuletzt editiert von
                        #13

                        @Bluefox:

                        sendTo('sql.0', 'query', 'SELECT SUM(val) FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) {
                                if (result.error) {
                                    console.error(result.error);
                                } else {
                                    log ('RES: ' + result.result["SUM(val)"]);
                                    console.log('Rows1: ' + JSON.stringify(result.result));
                                }
                            });
                        ```` `  
                        

                        Так я уже пробовал :).

                        Выдает

                        18:06:23.080 [info] javascript.0 script.js.common.Примеры.SQL: RES: undefined

                        18:06:23.080 [info] javascript.0 script.js.common.Примеры.SQL: Rows1: [{"SUM(val)":7776.364444444442}]

                        Может все-таки дело в скобках, которые стоят в строке-результате?

                        Можно конечно из полученного результата получить нужное значение цифры, путем нескольких преобразований строки, но это же не правильно.

                        1 Antwort Letzte Antwort
                        0
                        • E Offline
                          E Offline
                          evgeny_nd
                          schrieb am zuletzt editiert von
                          #14

                          @spectrekr:

                          @evgeny_nd:

                          @spectrekr:

                          А по моему примеру пробовали? `

                          По вашему примеру нет, т.к. вы в коде указали значение столбца sum, а я суммирую значение столбца val - SUM(val).

                          Поэтому я думаю дело как раз в том что из-за скобок JSON и не обрабатывает. `

                          Ну тогда так:

                          ! sendTo('sql.0', 'query', 'SELECT SUM(val) as sum FROM iobroker.ts_number WHERE FROM_UNIXTIME(ts/1000) >= CURDATE() AND id=27', function (result) { if (result.error) { console.error(result.error); } else { log ('RES: ' + JSON.stringify(result.result[0].sum)); setState('sum', parseFloat(result.result[0].sum)); } }); `

                          Да! :)

                          Так заработало. Осталось только теперь разобраться с сами SQL запросом, а то мне кажется он нереальную цифру выдает часового потребления электричества, но это уже другое.

                          Спасибо большое.

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


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          510

                          Online

                          32.6k

                          Benutzer

                          82.2k

                          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