Как физический мир попадает в данные
Какие сведения теряются ещё до появления числа в базе?
Перед выбором AI определяется измеряемая величина каждого канала и информация, которую можно получить из наблюдений. Пропущенные физические сведения нельзя считать восстановленными лишь потому, что данные обрабатывает нейросеть.
Между комнатой и записью лежат чувствительный элемент, его корпус, аналоговый или цифровой тракт, драйвер, буфер и сеть. На каждом шаге могут измениться время, разрешение и качество.
Чтобы система могла рассуждать о физическом мире, ей нужно знать этот путь. Число 23,4 без единицы, размещения и времени не является полноценным наблюдением. Более мощная модель не восстановит автоматически отсутствующий смысл.
Измеряемая величина и вопрос пользователя#
Пользователь спрашивает: «Мне достаточно света?» Датчик выдаёт освещённость в своей точке и ориентации. Между этими формулировками стоят расположение рабочего места, тень от монитора, направленность светильника и выбранный человеком уровень комфорта. В первой версии цель должна звучать уже: «поддерживать согласованный диапазон освещённости на выбранном участке стола».
Метрология различает измеряемую величину, результат измерения и неопределённость. Для Koobique это означает: число без описания условий недостаточно для решения. В качестве базового языка используем понятия VIM и GUM, не превращая каждый домашний датчик в лабораторный прибор. [100]
| Источник | Полезное свидетельство | Не делать такой вывод |
|---|---|---|
| Освещённость | Свет в указанной точке и ориентации | «Везде в комнате светло» |
| Температура | Температура измерительного узла в его условиях | «Человек не перегревается» |
| PIR | Событие движения в зоне обнаружения | «Нет движения — нет человека» |
| Радар | Признаки движения/присутствия в своей конфигурации | «Известно число и личность людей» |
| Ток нагрузки | Электрическое потребление | «Светильник даёт нужный свет» |
| BLE телефона | Доступность радиоустройства | «Владелец точно находится рядом» |
| Микрофон | Акустический сигнал | «Голос принадлежит авторизованному владельцу» |
Таблица задаёт консервативные границы нашего контракта, а не полную спецификацию любого датчика соответствующего класса. Отдельная модель оборудования может предоставлять дополнительные измерения, но их нужно подтвердить документацией и испытанием.
Наблюдаемость: можно ли вообще различить ситуации#
Представим две комнаты с одинаковыми тремя показаниями: 23 °C, 180 лк и отсутствие события PIR. В одной комнате никого нет, в другой человек неподвижно читает. При таком наборе данных однозначный вывод о присутствии невозможен. Более сложный классификатор может использовать статистическое предположение, но не устранит эту неоднозначность.
Нужен другой источник информации: например, признаки радара, событие двери, ручное подтверждение или более длинная история. Даже после этого остаются условия, при которых состояния неразличимы. Поэтому «неизвестно» — нормальное состояние комнаты, а не ошибка парсинга.
Пространство — часть данных#
Для светового датчика фиксируем плоскость и ориентацию; для температуры — место и способ вентиляции корпуса; для радара — направление, конфигурацию зоны и возможные движущиеся помехи. Перестановка датчика создаёт новую ревизию размещения. Она может обесценить калибровку влияния лампы, но не обязана менять криптографическую идентичность платы.
В модели мира храним физический объект отдельно от электронного устройства. Один прибор измеряет несколько объектов; один объект наблюдается несколькими приборами. Реле и светильник — не одно и то же. После замены лампы устройство реле остаётся прежним, а модель нагрузки требует повторной проверки.
Качество не означает максимальное число датчиков#
Дополнительный сенсор оправдан, когда он разрешает важную неоднозначность. Второй одинаково установленный датчик иногда повторяет ту же систематическую ошибку. Независимый способ проверки может быть полезнее более дорогого варианта той же микросхемы.
Для первого кабинета используем Sense и Presence, разобранные в главах 11–16. Температуру и свет измеряем вне корпуса станции. Сначала наблюдаем их поведение при включении лампы, работе вентиляторов, закрытии шторы и неподвижном сидении. Только затем решаем, нужен ли ещё один канал.
Сбор информации начинается с механики датчика, его питания и момента измерения. Хранилище получает результат уже сформированного измерительного тракта.
Три способа построить сеть#
Удалённые микроконтроллерные узлы. Предпочтительный путь кабинета: ESP32-C6 рядом с датчиками, локальные I²C/UART-соединения, Wi-Fi до станции. Станция получает уже типизированные измерения и диагностические флаги. Размещение измерителя не зависит от места куба; короткие периферийные провода легче исследовать. Электрические соединения показаны в монтажных картах главы 16.
Прямое подключение к Linux. USB-измеритель или плата с поддерживаемым драйвером подключается к станции. Это удобно для микрофона и лабораторного стенда. Для температурных и других преобразователей Linux предоставляет подсистему Industrial I/O: каналы, буферы и триггеры. Поддержка конкретного устройства проверяется отдельно. [105] Перенос медленного опроса в приложение не заменяет аппаратный момент выборки.
Проводные распределённые узлы. В мастерской можно добавить RS-485 или CAN через подходящие трансиверы. Это не новый смысловой протокол: KQIP может получить отдельный транспортный профиль. Электрические длины, терминация, изоляция и защита потребуют собственных схем. Не проводим I²C по всему помещению только потому, что на коротком столе он заработал.
Техническое задание на канал#
Для каждого канала задаём физическую величину, рабочий диапазон, допустимую неопределённость для сценария, период измерения, задержку, способ синхронизации и поведение при отказе. Отдельно определяем, нужны ли исходные отсчёты или достаточно агрегата.
Пример для освещения: запуск преобразования, ожидание указанного времени интеграции, чтение результата, проверка переполнения диапазона, привязка к интервалу измерения и публикация. «Получено в 12:00:01» не означает «свет измерен мгновенно в 12:00:01». Изменение времени интеграции меняет свойства канала и должно сопровождать данные.
Для температуры комнаты низкая частота часто является разумным начальным предположением, но один режим нельзя заранее назначать всем корпусам. Сначала измеряем реакцию на перемещение и влияние собственного нагрева. Выбранные SHT45 и VEML7700 подробно разобраны в главах 12–13; параметры проверяем по фактически приобретённым модулям. [15][106]
Аналоговый вход: где появляется настоящая инженерная работа#
Если новый датчик выдаёт напряжение, тракт включает входную защиту, согласование диапазона, фильтр, аналого-цифровой преобразователь и калибровку. Номинальная разрядность ADC не равна числу точных битов полезного измерения. Для ESP32-C6 официальная документация отдельно описывает одиночный и непрерывный режимы, ослабление входа и калибровку. [141]
Не строим измеритель сетевого напряжения прямым делителем на макетной плате. Для первого проекта используем безопасные низковольтные источники и готовые изолированные измерительные решения там, где они необходимы. Опорное напряжение, входное сопротивление и допустимое напряжение определяются даташитом конкретной ревизии, а не общим правилом «ADC принимает 3,3 В».
Буфер, который сообщает о собственных потерях#
Прошивка собирает отсчёты в ограниченный кольцевой буфер. Прерывание фиксирует момент события или готовность блока, но не сериализует большой JSON и не пишет синхронно во flash. После переполнения отправляется число потерянных записей и диапазон последовательности. Незаметно выбросить данные хуже, чем честно сообщить о пробеле.
Сохраняем два класса трафика. Первый — управление, ошибки, подтверждения и редкие события. Второй — потоковые измерения с допустимой политикой сокращения. Поток не может вытеснить команду остановки или диагностику потери питания. При переподключении выгрузка истории уступает актуальному управлению.
Питание и включение как режим измерения#
Пуск вентилятора, передача радио и срабатывание катушки могут совпасть с выборкой. Система не обязана знать причину каждой помехи, но должна позволять её найти: журналируем режим питания, сброс, ошибки шины и момент переключения выхода. На стенде сравниваем данные до и после разведения питания, проводов и земли. Разделение источников без общей схемы возвратных токов само по себе не является исправлением.
Контракт канала описывает весь измерительный тракт. Сначала определяем качество и время данных, затем способ доставки. Никакая модель не должна принимать потерянную выборку за физический ноль.
Достоверность источника и достоверность величины#
У аутентифицированного датчика всё ещё может быть закрыт корпус, застрять АЦП или смениться размещение. Поэтому health канала, качество отсчёта и пригодность к задаче — разные признаки. Подтверждённый heartbeat не поднимает capability движения до доказательства отсутствия человека. Счётчик Gap не скрывается последней удачной записью.
Сборщик ограничивает диапазон, скорость событий, размер очереди и допустимую частоту смены режима. Расчётные поля создаются отдельной производной записью с версией алгоритма. Повторные сообщения сравниваются по (device_id, channel_id, boot_id, sample_seq); один такой ключ с другим значением означает конфликт, а не правило «последний победил».