취소
다음에 대한 결과 표시 
다음에 대한 검색 
다음을 의미합니까? 

제목:

Health Check에 대해 좀 더 정확한 설명 드립니다.

(게시글 작성 시간: 06-25-2020 08:32 AM)
600 보기
룰루해피
Active Level 7
옵션
SmartThings

Health check에 대해 서준Bixby님이 설명하신 내용 중

https://r1.community.samsung.com/t5/SmartThings/Health-Check%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA...

일부 맞지 않은 내용이 있어, 이에 대해 설명드리고자 글을 올립니다.

 

------------

 

Smartthings 클라우드에 연결된 기기가 제대로 연결이 되어 작동하는지 확인하는 것을 Health check라고 합니다.

https://smartthings.developer.samsung.com/docs/devices/health.html


위의 공식 문서에 따르면, 이는
- 기기의 연결 상태
- 신호의 세기
- 배터리
- 오류/Alert
등에 영향을 받습니다.


기기의 연결 상태는 3가지가 있습니다
- ONLINE : 기기가 요청에 응답하거나, 상태를 업데이트함.
- UNHEALTHY : 기기가 정해진 요청주기에도 상태를 보내지 않음.
- OFFLINE : UNHEALTHY상태의 기기가 요청에 응답하지 않음.

Smartthings 앱에서 먹구름표시로 나오는 것은 OFFLINE입니다.
속칭 가출이라고 합니다.


기기를 OFFLINE(가출)로 판단하는 데에는 대개 아래와 같은 절차를 거칩니다

 

1. 기기 페어링 후 configuration시, 기기에서 자발적으로 5분에 한번 상태 신호를 보내도록 합니다.

(DTH(smartthings 디바이스 핸들러) 소스코드를 보시다 보면, zigbee.onOffConfig() 같은 함수가 보이실텐데, 이게 기기의 전원 상태를 특정 시간 간격에 맞추어 자발적으로 리포팅하도록 설정하는 겁니다.)

그런 기능이 없는 기기 같으면, 서버에서 정기적 시간 간격, 예를 들어 5분간격으로 healthPoll()을 합니다.

 

2. checkInteval은 1번의 시간간격의 2배 약간 넘은 시간을 주로 설정하여,
checkInterval 시간동안 기기에서 그 어떤 신호조차 오지 않는 경우, 즉, 2번 연속 기기에서 아무런 소식이 없는 경우, UNHEALTHY상태가 되고,

마지막 최후 통첩인 ping()을 보냅니다

 

3. ping()에서도 답이 없으면, 기기를 최종 OFFLINE(가출)처리 합니다.

 

 

예를 들어 Smartthings의 zigbee멀티스위치의 디바이스핸들러 소스코드를 보겠습니다.

https://github.com/SmartThingsCommunity/SmartThingsPublic/blob/master/devicetypes/smartthings/zigbee...

 

- L24
capability "Health Check"
: Health Check를 하겠다고 선언합니다

 

- L189
runEvery5Minutes("healthPoll")
: 5분에 한번씩 기기 상태를 확인합니다

 

- L154~159
* PING is used by Device-Watch in attempt to reach the Device
: 기기의 상태를 마지막으로 확인하는 함수인 ping()함수를 정의합니다.


- L185/L190~191
// Device-Watch allows 2 check-in misses from device + ping (plus 2 min lag time)
Integer hcIntervalMinutes = 12
def healthEvent = [name: "checkInterval", value: hcIntervalMinutes * 60)
: checkInterval을 5분 * 2회 + 2분(오차 고려 2분추가)
즉, 기기가 5분에 한번씩 상태보고를 하는데, 이것이 2회 연속 도달하지 못하였을 때, (오차고려 2분 추가) 즉, 12분동안 한번도 기기에서 신호가 오지 않은 경우 ping()을 호출합니다
이 때 ping에서도 답이 없으면, 기기를 최종적으로 OFFLINE(가출) 처리합니다.

 

-----

간혹 Smartthings앱에서 OFFLINE(가출)처리가 되어 있지만, 기기가 작동이 되는 경우가 있습니다.

 

이는, 위와 같은 과정의 2회의 health poll 및 최후통첩인 ping에 응답하지 않아서 offline이 된 것이고

그 이후에 기기에서 신호를 보내서 작동은 다시 하지만, 그래도 offline처리된 것은 바뀌지 않기 때문입니다.

(smartthings허브 옵션에서 insecure rejoin 옵션이 켜져 있는 경우, 다시 돌아오기도 합니다)

 

이러한 경우에는, 2회의 health poll 및 최후통첩 ping()이 실패한 원인을 바로잡아야 하는데

즉, 이러한 상황에서는 기기의 배터리나, zigbee/zwave mesh network를 점검하셔야 됩니다.


-----

그럼 Health Check를 지원하지 않는 기기라는 것은 무엇일까요
이것이랑 Offline(가출)을 헤깔리시면 안 됩니다.

 

Smartthings 정식 지원기기 중 Health Check를 지원하지 않는 기기 중 대표적인 것이 IKEA 버튼입니다

 

Smartthings의 IKEA 버튼 소스코드를 보면서 설명드리겠습니다.
https://github.com/SmartThingsCommunity/SmartThingsPublic/blob/master/devicetypes/smartthings/ikea-b...

 

- L28
capability "Health Check"
: Health check관련 설정을 하겠다는 겁니다

 

- L156-157
// These devices don't report regularly so they should only go OFFLINE when Hub is OFFLINE
sendEvent(name: "DeviceWatch-Enroll", value: JsonOutput.toJson([protocol: "zigbee", scheme:"untracked"]), displayed: false)
: DeviceWatch-Enroll라는 변수를 zigbee untracked로 설정합니다.


이렇게 설정하면, 기기에서 정해진 시간동안 아무런 응답이 없더라도, zigbee untracked이기 때문에 OFFLINE(가출) 처리를 하지 않습니다.

 

즉, IKEA 버튼처럼 Health check를 지원하지 않는 기기일 경우, 기기 배터리가 다 떨어지거나 고장이 나더라도 오히려 시스템 상에서는 가출이 아닌 것으로 표시됩니다.

 

------

 

도움이 되셨길 바랍니다.

4 댓글
서준bixby
Expert Level 5
SmartThings
아 오류가 있었네요.
감사합니다.
SmartThings
아주 고급진 정보네요..
좋은 정보 공유해주셔서 감사합니다. 룰루해피님~ 😊
AinyPapa
Active Level 5
SmartThings
자세한 설명에 박수~ 👏👏👏
0 좋아요
BW라고해요
Active Level 4
SmartThings

해피님 여기서도 열일하시네요.

개몽시키기 어렵군요.

ㅜㅜ

0 좋아요