http command senden

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.

Die zu sendente URL sieht so aus.
https://xxx.xxx.com/_ah/api/messaging/v1/sendPush?text=so passt es&deviceId=xxx

Für eine Unterstützung wäre ich dankbar

Andilee

--[[
%% properties

%% globals
--]]
local http = net.HTTPClient()  
  http:request('https://www.siio.de', {
      success = function(resp)
        if resp.status == 200 then
          fibaro:debug(resp.status)
          
        else
          fibaro:debug(resp.status)
       
        end
      end
    })

Vielen Dank für die schnelle Antwort.

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.

Danke

Andilee

Das ist ein Post-Befehl :wink:

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

Gruß

Vielen DANK!

Jetzt klappt es und ich bekomme die Push Nachricht auf mein Android oder PC.

Hier mein Code wie er jetzt funktioniert.

--[[
%% properties
%% globals
--]]
local http = net.HTTPClient()  
   http:request('https://joinjoaomgcd.appspot.com/_ah/api/messaging/v1/sendPush?text=passt%20jetzt%20fibaro&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
    })

Werde mal alle meine Push-Nachrichten, die nie richtig funktioniert haben, durch diese Variante ersetzen.

DANKE nochmals für die promte Unterstützung.

Andilee

Hallo

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?

Für jegliche Unterstützung wäre ich sehr dankbar.

Gruss Paddy

Hi,

was ist denn das für ein System, welches du ansprechen willst? Funktioniert der Aufruf im Browser?

Gruß

Hallo

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.

Gruss Patrick

Hi,

kannst du da die User:PW-Methode nutzen? Oder funktioniert das da auch nicht?

Gruß

Hallo

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.

Gruss Paddy

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. :wink: Du musst mal in der Doku schauen, ob man User/PW hinten an den Link anfügen kann.

So zum Beispiel (nur vom Aufbau):

cgi-bin/CGIProxy.fcgi?cmd=ptzMoveRight&usr=USER&pwd=PASSWORD

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?

Gruss Paddy

Wegen dem Base64 schau mal hier:

http://forum.fibaro.com/index.php?/topic/15758-set-the-value-of-a-variable-via-api-http-command/?hl=base64#entry39125

Post Nr 17

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.

Hallo

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.

Gruss Paddy

Hallo zusammen,

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.

Danke und schöne Grüße
Hubertus

Selbiges Problem bei mir

bitte löschen