HTTPClient "PUT" übergibt keine Daten (HC3L)

Hallo,

Ich habe ein Homecenter 3 lite und möchte per HTTPClient einen „PUT“ - request an einen anderen Client senden.

Im HCL (2) habe ich das über ein virtuelles Modul gelöst.

Im Browser kann ich z.B folgende URL eingeben:
http://192.168.178.70:3777/hook/hc3l.php?Test=1.
Damit kann ich den Parameter Test=1 sauber auswerten.

Nun versuche ich in einem Lua-Script über HTTPClient diese Meldung abzusetzen. Leider bin ich da relativ erfolglos.

Tabelle = {ID = 44, Status = true, Power = 20, Energy = 2.601, Test = 1}
JTabelle = json.encode(Tabelle)

selfhttp = net.HTTPClient()
url = 'http://192.168.178.70:3777/hook/hc3l.php'
sendData = JTabelle
header = { 
    	    ["content-type"] = 'application/x-www-form-urlencoded; charset: UTF-8',
    	    ["content-type"] = "application/json"
  	      }

selfhttp:request(url, {
    options = {
        method  = 'PUT',
        headers = header,
        data    = sendData,
        timeout = 5000
    },
  
    success = function(response)
        print('response data: '..response.data)
        print('response status: '..response.status)
    end,        
})

Das aufgerufene PHP-Script wird ausgeführt und die Ausgaben des Programms werden über „success“ (response.data) zurückgemeldet. „response.status“ ist 200

Leider werden die übergebenen Daten nicht im Programm erkannt. Auch einfachere Datenpakete kommen nicht an (z.B. ‚{Test = 1}‘).

Ich habe alternativ auch diese vereinfachte Version versucht:

local http = net.HTTPClient()  
http:request('http://192.168.178.70:3777/hook/hc3l.php?Test=24', {
success = function(response)
    print('response data: '..response.data)
    print('response status: '..response.status)
end, 
})

Leider mit dem gleichen (negativen) Ergebnis.

Kann mir hier jemand helfen, wie ich die Daten übergeben kann?

vielen Dank
cervicor

Vielleicht statt 'PUT mal ‚POST‘ probieren.

nabend…vielleicht hilft dir das:

function QuickApp:onInit()
    self:debug("onInit")
end

local function urlencode(str)
    if str then
        str = str:gsub("\n", "\r\n")
        str =
            str:gsub(
            "([^%w %-%_%.%~])",
            function(c)
                return ("%%%02X"):format(string.byte(c))
            end
        )
        str = str:gsub(" ", "%%20")
    end
    return str
end

function QuickApp:talkText(params)
    local ipAddress = self:getVariable("ipAddress")
    params = urlencode(params)
    local url = "http://".. ipAddress .. "/alexa_tts/alexa.php?device_name=schlafzimmer&text_tts=" .. params
    print(url)
    local http = net.HTTPClient()
    http:request(url, { 
        options = { 
            method = "GET", 
            headers = {
                ['User-Agent'] = "Fibaro HC/3.0"
            },
            data = nil
        },
        success = function(response)
            if (response.status == 200) then
                -- func(json.decode(response.data))
                print(response.data)
            else
                self:error("Wrong status '"..response.status.."' in response!")
            end
        end,
        error = function(message)
            self:error("Connection error: " .. message)
        end
    })   
end

function QuickApp:onClickButton()
   self:talkText("Alexa Test Schlafzimmer")
end

in der QA noch eine Variable mit:„ipAddress“ für meinen Fall angelegt

Hallo jeep,

das habe ich auch schon versucht. Leider auch ohne Erfolg.

Hallo Sven,

Das muss ich mir erstmal durcharbeiten :wink:. MIt Lua fange ich gerade erst an…

Danke
cervicor

Hallo,

Danke für die Hilfe. Vor allem der Tipp mit dem QA hat einige Erkenntnisse gebracht.
Ich habe jetzt eine QA angelegt, die die Daten versenden kann. Soweit funktioniert es also.
Jetzt muss ich nur noch die Daten aus einer Szene in die QuickApp bekommen. Ich habe mir dazu mal einige Variablen in der QuickApp angelegt und versuche die aus einer Szene zu beschreiben.
Wenn ich nicht weiterkomme, werde ich wohl eine neue Frage aufmachen.

viele Grüße
Cervicor

fibaro.call(924, "talkText", push_text)	--Text wird an QA "SpeakME_Schlafzimmer" übergeben

924 ist meine QA