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

Вопросы и информация о скриптах для ioBroker
spectrekr
professional
Beiträge: 255
Registriert: 26.12.2014, 09:40

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

Beitrag von spectrekr » 09.02.2018, 07:27

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

Pooh
professional
Beiträge: 126
Registriert: 11.05.2017, 05:15
Wohnort: Самара
Kontaktdaten:

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

Beitrag von Pooh » 12.02.2018, 05:39

длинное не выводится:
Spoiler: Show hidden text
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 <-начало запроса
короткое выводится:
Spoiler: Show hidden text
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 <-начало запроса
[/spoiler]

кусок скрипта:
Spoiler: Show hidden text
// () выдаем смс по запросу
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");
});

spectrekr
professional
Beiträge: 255
Registriert: 26.12.2014, 09:40

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

Beitrag von spectrekr » 12.02.2018, 12:04

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

Code: Alles auswählen

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

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

Ты в телеграмм группе есть?

Pooh
professional
Beiträge: 126
Registriert: 11.05.2017, 05:15
Wohnort: Самара
Kontaktdaten:

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

Beitrag von Pooh » 13.02.2018, 03:36

если так сделать:
Spoiler: Show hidden text
//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 ругается:
Spoiler: Show hidden text
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 коротких вывелись, на запрос третьего сыпятся ошибки...

spectrekr
professional
Beiträge: 255
Registriert: 26.12.2014, 09:40

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

Beitrag von spectrekr » 13.02.2018, 11:01

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

Code: Alles auswählen

"SELECT SenderNumber, ReceivingDateTime, GROUP_CONCAT(TextDecoded ORDER BY UDH SEPARATOR '') as TextDecoded FROM smsd.inbox WHERE  UDH LIKE '"+udh+"%' AND ReceivingDateTime LIKE '" + date + "%'"

Pooh
professional
Beiträge: 126
Registriert: 11.05.2017, 05:15
Wohnort: Самара
Kontaktdaten:

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

Beitrag von Pooh » 13.02.2018, 11:34

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

Code: Alles auswählen

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) {

Pooh
professional
Beiträge: 126
Registriert: 11.05.2017, 05:15
Wohnort: Самара
Kontaktdaten:

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

Beitrag von Pooh » 15.02.2018, 17:53

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

spectrekr
professional
Beiträge: 255
Registriert: 26.12.2014, 09:40

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

Beitrag von spectrekr » 16.02.2018, 09:28

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

Pooh
professional
Beiträge: 126
Registriert: 11.05.2017, 05:15
Wohnort: Самара
Kontaktdaten:

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

Beitrag von Pooh » 19.02.2018, 04:05

Если бы я знал как с базами работать... кроме сопоставления номеров смс с ID смс нужен еще флаг - прочитана\обработана смс или нет.
Какая будет структура таблицы? в какой базе ее создавать? в иоброкерской или в gammu'вской?

spectrekr
professional
Beiträge: 255
Registriert: 26.12.2014, 09:40

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

Beitrag von spectrekr » 19.02.2018, 15:19

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

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

Code: Alles auswählen

sendTo('sql.0', 'query',"CREATE TABLE db_gammu.sms_struckt ( id INT NOT NULL PRIMARY KEY, ids VARCHAR(100)")
Заполнять примерно так,

Code: Alles auswählen

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);
Код надо проверять, писал по памяти.

Antworten