http get request

  • Wo ist das Problem? Du hast doch bereits mindestens 2 andere Threads erstellt in denen es ebenfalls um die Automatisierung von Webseiten ging. Ohne diese Threads nochmal gelesen zu haben würde ich vermuten, dass du sowohl auf die Funktionen der ie.au3 als auch auf die UDF winhttp.au3 hingewiesen wurdest. Für einfache GET Requests braucht man aber nicht wirklich die winhttp.au3 und prinzipiell noch nicht einmal die ie.au3. Man kann stattdessen auch einfach nur die URL im Standardbrowser öffnen oder was vielleicht noch wesentlich eleganter wäre wäre wohl der Einsatz von inetread.

    EDIT:
    Man sollte AVM vielleicht auch mal darauf hinweisen, das die externe Referenz bzgl. dem Aufbau der SID in ihrer Dokumentation auf einen nicht (mehr) existierenden Link verweist...

    2 Mal editiert, zuletzt von misterspeed (21. November 2014 um 19:31)

  • ok dann liegt es wohl doch an der Sensor id warum ich die Steckdose nicht schalten kann. Ich wusste nicht genau was mit http get request gemeint ist.
    Dann muss ich mal schauen warum es nicht geht.

  • SID steht nicht für Sensor ID sondern für Session ID. Dieser Teil des GET commandos wird sich also vermutlich bei jedem Aufruf der API ändern. Ohne Dokumentation der Session ID kann man aber kaum etwas dazu sagen wie man diese erhält/ermittelt oder ob man diesen Parameter überhaupt zwingend angeben muss. Die AIN ist wohl eher das was du unter Sensor ID verstehst und identifiziert das zu steuernde Gerät.

  • Hallo
    ich habe die API im FB_Tool angepasst

    [autoit]


    Func _FB_GetRequestDECT200($Kommando)
    _FB_Logfile("Executing GetRequestDECT200", 3)
    ;_ArrayDisplay($fields)
    $mode = "GET"

    $result =_FB_Request('//webservices/homeautoswitch.lua?ain=087410622157&switchcmd='&$Kommando&'&sid=' & _FB_GetSID(), "GET")

    if $Kommando = 'getswitchpower' THEN

    _FB_Logfile('wert')
    EndIf
    Return $result
    EndFunc ;==>_FB_GetRequest

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]

    Hiermit kann ich die Steckdosen steueurn.

    Wie kann ich eime http.responseText empfangen ?

    Verwende die WinHttp.include

  • Naja ich würde mal vermuten, dass die Funktion _FB_Request() dir genau das zurückgibt was die FB auf dein GET antwortet. Sprich das was du suchst dürfte wohl in der Variable $result stehen, zumindestens wenn dein Request erfolgreich war.

  • Hallo
    nein eben nicht erhalte von $result nur den wert 0. Es musste aber der Stromverbrauch von ca 30 herauskommen.

    hier noch mal die Funktionen

    [autoit]


    Func _FB_GetRequestDECT200($Kommando)
    _FB_Logfile("Executing GetRequestDECT200", 3)
    ;_ArrayDisplay($fields)
    $mode = "GET"

    $result =_FB_Request('//webservices/homeautoswitch.lua?ain=087610122457&switchcmd='&$Kommando&'&sid=' & _FB_GetSID(), "GET")

    if $Kommando = 'getswitchpower' THEN

    _FB_Logfile('wert'&$result& @CRLF)
    EndIf
    Return $result
    EndFunc

    [/autoit]


    [autoit]


    ;do the actual request withnthe FB
    Func _FB_Request($page, $fields, $mode = "GET")
    _FB_Logfile("Executing _FB_Request", 3)

    [/autoit][autoit][/autoit][autoit]

    $mode = StringUpper($mode)
    If $mode <> "POST" And $mode <> "GET" Then
    _FB_Logfile("Error: _FB_Request called with wrong mode parameter: " & $mode)
    SetError(1)
    Return ""
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If UBound($fields) >= 1 And $mode = "GET" Then;add post fields if any
    _FB_Logfile(UBound($fields) & " fields found, adding query to request", 3)
    $page = $page & _FB_HttpBuildQuery($fields)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If $enable_remote_config = 1 Then;when ssl is used add flag
    _FB_Logfile("Using SSL mode", 3)
    $hRequest = _WinHttpOpenRequest($hConnect, $mode, $page, Default, Default, "*/*", BitOR($WINHTTP_FLAG_SECURE, $WINHTTP_FLAG_ESCAPE_DISABLE))
    Else
    $hRequest = _WinHttpOpenRequest($hConnect, $mode, $page, Default, Default, "*/*")
    EndIf
    If @error Or $hRequest = 0 Then
    _FB_Logfile("Error: _WinHttpOpenRequest failed")
    Return ""
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If $enable_remote_config = 1 And $use_lua_login = 0 Then;when ssl is used and old login methode is active, add basic auth
    $scResult = _WinHttpSetCredentials($hRequest, $WINHTTP_AUTH_TARGET_SERVER, $WINHTTP_AUTH_SCHEME_BASIC, $remote_config_user, $remote_config_password)
    If @error Or $scResult = 0 Then
    _FB_Logfile("Error: _WinHttpSetCredentials failed")
    Return ""
    EndIf
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If $enable_remote_config = 1 And $check_cert = 0 Then;when ssl is used and we do not want to chech the certificate for validity, we add options to ignore errors
    $allow_unknownCA_wrongCN = BitOR($SECURITY_FLAG_IGNORE_UNKNOWN_CA, $SECURITY_FLAG_IGNORE_CERT_CN_INVALID)
    $soResult = _WinHttpSetOption($hRequest, $WINHTTP_OPTION_SECURITY_FLAGS, $allow_unknownCA_wrongCN);handle invalid ssl cerificate used by fritzbox
    If @error Or $soResult = 0 Then
    _FB_Logfile("Error: _WinHttpSetOption failed with code " & @error)
    Return ""
    EndIf
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If UBound($fields) >= 1 And $mode = "POST" Then;add post fields if any
    _FB_Logfile(UBound($fields) & " fields found, adding query to request", 3)
    $srResult = _WinHttpSendRequest($hRequest, "Content-Type: application/x-www-form-urlencoded" & @CRLF, _FB_HttpBuildQuery($fields))
    Else
    $srResult = _WinHttpSendRequest($hRequest)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If @error Or $srResult = 0 Then
    _FB_Logfile("Error: _WinHttpSendRequest failed")
    Return ""
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $RecResResult = _WinHttpReceiveResponse($hRequest)
    If @error Or $RecResResult = 0 Then
    _FB_Logfile("Error: _WinHttpReceiveResponse failed")
    Return ""
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Local $result = ""
    While _WinHttpQueryDataAvailable($hRequest)
    Local $sChunk = _WinHttpReadData($hRequest)
    If @error Then ExitLoop
    $result &= $sChunk
    WEnd

    [/autoit][autoit][/autoit][autoit]

    If $result = "" Then
    _FB_Logfile("Error: _WinHttpReadData failed")
    Return ""
    EndIf
    _WinHttpCloseHandle($hRequest)

    [/autoit][autoit][/autoit][autoit]

    If @error Or $result = "" Then
    _FB_Logfile("Error: GetRequest failed")
    Else
    FileDelete(@ScriptDir & "\Request.txt")
    _FB_Logfile("Response: " & $result, 3, @ScriptDir & "\Request.txt")
    EndIf
    Return $result
    EndFunc ;==>_FB_Request

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • nein eben nicht erhalte von $result nur den wert 0. Es musste aber der Stromverbrauch von ca 30 herauskommen.

    also ich würde zum Testen mal einen Fön oder Wasserkocher mit ca. 1000 Watt an diese Steckdose hängen und nicht einen Verbraucher, der 30 Milliwatt "zieht".
    Btw. ermittelt getswitchpower die Leistung und nicht den Strom....