Ankündigung

Einklappen
Keine Ankündigung bisher.

sendtcp-Probleme

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Codebeispiel] sendtcp-Probleme

    Hallo Jungs...

    wieder einmal bastel ich schon seit Stunden herum, aber es wird nix....

    Ich möchte auf meinen Heizungscontroller Werte senden, vom Browser geht dies mit:
    Code:
    http://192.168.1.100/wrsps?M55=0
    am eibPC schaut der Code so aus:
    [highlight=epc]WWWtmp=$GET /wrsps?M55=$
    if event("Gang_EG.Heizanforderung-2/2/16") and ("Gang_EG.Heizanforderung-2/2/16") then WWWtmp=$GET \wrsps?M55=1$ endif
    if event("Gang_EG.Heizanforderung-2/2/16") and !("Gang_EG.Heizanforderung-2/2/16") then WWWtmp=$GET \wrsps?M55=0$ endif
    // zur Kontrolle ob gesendet wurde....
    www_tmp_wert=0

    if change(WWWtmp) then connecttcp(WWWPort,WWWIP) endif
    if (after(change(WWWtmp),500u64)) then \\
    www_tmp_wert=www_tmp_wert+1; \\
    sendtcp(WWWPort,WWWIP,WWWtmp,0x0Du08,0x0Au08,0x0Du 08,0x0Au08) endif
    if (after(change(WWWtmp),1000u64)) then closetcp(WWWPort,WWWIP) endif
    [/highlight]

    ich hab's schon mit HTTP1.1 am Ende probiert - nada...

    die Werte habe ich im Variablenfenster kontrolliert, sie sind korrekt...
    der Zähler zählt auch brav hoch - es wird also gesendet

    Als Endziel möchte ich eine ganze Reihe von Variablen an den Controller senden - da muss ich wahrscheinlich jedesmal eine TCP Verbindung öffnen (wegen dem GET) oder? Aber das ist ja noch in weiter Ferne
    EPIX
    ...und möge der Saft mit euch sein...
    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

    #2
    Versuche es einmal damit:

    [highlight=epc]
    if Init == EIN then \\
    stringset(CRLF,0x0A0Du16,0u16); \\
    GET_1 = $GET /wrsps?M55=0 HTTP/1.0$ + CRLF;
    GET_2 = $User-Agent: Wget/ 1.0.10$ + CRLF; \\
    GET_3 = $Accept: */*$ + CRLF; \\
    GET_4 = $Host: 192.168.1.100$ + CRLF; \\
    GET_5 = $Connection: Keep-Alive$ + CRLF + CRLF; \\
    String = GET_1 + GET_2 + GET_3 + GET_4 + GET_5 \\
    endif

    if ...
    sendtcparray(Port, IP, String, size(String)); \\
    ...
    endif
    [/highlight]

    Viele Grüße

    Michael

    Kommentar


      #3
      Danke für deinen Tip:

      es war das HTTP/1.0 in Verbindung mit einem Tipfehler...
      $GET /wrsps?M56=0 HTTP/1.0$

      so, jetzt bleibt noch die Frage: kann man mehrere sendtcp nacheinander bei EINER geöffneter tcp-Verbindung auf's gleiche Gerät verwenden...

      also:
      connecttcp....
      $GET /wrsps?M55=0 HTTP/1.0$
      $GET /wrsps?M56=0 HTTP/1.0$
      closetcp(...

      vermutlich mit sendtcparray....
      Mal testen
      EPIX
      ...und möge der Saft mit euch sein...
      Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

      Kommentar


        #4
        Habe ich noch nicht gemacht, sollte aber funktionieren.

        Ich würde die folgenden sendtcp mit einem after ggü. den vorhergehenden sendtcp verzögern.

        Kommentar


          #5
          Hallo,

          ich klinke mich mal in diesen Thread mit ein.

          Wir haben eine WD TV Live HD und die schaltet sich jedesmal ein, wenn wir den Strom zentral im Haus einschalten. Und das find ich unnötig.

          Jetzt gibts zum glück die Möglichkeit über die Web-Administrationskonsole, die eine Fernbedienung bereitstellt. Da möchte ich dann sofort immer die WDTV automatisch wieder ausschalten.

          Dachte mir, klasse. Schickst einfach die URL
          Code:
          http://192.168.1.107/cgi-bin/toServerValue.cgi?%7B%22remote%22%3A%22w%22%7D=
          zur WD TV und das wars. Leider nicht.
          Es hat den Anschein, das das Teil den kompletten HTTP-Header benötigt.

          Code:
          Request URL:http://192.168.1.107/cgi-bin/toServerValue.cgi
          Request Method:POST
          Status Code:200 OK
          Request Headersview source
          Accept:*/*
          Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
          Accept-Encoding:gzip,deflate,sdch
          Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
          Connection:keep-alive
          Content-Length:14
          Content-Type:application/x-www-form-urlencoded
          Cookie:PHPSESSID=376af75b7a50d237760caaaff4b34d02; keepSign=1; user_pw=admin; online=1
          Host:192.168.1.107
          Origin:http://192.168.1.107
          Referer:http://192.168.1.107/wdtvlive/remote/
          User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Ubuntu Chromium/24.0.1312.56 Chrome/24.0.1312.56 Safari/537.17
          X-Requested-With:XMLHttpRequest
          Kann ich sowas über den eibPC eigentlich versenden?

          Danke für eure Hilfe.

          lg, Peter

          Kommentar


            #6
            Zitat von Jambala Beitrag anzeigen
            Versuche es einmal damit:

            [highlight=epc]
            if Init == EIN then \\
            stringset(CRLF,0x0A0Du16,0u16); \\
            GET_1 = $GET /wrsps?M55=0 HTTP/1.0$ + CRLF;
            GET_2 = $User-Agent: Wget/ 1.0.10$ + CRLF; \\
            GET_3 = $Accept: */*$ + CRLF; \\
            GET_4 = $Host: 192.168.1.100$ + CRLF; \\
            GET_5 = $Connection: Keep-Alive$ + CRLF + CRLF; \\
            String = GET_1 + GET_2 + GET_3 + GET_4 + GET_5 \\
            endif

            if ...
            sendtcparray(Port, IP, String, size(String)); \\
            ...
            endif
            [/highlight]

            Viele Grüße

            Michael
            Der Weg ist doch hier beschrieben. Den String kannst Du ja beliebig um weiter GET-Zeilen erweitern.

            Kommentar


              #7
              probier einmal welche Headerteile du nicht benötigts...

              wichtig ist, dass zwischen dem Öffnen und dem Senden eine Zeit vergeht (1-2 sec)

              und vor dem Schließen ebenfalls ein bissche warten
              EPIX
              ...und möge der Saft mit euch sein...
              Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

              Kommentar


                #8
                Moin,

                Jetzt gibts zum glück die Möglichkeit über die Web-Administrationskonsole, die eine Fernbedienung bereitstellt. Da möchte ich dann sofort immer die WDTV automatisch wieder ausschalten.
                Ja und das geht ganz ohne Anmeldedialog? Bezweifle ich ein wenig. Wenn ja, dann kriegst Du das ohne Probleme hin.

                Aber für mich sieht das hier
                Code:
                Cookie:PHPSESSID=376af75b7a50d237760caaaff4b34d02; keepSign=1; user_pw=admin; online=1
                ganz mächtig nach einer "Verhandlungssache" aus. Sprich Du mußt Dich zunächst authentifizieren bevor Du die CGI aufrufen kannst.

                Gruß,
                Bernd

                Kommentar


                  #9
                  Useranmeldung an Webseiten... Interessantes Thema.. Gibt es dafür eigentlich etwas im EIBPC-Commandset? Ich denke da an sowas wie "use LWP::UserAgent" aus dem Perlumfeld? Hatte vor langer Zeit beim Überfliegen des Handbuchs nix gefunden...

                  Kommentar


                    #10
                    Hallo,

                    Zitat von EPIX Beitrag anzeigen
                    wichtig ist, dass zwischen dem Öffnen und dem Senden eine Zeit vergeht (1-2 sec)
                    und vor dem Schließen ebenfalls ein bissche warten
                    was heisst warten zw. öffnen und schließen genau? muss ich vorher die TCP Verbidnung zur WDTV Live extra aufmachen? Übernimmt das nicht sendtcparray für mich?

                    Zitat von bmx Beitrag anzeigen
                    Moin,
                    Ja und das geht ganz ohne Anmeldedialog? Bezweifle ich ein wenig. Wenn ja, dann kriegst Du das ohne Probleme hin.

                    Aber für mich sieht das hier
                    Code:
                    Cookie:PHPSESSID=376af75b7a50d237760caaaff4b34d02; keepSign=1; user_pw=admin; online=1
                    da hast du leider recht. Ich hab mittlerweile auch eine Android-App von WD gefunden. Die funktioniert ohne Anmeldung. Hab sie schon dekompiliert. Bin aber noch nicht fündig geworden, wie WD das im java-code macht.

                    danke.

                    lg, peter

                    Kommentar


                      #11
                      Zitat von ppfeifer Beitrag anzeigen
                      Hallo,
                      was heisst warten zw. öffnen und schließen genau? muss ich vorher die TCP Verbidnung zur WDTV Live extra aufmachen? Übernimmt das nicht sendtcparray für mich?
                      Je nachdem ob der EibPC Client oder Server ist, benötigst Du noch ein connecttcp (siehe Handbuch)
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar

                      Lädt...
                      X