컨테이너를 다시 시작한 후 Home Assistant가 다른 상태를 재구성하는 이유는 무엇인가요?

에바 왕기술 작가 그리고 이자 ZimaSpace의 상주 장인입니다. 평생을 기술에 열정을 가진 사람으로서 홈랩과 오픈소스 소프트웨어에 열정을 가지고 있으며,복잡한 기술 개념을 쉽게 이해할 수 있는 실습 가이드로 번역하는 데 전문성을 가지고 있습니다.에바는 셀프 호스팅이 어렵지 않고 재미있어야 한다고 믿습니다. 그녀의 튜토리얼을 통해 커뮤니티가 하드웨어 설정의 신비를 풀도록돕고 있습니다. 첫 NAS 구축부터 Docker 컨테이너 마스터링까지.

Home Assistant 컨테이너를 다시 시작하면 영구 구성은 완전히 유지되고 있어도 시스템이 잠시 다르게 보일 수 있습니다. 실행 중인 인스턴스에는 디스크에 저장되는 영구 상태와 메모리에 있는 일시적인 런타임 상태가 함께 존재하기 때문입니다. 컨테이너를 다시 시작하면 후자는 사라지고 통합 구성 요소는 해당 상태를 다시 구축해야 합니다.

따라서 엔터티가 unknown 또는 unavailable 상태를 거칠 수 있고, MQTT 디바이스는 보존 메시지가 도착하자마자 다시 나타날 수 있으며, 외부 서비스는 재시도에 성공할 때까지 누락된 상태로 남을 수 있습니다. 컨테이너 재시작은 단순히 동일한 메모리 프로세스를 일시 중지했다가 재개하는 것이 아니라 상태를 재구성하는 이벤트입니다.

컨테이너 런타임은 교체 가능하며, /config는 영구 경계입니다

Home Assistant Container는 일반적으로 구성 마운트를 유지한 채 컨테이너 이미지를 다시 만들어 운영합니다. 영구 경로가 올바르게 연결되어 있다면 이미지를 업데이트하거나 런타임을 변경하거나 프로세스를 다시 시작해도 가정 환경을 처음부터 다시 구축할 필요가 없습니다.

현재 Home Assistant Container 워크플로에서는 버전을 변경할 때 컨테이너를 명시적으로 다시 만듭니다. 애플리케이션 상태가 폐기 가능한 런타임 외부에 저장된다고 가정하기 때문에 이러한 방식이 작동합니다.

프로세스 메모리에만 존재하는 모든 항목은 재시작 시 사라집니다. 새 프로세스는 동일한 라이브 뷰를 재구성하기 전에 구성, 레지스트리, 데이터베이스 및 통합 입력을 다시 읽어야 합니다.

Core는 새로운 런타임 상태 머신을 시작합니다

시작할 때마다 Home Assistant는 새로운 이벤트 루프, 상태 머신, 서비스, 타이머 및 통합 런타임 객체를 포함한 새로운 Core 프로세스를 구축합니다. 엔터티 레지스트리는 알려진 엔터티를 식별할 수 있지만, 실제 디바이스의 현재 값은 여전히 복원되거나 가져오거나 다시 보고되어야 합니다.

Recorder 역시 Home Assistant가 시작될 때마다 새로운 Recorder 실행을 생성합니다. 과거 데이터베이스 행은 유지되지만 현재 프로세스는 이전 실행의 연속이 아니라 새로운 런타임 구간입니다.

이 차이는 재시작 전후의 로그나 데이터베이스 타임스탬프를 비교할 때 중요합니다. 기록은 Home Assistant가 이전에 관찰한 내용을 보여주지만, 새 프로세스가 라이브 디바이스 연결을 이미 복구했다는 것을 자동으로 증명하지는 않습니다.

통합 구성 요소는 서로 다른 속도로 런타임 상태를 다시 채웁니다

일부 통합 구성 요소는 로컬 디바이스에 즉시 다시 연결합니다. 다른 구성 요소는 DNS, 브로커, 클라우드 API, 무선 브리지 또는 다른 컨테이너를 기다립니다. 따라서 Home Assistant Core 자체가 이미 실행 중이어도 엔터티를 사용할 수 있게 되는 시점은 서로 다릅니다.

Home Assistant의 현재 설정 실패 처리 방식에서는 일시적으로 사용할 수 없는 통합 구성 요소가 디바이스나 서비스에 다시 연결할 수 있게 될 때 복구하도록 재시도 경로에 진입해야 합니다. 따라서 재시작 후 표시되는 상태가 몇 분 동안 계속 변하더라도 영구 데이터가 변경되었다는 의미는 아닙니다.

모든 종속 서비스가 이미 준비된 후 두 번째로 재시작하면 네트워크, 브로커, 데이터베이스 및 디바이스가 동시에 준비될 필요가 없기 때문에 전체 스택을 재시작할 때보다 훨씬 빠르게 보일 수 있습니다.

MQTT에서는 상태 재구성이 특히 분명하게 나타납니다

MQTT는 브로커가 Home Assistant 프로세스와 독립적으로 디스커버리 메시지나 상태 메시지를 보존할 수 있기 때문에 유용한 예입니다. Home Assistant가 다시 연결되면 보존된 데이터가 재생되고 엔터티가 마지막으로 보고된 값을 빠르게 되찾을 수 있습니다.

MQTT 통합 문서에서는 재시작 후 디스커버리가 처리될 때까지 검색된 엔터티를 사용할 수 없으며, 구독이 다시 구축되는 동안 보존된 디스커버리 및 상태 메시지가 재생될 수 있다고 설명합니다. Home Assistant는 디바이스가 디스커버리와 최신 상태를 다시 게시하는 데 사용할 수 있는 Birth 메시지도 전송합니다.

보존된 값은 여전히 마지막으로 알려진 보고 값일 뿐이며 실제 디바이스에 현재 연결할 수 있다는 증거는 아닙니다. 가용성 토픽과 최신 텔레메트리는 별도로 평가해야 합니다.

재시작 동작은 소스 오브 트루스가 어디에 있는지에 따라 달라집니다

  • 영구 구성 및 레지스트리: Home Assistant의 영구 저장소에서 다시 읽습니다.
  • 현재 디바이스 상태: 통합 구성 요소가 다시 가져오거나 다시 보고하는 경우가 많습니다.
  • MQTT 상태: 보존 메시지나 새 게시 메시지를 통해 다시 구축될 수 있습니다.
  • 클라우드 기반 상태: 원격 API 연결 및 자격 증명에 따라 달라집니다.
  • 과거 상태: Recorder에 남아 있지만 라이브 상태와는 다릅니다.
  • 순수 런타임 객체: 새로운 Home Assistant 프로세스가 다시 생성합니다.

ZimaSpace의 재부팅 후 MQTT 상태에 대한 설명은 특정한 재구성 경로를 보여줍니다. 더 넓은 원칙은 각 구성 요소의 소스 오브 트루스가 있는 위치에 따라 재시작 동작이 결정된다는 것입니다.

FAQ

Home Assistant 컨테이너를 다시 시작하면 기록이 삭제되나요?

아니요. 영구 구성과 Recorder 데이터베이스가 올바르게 마운트되어 있다면 삭제되지 않습니다. 재시작은 런타임 프로세스를 교체할 뿐이며, 과거 데이터는 영구 데이터베이스에 남아 있습니다.

재시작 직후 엔터티에 이전 값이 표시될 수 있는 이유는 무엇인가요?

해당 값은 Home Assistant의 복원 메커니즘, 통합 구성 요소의 캐시, 보존된 MQTT 상태 또는 즉시 실행된 디바이스 폴링에서 비롯되었을 수 있습니다. 표시된 값이 실제 디바이스에서 새로 읽은 값이라고 판단하기 전에 통합 구성 요소와 가용성 경로를 확인하세요.

기술 및 AI 허브

더 읽어보기

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.