Https url: host or service not provided, or not known

I have tried this code in Lua on my Mac and it is working. I only changed

local https = socket.http

to

local https = cosock.asyncify 'ssl.https'

to move it on the hub.

I also tried:

local https = cosock.asyncify 'socket.http'

with the same result

result, code, rheaders, status = https.request {
            url = url,
            method = method, 
            headers = headers,
            source = source,
            sink = ltn12.sink.table(response_list)
        }

Now code that was working on my Mac is reporting this error:

host or service not provided, or not known

url is a public https site - no funky certs or intranets.

hub firmware version v44… since it looks like something changed around this stuff in 43…

Edge is 100% local, Private Network/IP addresses only.

It is not able to connect outside of Private IP address range.

Oy! does that mean I cannot connect to a cloud service? What is the alternative to connect to the internet for a device that needs to talk to the cloud?

Specifically, the groovy solution had allowed me to build this - and a number of folks still use it… the Edge one completely removed that capability - surely there must be an alternative?

No. Not with Edge driver.

It is self-hosted app.

Get Started with Cloud Connected Devices | SmartThings Developers

Send an email to SmartThings support to add support for connecting to non local IP’s, DNS and SSL (all of which have been disabled)

@nayelyz

2 Likes

will it help? I would like to join, this limitation is just laziness of the security team .
it’s too difficult to make the permission right , let’s just cut it out

1 Like

I just sent an email to build@smartthings.com - assuming that is the right place to send it to. This will basically break a bunch of stuff that is working in groovy world, when it is retired - I am sure my devices are not the only ones!

Agreed - The cloud connected device option is a non-option if you are not the manufacturer of the device - I don’t have a budget to run a cloud server? When all that is needed is to maybe create a whitelist of domains that are accessible?

It would be nice. But I doubt they’ll do it from a security standpoint. Maybe if they can waive liability of your hub get hacked for remote execution. The workaround is run another device locally that they aren’t responsible for and communicate with it.

This is a feature request that is not supported. Thank you for your communication, I will share this with our product team.

1 Like

I’d love to understand why internet requests are blocked. As it stands, I was able to stand up a local proxy for an internet server, so it’s clearly technically capable of making these requests. This sure puts a much larger burden on users for devices that require data from the internet.

In my case I’m querying the local power company’s hourly pricing API to control hub devices based on electricity prices. This worked on the groovy version.

1 Like

If not completely opening up the internet to devices, how about a new section in the config.yaml that can poke holes in the ‘firewall’ sort of speak?

I had offered a solution to SmartThings. Define specifically which domains and/or internet IP’s the driver will be working with in the package file. When when the user installs the driver, it should prompt the user to allow access to those domains and IP’s. This way the user know exactly what they’re agreeing to. If the driver updates the package in future with new domains it should block them until the user reinstalls the drivers. This would avoid any backdoor issues.

3 Likes

This seems like a very reasonable solution.

I’ve created a workaround for my driver using a local proxy. The proxy is written in Go and can be run anywhere on the local network (I run on an Intel NUC running Ubuntu). The driver uses UDP multicast to discover the proxy.

Code here: GitHub - idontusenumbers/smartthings-comed-driver