Что ты такого избежать, к значению датчика дополнительно вводят время его последнего обновления, а в алгоритм вводят время актуальности жизни, которое можно принять в рассмотрение.
Введение времени обновления позволяет строить и производные сигналы (используя виртуальное устройство, например): если значение с датчика не поступает в течение определенного времени, то выдавать определенное значение, которое является индикатором отсутствия связи.
Вариант, но не такой изящный как отправлять данные в мониторинг сразу после их поступления с устройства. Изобретать программную прослойку с виртуальными устройствами не очень удобно. Особенно если речь идет о радио устройствах типа Lora - могут прислать данные, могут и нет.
Изобретать программные прослойки не то, что “не очень удобно”, это необходимо для построения надежной и легко поддерживаемой системы.
Каждая такая прослойка убирает “шороховатости” на нижнем уровне и адаптирует/нормализует/преобразует данные до вида и свойств, которые требуются следующему уровню системы.
…Создание компьютерных систем - дело далеко не простое. По мере того как возрастает их сложность, процессы конструирования соответствующего программного обеспечения становятся все более трудоемкими, причем затраты труда растут экспоненциально. Как и в любой профессии, прогресс в программировании достигается исключительно путем обучения, причем не только на ошибках, но и на удачах - как своих, так и чужих. Книга дает ответы на трудные вопросы, с которыми приходится сталкиваться всем разработчикам корпоративных систем.
Автор, известный специалист в области объектно-ориентированного программирования, заметил, что с развитием технологий базовые принципы проектирования и решения общих проблем остаются неизменными, и выделил более 40 наиболее употребительных подходов, оформив их в виде типовых решений. Результат перед вами - незаменимое руководство по архитектуре программных систем для любой корпоративной платформы. Это своеобразное учебное пособие поможет вам не только усвоить информацию, но и передать полученные знания окружающим значительно быстрее и эффективнее, чем это удавалось автору.
Книга предназначена для программистов, проектировщиков и архитекторов, которые занимаются созданием корпоративных приложений и стремятся повысить качество принимаемых стратегических решений…
В данной книге исследуются стратегии интеграции корпоративных приложений с помощью механизмов обмена сообщениями. Авторы рассматривают шаблоны проектирования и приводят практические примеры интеграции приложений, демонстрирующие преимущества обмена сообщениями и эффективность решений, создаваемых на основе этой технологии. Каждый шаблон сопровождается описанием некоторой задачи проектирования, обсуждением исходных условий и представлением элегантного, сбалансированного решения. Авторы подчеркивают как преимущества, так и недостатки обмена сообщениями, а также дают практические советы по написанию кода подключения приложения к системе обмена сообщениями, маршрутизации сообщений и мониторинга состояния системы.
Книга ориентирована на разработчиков программного обеспечения и системных интеграторов, использующих различные технологии и продукты для обмена сообщениями, такие как Java Message Service (JMS), Microsoft Message Queuing (MSMQ), IBM WebSphere MQ, Microsoft BizTalk, TIBCO, WebMethods, SeeBeyond, Vitria и др.
история хранится в sqlite, не проще ли делать из него выборки и или их по почте в формате csv ( sqlite умеет это сам делать) отсылать или в базу забикса (или чего там еще) импортировать? Зачем такая куча промежуточных механизмов?
Кхм… база данных имеет информацию по тем данным, которые у нее есть. Вы можете в zabbix завести показатель, а потом по нему вставить историю из другой базы. Из Sqlite например…
Zabbix Mysql база имеет открытую и очень понятную структуру. (но временные запросы лучше строить в PostgreSQL). Я завел показатели в Zabbix - счетчики воды, электричества, тепла и формирую из них посредством SQL запросов выборку за нужные периоды с учетом нескольких тарифов. Потом настроил связку Openhab2 и отдельно nginx+uwsgi+flask(python) и нарисовал приличный интерфейс с графиками, которые мне нужно. Сделал как я хотел, могу крутить как хочу и тп…
dead_Ivanich, Если у меня нет отдельного компьютера с Linux, то Zabbix Server я не смогу использовать?
А если поставить Zabbix Server на WB6, а на комп с Windows Zabbix Agent?
Добрый день!
У вас не те кавычки и апострофы (не знаю, как вы этого добились; возможно, в каком-то текстовом редакторе сохраняли команду); девайс назван не так, как требуется.
As you wish… вариантов масса. можете виртуальный линукс запустить в hyper-v!
zabbix agent это агент , а не удаленный терминал. Zabbix server на wb6 наверное можно запустить, но я использую его только как mqtt брокера и интерфейсы…
dead_Ivanich, Проблема в том, что я пока не нашел ни одного нормального способа извлекать данные с WB6, кроме кривоватого UI. (Впрочем, это тоже не выход, т. к. мне нужно вытягивать архивные данные из базы.)
Заводить ради этого еще один компьютер с Linux или мучаться с виртуальной машиной я не буду.
Нужен способ, который будет гарантированно работать в Windows без плясок с бубном!
ставьте заббикс на винду и алга.
ставьте mqtt на винду и тащите туда топики какие надо
монтируйте на винду раздел с wb6 и “щупайте” непосредственно файлуху
пишите программу на запускайте на WB6 и пишите по сетке на винду в базу данных топики или что надо
Вариантов - миллион. Правда все они требуют
определенных усилий
если в консоли: используем команду вида wb-mqtt-db-cli -h 127.0.0.1 --from '2020-06-16 09:06:30' --to '2020-06-18' --limit 1 -d';' wb-adc/5Vout |tail -1 | cut -f 3 -d';'
для нужного устройства, периода времени (период - можно указывать переменными ессно).
tail -1 | cut -f 3 -d’;’ - вернет третье (среднее значение параметра за период) поле второй (последней) строки
В скрипте пользоваться так:
runShellCommand("wb-mqtt-db-cli -h 127.0.0.1 --from '2020-06-16 09:06:30' --to '2020-06-18' --limit 1 -d';' wb-adc/5Vout |tail -1 | cut -f 3 -d';'",
{
captureOutput: true, //Захватывать stdout
captureErrorOutput: true, //Захватывать stderr (если нужно)
exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
{
log("cmd output: " + capturedOutput); //Делаем с данными что угодно(в переменную, например)
log("cmd Erroroutput: " + capturedErrorOutput);
}
})
Еще один вариант, предложенный настоящим гуру:
// Запуск shell-команды с запросом в историю
runShellCommand("wb-mqtt-db-cli -h 127.0.0.1 --from '2020-06-11 09:06:30' --to '2020-06-18' --limit 1 -d';' wb-adc/5Vout |tail -1",
{
captureOutput: true, //Захватывать stdout
captureErrorOutput: true, //Захватывать stderr (если нужно)
exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
{
log("cmd output: " + capturedOutput); //строка полностью
log("channel: " +capturedOutput.split(";")[0]) // channel
log("time: " +capturedOutput.split(";")[1]) // time
log("average: " +capturedOutput.split(";")[2]) // average
log("min: " +capturedOutput.split(";")[3]) // min
log("max: " +capturedOutput.split(";")[4]) // max
log("cmd Erroroutput: " + capturedErrorOutput);
}
})