Ankündigung

Einklappen
Keine Ankündigung bisher.

Abfrage SolarLog über TCP

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

    Abfrage SolarLog über TCP

    Hallo Zusammen!

    Ich wollte euch mal um Hilfe bitten, ich komm nach zwei Tagen Try&Error nicht weiter...
    Mein Ziel ist, aus der Web-Oberfläche des SolarLog den aktuellen Wert der erzeugten Leistung auszulesen um mit diesem dann zu rechnen.
    Die Seite wo der Wert steht rufe ich mit der Adresse aus dem Browser auf: "http://10.217.7.203/index_pc.html#mode=0&offset=0&vismode=0&flag=0&grp =0&invAll=1&invS1=0&invS2=0&invS3=0&invS4=0&cgrp= u ndefined"
    Ich habe mit dem Wetterdienst Macro von Martin gebastelt...

    Ich scheitere jetzt daran, dass ich weder auf sendtcp noch auf sendtcparry was zurückbekomme und ich denke, dass es an dem Name_String liegt. Aber wie sich der zusammensetzt hat sich für mich noch nicht erschlossen...
    Verbindung wird aufgebaut, wenn ich Name_Init auf 1 setzte, aber das war es dann auch schon. Bekomme nicht mal eine Response IP...

    So hab ich das aufgebaut:

    Name_IP = 10.217.7.203
    Name_IP_resp = 0u32
    Name_Port = 80u16
    Name_Port_resp = 0u16
    Name_Data = $$c5000
    Name_Data_resp = $$c5000
    Name_Init = AUS
    Name_CRLF = $$c5000
    Name_String = $$c5000
    Name_TCP_ConnectionState = 6u08
    Name_PosStart = 0u16
    Name_PosEnd = 0u16

    if Name_Init == EIN then \\
    stringset(Name_CRLF, 0x0A0Du16, 0u16); \\
    Name_String = $ /index_pc.html#mode=0&offset=0&vismode=0&flag=0&grp =0&invAll=1&invS1=0&invS2=0&invS3=0&invS4=0&cgrp= u ndefined$; \\
    endif


    // TCP Verbindung zum Host aufbauen

    if after(Name_Init, 1000u64) then \\
    Name_TCP_ConnectionState = connecttcp(80u16,10.217.7.203) \\
    endif


    if change(Name_TCP_ConnectionState) \\
    and Name_TCP_ConnectionState == 0u08 then \\
    sendtcp(Name_Port, Name_IP, Name_String, size(Name_String)); \\
    endif

    // Empfang des TCP Paket

    if event(readtcp(Name_Port_resp,Name_IP_resp,Name_Dat a_resp)) and Name_IP_resp == Name_IP then {
    Name_Data=Name_Data_resp;
    } endif

    if after(Name_Init == EIN, 15000u64) then Name_Init = AUS endif


    hoffe dass mir einer auf die Sprünge helfen kann...


    Viele Grüße
    Bernhard

    Edit: noch eine Frage die es erklären könnte: kann ich bei sendtcp im dritten Argument HTML Befehle mit übergeben?
    Zuletzt geändert von encymon; 07.09.2015, 15:16.

    #2
    Zitat von encymon Beitrag anzeigen
    Hallo Zusammen!
    Ich scheitere jetzt daran, dass ich weder auf sendtcp noch auf sendtcparry was zurückbekomme und ich denke, dass es an dem Name_String liegt. Aber wie sich der zusammensetzt hat sich für mich noch nicht erschlossen...
    Verbindung wird aufgebaut, wenn ich Name_Init auf 1 setzte, aber das war es dann auch schon. Bekomme nicht mal eine Response IP...
    Du solltest einen managed Switch haben, sodass Du sehen kannst, was der EibPC da wirklich sendet.
    Ich habe da eine Library gebaut (für ein Industrieprojekt), damit kann man zumindest einfache GET-Abfragen auf einen Webserver erstellen, die dann mit XML geparst werden. Siehe anbei. Wird in der nächsten Makrolibsammlung dabei sein.
    Code:
    [Macros]
    // Vom Server 21.1.14.6 auf dessen Unterverzeichnis /xml eine Abfrage erstellen, 2000ms Antwortzeit
    IPGetClient(Tankanzeige,21.1.14.6,$/xml$,2400, Start,2000)
    [MacroLibs]
    //Makro-Bibliotheken
    EnertexTCP.lib
    [EibPC]
    Start=cycle(15,0)
    
    Fuellung=0u16
    Prozent=0
    Temperatur=0.0
    
    if TankanzeigeRecieved then {
          //
          // Parsen zwischen <tankLevel> und </tankLevel>, 1. Auftreten dieser Klammer (=Wert 0)
          XMLParse(TankanzeigeRawData,tankLevel,0,Fuellung);
          // Parsen zwischen <tankPercent> und </tankPercent>, 1. Auftreten dieser Klammer (=Wert 0)
          XMLParse(TankanzeigeRawData,tankPercent,0,Prozent);
          // Parsen zwischen <tankTemp> und </tankTemp>, 1. Auftreten dieser Klammer (=Wert 0)
          XMLParse(TankanzeigeRawData,tankTemp,0,Temperatur);
           // Zurücksetzen für die Warteschlange bzw. dem Datenempfang
          TankanzeigeRecieved=AUS;
    } endif
    Angehängte Dateien
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Hallo,

      hab mit etlichen rumprobieren jetzt was gefunden wo ich zumindest mal eine Verbindung bekomme. Sind zwar leider die von mir benötigten Daten noch nicht dabei, aber die find ich auch noch raus...

      Name_String = $GET /http://10.217.7.203/curl%20-X%20POST%20-H%20%22Content-Type:%20application/json%22%20-d%20'%7B%22801%22:%7B%22170%22:null%7D%7D'%20solar log/getjp HTTP/1.1$ + Name_CRLF + $User-Agent: Wget/ 1.0$ + Name_CRLF + $Accept: */*$ + Name_CRLF + $Connection: keep-alive$ + Name_CRLF+ Name_CRLF+ Name_CRLF; \\

      Damit gehts. Komischerweise erst beim zweiten Versuch. Beim ersten kommt kein response. ??

      Gruß Bernhard

      Kommentar


        #4
        Zitat von encymon Beitrag anzeigen
        Damit gehts. Komischerweise erst beim zweiten Versuch. Beim ersten kommt kein response. ??
        Das wurde schon mal gemeldet (und stimmt auch). Bisher haben die Kollegen noch nicht fixen können, aber sie sind drüber. Also die erste Abfrage muss zweimal angeworfen werden. Von da an geht es aber passend. Scheint ein Init Problem zu sein.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Wenn ich eine POST abfrage mache, wo oder wie muß ich da den Content hinschreiben?? hab jetzt glauch ich schon die meisten Möglichkeiten durch, aber ich komm nicht drauf... Im Handbuch hab ich leider auch nichts gefunden...
          Kann mir jemand auf die Sprünge helfen?

          so sieht die Abfrage im HTTP Requester Raw aus, mit wget bekomm ich auch den gewünschten response...
          POST http://10.217.7.203/getjp
          Content-Type: application/json
          {"801":{"170":null}}

          Gruß Bernhard
          Zuletzt geändert von encymon; 13.10.2015, 20:22.

          Kommentar


            #6
            Log doch mal mit dem Wireshark mit, dann sieht man das recht schnell.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar

            Lädt...
            X