KMA Weather는 대한민국 기상청(KMA) 단기예보 OpenAPI를 이용해 Home Assistant에 현재 날씨, 시간별 예보, 일별 예보를 제공하는 custom integration입니다.
HACS Custom Repository로 설치할 수 있도록 구성되어 있습니다.
- 기상청 초단기실황
getUltraSrtNcst조회 - 기상청 초단기예보
getUltraSrtFcst조회 - 기상청 단기예보
getVilageFcst조회 - 위도/경도를 기상청 DFS 격자(
nx,ny)로 자동 변환 - Home Assistant
zone엔티티를 이용한 설정 - 시간별 예보 / 일별 예보 제공
- 일시적 API 장애 시 마지막 정상 데이터를 유지하는 실패 허용 로직
- HACS 설치를 위한
brand/자산 포함
이 integration을 사용하려면 먼저 data.go.kr에서 기상청 OpenAPI 활용 신청을 하고 서비스 키를 발급받아야 합니다.
준비물:
data.go.kr계정- Home Assistant 설정에서 생성한 지역(
zone) - 발급받은 기상청 API 서비스 키
기본으로 필요한 API:
기상청_단기예보 조회서비스
환경 구성에서 선택적으로 확장할 수 있는 추가 API:
기상청_생활기상지수 조회서비스(3.0)한국환경공단_에어코리아_대기오염정보기상청_꽃가루농도위험지수 조회서비스(3.0)기상청_중기예보 조회서비스
아래 절차는 공공데이터포털(data.go.kr)에서 기본 API인 기상청_단기예보 조회서비스를 처음 신청하는 기준으로 정리했습니다.
https://www.data.go.kr에 로그인합니다.- 검색창에서
기상청 단기예보 조회서비스또는VilageFcstInfoService_2.0관련 API를 찾습니다. - 상세 페이지에서 제공 형식이
OpenAPI인지 확인합니다. - 활용 목적과 애플리케이션 정보를 입력해
활용신청을 진행합니다. - 신청이 승인되면 마이페이지 또는 해당 API 상세 화면에서
일반 인증키(Encoding)/일반 인증키(Decoding)를 확인할 수 있습니다. - Home Assistant 설정 화면에는 보통
Decoding키를 넣는 것이 가장 덜 헷갈립니다.
실제로 많이 막히는 지점:
-
신청 직후 바로 호출되지 않을 수 있습니다. 승인까지 약간의 시간이 걸릴 수 있으니, 호출이 실패하면 잠시 후 다시 확인하는 편이 좋습니다.
-
같은 API 이름처럼 보여도 세부 서비스가 다를 수 있습니다. 이 integration은 기상청 단기예보 계열 API를 전제로 작성되어 있으므로, 초단기실황/초단기예보/단기예보를 포함하는 서비스인지 확인해야 합니다.
-
Encoding키를 그대로 붙여 넣으면 호출 URL에서 다시 인코딩되며 실패하는 경우가 있습니다. 설정값으로는Decoding키를 사용하는 편이 안전합니다.
권장 확인 순서:
- API 상세 페이지에서
활용신청완료 여부를 확인합니다. 일반 인증키(Decoding)를 복사합니다.- data.go.kr 제공 테스트 화면이나 샘플 호출에서 응답이 정상인지 확인합니다.
- 그다음 Home Assistant integration 설정에 같은 키를 입력합니다.
추가 API를 쓰고 싶다면:
- 같은
data.go.kr서비스 키를 재사용합니다. - 대신 사용하려는 각 OpenAPI 서비스는 별도로
활용신청해야 할 수 있습니다. - 즉, 키를 새로 발급받는 개념보다
원하는 API 서비스에 대한 사용 승인이 되었는지가 중요합니다.
이 integration은 Home Assistant에 등록된 지역(zone) 정보를 사용합니다.
권장 방식은 Home Assistant 설정 화면에서 지역을 생성하고, 해당 지역에 정확한 위도/경도를 입력하는 것입니다.
일반적인 흐름:
- Home Assistant
설정에서 지역(zone)을 생성합니다. - 지역 이름을 정하고, 사용할 위치의 정확한 위도/경도를 입력합니다.
- 이 integration 설정 시 해당 지역을 선택합니다.
- 선택한 좌표를 기준으로 기상청 DFS 격자(
nx,ny)를 계산합니다. - 같은 좌표를 기준으로 공공데이터에서 제공하는 위치/행정구역 후보를 매핑합니다.
- 매핑된 후보 중 가장 적절한 지역을 선택해 생활기상지수 등 부가 데이터를 연결합니다.
즉, 사용자는 Home Assistant 안에서 위치를 관리하고, integration은 그 위치 좌표를 기준으로 기상청 예보 격자와 공공데이터 행정구역을 연결하는 방식입니다.
- HACS에서
Integrations로 이동합니다. - 우측 상단 메뉴에서
Custom repositories를 엽니다. - 저장소 URL에
https://github.com/baeksj/ha-kma-weather를 입력합니다. - Category는
Integration으로 선택합니다. KMA Weather를 검색해 설치합니다.- Home Assistant를 재시작합니다.
설정 → 기기 및 서비스 → 통합 추가에서KMA Weather를 추가합니다.
설정 시 입력값:
- API key:
data.go.kr에서 발급받은 서비스 키 - Location name: Home Assistant에 표시할 이름, 비워두면 기본 이름 사용
- Zone: 설정에서 생성한 Home Assistant 지역(
zone)
기본 설치가 끝나면 설정 > 기기 및 서비스 > KMA Weather > 구성에서 추가 API를 선택적으로 연결할 수 있습니다.
환경 구성 화면의 select 항목은 다음 용도로 사용됩니다.
- 어떤 공공데이터 API를 추가로 사용할지 선택
- 해당 API를 사용하려면
data.go.kr에서 어떤 서비스를 활용신청해야 하는지 안내 - 적용 후 어떤 센서가 새로 생성되는지 안내
즉, 최초 설치는 기본 날씨 기능 중심으로 끝내고, 이후 환경 구성에서 필요한 기능만 켜는 구조입니다.
추가 API 목록:
기상청_생활기상지수 조회서비스(3.0)- 안내 내용: 자외선지수, 대기확산지수용 API라는 점을 표시
- 추가 센서 예시:
KMA UV Index,KMA Air Diffusion Index
한국환경공단_에어코리아_대기오염정보- 안내 내용: 대기질 관련 API라는 점을 표시
- 추가 센서 예시: 미세먼지, 초미세먼지, 통합대기환경지수 계열
기상청_꽃가루농도위험지수 조회서비스(3.0)- 안내 내용: 꽃가루 위험도 관련 API라는 점을 표시
- 추가 센서 예시:
KMA Pine Pollen Risk,KMA Oak Pollen Risk,KMA Weed Pollen Risk
기상청_중기예보 조회서비스- 안내 내용: 중기예보 확장용 API라는 점을 표시
- 추가 센서 예시:
KMA Mid-term Forecast Summary,KMA Mid-term Min Temperature,KMA Mid-term Max Temperature
현재 구현 기준:
- 기본 API
기상청_단기예보 조회서비스는 설치 시 사용됩니다. - 추가 API 중 현재 환경 구성에 실제 연결된 항목은 아래 4개입니다.
기상청_생활기상지수 조회서비스(3.0)→KMA UV Index,KMA Air Diffusion Index한국환경공단_에어코리아_대기오염정보→AirKorea Station,AirKorea PM10,AirKorea PM2.5,AirKorea O3,AirKorea NO2,AirKorea CO,AirKorea SO2,AirKorea Integrated Air Quality Index기상청_꽃가루농도위험지수 조회서비스(3.0)→KMA Pine Pollen Risk,KMA Oak Pollen Risk,KMA Weed Pollen Risk기상청_중기예보 조회서비스→KMA Mid-term Forecast Summary,KMA Mid-term Min Temperature,KMA Mid-term Max Temperature
- 이 저장소의
custom_components/kma_weather디렉터리를 Home Assistant 설정 디렉터리의custom_components아래로 복사합니다. - Home Assistant를 재시작합니다.
설정 → 기기 및 서비스 → 통합 추가에서KMA Weather를 추가합니다.
- 설정에서 선택한 지역(
zone)의 위도/경도를 읽습니다. - 해당 좌표를 기상청 DFS 격자로 변환합니다.
- 같은 좌표를 기반으로 공공데이터 위치/행정구역 코드를 가장 가깝게 매핑합니다.
- 초단기실황, 초단기예보, 단기예보 API를 순차 호출합니다.
- 현재 날씨와 시간별/일별 예보를 weather 엔티티로 노출합니다.
API가 일시적으로 실패해도 바로 엔티티를 unavailable로 바꾸지 않고, 마지막 정상 데이터를 일정 횟수까지 유지합니다.
- 기본 연속 실패 허용 횟수:
3 - 옵션에서 변경 가능
- 허용 횟수 미만이면 마지막 정상 데이터 유지
- 허용 횟수 이상이면 coordinator 갱신 실패로 처리
관련 속성:
consecutive_failuresfailure_tolerancedata_stale
- 설정 시 Home Assistant 지역(
zone)이 반드시 필요합니다. - 선택한 지역의 좌표를 나중에 변경해도 기존 config entry에 즉시 자동 반영되지는 않을 수 있습니다.
- 주소 검색 기반 설정 UX는 아직 포함되어 있지 않습니다.
- 기상청 응답값의 일부 세부 카테고리 매핑은 계속 보강할 수 있습니다.
저장소 루트에서 아래 명령으로 간단한 문법 확인을 할 수 있습니다.
python3 -m compileall custom_components/kma_weathercustom_components/kma_weather/manifest.json의version을 새 태그와 맞춥니다.- Git 태그와 GitHub Release 버전을 동일하게 맞춥니다.
- GitHub 저장소 description과 topics를 설정합니다.
- HACS에서 읽는
hacs.json의 Home Assistant 최소 버전을 실제 지원 범위와 맞춥니다.
권장 GitHub topics:
home-assistanthacscustom-integrationweatherkmakorea
- 공공데이터포털:
https://www.data.go.kr - 기상청 단기예보 계열 API는 발표 시각과 실제 조회 가능 시각 사이에 지연이 있을 수 있습니다.
- 실제 운영 시에는 테스트 키보다 운영에 사용할 키를 별도로 관리하는 편이 안전합니다.