사물인터넷

서브 주제인 사물인터넷에 관한 다양한 이야기를 올려주세요.

제목홈어시스턴트 : 통합 구성요소 설정 (1)2022-01-12 23:37
작성자user icon Level 2

88x31.png


통합 구성요소의 설정은 2가지 방법으로 가능합니다.


이번 글에서는 1번째 방법으로 홈어시스턴트 설정파일인 configuration.yaml 파일을 통해 통합 구성요소를 설정해보겠습니다.


configuration.yaml 파일은 예전부터 사용된 설정 시스템으로 현재는 레거시 시스템으로 존재합니다.


지난 글에 만든 example_integration 통합 구성요소를 수정하겠습니다.

 $ cd /usr/share/hassio/homeassistant/custom_components/example_integration


컴포넌트 파일(__init__.py)을 열고 다음과 같이 수정합니다.

 $ sudo xed __init__.py

 """Example Integration Component"""


 import logging

 import voluptuous as vol


 from homeassistant.helpers import config_validation as cv


 DOMAIN = "example_integration"


 _LOGGER = logging.getLogger(__name__)


 CONFIG_SCHEMA = vol.Schema({

     vol.Optional(DOMAIN): {

         vol.Required("name", default="default_name"): cv.string

     }, extra=vol.ALLOW_EXTRA

 )



 def setup(hass, yaml_config):

     """example_integration integration setup"""


     _LOGGER.info(yaml_config)


     if DOMAIN not in yaml_config:

         return True


     config = yaml_config[DOMAIN]

     name = config.get("name")


     hass.states.set(f"{DOMAIN}.name", name)


     return True


mb-file.php?path=2022%2F01%2F12%2FF4469_1.png
 

configuration.yaml에 작성된 설정값은 컴포넌트 setup 함수의 2번째 매개변수로 전달됩니다.


로그 모듈인 logging과 유효성 검사 모듈인 voluptuous를 import 해주세요. 홈어시스턴트의 내장 모듈인 config_validation 모듈도 import 해주세요.

 import logging

 import voluptuous as vol


 from homeassistant.helpers import config_validation as cv


도메인 변수와 로거 변수를 정의해주세요.

 DOMAIN = "example_integration"


 _LOGGER = logging.getLogger(__name__)


홈어시스턴트에서 컴포넌트를 로드할때 CONFIG_SCHEMA 필드를 통해 유효성검사를 합니다. 유효성 검사에 대해서는 자세히 설명하지는 않겠습니다. 다음과 같이 작성하면 example_integration 통합 구성요소는 name이라는 키를 가지는 설정 데이터를 작성해야합니다. 작성되지 않으면 기본값으로 "default_name"이라는 문자열을 값으로 가집니다.

 CONFIG_SCHEMA = vol.Schema({

     vol.Optional(DOMAIN): {

         vol.Required("name", default="default_name"): cv.string

     }, extra=vol.ALLOW_EXTRA

 )


setup 함수를 정의합니다.

 def setup(hass, yaml_config):

     """example_integration integration setup"""


설정값을 확인해보기 위해 로그를 출력하도록 합니다.

 _LOGGER.info(yaml_config)


configuration.yaml 파일에 해당 도메인의 설정값이 없으면 True를 리턴하여 로드가 완료되었음을 알립니다.

 if DOMAIN not in yaml_config:

         return True


설정값이 존재하면 name키의 값을 구성요소(entity) 상태(state)로 설정합니다. 구성요소 id는 example_integration.name 입니다. 마지막에는 True를 리턴하여 로드가 완료되었음을 알립니다.

     config = yaml_config[DOMAIN]

     name = config.get("name")


     hass.states.set(f"{DOMAIN}.name", name)


     return True


홈어시스턴트 설정파일을 다음과 같이 수정합니다.

 $ sudo xed ../../configuration.yaml

mb-file.php?path=2022%2F01%2F12%2FF4470_2.png

logger값을 위에 사진처럼 작성해야 로그를 확인할 수 있습니다.


저장하고 홈어시스턴트 메인화면에서 구성하기 > 서버 제어 > 다시 시작하기 를 누릅니다.

mb-file.php?path=2022%2F01%2F01%2FF4448_3.png
mb-file.php?path=2022%2F01%2F01%2FF4449_4.png


구성하기 > 로그 > HOME ASSISTANT 로그 전부 불러오기 ​를 누르면 로그를 확인할 수 있습니다.

mb-file.php?path=2022%2F01%2F12%2FF4471_3.png
mb-file.php?path=2022%2F01%2F12%2FF4472_4.png
​딕셔너리 형태로 도메인을 키값으로 하여 설정값이 전달되었음을 확인할 수 있습니다.


홈어시스턴트 메인화면에서 개발자 도구 > 상태로 이동하면 example_integration.name 구성요소의 상태가 default_name으로 설정된 것을 확인할 수 있습니다. 

mb-file.php?path=2022%2F01%2F12%2FF4473_5.png
 

설정파일을 다음과 같이 설정해보고 홈어시스턴트를 재시작 한 후 상태를 확인해보세요.

 $ sudo xed ../../configuration.yaml

mb-file.php?path=2022%2F01%2F12%2FF4474_7.png
 

mb-file.php?path=2022%2F01%2F12%2FF4475_6.png
 

이번에는 플랫폼에 설정값을 전달해보겠습니다.

센서 플랫폼 파일(sensor.py)을 열고 다음과 같이 수정합니다.

 $ sudo xed sensor.py

 """Example Integration sensor platform"""


 import voluptuous as vol


 from homeassistant.helpers import config_validation as cv

 from homeassistatnt.components.sensor import PLATFORM_SCHEMA, SensorEntity


 PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({

     vol.Required("name", default="default_name"): cv.string

 })


 def setup_platform(hass, config, add_entities, discovery_info=None):

     """example_integration sensor platform setup"""

     name = config.get("name")

     add_entities([ExampleSensor(name)])



 class ExampleSensor(SensorEntity):

     """sensor platform class"""


     def __init__(self, name):

         """sensor init"""

         self._state = name


     @property

     def name(self):

         """return sensor name"""

         return '예제 센서'


     @property

     def state(self):

         """return sensor state"""

         return self._state


mb-file.php?path=2022%2F01%2F12%2FF4477_8.png
 

유효성 검사를 위해 voluptuous 모듈을 import 합니다.

홈어시스턴트에 내장된 config_validation 모듈과 sensor 모듈의 PLATFORM_SCHEMA 필드와 SensorEntity 클래스도 import 합니다.

 import voluptuous as vol


 from homeassistant.helpers import config_validation as cv

 from homeassistatnt.components.sensor import PLATFORM_SCHEMA, SensorEntity


플랫폼을 로드할때 PLATFORM_SCHEMA 필드를 통해 유효성 검사를 합니다.

sensor 컴포넌트의 PLATFORM_SCHEMA 필드를 extend 함수를 통해 name 키를 추가해줍니다.

 PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({

     vol.Required("name", default="default_name"): cv.string

 })


setup_platform 함수를 정의합니다.

 def setup_platform(hass, config, add_entities, discovery_info=None):

     """example_integration sensor platform setup"""


add_entities 함수를 통해 센서 구성요소를 추가합니다. 센서 클래스는 설정값 중에서 name키의 값을 매개변수로 받습니다. 

     name = config.get("name")

     add_entities([ExampleSensor(name)])


센서 클래스를 정의합니다. sensor 컴포넌트의 SensorEntity 클래스를 상속받도록 작성합니다.

 class ExampleSensor(SensorEntity):

     """sensor platform class"""


생성자를 작성합니다. state 필드를 전달받은 name키 값으로 설정합니다.

     def __init__(self, name):

         """sensor init"""

         self._state = name


프로퍼티 함수를 작성합니다.

     @property

     def name(self):

         """return sensor name"""

         return '예제 센서'


     @property

     def state(self):

         """return sensor state"""

         return self._state


저장후 홈어시스턴트 설정파일을 다음과 같이 수정합니다.

 $ sudo xed ../../configuration.yaml

mb-file.php?path=2022%2F01%2F12%2FF4478_9.png
 

홈어시스턴트 메인화면에서 개발자 도구 > 상태로 이동하면 sensor.yeje_senseo 구성요소의 상태가 스팟으로 설정된 것을 확인할 수 있습니다. 

mb-file.php?path=2022%2F01%2F12%2FF4479_10.png
 


#홈어시스턴트# HomeAssistant# 컴포넌트# component# 플랫폼# platform# configuration.yaml
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)