Hei
Er det mulig å gjøre en POST-request med form-data?
Bakgrunn:
Forsøker å sette opp en enkel flyt for å kontrollere mine Somfy-solskjermer via en Connexoon-boks.
Det finnes et uoffisielt API som bl.a. brukes av Home Assistant, og et Python-prosjekt her: GitHub - dmaasland/python-tahoma-api: Async Python wrapper to interact with internal Somfy TaHoma API, or other OverKiz API's.
For min del trenger jeg egentlig bare å gjøre et login-kall med brukernavn/passord, etterfulgt av et kall med en kommando. Det fungerer fint via f.eks. Curl eller Postman.
Login:
curl --location --request POST 'https://tahomalink.com/enduser-mobile-web/enduserAPI/login' \
--form 'userId="xxx@xxx.no"' \
--form 'userPassword="xxx"' -v
Får da en Set-Cookie med en JSESSIONID i response header, som jeg kan bruke videre.
Lukk en solskjerm:
curl --location --request POST 'https://tahomalink.com/enduser-mobile-web/enduserAPI/exec/apply' \
--header 'Content-Type: application/json' \
--header 'Cookie: JSESSIONID=xxx' \
--data-raw '{
"actions": [{"deviceURL": "io://xxx", "commands": ["close"]}]
}'
Har også begynt på en flyt som fungerer bra så lenge jeg har en fersk JSESSIONID.
{
"Id": "up3cVaWmxToMz1h",
"ClassId": "dkUbz2L4rwiotuU",
"Author": "",
"Version": 0,
"CreatedAt": "2022-01-15T02:27:38.208780302+01:00",
"UpdatedAt": "2022-01-16T23:39:00.525098419+01:00",
"Name": "Solskjerm_venstre",
"Group": "Somfy",
"Description": "",
"Nodes": [
{
"Id": "1",
"Type": "trigger",
"Label": "Screen",
"SuccessTransition": "2",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:cmd/rt:dev/rn:flow/ad:1/sv:out_bin_switch/ad:up3cVaWmxToMz1h_0",
"Service": "barrier_ctrl",
"ServiceInterface": "cmd.tstate.set",
"Config": {
"ConnectorID": "",
"InputVariableType": "",
"IsValueFilterEnabled": false,
"LookupServiceNameAndLocation": false,
"PropFilterName": "",
"PropFilterValue": "",
"RegisterAsVirtualService": true,
"Timeout": 0,
"ValueFilter": {
"Value": null,
"ValueType": "string"
},
"ValueJPath": "",
"ValueJPathResultType": "",
"VirtualServiceGroup": "ch_0",
"VirtualServiceProps": null
},
"Ui": {
"nodeType": "",
"x": 150,
"y": 176
},
"TypeAlias": "Trigger",
"LastValue": "open"
},
{
"Id": "2",
"Type": "if",
"Label": "If open",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "",
"Operand": "eq",
"RightVariable": {
"Value": "open",
"ValueType": "string"
}
}
],
"FalseTransition": "4",
"TrueTransition": "3"
},
"Ui": {
"nodeType": "",
"x": 151,
"y": 356
},
"TypeAlias": "If condition"
},
{
"Id": "3",
"Type": "rest_action",
"Label": "Open screen",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Auth": {
"ClientID": "",
"ClientSecret": "",
"Enabled": false,
"GrantType": "",
"Scope": "",
"Url": "",
"userId": "",
"userPassword": ""
},
"Headers": [
{
"Name": "Cookie",
"Value": "JSESSIONID=<fjernet>"
},
{
"Name": "Content-Type",
"Value": "application/json"
}
],
"LogResponse": true,
"Method": "POST",
"RequestPayloadType": "json",
"RequestTemplate": "{\n \"actions\": [{\"deviceURL\": \"io://<fjernet>\", \n \"commands\": [\"open\"]}]\n}",
"ResponseMapping": [],
"Url": "https://tahomalink.com/enduser-mobile-web/enduserAPI/exec/apply"
},
"Ui": {
"nodeType": "",
"x": 32,
"y": 535
},
"TypeAlias": "HTTP msg"
},
{
"Id": "4",
"Type": "rest_action",
"Label": "Close screen",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Auth": {
"ClientID": "",
"ClientSecret": "",
"Enabled": false,
"GrantType": "",
"Password": "",
"Scope": "",
"Url": "",
"Username": ""
},
"Headers": [
{
"Name": "Cookie",
"Value": "JSESSIONID=<fjernet>"
},
{
"Name": "Content-Type",
"Value": "application/json"
}
],
"LogResponse": false,
"Method": "POST",
"RequestPayloadType": "json",
"RequestTemplate": "{\n \"actions\": [{\"deviceURL\": \"io://<fjernet>\", \n \"commands\": [\"close\"]}]\n}",
"ResponseMapping": [],
"Url": "https://tahomalink.com/enduser-mobile-web/enduserAPI/exec/apply"
},
"Ui": {
"nodeType": "",
"x": 306,
"y": 532
},
"TypeAlias": "HTTP msg"
}
],
"Settings": null,
"IsDisabled": false,
"IsDefault": false,
"ParallelExecution": "parallel"
}
Denne flyten lar meg legge til en solskjerm i appen og jeg kan styre den i noen minutter.
Det jeg forsøker er å sette inn en node som henter JSESSIONID før kommando-kallet, men jeg kan kun velge json eller xml som payload. Er det mulig å bruke form-data på et vis ved å kode dette rett i source, og hente data fra response header?
Så litt på å lage en app i Playground, som hadde vært den beste løsningen. Men foreløpig føler jeg det blir litt for omfattende og tidkrevende å sette meg inn i.