Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Ошибка
    5. ioBroker ошибки
    6. Ошибка в логе при запросе SQL

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

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

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

      @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 Reply Quote 0
      • Bluefox
        Bluefox last edited by

        @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 Reply Quote 0
        • S
          spectrekr last edited by

          @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 Reply Quote 0
          • E
            evgeny_nd last edited by

            @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 Reply Quote 0
            • S
              spectrekr last edited by

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

              1 Reply Last reply Reply Quote 0
              • Bluefox
                Bluefox last edited by

                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 Reply Quote 0
                • E
                  evgeny_nd last edited by

                  @spectrekr:

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

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

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

                  1 Reply Last reply Reply Quote 0
                  • S
                    spectrekr last edited by

                    @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 Reply Quote 0
                    • E
                      evgeny_nd last edited by

                      @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 Reply Quote 0
                      • E
                        evgeny_nd last edited by

                        @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 Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        408
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        3
                        14
                        8067
                        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