회사 화분에 주기적으로 물주기 (AWS IoT 버튼 활용 사례)

물줬어요 AWS IoT 버튼

최근에 당근마켓 사무실이 서초역 근처로 이사를 하면서 회사에 화분 여러 개가 생겼습니다. 사실은 화분에 물 주기 고민은 이사 전부터 있었는데요. 회사 화분들에 주기적으로 적절히 물을 잘 주기가 생각보다 어렵다는 것입니다.

회사의 화분들

실제로는 물 주기가 어렵다기보다는 팀원 중에 누가 물을 주었는지, 언제 주었는지 모르기 때문에 어려움이 있습니다. 그래서 누군가가 암묵적으로 담당자가 되고 그 한 사람이 계속 물을 주게 됩니다. 어려운 일은 아니지만, 회사를 이쁘고 화사하게 보이게 하는 중요한 식물들, 화분들을 팀에서 다같이 물을 줄 수 있으면 좋겠다고 생각해 왔습니다. 다 같이 참여하는 것이 좋겠다고 생각한 것이지요. 그런데 그 방법을 고민하던 중에 AWS IoT 버튼을 알게 되었고, 이렇게 활용하면 좋겠다고 생각했습니다.

물을 준 사람이 이 버튼을 누르고, 1주일~10일 후에 Slack으로 누군가에게 물 주라고 알려주면 되겠네!

생각보다 쉽게 구현할 수 있겠다 싶었습니다.

AWS IoT 버튼은 WiFi에 연결된 하드웨어 버튼인데 이것을 누르면 AWS Lambda 함수를 실행할 수 있습니다. 그래서 슬랙으로 뭔가 메세지를 전송할 수가 있는 것이죠. (AWS IoT 버튼 참고: https://aws.amazon.com/ko/iotbutton/)

그래서 간단한 코딩을 해보기로 했습니다.

크게 보면 두 가지 Task가 있습니다.

  1. 물줬어요 버튼
  2. 물주세요 알림

화분에 물을 준 사람은 잊지 말고 이 버튼을 한번 눌러주기만 하면 됩니다. 그러면 회사 서버에 전송이 되고 redis에 물을 줬다는 flag 하나를 생성합니다. 이 flag의 생명은 8일입니다.

redis_val = Redis::Value.new("water_the_flower_pot_at", expiration: 8.days, marshal: true)

물주세요 알림은 cronjob에 등록되어 주기적으로 이 flag가 있는지 없는지 살피고, 없을 경우 Slack으로 총 10명 팀원 중에 랜덤 2명에게 물을 주라고 알려줍니다. 누가 걸릴지는 모릅니다. 지난주에 걸린 사람이 또 걸려도 몰라요. ㅎㅎ

users = [:paul, :gary, :seapy, :kai, :phoebe, :blair, :ed, :lucy, :wayne, :ben]
assign_text = users.sample(2).map{|e| "<@#{e}>"}.join(', ') # 2명 랜덤
msg = "#{assign_text} 두분이 물 주세요."

대략 아래와 같이 슬랙이 옵니다.

랜덤으로 2명 지정해서 보내는 “물주세요” 슬랙 Bot 메세지

그냥 8일짜리 timer로 슬랙알림을 바로 쏘지 않고, 이렇게 주기적인 crontab job으로 확인하는 이유는 주말을 피하기 위해서죠. 주중(월~금)에 일과시간에 알려줘야 합니다. 주말이나 밤에 알려주면 안 되니까요. 그래서 아래와 같은 crontab을 등록하게 됩니다. 월~금요일에 9시, 11시, 13시, 18시 55분에 물을 주라는 알림을 줄지말지 flag를 채크하는 것입니다.

every '55 9,11,13,18 * * 1,2,3,4,5', roles: [:batch2] do
rake "temp:check_water_the_flower_pot"
end

여기에서 랜덤으로 지정된 두 분이 화분에 물을 줘야 합니다. 화분에는 라벨기로 이름을 붙여둡니다. 보통 선물 받은 경우에는 선물해준 분의 이름으로 적어둡니다.

거의 3년째 키우고 있는 화분
최근에 선물 받은 화분들

물을 다 주고 나서는 드디어 AWS IoT 버튼을 누릅니다! 그러면 슬랙으로 아래와 같은 메세지를 하나 보내주고, redis에 flag를 만들어 두는 것이지요.

“물줬어요” AWS IoT 버튼을 누르면 오는 슬랙 메세지

(원래 밥돌이는 밥시간을 알려주는 봇이기는 합니다만.. 이제 화분도 챙겨야죠 ㅋ)

이제 화분들이 물을 못먹거나 많이 먹을 일이 없겠죠?

반복적인 일이나 작은 고민이라도 기술적으로 해결해보고 싶어서 이렇게 해봤는데요, 아직 미해결과제가 하나 있습니다. 물주는 주기가 다른 화분들이 생기고 있어요. 스투키 같은 종은 한 달에 한번씩 줘야 하는 화분이네요.-_-

참고로 AWS IoT 버튼 활용 사례는 유투브를 찾아보면 꽤 나옵니다. 제가 본것 중에는 아이를 키우는 집 엄마가 아이에게 저녁 먹으러 들어오라는 SMS를 보내는 것을 이 버튼으로 보내더라고요.

괜찮은 AWS IoT버튼 활용 아이디어가 생각나시면 알려주세요!

PS. 지금 당근마켓에서 개발자를 모시고 있습니다. 채용공고를 살펴봐주세요.