Internet of Things Integration Platform
Remote Monitoring, M2M and Device Management Software Platform

Запись данных в устройство SQL

Questions related to AggreGate device drivers, reading and updating data from/in various devices and data sources.

Запись данных в устройство SQL

Postby sgaponov/yandex_ru » Thu Apr 07, 2016 9:46 am

Доброго времени суток всем.
Есть проблема с устройством SQL.
Создаю устройство "База данных" (FireBird 2.5), настраиваю связь с одной из таблиц - запрос на выборку значения (поле "Запрос для чтения" в списке запросов устройства на вкладке "Запросы"). Все проходит отлично и корректно. Пытаюсь настроить запрос на запись (поле "Запрос для записи", там же). Запрос выглядит так:

Code: Select all
update or insert into "CanData" (REQUESTCANID, DEVINDEX, FLOATDATA)
  values (101, 0, ???)
  matching (REQUESTCANID, DEVINDEX)


На место вопросов нужно подставить текущее, введенное пользователем, произвольное значение. Не получается. Перепробовал N+1 комбинаций имени переменной / устройства / таблицы, с фигурными скобками / двоеточиями / знаками $, %, @ и т.д., и без них. Не проходит ничего. В документации (прилагаемой к программе, и на сайте Tibbo) не нашел ничего.
Image

При подстановке статического числового значения (число с плавающей точкой) - все проходит на "ура", но такой статичный вариант не устраивает. Нужен динамический.
Не подскажете, куда копать?
sgaponov/yandex_ru
 
Posts: 2
Joined: Thu Apr 07, 2016 9:27 am

Re: Запись данных в устройство SQL

Postby anton_logoyskiy/tibbo_com » Tue Apr 12, 2016 2:49 pm

Добрый вечер!

Я предлагаю сделать аналогично способу приведённому здесь:
http://aggregate.tibbo.com/docs/en/inde ... ternal.htm

Основной вопрос, как обратиться к значению, которое изменяет пользователь.
Вы можете это сделать, если знаете, как называется поле в результате выполнения запроса на чтение. Наведите мышку на описание столбца и узнаете какое у него имя. А дальше можно обратиться к его значению с помощью ссылки: {fieldName}.

Кроме того, можно выполнить запрос из выражения с помощью функций:
callFunction(), executeQuery(), с помощью которых вы можете выполнить любой запрос из любого места системы.

Ниже примеры для MySQL и PostgreSQL

MySQL
Code: Select all
cell(callFunction("users.admin.devices.cardsDatabase", "executeQuery", "insert into cards (ID, Name, Active) values (?,?,?)", true, dt()), "rows") > 0


PostgreSQL
Code: Select all
cell(callFunction("users.admin.devices.Asterisk_cdr", "executeQuery", "update sip_conf set name = '" + cell(dt(),"name") + "', context = '" + cell(dt(),"context")+ "', secret = '" + cell(dt(),"secret") +"', mailbox = '" + cell(dt(),"mailbox") + "', callerid = '" + cell(dt(),"callerid") + "', directmedia = '" + cell(dt(),"directmedia") + "', allow = '" + cell(dt(),"allow") + "', defaultuser = '" + cell(dt(),"defaultuser") + "' where id = " + cell(dt(),"originalId"), true), "rows") > 0
anton_logoyskiy/tibbo_com
 
Posts: 96
Joined: Wed Jul 22, 2015 10:05 am

Re: Запись данных в устройство SQL

Postby sgaponov/yandex_ru » Wed Apr 13, 2016 7:10 am

Спасибо за ответ.
Приведенный способ уже используется, как единственный пока доступный (кстати, его описание у Тиббо есть и на русском языке - нужно в ссылке заменить часть '/en/' на '/ru/').
Проблема не в этом, а в том, что хотелось сделать возможность записи в БД без специального виджета.
Есть много разрозненных данных (датчиков), читаемых по-одиночке; создавать для каждого элемента свой собственный виджет, или делать некий общий комплексный - не хочется.
И еще один момент: в СКАДА Aggregate есть готовый механизм записи для каждого запроса (поле "Запрос для записи" в списке запросов создавалось, и было создано, не для того, чтобы подразнить или поиздеваться, я так думаю). Есть даже выбор - создавать его в виде выражений Aggregate или в виде запроса SQL. Но совершенно не описано, как этим пользоваться непосредственно в списке запросов.
Конкретно: запрос на выборку одного значения (число с плавающей точкой) на SQL я написал легко; в списке отображается его значение "онлайн"; а в виде выражения - не смог: не нашел контекст таблицы и ячейки, куда значение будет отображаться, даже не нашел описания - что именно должно возвращать выражение: число, ячейку, переменную или таблицу. Ни один из вариантов не привел к успеху, только к очередному сообщению об ошибке. Примеров в документации - крайне мало. Демо-проекта также нет (в печальном отличии от других СКАДА).
sgaponov/yandex_ru
 
Posts: 2
Joined: Thu Apr 07, 2016 9:27 am

Re: Запись данных в устройство SQL

Postby anton_logoyskiy/tibbo_com » Tue Apr 26, 2016 10:56 am

Добрый день!

Документация постоянно дополняется новыми статьями и примерами. Работа над новыми Демо-проектами и практическими примерами использования системы также ведется непрерывно. Если есть потребность, в каких либо конкретных примерах, которые хотелось бы видеть в составе продукта, наши специалисты учтут это при проектировании и разработке следующего набора демонстрационных ресурсов.

Абсолютно согласен с тем, что сложно понять, как написать запрос на запись с использованием языка выражений в AggreGate, поэтому я передал разработчикам ваши пожелания, скоро они будут реализованы в виде редактора выражения при включений этой опции в запросах к БД.

Для записи событий можно использовать вот этот инструмент:
http://aggregate.tibbo.com/docs/ru/inde ... riters.htm
Но у него есть ряд ограничений и он не подойдёт для всех. Поэтому, был предложен используемый вариант, как наиболее гибкий.

С уважением,
Антон Логойский
Tibbo Systems
anton_logoyskiy/tibbo_com
 
Posts: 96
Joined: Wed Jul 22, 2015 10:05 am


Return to Data Acquisition

Who is online

Users browsing this forum: No registered users and 1 guest