General question about SmartThings Edge architecture

I am someone who know a little about programming and have been using SmartThings for several years. So far, I have only been getting drivers from other developers. But recently, my router based presence detection stopped working due to end-of-life of groovy. Now I want to ask a few questions before investing my time into coming up with my own solution.

  1. My understanding is Edge Drivers are running on the local Hub, please correct me if I am wrong.
  2. Can Edge driver initiate communication with device on the LAN using IP protocols (e.g. TCP, HTTP)?
  3. Can Edge driver accept TCP or HTTP incoming connection from LAN devices?
  4. If the answer to either 2 or 3 is yes. Do I need to register myself with Samsung, in addition to the SmartThings/Samsung account, in order to develop Edge driver?

Hi @dish

Also, this documentation can help you:

2 Likes

Yes, but with caveats. It can listen and accept connections on a ephemeral port, but not a reserved port or one you define. Each time the driver (re)starts it will get a random port that its listening on. You can still connect to it, but you’ll need to notify the clients wishing to connect with that port using some other mechanism (mDNS, UPnP, registering the port somehow, etc).

That’s crazy! It feels like docker container but without the docker network. What is the point of that?! I will need another mechanism to notify the client the port I am listening on. I might as well just reach out to the client directly.

  • If two drivers wanted to listen on the same reserved port, what should the resolution be? There’s no UI to indicate this condition and configuration of this type of thing is more complex than ST should be for its user base. It’s not a general purpose computing device. Its sandboxed in this way for a reason.
  • There is also some security gained by obscurity. If a service listens on a known reserved port, it can more easily be identified/hacked/DDoS attacked, etc.

If you’re looking for a more general purpose automation platform, ST is probably not for you. Other platforms do have the ability to be more customized. Hubitat and Home Assistant are both good examples.

2 Likes

Easy! If one driver uses dynamic port, it will just restart and pick a different point. If both drivers require the same reserved port, just throw an error and let the user fix it. The driver should have a configuration so the user can pick a different port.

The SmartThings hub is not designed to be that level of flexibility for users. Theres no place for your “throw an error” UI. Support would be a huge pain for the level of consumer they are/were targeting with the hub.

Use a different platform.

I am not expecting Samsung will see my complaint and make changes to its platform.

I am just writing from a developer’s perspective that things don’t have to work that way. I am sure there is a way the driver can tell the platform that it failed to launch. The user can figure out through other means (e.g. documentation, troubleshoot guide) of how to fix it. Edge drivers I found here are mostly experimental / hacks. Users who deploy them are more tech savvy than average.

As a developer myself, I would disagree. They work the way this platform is supposed to work. Would I like more power tools, sure. But I also appreciate what the sandboxing of network connectivity provides and secures against. For integrations where I need more flexibility, I’ve used other platforms (like Hubitat or Control4.)

I would strongly disagree.

But we all have our opinions. I’m just saying this aspect of ST+hub+Edge is fine as its designed. :man_shrugging:

1 Like