Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Ошибка
  5. ioBroker ошибки
  6. Ошибка в логе при запросе SQL

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

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

Scheduled Pinned Locked Moved ioBroker ошибки
14 Posts 3 Posters 8.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    evgeny_nd
    wrote on last edited by
    #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 Reply Last reply
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      wrote on last edited by
      #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 Reply Last reply
      0
      • S Offline
        S Offline
        spectrekr
        wrote on last edited by
        #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 Reply Last reply
        0
        • E Offline
          E Offline
          evgeny_nd
          wrote on last edited by
          #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 Reply Last reply
          0
          • S Offline
            S Offline
            spectrekr
            wrote on last edited by
            #9

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

            1 Reply Last reply
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              wrote on last edited by
              #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 Reply Last reply
              0
              • E Offline
                E Offline
                evgeny_nd
                wrote on last edited by
                #11

                @spectrekr:

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

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

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

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  spectrekr
                  wrote on last edited by
                  #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 Reply Last reply
                  0
                  • E Offline
                    E Offline
                    evgeny_nd
                    wrote on last edited by
                    #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 Reply Last reply
                    0
                    • E Offline
                      E Offline
                      evgeny_nd
                      wrote on last edited by
                      #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 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      321

                      Online

                      32.4k

                      Users

                      81.4k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe