스마트 약통(?) - 투약시각 알리미
아들은 어려서부터 감기에 자주 걸렸다. 아빠가 알러지 체질이라 그런지, 아들도 비염기가 좀 있다. 그래서 환절기 즈음엔 '씨투스'라는 약을 아침 저녁으로 꾸준히 먹는데, 이게 효과를 발휘했는지 아니면 크면서 튼튼해졌는지 모르지만, 여튼 감기 걸리는 빈도는 현저히 낮아졌다.
그런데 지난 주말, 아들에게 코막힘 증상이 나타났다. 열도 꽤 났다. 지난 토요일 저녁에 씨투스를 깜빡하고 먹이지 않았던 것 같다. 한번 건너 뛴다고 갑자기 증상이 나타나지는 않겠지만, 왠지 찝찝했다. 약을 건너 뛰지 않기 위해 소소한 DIY를 해보았다.
아이디어는 이렇다. ①약을 통에 넣어둔다. ② 약통이 열린 시각과 현재 시각의 차이를 계산한다. ③ 아침 저녁으로 한번씩, 하루 두 번 먹어야 하니까 약통이 열린 지 10시간 정도 지나면 약을 먹지 않은 것으로 보고 알려준다.
적당한 통을 하나 구해왔다. 다이소에서 1500원에 산 케이스다. 캠핑용품이 모여 있는 곳에서 구했다.
그리고 Zigbee 통신을 하는 리드 스위치를 통 본체와 뚜껑에 나눠 붙이면 끝. 두 덩어리(?) 중 위의 것은 자석만 들어있고, 아래쪽엔 자석에 반응하는 스위치와 상태 정보를 전달해주는 통신 모듈 등이 들어있다.
원리는 간단하다. 두 개가 붙으면 '닫힘', 두 개가 떨어지면 '열림'으로 표시된다. 보통은 도어가 열려있는지 여부를 확인하기 위해 쓰인다. 우리집에도 현관 문에 하나, 베란다 문에 하나씩 달려 있다. 현관 문이 열릴 때마다 텔레그램 알림이 오도록 돼있어 가족 구성원이 집을 나오는 시각, 들어오는 시각을 알 수 있다. (물론 집에 아무도 없을 시각인데, 문이 열렸다면 누가 침입한 것이란 뜻인데, 그런 일은 없었다)
어쨌든 리드 스위치를 약통에 붙이고 zigbee2mqtt에 물려준 뒤 HomeAssistant에 템플릿 센서를 아래와 같이 넣어준다.
첫 번째 템플릿 센서는 약통에 붙인 리드 스위치의 상태가 변경된 지 얼마나 지났는지를 분 단위로 표시해주는 센서고, 아래 센서는 마지막으로 약통에 붙인 리드 스위치의 상태가 변경된 시각 자체를 알려주는 센서다. 그리고 HomeAssistant Lovelace에서 적당히 설정해주면, 대시보드에는 아래와 같이 표시된다.
여기까지만해도 약을 언제 먹었는지 알 수 있지만, 매번 HomeAssistant 앱을 켜는 게 아니므로, 알림을 주기로 했다. 처음엔 약 먹은 지 10시간이 지나는 것을 트리거로 알림을 설정했다. 하지만, 약 먹는 간격이 달라서 새벽에 알림이 오거나, 저녁 너무 이른 시간에 알림이 와서 정작 나중에 먹여야지 하고 있다가 까먹을 여지가 있었다.
그래서 알림 트리거를 시각으로 설정했다. 우선 오전 8시30분과 40분, 오후 9시와 9시 10분에 각각 알림을 설정했다. 단, 트리거 발동 조건은 약 먹은지(약통이 열린 지)240분 이상 됐을 때로 설정했다.
즉, 오전 8시 30분, 약통이 열린 지 4시간 이내라면 알림을 보내지 않고, 4시간 이상이라면 알림을 보내온다. 8시 30분에 알림을 받고도 무시(?)하고 먹이지 않으면 10분 뒤에 다시 알림이 온다. 그 사이 약통이 열렸다면, 당연히 약 먹은지 얼마나 됐는지를 기록하는 센서가 리셋됐을 것이므로 8시40분 알림은 오지 않게 되는 것이다.
참고로 텔레그램으로는 이런 식으로 메시지를 보내도록 했다.