Newer
Older
smart-home-server / devices / sensor / SensorLogic.h
#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();