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. GSM модем + gammu + MYSQL + IOBroker

NEWS

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

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

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

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

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
30 Beiträge 2 Kommentatoren 7.7k 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.
  • S Offline
    S Offline
    spectrekr
    schrieb am zuletzt editiert von
    #2

    Как и обещал, вторая версия скрипта, с получением баланса. Здесь будет больше нюансов, так что скорей всего придется поправлять.

    Подготовка:

    ! Начнем, для отправки USSD запросов нам понадобится приложение gsm-ussd, берется http://linux.zum-quadrat.de/downloads/.
    ! После установки, надо подправить файл, выполняем

    sudo vi /usr/bin/gsm-ussd
    

    Исправляем на

    my $modemport           = '/dev/ttyUSB2';
    my @ussd_queries        = ( '*101#' ); #тут указать код USSD вашего оператора
    

    Проверяем работу приложения

     sudo gsm-ussd -m /dev/ttyUSB2 --no-cleartext '*100#' 
    

    Если получили баланс или получили сообщение от оператора, то все работает правильно.

    Теперь сам скрипт.

    ! createState('sms.in.id','',{type:'number',role:'value',read:true}); createState('sms.in.phone','',{type:'number',role:'number',read:true}); createState('sms.in.count','',{type:'number',role:'count',read:true}); createState('sms.in.text','',{type:'string',role:'text',read:true}); createState('sms.in.time','',{type:'string',role:'date',read:true}); createState('sms.phone.signal','',{type:'number',role:'level',read:true}); createState('sms.phone.imei','',{type:'string',role:'value',read:true}); createState('sms.phone.battery','',{type:'number',role:'level',read:true}); createState('sms.phone.balance','',{type:'number',role:'level',read:true}); createState('sms.out.phone','',{type:'number',role:'number',read:true}); createState('sms.out.text','',{type:'string',role:'text',read:true}); ! var mysql = require('mysql'); ! var connection = mysql.createConnection({ host: 'localhost', user: 'sms', password: 'sms_spkr12al', database: 'smsd', socketPath: '/var/run/mysqld/mysqld.sock' }); ! var count, udh, ud_c, date; var java_id = 'javascript.0.'; ! //создаем подключение к базе connection.connect(function(err) { if (err) { log('error connecting: ' + err.stack); return; } ! log('connected as id ' + connection.threadId); }); ! //по расписанию проверяем наличие новых смс schedule("*/20 * * * * *", function () { 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); }); }); ! on({id: java_id + 'sms.in.id', change: 'any'}, function (obj) { if (obj.oldState.val < obj.newState.val){ setState('sms.in.count', obj.newState.val - obj.oldState.val); } }); ! //обрабатываем пришедшие смс, если смс длинное то собираем текст из нескольких частей в единый. //И записываем в переменные номер отправителя, текст сообщения, дату получения. on({id: java_id + 'sms.in.count', change: 'any'}, function (obj) { count = obj.newState.val; if (count > 1){ id = getState('sms.in.id').val - count + 1; connection.query('SELECT UDH, UpdatedInDB FROM inbox WHERE ID = ?', [id], function(err, res_udh, fields) { if (err) throw err; if(res_udh[0].UDH !== ''){ udh = res_udh[0].UDH.substring(0, res_udh[0].UDH.length - 1); date = res_udh[0].UpdatedInDB; connection.query('SELECT UDH FROM inbox WHERE UDH LIKE ? AND UpdatedInDB = ?', ['%'+udh+'%', date], function(err, res, fields) { if (err) throw err; ud_c = res.length; }); connection.query('SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM inbox WHERE UDH LIKE ? AND UpdatedInDB = ?', ['%'+udh+'%', date], function(err, res, fields) { if (err) throw err; setState('sms.in.phone', res[0].SenderNumber); setState('sms.in.time', res[0].ReceivingDateTime); setState('sms.in.text', res[0].TextDecoded); if(id+ud_c < getState('sms.in.id').val){ setState('sms.in.count', count - ud_c); } }); }else{ connection.query('SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM inbox WHERE ID = ?', [id], function(err, res, fields) { if (err) throw err; setState('sms.in.phone', res[0].SenderNumber); setState('sms.in.time', res[0].ReceivingDateTime); setState('sms.in.text', res[0].TextDecoded); if(id+1 <= getState('sms.in.id').val){ setState('sms.in.count', count - 1); } // setState('sms.id', id); }); } }); } }); ! //получаем сведения о подключенном модеме, IMEI, уровень сигнала и заряд батарее(при наличии) schedule("*/10 * * * *", function () { connection.query('SELECT * FROM phones', function(err, res, fields) { if (err) throw err; setState('sms.phone.signal', res[0].Signal); setState('sms.phone.imei', res[0].IMEI); setState('sms.phone.battery', res[0].Battery); }); }); ! //Выполняем запрос баланса, при выдаче в консоль обрабатываем и пишем баланс в переменную, нет - ждем смс schedule("0 10-20 * * *", function () { var exec = require('child_process').exec; var child = exec ("sudo /usr/bin/gsm-ussd -m /dev/ttyUSB2 --no-cleartext '*100#'", function (error, stdout){ log(stdout); if(stdout.indexOf('Баланс:') >= 0){ var str = stdout.substring(stdout.indexOf('Баланс:')+7,stdout.indexOf('р,')); setState(java_id + 'sms.phone.balance', str); } }); }); ! //Отслеживает изменение в переменной и отправляет текст на русском языке, если необходимо использовать латиницу то заменяем Unicode_No_Compression на Default_No_Compression. on({id: java_id + 'sms.out.text', change: 'any'}, function (obj) { connection.query('INSERT INTO outbox (DestinationNumber, TextDecoded, CreatorID, Coding) VALUES (' + "'" + getState('sms.out.phone').val + "','" + getState('sms.out.text').val + "','IOBroker'," + "'Unicode_No_Compression');", function(err, res, fields) { if (err) throw err; }); }); ! //Проверяем если у входящей СМС отправитель Balance, то обрабатыаем и пишем баланс в переменную on({id: java_id + 'sms.in.text', change: 'any'}, function (obj) { if(getState(java_id + 'sms.in.phone').val == 'Balance\r'){ // && getState(java_id + 'sms.in.text').ts === getState(java_id + 'sms.in.phone').ts var str = getState(java_id + 'sms.in.text').val + ''; str = str.substring(str.indexOf('Баланс:')+7,str.indexOf('р,')); setState(java_id + 'sms.phone.balance', str); } }); !

    В отличии от первой версии добавилась переменная 'sms.phone.balance' отвечающая за хранение текущего баланса.

    Что может понадобится подправить:

    ! //Проверяем если у входящей СМС отправитель Balance, то обрабатыаем и пишем баланс в переменную
    ! on({id: java_id + 'sms.in.text', change: 'any'}, function (obj) {
    ! if(getState(java_id + 'sms.in.phone').val == 'Balance\r'){ //здесь проверить имя отправителя баланса
    ! // && getState(java_id + 'sms.in.text').ts === getState(java_id + 'sms.in.phone').ts
    ! var str = getState(java_id + 'sms.in.text').val + '';
    ! str = str.substring(str.indexOf('Баланс:')+7,str.indexOf('р,')); //Если в смс слово баланс: отсутствует, то подправить на свою строку, чтоб определялась только сумма.
    ! setState(java_id + 'sms.phone.balance', str);
    ! }
    ! });
    ! Аналогичные изменения в данном куске
    ! //Выполняем запрос баланса, при выдаче в консоль обрабатываем и пишем баланс в переменную, нет - ждем смс
    ! schedule("0 10-20 * * *", function () {
    ! var exec = require('child_process').exec;
    ! var child = exec ("sudo /usr/bin/gsm-ussd -m /dev/ttyUSB2 –no-cleartext '*100#'", //здесь указать код USSD вашего оператора.
    ! function (error, stdout){
    ! log(stdout);
    ! if(stdout.indexOf('Баланс:') >= 0){
    ! var str = stdout.substring(stdout.indexOf('Баланс:')+7,stdout.indexOf('р,'));
    ! setState(java_id + 'sms.phone.balance', str);
    ! }
    ! });
    ! });
    Ну вроде все указал, описал.

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      Pooh
      schrieb am zuletzt editiert von
      #3

      Отправка работает

      Но входящие сообщения не показывает, вернее показывает только первое, а не последнее пришедшее :-(

      https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
      https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
      https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
      https://www.timestope.com/freepooh - witness code: freepooh

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

        Он по порядку перебирает от объекта sms.in.id до текущего полученного id с базы данных.

        1 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          Pooh
          schrieb am zuletzt editiert von
          #5

          2689_screenshot_5.jpg
          "'sms.in.count' - Количество пришедших СМС" - всегда 1

          посмотрел базу, сравнил… скрипт выдает предпоследнее сообщение, если попытаться изменить sms.in.count

          https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
          https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
          https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
          https://www.timestope.com/freepooh - witness code: freepooh

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

            Он у тебя почему-то не целиком отрабатывает, так как после прочтения смс 'sms.in.count' изменяется на количество блоков смс. Поэтому у тебя постоянно первую смс и читает.

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              Pooh
              schrieb am zuletzt editiert von
              #7

              помоги настроить, плз..

              насколько я понял, короткое сообщение читается так:

              connection.query('SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM inbox WHERE  ID = ?', [id], function(err, res, fields) {
                                  if (err) throw err;
                                  setState('sms.in.phone', res[0].SenderNumber);
                                  setState('sms.in.time', res[0].ReceivingDateTime);
                                  setState('sms.in.text', res[0].TextDecoded);
                  });
              

              где id - номер сообщения в базе

              правильно?

              а как прочитать длинное?

              https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
              https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
              https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
              https://www.timestope.com/freepooh - witness code: freepooh

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

                Правильно, а длинное

                connection.query('SELECT UDH, UpdatedInDB FROM inbox WHERE  ID = ?', [id], function(err, res_udh, fields) {
                            if (err) throw err;
                            if(res_udh[0].UDH !== ''){
                                udh = res_udh[0].UDH.substring(0, res_udh[0].UDH.length - 1);
                                date = res_udh[0].UpdatedInDB;
                                connection.query('SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM inbox WHERE UDH LIKE ? AND UpdatedInDB = ?',  ['%'+udh+'%', date], function(err, res, fields) {
                                        if (err) throw err;
                                        setState('sms.in.phone', res[0].SenderNumber);
                                        setState('sms.in.time', res[0].ReceivingDateTime);
                                        setState('sms.in.text', res[0].TextDecoded);
                                        })
                                 }
                           }
                })
                
                1 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  Pooh
                  schrieb am zuletzt editiert von
                  #9

                  а как определить, что пришло длинное?

                  https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                  https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                  https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                  https://www.timestope.com/freepooh - witness code: freepooh

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

                    @Pooh:

                    а как определить, что пришло длинное? `

                    Самый первый запрос из приведенного кода. Если поле UDH в базе не пустое, то СМС длинное и собирается по этому полю, последняя цифра это номер СМС по порядку, в составном. Но надо учитывать, что поле UDH может быть не уникальным в большом промежутке времени, по-этому я сделал выборку по этому полю и дате получения сообщения.

                    connection.query('SELECT UDH, UpdatedInDB FROM inbox WHERE  ID = ?', [id], function(err, res_udh, fields) {
                                if (err) throw err;
                                if(res_udh[0].UDH !== ''){}
                    
                    
                    1 Antwort Letzte Antwort
                    0
                    • P Offline
                      P Offline
                      Pooh
                      schrieb am zuletzt editiert von
                      #11

                      как получить конкретное сообщение?

                      как получить количество всех целых сообщений (включая собранных из кусков), а не общее количество кусков?

                      Помоги, плз,

                      Хотелось бы получить:

                      'sms.in.id' - номер последней пришедшей собранной СМС (а не номер последнего куска)

                      'sms.in.count' - Общее Количество пришедших СМС в базе (целых, а не общее количество кусков)

                      'sms.in.text' - Текст последней пришедшей СМС (у меня сейчас предпоследняя, так и не поборол)

                      И самое главное:

                      'sms.in.requesID' - Если тут ввести номер существующей СМС в базе…

                      'sms.in.requestTEXT' - ...то здесь увидим собственно текст запрошенной СМС

                      https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                      https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                      https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                      https://www.timestope.com/freepooh - witness code: freepooh

                      1 Antwort Letzte Antwort
                      0
                      • P Offline
                        P Offline
                        Pooh
                        schrieb am zuletzt editiert von
                        #12

                        Большинство вопросов решил

                        Хотелось бы иметь возможность выборочно читать конкретное сообщение, сейчас только по ID… помогите, плз

                        Пока сделал так:

                        createState('sms.in.requesID',0);
                        createState('sms.in.requestTEXT',0);
                        createState('sms.in.requestPHONE',0);
                        createState('sms.in.requestTIME',0);
                        
                        createState('sms.in.lastID',0);
                        createState('sms.in.lastTEXT',0);
                        createState('sms.in.lastPHONE',0);
                        createState('sms.in.lastTIME',0);
                        
                        //createState('sms.in.quantity',0);
                        
                        createState('sms.phone.signal',0);
                        createState('sms.phone.imei',0);
                        
                        var mysql = require('mysql');
                        
                        var connection = mysql.createConnection ({
                            host: 'localhost',
                            user: 'gammu_user',
                            password: 'ХХХХХХХХХ',
                            database: 'db_gammu',
                            socketPath: '/var/run/mysqld/mysqld.sock'
                        });
                        
                        var count, udh, ud_c, date;
                        
                        // создаем подключение к базе
                        connection.connect(function(err) {
                        if (err) {
                            log('error connecting: ' + err.stack);
                            return;
                            }
                            log('connected as id ' + connection.threadId);
                        });
                        
                        // по расписанию проверяем наличие новых смс
                        schedule("*/20 * * * * *", function () {
                            connection.query('SELECT max(id) AS id FROM inbox', function(err, res_id, fields) {
                                if (err) throw err;
                                setState("javascript.0.sms.in.lastID", res_id[0].id);
                            });
                        });
                        
                        // выводим крайнюю смс
                        on("javascript.0.sms.in.lastID", function (obj) {
                            connection.query('SELECT UDH, UpdatedInDB FROM inbox WHERE  ID = ?', [obj.state.val], function(err, res_udh, fields) {
                                    if (err) throw err;
                                    if(res_udh[0].UDH !== '') {
                                        udh = res_udh[0].UDH.substring(0, res_udh[0].UDH.length - 1);
                                        date = res_udh[0].UpdatedInDB;
                                        connection.query('SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM inbox WHERE UDH LIKE ? AND UpdatedInDB = ?',  ['%'+udh+'%', date], function(err, res, fields) {
                                                if (err) throw err;
                                                setState("javascript.0.sms.in.lastPHONE", res[0].SenderNumber);
                                                setState("javascript.0.sms.in.lastTIME", res[0].ReceivingDateTime);
                                                setState("javascript.0.sms.in.lastTEXT", res[0].TextDecoded);
                                        });
                                    }
                                    if(res_udh[0].UDH === '') { 
                                        connection.query('SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM inbox WHERE  ID = ?', [obj.state.val], function(err, res, fields) {
                                            if (err) throw err;
                                            setState("javascript.0.sms.in.lastPHONE", res[0].SenderNumber);
                                            setState("javascript.0.sms.in.lastTIME", res[0].ReceivingDateTime);
                                            setState("javascript.0.sms.in.lastTEXT", res[0].TextDecoded);
                                        });
                                    }
                            });
                        });
                        
                        // выдаем смс по запросу
                        on("javascript.0.sms.in.requesID", function (obj) {
                            connection.query('SELECT UDH, UpdatedInDB FROM inbox WHERE  ID = ?', [obj.state.val], function(err, res_udh, fields) {
                                    if (err) throw err;
                                    if(res_udh[0].UDH !== ''){
                                        udh = res_udh[0].UDH.substring(0, res_udh[0].UDH.length - 1);
                                        date = res_udh[0].UpdatedInDB;
                                        connection.query('SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded SEPARATOR "") as TextDecoded FROM inbox WHERE UDH LIKE ? AND UpdatedInDB = ?',  ['%'+udh+'%', date], function(err, res, fields) {
                                                if (err) throw err;
                                                setState("javascript.0.sms.in.requestPHONE", res[0].SenderNumber);
                                                setState("javascript.0.sms.in.requestTIME", res[0].ReceivingDateTime);
                                                setState("javascript.0.sms.in.requestTEXT", res[0].TextDecoded);
                                        });
                                    }
                                    if(res_udh[0].UDH === ''){ 
                                        connection.query('SELECT SenderNumber, ReceivingDateTime, TextDecoded FROM inbox WHERE  ID = ?', [obj.state.val], function(err, res, fields) {
                                            if (err) throw err;
                                            setState("javascript.0.sms.in.requestPHONE", res[0].SenderNumber);
                                            setState("javascript.0.sms.in.requestTIME", res[0].ReceivingDateTime);
                                            setState("javascript.0.sms.in.requestTEXT", res[0].TextDecoded);
                                        });
                                    }
                          });
                        });
                        
                        // ОТПРАВКА. Отслеживает изменение в переменной и отправляет текст на русском языке, если необходимо использовать латиницу то заменяем Unicode_No_Compression на Default_No_Compression.
                        on("javascript.0.sms.out.text", function (obj) {
                            connection.query('INSERT INTO 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(err, res, fields) {
                            if (err) throw err;
                            });
                        });
                        
                        // получаем сведения о подключенном модеме, IMEI, уровень сигнала (по расписанию)
                        schedule("*/20 * * * *", function () {
                            connection.query('SELECT * FROM phones', function(err, res, fields) {
                                if (err) throw err;
                                setState("javascript.0.sms.phone.signal", res[0].Signal);
                                setState("javascript.0.sms.phone.imei", res[0].IMEI);
                            });
                        });
                        
                        

                        https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                        https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                        https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                        https://www.timestope.com/freepooh - witness code: freepooh

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

                          Так а что ты подразумеваешь под выборочным чтением, у тебя же по ID читает, ты хочешь по другому признаку? Подробней опиши что ты под этим понимаешь.

                          Еще бы я сделал по другому, убрал бы mysql пакет из js. Поставил драйвер SQL, настройки сохранил бы в нем, и через него запросы делал. Чуть безопаснее. Да и пакет в актуальном состоянии будет. Имхо.

                          1 Antwort Letzte Antwort
                          0
                          • P Offline
                            P Offline
                            Pooh
                            schrieb am zuletzt editiert von
                            #14

                            да, читает четко по ID, но количество ID - это количество кусков, а не реальных сообщений. т.е. я отправил 3 сообщения, одно короткое, другое длинное (из 3 допустим кусков), третье опять короткое. следовательно количество ID будет 5, а количество сообщений - 3.

                            если выбирать по ID то 1 - это первое сообщение, 2, 3 или 4 - это второе, а 5 - это третье

                            а хотелось бы выбирать по Номеру сообщений, 1 - первое короткое, 2 - второе длинное из 3 частей, 3 - третье…

                            и да, mysql я бы убрал, если бы знал как :-)

                            https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                            https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                            https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                            https://www.timestope.com/freepooh - witness code: freepooh

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

                              Убрать, я описал как.

                              Запросы после установки sql драйвера и настройки подключения к БД, будут вида

                              //по расписанию проверяем наличие новых смс
                              schedule("* * * * *", function () {
                                  sendTo('sql.0', 'query','SELECT max(id) AS id FROM smsd.inbox', function(res) {
                                      if (res.error) {
                                          console.error(res.error);
                                      };
                                      setState('sms.in.id', res.result[0].id);
                                  });
                              });
                              

                              По аналогии думаю разберешься. По поводу того как ты хочешь СМС удобно читать, мне приходит мысль создать дополнительную таблицу с 2 столбцами, ID СМС и IDs из текущей таблицы. Как раз у тебя и получится, что в первом столбце будет нужные тебе номера, а во втором список ID из которых состоит СМС.

                              1 Antwort Letzte Antwort
                              0
                              • P Offline
                                P Offline
                                Pooh
                                schrieb am zuletzt editiert von
                                #16

                                с базой не понял, надо новый инстанцию sql создавать? можно, если не затруднит, расписать чуть подробнее и по шагам?

                                https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                                https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                                https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                                https://www.timestope.com/freepooh - witness code: freepooh

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

                                  База где хранится история объектов и входящие sms на одном сервере? Если да, то просто используете запросы, только в поле где указывали таблицу откуда делать выборку указываете через точку база.таблица. Если пользователи баз разные, то пользователю указанному в настройках драйвера для хранения истории необходимо дать права на чтение с базы SMS.

                                  1 Antwort Letzte Antwort
                                  0
                                  • P Offline
                                    P Offline
                                    Pooh
                                    schrieb am zuletzt editiert von
                                    #18

                                    Не работает :-(

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

                                    // () выдаем смс по запросу
                                    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);
                                            }
                                        });
                                    });
                                    

                                    https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                                    https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                                    https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                                    https://www.timestope.com/freepooh - witness code: freepooh

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

                                      Пробуй так.

                                      // () выдаем смс по запросу
                                      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 Antwort Letzte Antwort
                                      0
                                      • P Offline
                                        P Offline
                                        Pooh
                                        schrieb am zuletzt editiert von
                                        #20

                                        не работает :-(

                                        https://play.google.com/store/apps/details?id=com.roy.royclub - код: UMI201155
                                        https://play.google.com/store/apps/details?id=com.blockchainvault - код приглашения: Freepooh
                                        https://play.google.com/store/apps/details?id=games.bee.app - код приглашения: freepooh
                                        https://www.timestope.com/freepooh - witness code: freepooh

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

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

                                          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

                                          416

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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