Эта инструкция предназначена для покупателя устройства WF-2C1T-P, который использует его в системе RealIoT как Wi‑Fi устройство с BLE-первичной настройкой. Общая справка по системе RealIoT доступна на сайте https://realiot.ru/Help/system-help.html. Общие рекомендации по физическому подключению устройств RealIoT можно посмотреть на https://realiot.ru/Help/physical-connection.html.
1. Что это за устройство
По смыслу это двухвходовой Wi-Fi датчик. В зависимости от настроек он может:
- считать импульсы;
- контролировать логический уровень входов;
- будить основной процессор по импульсам, по изменению дискретного входа или по таймеру;
- отправлять данные в RealIoT по MQTT.
2. Аппаратные входы
| Логический вход | GPIO | Назначение |
|---|---|---|
| input1 | GPIO27 | Первый вход. Может работать как счетный или как дискретный. |
| input2 | GPIO33 | Второй вход. Может работать как счетный или как дискретный. |
| Кнопка BLE | GPIO35 | Локальная кнопка устройства. Не участвует в логике входов input1 и input2. |
Параметр edge задает не только тип значимого фронта, но и внутреннюю подтяжку входов.
- rising — включается подтяжка к земле (pull-down);
- falling — включается подтяжка к питанию (pull-up);
- both — вход становится плавающим, без внутренней подтяжки.
3. Как устройство настраивается
Первичная настройка выполняется по BLE. Покупателю важно знать две вещи:
- устройство сначала переводится в BLE-режим длинным нажатием кнопки;
- после этого через BLE ему передаются параметры Wi-Fi, сервера и логики входов.
Для интеграции через приложение или внешний конфигуратор устройство использует BLE GATT:
- Service UUID: 0xFFE0
- Characteristic UUID: 0xFFE1
Сообщение готовности после подключения
{"v":1,"messageType":"bleReady","status":"ok"}
Во внешней BLE-настройке используются отдельные сообщения для
- идентификации устройства;
- настройки Wi-Fi;
- настройки MQTT-сервера;
- режима сна и периода отправки;
- настройки двух входов;
- сохранения параметров и перезапуска.
4. Идентификация устройства при настройке
При первичной настройке в BLE передаются тип устройства, серийный номер и модель. Для пользователя это важно только в том смысле, что серийный номер и модель должны соответствовать наклейке или карточке поставки устройства.
Пример factoryConfig
{
"v": 1,
"messageType": "factoryConfig",
"payloadData": {
"deviceType": "sensor",
"SN": "SERIAL-NUMBER",
"deviceModel": "WF-2C1T-P",
"firmwareModel": "WF2C1T"
}
}
5. Настройка входов по BLE
При настройке входов покупатель или интегратор задает
- роль первого входа;
- роль второго входа;
- тип значимого фронта;
- защиту от дребезга;
- wakeThreshold1 — порог для входа input1, если он счетный;
- wakeThreshold2 — порог для входа input2, если он счетный.
Сообщение pulseConfig
{
"v": 1,
"messageType": "pulseConfig",
"payloadData": {
"input1Role": "counter",
"input2Role": "discrete",
"edge": "falling",
"debounceMs": 50,
"wakeThreshold1": 10,
"wakeThreshold2": 0
}
}
| Поле | Допустимые значения | Понятный смысл |
|---|---|---|
| input1Role, input2Role | counter, discrete | Режим работы каждого входа. counter считает импульсы. discrete не считает импульсы, а отслеживает изменение логического состояния. |
| edge | rising, falling, both | Какой фронт считать значимым для счетных входов. Этот же параметр определяет внутреннюю подтяжку обоих входов. |
| debounceMs | целое число, мс | Защита от дребезга контактов. Состояние входа считается подтвержденным только после того, как оно остается стабильным в течение указанного времени. |
| wakeThreshold1 | целое число | Через сколько подтвержденных импульсов на input1 устройство должно проснуться и отправить данные. Если input1 работает как discrete, это поле должно быть равно 0. |
| wakeThreshold2 | целое число | Через сколько подтвержденных импульсов на input2 устройство должно проснуться и отправить данные. Если input2 работает как discrete, это поле должно быть равно 0. |
Практическое правило: если сухой контакт или кнопка замыкают вход на землю, чаще всего нужен edge = falling. В этом случае вход удерживается внутренней подтяжкой к питанию и при замыкании действительно меняет состояние.
6. Поддерживаемые режимы входов
| Режим | Смысл | Как просыпается устройство |
|---|---|---|
| counter + counter | Оба входа считают импульсы независимо друг от друга. | По wakeThreshold1, по wakeThreshold2 или по таймеру. |
| counter + discrete | input1 считает импульсы. input2 используется как дискретный сигнал закрытия очередной партии измерений. | По wakeThreshold1, по изменению input2 или по таймеру. |
| discrete + discrete | Оба входа только отслеживают логические состояния. | По любому подтвержденному изменению input1 или input2, а также по таймеру. |
7. Что значат счетчики total и batch
Для счетного входа устройство ведет два регистра:
- TotalCount — общий накопительный счетчик. Он никогда не сбрасывается автоматически.
- BatchCount — текущая незавершенная партия измерений.
В режиме counter + discrete при подтвержденном изменении input2 происходит следующее
- текущее значение input1BatchCount переносится в input1BatchClosedCount;
- input1BatchCount сразу обнуляется;
- начинается новый batch для последующих импульсов.
Просто: input1BatchCount — это счетчик текущей открытой партии, а input1BatchClosedCount — это только что завершенная партия, которую устройство отправляет в пакете после срабатывания input2.
8. Сохранение конфигурации
{
"v": 1,
"messageType": "commitConfig"
}
Устройство подтверждает сохранение и перезапускается.
9. Что происходит после настройки
- Устройство перезапускается.
- Поднимает Wi‑Fi STA.
- Подключается к MQTT-серверу.
- Строит топики по серийному номеру.
- Публикует meta и затем рабочие state-сообщения.
MQTT топики
| Назначение | Топик |
|---|---|
| Состояние | wifi/<SN> |
| Команда set | wifi/<SN>/set |
| Команда get | wifi/<SN>/get |
| Метаданные | wifi/<SN>/meta |
10. Какие данные приходят по Wi‑Fi
Meta
- deviceSN, deviceType, deviceModel;
- firmwareVersion, wifiAP, serverName;
- sleepMode, sigEnabled, reportPeriodSec;
- input1Role, input2Role, pulseEdge, pulseDebounceMs, pulseWakeThreshold1, pulseWakeThreshold2;
- состояния и счетчики входов, которые актуальны для выбранного режима.
State: для счетных входов
- input1TotalCount, input2TotalCount — общие накопительные счетчики;
- input1BatchCount, input2BatchCount — текущие незавершенные партии;
- input1BatchClosedCount — закрытая партия для input1 в режиме counter + discrete.
State: для логических состояний
- input1Level, input2Level — текущий подтвержденный логический уровень входов.
State: для причины публикации
- eventReason — почему устройство проснулось и отправило пакет;
- eventSource — какой вход вызвал событие.
Возможные значения eventReason
- pulse_threshold — достигнут порог импульсов на счетном входе;
- discrete_reset — в режиме counter + discrete сработал input2 и закрыл batch;
- discrete_change — в режиме discrete + discrete изменилось состояние одного или обоих входов;
- timer — сработал периодический таймер отчета.
11. Как понимать режимы на практике
Режим counter + counter
Это режим для двух независимых счетчиков. Оба входа считают импульсы. Каждый вход имеет свои поля TotalCount, BatchCount и свой порог пробуждения. Дискретного сброса batch в этом режиме нет.
Режим counter + discrete
Это режим для одного счетчика и одного управляющего дискретного сигнала. input1 считает импульсы, а input2 закрывает текущую партию измерений.
Практически это удобно, когда
- нужно считать общий расход или выпуск продукции на input1;
- дискретный датчик или концевик на input2 обозначает конец цикла, смены, партии или операции.
Режим discrete + discrete
В этом режиме счетчиков нет. Оба входа передают только логические состояния. Устройство просыпается по любому подтвержденному изменению input1 или input2 и отправляет их актуальные уровни.
12. Локальная кнопка на устройстве
- Короткое нажатие — инициирует публикацию метаданных устройства.
- Длинное нажатие (не менее 5 секунд) — запускает BLE для перенастройки.
Эта кнопка не является ни первым, ни вторым рабочим входом.
13. Примеры настройки через BLE
Пример 1. Два независимых счетчика
{
"v": 1,
"messageType": "pulseConfig",
"payloadData": {
"input1Role": "counter",
"input2Role": "counter",
"edge": "falling",
"debounceMs": 20,
"wakeThreshold1": 10,
"wakeThreshold2": 50
}
}
Пример 2. Один счетчик и дискретный сигнал закрытия партии
{
"v": 1,
"messageType": "pulseConfig",
"payloadData": {
"input1Role": "counter",
"input2Role": "discrete",
"edge": "falling",
"debounceMs": 50,
"wakeThreshold1": 10,
"wakeThreshold2": 0
}
}
Пример 3. Два дискретных входа
{
"v": 1,
"messageType": "pulseConfig",
"payloadData": {
"input1Role": "discrete",
"input2Role": "discrete",
"edge": "falling",
"debounceMs": 50,
"wakeThreshold1": 0,
"wakeThreshold2": 0
}
}
14. Типичные ошибки
- Отправка старого поля wakeThreshold. В новой прошивке нужно использовать только wakeThreshold1 и wakeThreshold2.
- Неправильный фронт. Если контакт замыкает вход на землю, а задан rising, уровень может не меняться так, как ожидается.
- Ожидание, что input1BatchCount всегда растет без сброса. В режиме counter + discrete он обнуляется при событии на input2.
- Путаница между input1BatchCount и input1BatchClosedCount. Первый показывает текущую открытую партию, второй — только что завершенную.
- Неверно указана модель при первичной настройке. Параметры идентификации должны соответствовать именно этому устройству.
15. Рекомендуемый порядок ввода в эксплуатацию
- Подготовить устройство и серийный номер.
- Передать factoryConfig.
- Передать Wi‑Fi и MQTT параметры.
- Передать powerConfig.
- Передать pulseConfig в новой схеме.
- Передать commitConfig.
- После перезапуска проверить meta на MQTT.
16. Минимальный набор JSON для ввода в эксплуатацию
{
"v": 1,
"messageType": "factoryConfig",
"payloadData": {
"deviceType": "sensor",
"SN": "3DG8-058G-608C-STPL-2C1T",
"deviceModel": "WF-2C1T-P",
"firmwareModel": "WF2C1T"
}
}
{
"v": 1,
"messageType": "wifiSsidConfig",
"payloadData": {
"ssid": "YOUR_WIFI"
}
}
{
"v": 1,
"messageType": "wifiPasswordConfig",
"payloadData": {
"password": "YOUR_PASSWORD"
}
}
{
"v": 1,
"messageType": "serverConfig",
"payloadData": {
"server": "mqtt://realiot-1.local"
}
}
{
"v": 1,
"messageType": "powerConfig",
"payloadData": {
"sleepMode": "deep",
"reportPeriodSec": 600
}
}
{
"v": 1,
"messageType": "pulseConfig",
"payloadData": {
"input1Role": "counter",
"input2Role": "discrete",
"edge": "falling",
"debounceMs": 50,
"wakeThreshold1": 10,
"wakeThreshold2": 0
}
}
{
"v": 1,
"messageType": "commitConfig"
}
17. Итог
Устройство WF-2C1T-P нужно воспринимать как двухвходовой Wi-Fi/BLE датчик, который после настройки может работать в одном из трех режимов.
- два независимых счетчика;
- счетчик плюс дискретный вход закрытия партии;
- два дискретных входа.
Все параметры настраиваются по BLE, а рабочие данные и метаданные устройство публикует в RealIoT по MQTT.