Newer
Older
smart-home-server / devices / relay / relay_esp8266 / relay_esp8266.ino
#include "Config.h"
#include <Arduino.h>

#include "Global.h"
#include "REST_API.h"

// -------------------- ЛОГИКА УСТРОЙСТВА --------------------

// Простейшее 1-канальное реле
void applyChannelState(uint8_t ch, bool on) {
  if (ch != 0) return;
  digitalWrite(RELAY_PIN, on ? HIGH : LOW);
}

// Добавляем поля в /status
void appendStatusJsonFields(String &json) {
  // Пример: {"status":"ok","relay_state":"on"}
  json += ",\"relay_state\":\"";
  json += getPrimaryState() ? "on" : "off";
  json += "\"";
}

// Добавляем поля в /about (если нужно)
void appendAboutJsonFields(String &json) {
  // Например, количество каналов
  json += ",\"channels\":" + String(CHANNEL_NUM);
}

// Обработка действий
bool deviceHandleAction(const String &action,
                        const String &paramsJson,
                        String &errorCode,
                        String &errorMessage)
{
  if (action == "set_state") {
    String state = extractJsonStringValue(paramsJson, "state");
    state.toLowerCase();

    if (state != "on" && state != "off") {
      errorCode    = "IllegalActionOrParams";
      errorMessage = "Unknown state value";
      return false;
    }

    bool on = (state == "on");
    // ВАЖНО: здесь мы сами решаем, сохранять ли это в EEPROM,
    // вызывать ли setChannelState/ setOn и т.п.
    setOn(on);  // внутри setOn → setChannelState(0, on, true);

    return true;
  }

  // Неизвестное действие
  errorCode    = "IllegalActionOrParams";
  errorMessage = "Unknown action";
  return false;
}

// -------------------- SETUP / LOOP --------------------
void setup() {
  pinMode(RELAY_PIN, OUTPUT);
  coreSetup();
}

void loop() {
  coreLoop();
}