#pragma once
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
/*
=========================================================
SensorLogic — слой интеграции сенсорного устройства
с ядром sh_core.
Отвечает за:
- Автономную индикацию на одном WS2812 (GPIO 13)
- Отслеживание смены presence и отправку события
presence_changed на сервер
- Сборку JSON для /status (appendStatusJsonFields)
- Обработку /action (deviceHandleAction)
=========================================================
*/
/* ---- Пин NeoPixel ---- */
static constexpr uint8_t SENSOR_LED_PIN = 13;
static constexpr uint8_t SENSOR_LED_COUNT = 1;
/* ---- Путь для событий на сервере ---- */
static const char* SENSOR_EVENT_PATH = "/events/new";
/* ---- Таймаут ожидания ответа сервера (мс) ---- */
static constexpr uint32_t SENSOR_EVENT_TIMEOUT_MS = 1500;
/* ---- Тайминги мигания ---- */
static constexpr uint32_t SENSOR_BLINK_SLOW_MS = 1000;
static constexpr uint32_t SENSOR_BLINK_FAST_MS = 300;
/*
Состояния индикатора (автономные, сервер не управляет).
*/
enum SensorIndicatorState : uint8_t {
SI_SETUP = 0, // белое мигание 1/сек — не подключён к серверу
SI_NOWIFI, // синее мигание 1/сек — нет WiFi
SI_ERROR, // красное мигание 1/сек — ни один датчик не online
SI_IDLE, // тихий зелёный — всё OK, присутствия нет
SI_PRESENCE, // постоянный белый — присутствие обнаружено
};
/* ---- Публичный API ---- */
void sensor_logic_setup();
void sensor_logic_loop();