Als Programmieranfänger würde ich um Unterstützung ersuchen.
Wenn ein Sensor schaltet würde ich gerne im LUA Code eine URL absenden.
Im Browser würde dies in der Adresszeile stehen, wie kann ich das mit LUA umsezten. Mir fehlt hier der Plan und meine Suche brachte auch keine Lösung.
Aber bräuchte ich nicht ein post um die url abzusenden. Wie gesagt bin ich Programmierneuling.
Bei request erwartet doch das Fibaro System was oder?
Hab es jetzt so versucht zu lösen, ging aber nicht.
--[[
%% properties
%% globals
--]]
local http = net.HTTPClient()
http:post('https://joinjoaomgcd.appspot.com/_ah/api/messaging/v1/sendPush?text=so wie jetzt fibaro&deviceId=xxx', {
success = function(resp)
if resp.status == 200 then
fibaro:debug(resp.status)
fibaro:debug('sollte gehen')
else
fibaro:debug(resp.status)
end
end
})
ich bekomme hier immer 400. Also eine Fehlermeldung.
xxx steht für eine device Nummer.
Möchte das ganze dafür nutzen, um Push Nachrichten an meine Android devices und Laptops zu senden. Die Idee kam mir bei dem Beitrag zu Pushbullet. Nur nutze ich JOIN, eine App für Android.
Wenn du ne 400er bekommst, dann gibt es die Seite so nicht. So wie es bei dir steht wird es auch nicht gehen, Leerzeichen können so nicht übertragen werden. Nimm dafür mal %20
Als neuer HC2-User wollte ich einen URL mit dem oben beschriebenen Code absetzen.
Ich bekomme aber die folgende Fehlermeldung:
[DEBUG]08:30:06: 401
Ich gehe davon aus, dass ich mit dem request das PW mitgeben muss.
Leider funktioniert das nicht mit der Methode “http:request('http://user:pw@10.0.1.111:80”
Gibt es andere Möglichkeiten mit dem Befehl “http:request” das PW mitzugeben?
Ich möchte bei einer D-Link Kamera DCS522l den Privacy-Mode ein- und ausschalten.
Im Browser funktioniert alles tip top, ausser dass ich mich auch da anmelden muss.
Nein, das funktioniert im Browser auch nicht, wenn ich den Befehl das erste mal im Browser absetze kommt ein Anmeldefenster.
Sobald ich mich da einmal angemeldet habe, kann ich beliebig oft den Befehl ohne PW absetzen.
Wenn es im Browser nicht funktioniert, dann funktioniert es auch mit dem http:request nicht. (Die vorangestellte User:PW-Kombination kann nur genutzt werden, wenn der Server die Seite über htaccess absichert) Deshalb bekommst du auch ein 401 zurückgeliefert. Du musst mal in der Doku schauen, ob man User/PW hinten an den Link anfügen kann.
Ok, ja sieht so aus, dass es mit dem http:request nicht funktionieren kann.
Habe im Internet ein API gefunden, in welchem steht, dass für die Autorization base64 encoding notwendig ist:
To query information of IP camera, use the syntax
GET http://<camera name>/<CGI-URL>?<parameter>=<value> HTTP/1.1<CRLF>
Authorization: Basic <basic-cookie><CRLF>
Host: <camera ip-adress><CRLF>
<CRLF>
where,
<CGI-URL> is a URL of a CGI. For example, get basic information is “/common/info.cgi”.
Authorization is optional for some CGIs.
<basic-cookie> is the base64 encoding of userid:password. (Notes: For some models, MD5 DIGET may be used.)
<CRLF> is Carriage Return and Line Feed (\r\n).
To set values in the IP camera, you may use HTTP GET method, the syntax is
GET http://<camera name>/<CGI-URL>
?<parameter>=<value>[&<parameter>=<value>…] HTTP/1.1<CRLF>
Authorization: Basic <basic-cookie><CRLF>
Host: <camera ip-adress><CRLF>
<CRLF>
or HTTP method POST, the syntax is
POST http://<camera name>/<CGI-URL> HTTP/1.1<CRLF>
Authorization: Basic <basic-cookie><CRLF>
Host: <camera ip-adress><CRLF>
Content-Type: application/x-www-form-urlencoded<CRLF>
Content-Length: <body length><CRLF>
<CRLF>
<parameter>=<value>[&<parameter>=<value>]
where,
<body length> is the length of the entity body.
<parameter> will be described in the following chapters. Valid characters only include alphabets([A-Za-z]), digits([0-9]) and
underline(_). There is no such restriction
Kann ich dann den Befehl mit HTTP GET oder tcp.socket absetzen?
Habe zu diesen beiden Funktion leider keine Beispiele gefunden, welche eine Authorization enthalten.
Oder bin ich da auch auf dem falschen Weg?
Besten Dank Hoggle für den Hinweis. Das mit dem Base64 ist mir nun klar.
Aber leider habe ich es noch nicht geschafft den Befehl mit HTTP GET abzusetzen.
Bin diesbezüglich noch auf der Suche nach Beispielen.
Jetzt habe ich es doch noch geschafft meiner D-Link Kamera einen Befehl zu senden.
Habe ein bisschen dieses Forum durchsucht und bin doch noch fündig geworden.
selfId = fibaro:getSelfId()
DLinkIP = fibaro:get(selfId, "IPAddress")
user = "admin"
pw = "Passwort"
DLink = Net.FHttp(DLinkIP)
DLink:setBasicAuthentication(user, pw)
response, status, errorCode = DLink:GET("/eng/admin/tools_admin.cgi?action=privacy")
if errorCode == 0
then
fibaro:log(status)
else
fibaro:log("error")
end
Besten Dank an alle für die Unterstützung.
Ich finde dieses Forum wirklich super, hat mir als HC2-Anfänger schon viele wertvolle Tips bereit gestellt.
klappt auch bei mir soweit prima - eine Frage noch:
Wie kann man aus einem VD einen HTML Aufruf absetzen?
Wenn ich o.g. Code eingebe bekomme ich bei "local http = net.HTTPClient() " die Fehlermeldung “net NIL Value”
Wäre toll wenn das irgendwie auch klappt. Ansonsten gehe ich den Umweg über eine globale Variable die im VD gesetzt wird und eine Scene triggert. Das habe ich getestet und das würde auch funktionieren. Wenn auch nicht sooo schön.