Связь между датчиками XBee, ConnectPort X4H и Digi Cloud
Мы являемся платформой для мониторинга удаленного строительства в стартапе для строительной отрасли. Мы хорошо разбираемся в веб-разработке (веб-приложения, веб-API, визуализация данных), но у нас 0 знаний о низкоуровневой инженерии и программировании.
Более того, чрезвычайно сложно найти любого разработчика XBee в нашей области. Чтобы сделать это возможным и доставить MVP, мы решили приобрести готовые к использованию наборы и Digi Cloud, поэтому мы получили:
- 1 ConnectPort X4H http://www.digi.com/products/xbee-rf-solutions/gateways/connectportx4
- 4 XBee Sensors http://www.digi.com/products/xbee-rf-solutions/sensors/xbee-sensors
- 2 XBee Wall Router http://www.digi.com/products/xbee-rf-solutions/range-extenders/xbee-wall-router
Что мы уже знаем:
- Мы обнаружили ConnectPort с видимой сетью ZigBee в Digi Cloud, да, он виден и может быть настроен онлайн.
- Мы знаем, что ConnectPort имеет встроенный движок Python, однако поддерживается только версия Python 2.4.3.
- Мы знаем, что можем загружать файлы Python напрямую в ConnectPort, используя Digi ESP для Python
- Мы знаем, что можем загружать файлы Python в ConnectPort с помощью Digi Cloud
- Мы знаем, что датчики могут отправлять данные в потоки данных, срок действия которых истекает через некоторое время.
- Мы знаем, что мы можем использовать Monitor API для пересылки данных в наш собственный внешний веб-сервис каждый раз, когда они загружаются в поток данных.
Чего мы хотим достичь и есть вопросы:
Сценарий 1 (простой):
В этом сценарии мы хотим указать все настройки и выборку с помощью онлайн-интерфейса Digi Cloud.
- Создавайте потоки данных, используя Digi Cloud Interface
- Поскольку каждый датчик XBee имеет 1 датчик температуры, 1 влажность и 1 датчик освещения, мы хотим указать 3 потока данных для каждого датчика XBee. Всего 4 х 3 потока данных.
- Каждый поток данных, кроме значения данных, должен иметь дополнительные свойства, такие как: NodeId (идентификатор XBee Sensor), SensorTypeId (идентификатор из словаря типов), SamplingFrequency (значение в миллисекундах, 0 = реальное время) DateStart (дата, с которой точка должна собирать данные), DateEnd (дата после сбора данных не требуется), MeasurementZoneId(Id зоны измерения, указанной пользователем, например, Этаж 1), PlacementVector (x, y, z местоположение внутри конструкции)
- Каким-то образом связать каждый поток данных с каждым датчиком внутри датчиков XBee и "Включить выборку"
- Смотрите изменения данных онлайн в Digi Cloud
Вопросы:
- Можно ли расширить метаданные потока данных указанными выше свойствами?
- Можно ли определить один поток данных на один датчик внутри одного датчика XBee?
- Можно ли определить частоту дискретизации и включить выборку из интерфейса Digi Cloud без написания кода Python для ConnectPort (без необходимости использования таймера бесконечного цикла)?
- Если в коде Python нет необходимости включать выборку и отправку данных, как это сделать?
- Если код Python является обязательным, означает ли это, что каждый раз, когда мы хотим назначить датчики XBee для другой зоны измерения, нам нужно загрузить новый файл Python в ConnectPort?
Сценарий 2 (расширенный):
В этом сценарии мы хотим настроить устройства и выборку из нашего собственного внешнего API и использовать Digi Cloud в качестве посредника для конфигурации и пересылки данных.
- Имея те же параметры, создайте потоки данных, используя Digi Cloud API из вечного веб-сервиса (это будет веб-сервис.NET, написанный на C#)
- Имея те же параметры, создавайте пересылку данных во внешний веб-сервис (это будет веб-сервис.NET, написанный на C#) с использованием Monitor API, каждый раз, когда новые данные будут загружаться в Digi Cloud
- При одинаковых параметрах, каким-то образом связать каждый поток данных с каждым датчиком внутри датчиков XBee и "Включить выборку" с помощью Digi Cloud API из вечного веб-сервиса (это будет веб-сервис.NET, написанный на C#)
- Получать данные в вечном веб-сервисе без необходимости ручных запросов
Вопросы:
- Можно ли расширить метаданные потока данных указанными свойствами, используя Digi Cloud API из внешнего веб-сервиса?
- Можно ли определить один поток данных на один датчик внутри одного датчика XBee, используя Digi Cloud API из внешнего веб-сервиса?
- Можно ли определить частоту выборки и включить выборку, используя Digi Cloud API из внешнего веб-сервиса, без написания кода Python для ConnectPort (без необходимости в таймере бесконечного цикла)?
- Если в коде Python нет необходимости включать выборку и отправку данных, как это сделать?
- Если код Python является обязательным, означает ли это, что каждый раз, когда мы хотим назначить датчики XBee для разных зон измерения, нам нужно сгенерировать и загрузить с помощью нового Python-файла Digi Cloud API в ConnectPort?
Мы будем благодарны за любую помощь с вышеописанными сценариями.
1 ответ
Будет сложно рассмотреть все конкретно в вашем посте, учитывая его широту и детали, необходимые для точного ответа, но вот попытка:
Сценарий 1:
У вас есть пара вариантов. Вы можете написать собственный скрипт Python, который запускается на шлюзе, поскольку существуют API для взаимодействия с узлами XBee и для отправки точек данных в Device Cloud, структурированные так, как вы хотите. Это дает вам большой контроль без дополнительных затрат фреймворка, но вы можете обнаружить, что вам нужно покопаться в ряде деталей, чтобы выяснить, как выполнить каждую задачу.
Кроме того, взгляните на платформу DIA Python, которая может работать на шлюзе ( http://www.digi.com/support/productdetail?pid=3632&type=drivers). Эта структура пытается абстрагировать устройства и отчеты о данных, так что вы можете добиться многого, прежде всего, с помощью конфигурации, без необходимости писать какой-либо код. Я мог бы порекомендовать вам, по крайней мере, начать с этим и попробовать его, и если вам кажется слишком обременительным настраивать, по крайней мере, у вас есть отправная точка, чтобы посмотреть.
API на стороне устройства позволяет предоставлять описание вместе с каждой загружаемой точкой данных. Хотя многие вещи, которые вы перечислили, не поддерживаются, вы можете прийти к соглашению включить эту информацию в поле описания (например, отформатировать описание как json). Невозможно автоматически настроить отчетность на стороне сервера, чтобы она автоматически отражалась на стороне устройства. В Device Cloud есть API-интерфейсы, которые позволяют отправлять сообщения на устройство... чтобы вы могли передавать отчеты об изменениях с помощью этого API-интерфейса.
Да, используя Python и API для загрузки данных, вы можете размещать свои потоки так, как хотите. Определенно имеет смысл иметь один поток для каждого уникального источника данных, и это будет по умолчанию способ, которым DIA будет распределять потоки.
Это может быть возможно с DIA. Я полагаю, что датчики XBee могут быть настроены на периодическую отправку выборок ввода-вывода, а затем DIA будет загружать их на сервер. Затем вы можете отрегулировать настройки на узлах XBee с учетом частоты дискретизации ввода-вывода, чтобы все изменилось. Это не будет очень просто, однако.
Как уже упоминалось, попробуйте DIA, чтобы увидеть, отвечает ли он вашим потребностям. Может потребоваться некоторая конфигурация и собрать пакет кода Python, который выполняется на шлюзе, не требуя написания какого-либо Python.
Вы можете отправлять сообщения в свой код Python через API в Device Cloud. Таким образом, вы можете определенно реализовать его, чтобы на вашем устройстве был файл конфигурации, который отслеживает зону измерения для каждого устройства, а затем поддерживает получение сообщения из Device Cloud для обновления и сохранения новой конфигурации зоны измерения. Вы не сможете интегрировать это в пользовательский интерфейс самого Device Cloud, но вы можете выполнить необходимый API с помощью API Explorer в Device Cloud.
Сценарий 2
Вы можете получить список всех потоков и точек данных с помощью API в Device Cloud. Вы также можете создавать новые точки данных или делать такие вещи, как редактировать описания для потоков или точек данных.
Вы можете создавать потоки данных и размещать их по своему усмотрению с помощью API в Device Cloud (см. / Ws/DataStream и /ws/DataPoint или их более новый вариант /ws/v1/streams)
Предполагая, что решение №3 в первом сценарии работает, вы можете настроить частоту дискретизации ввода-вывода конечных узлов XBee с помощью API-интерфейсов веб-служб в Device Cloud.
Попробуйте структуру DIA и посмотрите, соответствует ли она вашим потребностям.
То же, что и раньше, так как он использовал API.