개요

LH 에너지통합플랫폼(이음)이 “○월 ○일 ○시~○시에 이 단지 이 세대들의 조명을 줄여라”는 DR(수요반응) 발령을 내리면, 플랫폼이 시간에 맞춰 세대 기기를 제어하는 기능임.

역할이 두 서버로 나뉨.

  • APW: 발령을 받아 DB에 적어두기만 함
  • SCW: 스케줄러가 시간이 되면 실제 제어를 실행함

발령 수신 (APW POST /api/em/autoDRControl)

  1. auth 헤더의 API Key를 tb_cstt_m.EEP_TO_SMAH_API_KEY와 비교. 틀리면 508
  2. 대상 세대를 순회하며 smah.tb_dr_goo_l(DR 발령 내역)에 건별 저장. dr_id, 시작·종료 시각(yyyyMMddHHmmss), dr_type
  3. 당해년도 DR 계약자가 smah.tb_dr_ctctr_m에 없으면 추가

응답: 200 성공 / 508 API Key 오류 / 599 저장 오류.

결과 조회 (APW POST /api/em/autoDRControlResult)

에너지플랫폼이 제어 결과를 물으면 smah.tb_dr_goo_l에서 돌려줌.

제어 실행 (SCW 스케줄러 SCW_SCHEDULER_CONTROL_AUTODR_DEVICE)

APW가 적어 둔 발령을 시간이 되면 실제 홈넷서버 제어 명령으로 보냄. 조명을 줄이는 것이 주 목적임. 스케줄러 구조는 공개노트/개발/모듈/SCW 스케줄러 서버.

  1. 지금 ~ 지금 + pod_hr분 사이 제어 대상을 조회함
  2. 건별로 APW에 홈넷서버 AccessToken을 요청함(GET /api/smh/getHomenetServerAccessToken)
  3. 홈넷서버 POST /api/um/devices/command로 제어함(타임아웃 20초)
  4. 결과를 smah.tb_atdr_cont_l에 저장함. 에너지플랫폼이 이 결과를 조회해 감

“DR 시간인데 조명이 안 줄었다” 확인 순서

  1. APW가 살아 있는지 — 토큰을 못 받으면 제어 자체가 안 나감
  2. 홈넷서버 인증 정보(cmn.tb_hnsvr_m)가 유효한지. 공개노트/기능/홈넷 서버 연동
  3. cmn.tb_proc_run_h에서 해당 스케줄러의 마지막 실행 결과
  4. pod_hr이 cron 주기보다 작으면 그 차이만큼 예약이 누락됨
  5. smah.tb_atdr_cont_l에 실패 결과가 남았는지

SCW는 홈넷 호출 포트 8094를 하드코딩함. 홈넷사가 다른 포트를 쓰는 단지는 APW 경로는 되는데 AutoDR 제어만 실패함.

정산내역 조회 (SCW SCW_SCHEDULER_GET_AUTODR_EXA_DTLS)

매달 1회 에너지플랫폼에 지난달 DR 정산 결과를 물어 smah.tb_dr_exa_l에 적재함. DR 참여 세대 인센티브 정산의 근거임.

  • 당해년도 DR 계약자(smah.tb_dr_ctctr_m)를 순회하며 건별로 조회함
  • 월 1회라 실패해도 다음 달까지 모름. 정산 데이터가 비면 입주민 인센티브가 안 나가므로 실행 이력 확인이 중요함

앱에서 보이는 것 (MAW)

입주민 앱의 AutoDR 메뉴는 설정과 조회만 함. 발령 처리도 제어도 앱 서버 소관이 아님.

앱 화면내용
참여 정보우리 세대의 DR 참여 여부
대상 기기세대 기기 목록과 기기별 DR 대상 여부(켜기/끄기)
월별 정산감축전력, 성실이행 횟수, 참여 횟수, 총 인센티브
  • 대상 기기는 세대 단말기에 붙은 기기 목록을 그대로 보여 줌
  • 기기 대상 여부 수정은 내 세대 기기 중 일치하는 것만 반영됨. 다른 세대 기기는 바꿀 수 없음

”AutoDR 메뉴가 전부 오류예요” 확인 순서

앱 서버가 “데이터 없음”과 “장애”를 구분해 주지 않음. 셋 다 같은 오류 화면으로 보임.

  1. 참여 정보가 오류 → 그 세대의 DR 참여계약 행이 없음(미가입 세대). 정상 상태일 수 있음
  2. 대상 기기가 오류 → 세대 기기 목록이 비어 있음. 홈넷 세대 동기화부터 볼 것. 공개노트/기능/우리집제어
  3. 정산 내역만 오류 → 그 달 정산 행이 아직 안 만들어진 것임. 정산 적재가 월 1회라 이번 달 값은 원래 없음

참여 여부 수정에 세대 검증이 없음. 참여계약 번호만 있으면 다른 세대의 참여 여부도 바뀌는 구조임(2026-09-18 코드 확인). 공개노트/개발/모듈/MAW 앱 API 서버 “알려진 이슈”.

API 경로·테이블은 공개노트/개발/모듈/MAW 세대·헬스케어 API.

알아둘 점

  • 저장에 실패한 DR은 실행되지 않음. 시각 포맷이 yyyyMMddHHmmss가 아니면 파싱 오류로 통째로 실패함. 로그 키워드 AutoDR제어요청 내역을 DB에 저장중오류, API키 없음
  • 앱 알림 토픽은 ENGCNS_ATDR_GOO, 이동 화면은 AUTO DR(UI-124-400). 공개노트/개발/push 알림
  • 같은 이음(에너지플랫폼)이 앱 에너지 화면의 사용량·요금도 내려 줌 → 공개노트/기능/에너지와 이음 연동

관련

공개노트/개발/모듈/APW 연계 서버 공개노트/개발/모듈/SCW 스케줄러 서버 공개노트/개발/모듈/MAW 앱 API 서버 공개노트/개발/모듈/MAW 세대·헬스케어 API 공개노트/개발/시스템 구성 공개노트/기능/홈넷 서버 연동 공개노트/기능/에너지와 이음 연동 공개노트/개발/push 알림