[IoT Switch] Alarm setting

IoT Switch 알람 설정을 해보려고 합니다.

알람 설정을 하기 위해 필요한 것들은 아래와 같습니다.

하나씩 해보겠습니다.

  • 웹에서 시간 설정 셋팅
  • 알람이 실행될 시간 저장
  • 현재 시간 가져오기
  • 현재 시간과 알람이 실행될 시간 비교
  • 조건에 맞는 경우, 불 키고 불끄기 수행

웹에서 시간 설정 셋팅

HHMMDDDDDDDX (시간, 분, 일월화수목금토, ON/OFF)으로 저장한다.

만약에 아침 6시, 평일, 불을 킨다. 라면

060001111101으로 저장한다.

기존에 하던대로 set/get으로 저장 및 불러오기 가능

http://192.168.10.97/set?alarm_0=143300000101


알람이 실행될 시간 저장

esp-8266 내부에 저장한다.

spiffs 파일 시스템을 활용해서 json 형태로 저장


현재 시간 가져오기

현재시간을 주기적으로 가져온다.

N 분 간격으로 가져온다.

Timer라는 클래스를 구현했고 아래와 같이 활용하였다.

서울시간으로 셋팅하고, 1분에 한 번씩 시간을 체크한다.

그리고 현재 시간과 알람 시간을 비교하여 조건이 맞을 경우 특정 동작을 수행한다.

[cpp]

LocalDB db;
ServoController servoController;
WebFront webFront;
Timer alarmTimer;

void checkAlarm(){
String currentTime = alarmTimer.getCurrentTime(); // HHMMD
db.spiffs_reading();

alarmTimer.checkDiff(currentTime,db.mAlarm_time_0, 0);
alarmTimer.checkDiff(currentTime,db.mAlarm_time_1, 1);
alarmTimer.checkDiff(currentTime,db.mAlarm_time_2, 2);
}

void setup() {
Serial.begin(115200);
WiFiManager wifiManager;
wifiManager.autoConnect("IoT Switch");

//////////////////////////////////////////////////////////
// After autoConnect, webFront server is initialized.
webFront.setup(db, servoController);

alarmTimer.setConfig(9); //seoul
alarmTimer._ticker.attach(1.0* 60, checkAlarm);
}
[/cpp]

 

[cpp]
String Timer::getCurrentTime()
{
time_t now = time(nullptr);
struct tm * timeinfo;
timeinfo = localtime(&now);
String text = intToString(timeinfo->tm_hour)+intToString(timeinfo->tm_min)+String(timeinfo->tm_wday);
// Serial.println(text);
return text; // HHMMD
}
[/cpp]


실제 시간을 가져오는 예제 코드이다.

[IoT Switch] ESP8266 – 실제 시간 가져오기

현재 시간과 알람이 실행될 시간 비교

알람이 설정된 시간과 현재 시간을 비교한다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다