Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. GSM модем + gammu + MYSQL + IOBroker

    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

    GSM модем + gammu + MYSQL + IOBroker

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

      Не работает 😞

      Подскажите, плз, где ошибка?:

      // () выдаем смс по запросу
      on("javascript.0.sms.in.requesIDtest", function (obj) {
          sendTo('sql.0', 'query','SELECT UDH, UpdatedInDB FROM db_gammu.inbox WHERE  ID = ?', [obj.state.val], function(err, res_udh, fields) {
                  if (res.error) {
                  console.error(res.error);
              }
                  if(res_udh.result[0].UDH !== ''){
                      udh = res_udh.result[0].UDH.substring(0, res_udh.result[0].UDH.length - 1);
                      date = res_udh.result[0].UpdatedInDB;
                      sendTo('sql.0', 'query','SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM db_gammu.inbox WHERE UDH LIKE ? AND UpdatedInDB = ?',  ['%'+udh+'%', date], function(err, res, fields) {
                              if (err) throw err;
                              setState("javascript.0.sms.in.requestPHONEtest", res.result[0].SenderNumber);
                              setState("javascript.0.sms.in.requestTIMEtest", res.result[0].ReceivingDateTime);
                              setState("javascript.0.sms.in.requestTEXTtest", res.result[0].TextDecoded);
                      });
                  }
                  if(res_udh.result[0].UDH === ''){ 
                      sendTo('sql.0', 'query','SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM db_gammu.inbox WHERE  ID = ?', [obj.state.val], function(err, res, fields) {
                         if (res.error) {
                  console.error(res.error);
              }
                          setState("javascript.0.sms.in.requestPHONEtest", res.result[0].SenderNumber);
                          setState("javascript.0.sms.in.requestTIMEtest", res.result[0].ReceivingDateTime);
                          setState("javascript.0.sms.in.requestTEXTtest", res.result[0].TextDecoded);
                      });
                  }
        });
      });
      
      

      ЗЫ а отправка работает:

      // () ОТПРАВКА. Отслеживает изменение в переменной и отправляет текст на русском языке, если необходимо использовать латиницу то заменяем Unicode_No_Compression на Default_No_Compression.
      on("javascript.0.sms.out.text", function (obj) {
          sendTo('sql.0', 'query', 'INSERT INTO db_gammu.outbox (DestinationNumber, TextDecoded, CreatorID, Coding) VALUES (' + "'" + getState("javascript.0.sms.out.phone").val + "','" + getState("javascript.0.sms.out.text").val + "','IOBroker'," + "'Unicode_No_Compression');", function(res) {
          if (res.error) {
                  console.error(res.error);
              }
          });
      });
      
      1 Reply Last reply Reply Quote 0
      • S
        spectrekr last edited by

        Пробуй так.

        // () выдаем смс по запросу
        on("javascript.0.sms.in.requesIDtest", function (obj) {
            sendTo('sql.0', 'query','SELECT UDH, UpdatedInDB FROM db_gammu.inbox WHERE  ID = ' + obj.state.val, function(err, res_udh, fields) {
                    if (res.error) {
                    console.error(res.error);
                }
                    if(res_udh.result[0].UDH !== ''){
                        udh = res_udh.result[0].UDH.substring(0, res_udh.result[0].UDH.length - 1);
                        date = res_udh.result[0].UpdatedInDB;
                        sendTo('sql.0', 'query','SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM db_gammu.inbox WHERE UDH LIKE %'+udh+'% AND UpdatedInDB = ' +date, function(err, res, fields) {
                                if (err) throw err;
                                setState("javascript.0.sms.in.requestPHONEtest", res.result[0].SenderNumber);
                                setState("javascript.0.sms.in.requestTIMEtest", res.result[0].ReceivingDateTime);
                                setState("javascript.0.sms.in.requestTEXTtest", res.result[0].TextDecoded);
                        });
                    }
                    if(res_udh.result[0].UDH === ''){
                        sendTo('sql.0', 'query','SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM db_gammu.inbox WHERE  ID = ' + obj.state.val, function(err, res, fields) {
                           if (res.error) {
                    console.error(res.error);
                }
                            setState("javascript.0.sms.in.requestPHONEtest", res.result[0].SenderNumber);
                            setState("javascript.0.sms.in.requestTIMEtest", res.result[0].ReceivingDateTime);
                            setState("javascript.0.sms.in.requestTEXTtest", res.result[0].TextDecoded);
                        });
                    }
          });
        });
        

        Мне кажется он неправильно формирует запрос с подстановкой данных.

        1 Reply Last reply Reply Quote 0
        • P
          Pooh last edited by

          не работает 😞

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

            Переведи драйвер sql в debug режим и посмотри какой формируется запрос, возможно где-то ошибку допускаем. Раз отправка работает, значит ошибка именно в запросе.

            1 Reply Last reply Reply Quote 0
            • P
              Pooh last edited by

              длинное не выводится:

              ! sql.0 2018-02-12 08:36:40.914 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
              ! sql.0 2018-02-12 08:36:40.884 debug SELECT max(id) AS id FROM db_gammu.inbox
              ! sql.0 2018-02-12 08:36:39.688 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
              ! sql.0 2018-02-12 08:36:39.677 debug SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM inbox WHERE UDH LIKE ? AND UpdatedInDB = ?
              ! sql.0 2018-02-12 08:36:39.662 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
              ! sql.0 2018-02-12 08:36:39.652 debug SELECT UDH, UpdatedInDB FROM db_gammu.inbox WHERE ID = 3 <-третье сообщение (длинное)
              ! javascript.0 2018-02-12 08:36:39.642 info script.js.Test.SMS_SQL: NEW Request START with sql.0 <-начало запроса
              короткое выводится:

              ! sql.0 2018-02-12 08:40:55.516 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
              ! sql.0 2018-02-12 08:40:55.504 debug SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM db_gammu.inbox WHERE ID = 2
              ! sql.0 2018-02-12 08:40:55.482 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
              ! sql.0 2018-02-12 08:40:55.468 debug SELECT UDH, UpdatedInDB FROM db_gammu.inbox WHERE ID = 2 <-второе сообщение (короткое)
              ! javascript.0 2018-02-12 08:40:55.458 info script.js.Test.SMS_SQL: NEW Request START with sql.0 <-начало запроса

              кусок скрипта:

              ! // () выдаем смс по запросу
              ! on("javascript.0.sms.in.requesIDtest", function (obj) {
              ! console.log("NEW Request START with sql.0");
              ! sendTo('sql.0', 'query','SELECT UDH, UpdatedInDB FROM db_gammu.inbox WHERE ID = ' + obj.state.val, function(res) {
              ! if (res.error) {
              ! console.error(res.error);
              ! }
              ! if(res.result[0].UDH !== ''){
              ! udh = res.result[0].UDH.substring(0, res.result[0].UDH.length - 1);
              ! date = res.result[0].UpdatedInDB;
              ! sendTo('sql.0', 'query','SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM inbox WHERE UDH LIKE ? AND UpdatedInDB = ?', ['%'+udh+'%', date], function(res) {
              ! if (res.error) {
              ! console.error(res.error);
              ! }
              ! setState("javascript.0.sms.in.requestPHONEtest", res.result[0].SenderNumber);
              ! setState("javascript.0.sms.in.requestTIMEtest", res.result[0].ReceivingDateTime);
              ! setState("javascript.0.sms.in.requestTEXTtest", res.result[0].TextDecoded);
              ! });
              ! }
              ! if(res.result[0].UDH === ''){
              ! sendTo('sql.0', 'query','SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM db_gammu.inbox WHERE ID = ' + obj.state.val, function(res) {
              ! if (res.error) {
              ! console.error(res.error);
              ! }
              ! setState("javascript.0.sms.in.requestPHONEtest", res.result[0].SenderNumber);
              ! setState("javascript.0.sms.in.requestTIMEtest", res.result[0].ReceivingDateTime);
              ! setState("javascript.0.sms.in.requestTEXTtest", res.result[0].TextDecoded);
              ! });
              ! }
              ! });
              ! //console.log("NEW Request STOP");
              ! });

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

                Так ты опять, где получение самого СМС вставил свой кусок кода, я же тебе его переписывал по другому.

                Какая система? Если линукс, то открой консоль и выполни команду

                tail -f /opt/iobroker/log/iobroker.log.[сегодняшняя дата]
                

                После этого выполняй код, у тебя в реальном времени будет идти лог.

                <size size="50">Ты в телеграмм группе есть?</size>

                1 Reply Last reply Reply Quote 0
                • P
                  Pooh last edited by

                  если так сделать:

                  ! //sendTo('sql.0', 'query','SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM db_gammu.inbox WHERE UDH LIKE ? AND UpdatedInDB = ?', '%'+udh+'%', date, function(res) {
                  ! sendTo('sql.0', 'query','SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM db_gammu.inbox WHERE UDH LIKE %'+udh+'% AND UpdatedInDB = ' +date, function(res) {
                  тогда javascript ругается:

                  ! javascript.0 2018-02-13 06:34:22.629 error at Decoder. (/opt/iobroker/node_modules/component-bind/index.js:21:15)
                  ! javascript.0 2018-02-13 06:34:22.629 error at Manager.ondecoded (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:332:8)
                  ! javascript.0 2018-02-13 06:34:22.629 error at Manager.Emitter.emit (/opt/iobroker/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20)
                  ! javascript.0 2018-02-13 06:34:22.629 error at Manager. (/opt/iobroker/node_modules/component-bind/index.js:21:15)
                  ! javascript.0 2018-02-13 06:34:22.629 error at Socket.onpacket (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:228:12)
                  ! javascript.0 2018-02-13 06:34:22.629 error at Socket.onevent (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:270:10)
                  ! javascript.0 2018-02-13 06:34:22.629 error at Socket.Emitter.emit (/opt/iobroker/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20)
                  ! javascript.0 2018-02-13 06:34:22.629 error at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:48:30)
                  ! javascript.0 2018-02-13 06:34:22.629 error at Object.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3151:71)
                  ! javascript.0 2018-02-13 06:34:22.629 error at Object.cb (script.js.Test.SMS_SQL:151:84)
                  ! javascript.0 2018-02-13 06:34:22.629 error TypeError: Cannot read property '0' of undefined
                  ! javascript.0 2018-02-13 06:34:22.624 error message messagebox.system.adapter.javascript.0 [object Object] Cannot read property '0' of undefined
                  ! javascript.0 2018-02-13 06:34:22.622 error script.js.Test.SMS_SQL: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%05000341030% A
                  ! sql.0 2018-02-13 06:34:22.611 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
                  ! sql.0 2018-02-13 06:34:22.596 debug SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM db_gammu.inbox WHERE UDH LIKE %05000341030% AND UpdatedInDB = 2018-02-01T02:22:48.000Z
                  ! sql.0 2018-02-13 06:34:22.578 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
                  ! sql.0 2018-02-13 06:34:22.556 debug SELECT UDH, UpdatedInDB FROM db_gammu.inbox WHERE ID = 3 <-третье сообщение (длинное)
                  ! javascript.0 2018-02-13 06:34:22.541 info script.js.Test.SMS_SQL: NEW Request START with sql.0
                  ! sql.0 2018-02-13 06:34:20.860 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
                  ! sql.0 2018-02-13 06:34:20.849 debug SELECT max(id) AS id FROM db_gammu.inbox
                  ! sql.0 2018-02-13 06:34:10.951 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
                  ! sql.0 2018-02-13 06:34:10.939 debug SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM db_gammu.inbox WHERE ID = 2
                  ! sql.0 2018-02-13 06:34:10.917 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
                  ! sql.0 2018-02-13 06:34:10.904 debug SELECT UDH, UpdatedInDB FROM db_gammu.inbox WHERE ID = 2 <-второе сообщение (короткое)
                  ! javascript.0 2018-02-13 06:34:10.895 info script.js.Test.SMS_SQL: NEW Request START with sql.0
                  ! sql.0 2018-02-13 06:34:07.633 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
                  ! sql.0 2018-02-13 06:34:07.621 debug SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM db_gammu.inbox WHERE ID = 1
                  ! sql.0 2018-02-13 06:34:07.603 debug sendTo "query" to system.adapter.javascript.0 from system.adapter.sql.0
                  ! sql.0 2018-02-13 06:34:07.586 debug SELECT UDH, UpdatedInDB FROM db_gammu.inbox WHERE ID = 1 <-первое сообщение (короткое)
                  ! javascript.0 2018-02-13 06:34:07.572 info script.js.Test.SMS_SQL: NEW Request START with sql.0
                  2 коротких вывелись, на запрос третьего сыпятся ошибки…

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

                    А почему у тебя дата не приводится к формату YYYY-MM-DD?

                    И строчка запроса неправильная, у тебя выборка приходит как непонятный формат, а не как строка. Вот этот должен правильно сработать.

                    "SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded ORDER BY UDH SEPARATOR '') as TextDecoded FROM smsd.inbox WHERE  UDH LIKE '"+udh+"%' AND ReceivingDateTime LIKE '" + date + "%'"
                    
                    1 Reply Last reply Reply Quote 0
                    • P
                      Pooh last edited by

                      ок, спасибо! Вот так вроде заработало, тестирую…:

                      sendTo('sql.0', 'query',"SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded ORDER BY UDH SEPARATOR '') as TextDecoded FROM db_gammu.inbox WHERE  UDH LIKE '"+udh+"%' AND ReceivingDateTime LIKE '" + formatDate(date, 'YYYY-MM-DD') + "%'" , function(res) {
                      
                      1 Reply Last reply Reply Quote 0
                      • P
                        Pooh last edited by

                        Осталась последняя "хотелка" с данной связкой - оперировать не кусками сообщений, а целыми… с какой стороны подойти не знаю...

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

                          Я же тебе предлагал уже решение. Создаешь дополнительную таблицу в базе с 2 полями, первое - уникальный ID, можно автоматический, второй - ID смс. И при получении СМС в данную таблицу заносишь ID пришедшей смс, если составное, то через туже "," вносишь список. Потом уже, когда тебе надо читать СМС, то выборку делаешь сначала с этой таблицы, а потом по полученному ID выборку из inbox.

                          1 Reply Last reply Reply Quote 0
                          • P
                            Pooh last edited by

                            Если бы я знал как с базами работать… кроме сопоставления номеров смс с ID смс нужен еще флаг - прочитана\обработана смс или нет.

                            Какая будет структура таблицы? в какой базе ее создавать? в иоброкерской или в gammu'вской?

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

                              Можно попробовать создать и в gammu базе, не должна помещать, структура из 2 столбцов, помечать прочитано или нет, я особого смысла не вижу, так как таблица будет вестись не автоматически, а из ващего скрипта, т.е. ее назначение удобная навигация по уже прочитанным СМС.

                              Примерно так создать таблицу, это 1 раз выполнить.

                              sendTo('sql.0', 'query',"CREATE TABLE db_gammu.sms_struckt ( id INT NOT NULL PRIMARY KEY, ids VARCHAR(100)")
                              

                              Заполнять примерно так,

                              sendTo('sql.0', 'query',"SELECT GROUP_CONCAT(id SEPARATOR ",") as ids FROM db_gammu.inbox WHERE  UDH LIKE '"+udh+"%' AND ReceivingDateTime LIKE '" + formatDate(date, 'YYYY-MM-DD') + "%'" , function(res) { 
                              if (res.error) {
                              console.error(res.error);
                              }
                              sendTo('sql.0', 'query',"INSERT INTO db_gammu.sms_struckt ids VALUE " + res.result[0].ids);
                              
                              

                              Код надо проверять, писал по памяти.

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              576
                              Online

                              31.7k
                              Users

                              79.9k
                              Topics

                              1.3m
                              Posts

                              2
                              30
                              6902
                              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