SwitchBotAPI icon indicating copy to clipboard operation
SwitchBotAPI copied to clipboard

SwitchBot Lock's webhook often fails to POST to servers

Open kazu-horikiri opened this issue 1 year ago • 1 comments

Analysis

We set up webhooks for SwitchBot Lock using SwitchBot API, but webhooks often (not always) fails to POST lock/unlock events, even if SwitchBot app on a smart phone captures all these events as Logs. We analyzed success rates of webhooks changing lock/unlock operation intervals from 2 sec to 30 sec, and compared them to the rates of IFTTT notifications and smart phone SwitchBot App logs. If intervals are longer than 3 sec, IFTTT (and SwitchBot App) captures all these events but webhooks fails to POST 25 to 70 percent of these events. Smart phone SwtichBot app captures all these event even if intervals are 2 seconds.

Our Hypothesis: We've identified at least 9 webhook callers (IP addresses) in ap-northeast-1.compute.amazonaws.com domain in our webhook server logs. Several webhook callers and/or load balancers of SwitchBot are not setup correctly, resulting webhook POST failures.

Expected Behavior

Webhook captures all events and POSTs to the webserver as a smart phone SwitchBot app logs and/or IFTTT notifications.

Steps To Reproduce

  1. Set up webhook server
  2. Set webhook URL using webhook configuration API https://api.switch-bot.com/v1.1/webhook/setupWebhook
  3. Enable Cloud Service for a SwitchBot Lock using smart phone app (Android/iOS)
  4. Set up IFTTT applets to notify unlock/lock events for comparisons
  5. Unlock/Lock the SwitchBot Lock using smart phone app or manually at regular intervals
  6. Check webhook, IFTTT and smart phone app log records

Logs

,Time,Operation,Webhook,IFTTT
Android App,13:40:00,unlock,success,success
Interval:30s,13:40:30,lock,,success
,13:41:00,unlock,,success
,13:41:30,lock,success,success
,13:42:00,unlock,success,success
,13:42:30,lock,success,success
,13:43:00,unlock,success,success
,13:43:30,lock,success,success
,13:44:00,unlock,success,success
,13:44:30,lock,success,success
,13:45:00,unlock,success,success
,13:45:30,lock,success,success
,13:46:00,unlock,success,success
,13:46:30,lock,success,success
,13:47:00,unlock,success,success
,13:47:30,lock,,success
,13:48:00,unlock,success,success
,13:48:30,lock,,success
,13:49:00,unlock,,success
,13:49:30,lock,success,success
,,Rate,0.75 ,1.00 
,,,,
,Time,Operation,Webhook,IFTTT
Manual,14:00:00,unlock,success,success
Interval:30s,14:00:30,lock,success,success
,14:01:00,unlock,,success
,14:01:30,lock,success,success
,14:02:00,unlock,success,success
,14:02:30,lock,,success
,14:03:00,unlock,,success
,14:03:30,lock,success,success
,14:04:00,unlock,,success
,14:04:30,lock,success,success
,14:05:00,unlock,,success
,14:05:30,lock,,success
,14:06:00,unlock,success,success
,14:06:30,lock,success,success
,14:07:00,unlock,success,success
,14:07:30,lock,success,success
,14:08:00,unlock,,success
,14:08:30,lock,success,success
,14:09:00,unlock,,success
,14:09:30,lock,,success
,,Rate,0.55 ,1.00 
,,,,
,,,,
,Time,Operation,Webhook,IFTTT
Manual,14:30:00,unlock,success,success
Interval:10s,14:30:10,lock,success,success
,14:30:20,unlock,,success
,14:30:30,lock,success,success
,14:30:40,unlock,,success
,14:30:50,lock,,success
,14:31:00,unlock,,success
,14:31:10,lock,success,success
,14:31:20,unlock,success,success
,14:31:30,lock,success,success
,14:31:40,unlock,success,success
,14:31:50,lock,success,success
,14:32:00,unlock,success,success
,14:32:10,lock,,success
,14:32:20,unlock,success,success
,14:32:30,lock,success,success
,14:32:40,unlock,,success
,14:32:50,lock,success,success
,14:33:00,unlock,,success
,14:33:10,lock,success,success
,,Rate,0.65 ,1.00 
,,,,
,,,,
,Time,Operation,Webhook,IFTTT
Manual,14:45:00,unlock,success,success
Interval:5s,14:45:05,lock,success,success
,14:45:10,unlock,,success
,14:45:15,lock,,success
,14:45:20,unlock,success,success
,14:45:25,lock,success,success
,14:45:30,unlock,,success
,14:45:35,lock,,success
,14:45:40,unlock,,success
,14:45:45,lock,,success
,14:45:50,unlock,,success
,14:45:55,lock,,success
,14:46:00,unlock,success,success
,14:46:05,lock,,success
,14:46:10,unlock,,success
,14:46:15,lock,success,success
,14:46:20,unlock,,success
,14:46:25,lock,,success
,14:46:30,unlock,,success
,14:46:35,lock,,success
,,Rate,0.30 ,1.00 
,,,,
,Time,Operation,Webhook,IFTTT
Manual,18:10:00,unlock,,success
Interval:3s,18:10:03,lock,,success
,18:10:06,unlock,,success
,18:10:09,lock,,success
,18:10:12,unlock,success,success
,18:10:15,lock,,success
,18:10:18,unlock,success,success
,18:10:21,lock,success,success
,18:10:24,unlock,,success
,18:10:27,lock,,success
,18:10:30,unlock,success,success
,18:10:33,lock,success,success
,18:10:36,unlock,,success
,18:10:39,lock,,success
,18:10:42,unlock,success,success
,18:10:45,lock,,success
,18:10:48,unlock,success,success
,18:10:51,lock,,success
,18:10:54,unlock,success,success
,18:10:57,lock,success,success
,,Rate,0.45 ,1.00 
,,,,
,Time,Operation,Webhook,IFTTT
Manual,15:00:00,unlock,success,success
Interval:2s,15:00:02,lock,,
,15:00:04,unlock,,
,15:00:06,lock,,
,15:00:08,unlock,,
,15:00:10,lock,,
,15:00:12,unlock,,success
,15:00:14,lock,success,
,15:00:16,unlock,success,
,15:00:18,lock,,
,15:00:20,unlock,,
,15:00:22,lock,,
,15:00:24,unlock,,
,15:00:26,lock,success,success
,15:00:28,unlock,success,
,15:00:30,lock,success,
,15:00:32,unlock,success,
,15:00:34,lock,,
,15:00:36,unlock,success,
,15:00:38,lock,,success
,,Rate,0.40 ,0.20

Configuration

We tried,
 https://pipedream.com/
 https://webhook.site/
for webhook servers.
Results are almost same.

Environment

  • OS: Windows11
  • Software: SwitchBot API 1.1 and crypto, https node modules
  • Node: v20.12.2
  • npm: 10.5.1

Additional Context

WebhookRate-20240507-2.csv

kazu-horikiri avatar May 07 '24 10:05 kazu-horikiri

Have you verified this isn't simply a rate-limit by the service? I don't personally have this issue and I use a server to relay my webhooks to my home server. I feel like it's more likely that either these servers are being rate-limited due to the nature of them being public-facing and switchbot likely gets a lot of requests to send to their IPs, resulting in IP-based rate-limiting.

ThatProgrammerr avatar Aug 25 '24 10:08 ThatProgrammerr