即使所有交互都是本地的,SmartApps 运行 也会远程吗?

Do SmartApps run remotely even when all interactions are local?

我正在尝试让我的 SmartApp 与我公司的本地 REST 服务器通信。此 REST 服务器不可从外部访问。为了缩小问题的范围,我创建了一个与 REST 服务器交互的 groovy 程序。我已经在我自己的电脑和同事的电脑上执行了这个,他们都能够按预期访问 REST 服务器。当我尝试从我的 SmartApp 访问 REST 服务器时(使用 SmartThings httpGet() 函数),我只收到 ConnectionTimeoutExceptions。我的 SmartApp 是从外部角度执行的吗?

从 smartthings 文档中,除智能家居监视器和智能灯之外的所有应用程序 运行 远程 (https://support.smartthings.com/hc/en-us/articles/209979766-Local-processing)。

Smart Home Monitor and Smart Lights are the only SmartApps with local processing capabilities at this time. We are working on additional local SmartApp options.

这就是为什么您无法从智能应用程序访问本地服务器的原因。

但是你能做的就是反其道而行之。您可以让本地服务器调用您的 smartApp(通过使用 WebServices SmartApp),而不是让您的 SmartApp 在本地服务器上调用。

也许它不符合您的需要,但您可以想象以下工作流程:

  1. 您的本地服务器在 GET /needs 上每分钟调用您的 SmartApp。
  2. 您的 SmartApp return 它所需要的。
  3. 您的本地服务器发送需要的查询POST /result

您可以想象一个更好的流程,但这只是一个示例。