I not a programmer but sometimes I play one at work.
Can someone tell me how to properly format an http get request in a smart app? I just need to hit a url. I think I knew at some point but I am a struggling and can’t get anything to work.
I not a programmer but sometimes I play one at work.
Can someone tell me how to properly format an http get request in a smart app? I just need to hit a url. I think I knew at some point but I am a struggling and can’t get anything to work.
Great info here: https://community.smartthings.com/search?q=httpget
And for some more detail (maybe too much), I went to my Honeywell Thermostat device type and copied this for your enjoyment:
def params = [
uri: "https://mytotalconnectcomfort.com/portal/Device/CheckDataSession/${settings.honeywelldevice}",
headers: [
'Accept': '*/*',
'DNT': '1',
'Accept-Encoding': 'plain',
'Cache-Control': 'max-age=0',
'Accept-Language': 'en-US,en,q=0.8',
'Connection': 'keep-alive',
'Host': 'rs.alarmnet.com',
'Referer': 'https://mytotalconnectcomfort.com/portal',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36',
'Cookie': data.cookiess ],
]
httpGet(params) { response ->
log.debug "Request was successful, $response.status"
response.headers.each {
log.debug "${it.name} : ${it.value}"
}
// log.trace("Response ${response.data}") //don't run if there are alerts, too much data
def curTemp = response.data.latestData.uiData.DispTemperature
I recind my comments based on additional post …
It depends if you have a local or external IP that you’re trying to go to. If its an external IP or website then you use the httpGet command. If it’s a local IP you use hubAction in order to pass the commands.
Right - I got that - Is the syntax of using either That I think I’m lost with…
If internal url - can I just do
def result = new physicalgraph.device.HubAction(
method: “GET”,
path: “/(path)”,
headers: [
‘HOST’: “ip:port”,
]
)
log.trace result
sendHubCommand(result)
For hubAction you need to set your device network ID to the IP:Port in hex and then you need to return hubAction within the function that calls the function that contains it (confusing, I know). Check my DCS-930L devicetype for an example: https://github.com/blebson/D-Link-DCS-930L/blob/master/DCS-930L.groovy
Hi All,
I really need some help.
I need to know how to create a “Http Get” command for this url “http://192.168.2.201:80/enado/api/core/Triggers/13/?auth_token=4fa28c87e845c996efa2819108444fd0”
If this can be done we can control any of the following devices using Amazon Echo within a second.
Televisions
Set Top boxes
Blu ray players
Apple TV
Relays
RS232
Telnet
the list go on.
I have it working with IFTTT however it takes up to 10 seconds to change the television channel or Sky.
Thanks
Mark
Here is an example of working code:
def checkStatus(){
httpGet(uri: "https://api.particle.io/v1/devices/${deviceId}/checkStatus1?access_token=${token}",
contentType: 'application/json',)
{resp ->
log.debug "resp data: ${resp.data}"
log.debug "result: ${resp.data.result}"
sendEvent(name: "switch", value: "${resp.data.result}" )
}
}
My json that returned was formatted with data as the main header and then result as the body.
I don’t think you can use httpGet for local network calls. You have to use hubAction instead. From what I read it’s because httpGet executes from the cloud while hubAction executes from the hub.
Yeah I was responding to @mrbloke2016. He was asking about an external call. You are correct hubAction is required for LAN based requests.
CoRE does that internally - if you make a web request and provide a local IP, it will use the proper way to reach it. Look into CoRE’s source, around line 7600.
Code excerpt:
try {
sendHubCommand(new physicalgraph.device.HubAction(
method: method,
path: (uri.indexOf("/") > 0) ? uri.substring(uri.indexOf("/")) : "",
headers: [
HOST: (uri.indexOf("/") > 0) ? uri.substring(0, uri.indexOf("/")) : uri,
],
query: data ?: null
))
} catch (all) {
debug "Error executing internal web request: $all", null, "error"
}
Simplified (without variables), it should look like:
try {
sendHubCommand(new physicalgraph.device.HubAction(
method: "GET",
path: "/enado/api/core/Triggers/13",
headers: [
HOST: "192.168.2.201:80",
],
query: "auth_token=4fa28c87e845c996efa2819108444fd0"
))
} catch (all) {
debug "Error executing internal web request: $all", null, "error"
}
Try with and without the :80 in the host, see what works. Also, you may try to move the query into the path with a ? if that doesn’t work, but it should. Good luck.
Your the Master, you helped me again. I bow to you.
Hello, i have a Raspberry PI 3 local ip 10.0.0.68 and i want to be able to run a script i have at http://10.0.0.68/runEventScript.php?scriptName=StartPlaylist.sh when my samsung motion detector is active. My motion detector is integrated in my ST Hub. Can you help me out please? Thanks
I know this is an old post, but I’m trying to do something similar.
I have the above compiling when I save the code, and I’m able to publish it to my apps. I can then go into the smartthings app on my phone, and pull it down, but I can’t figure out how to trigger the smartapp. What am I missing?
thanks,