Ankündigung

Einklappen
Keine Ankündigung bisher.

XML Abfrage per Macro... wie?

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

    XML Abfrage per Macro... wie?

    Hi Leute,

    irgendwie hab ich das immer noch nicht raus... der Code lässt sich zwar kompilieren, aber die Antwort
    die ich auf mein TCPSend bekomme ist falsch..

    vielleicht kann mal einer von euch drüber schauen und mir da einen Tipp geben,
    was ich (wieder) falsch gemacht hab.

    Code:
    :begin FBARL(Name,Dataset,FritzBoxIP)
    
    :info $FBARL-Makro$ \\
          $Name des Macros$ \\
          $Datensatznummer $ \\
          $IP-Adresse der FritzBox$ \\
    
    :shortinfo $FBARL - Fritzbox Anrufliste$
    
        // Allgemeine Variablen definieren
         
        Name^_Init = after(systemstart() == EIN, 5000u64)
        Name^_CRLF = $$
        Name^_GET_1 = $$
        Name^_String = $$
        Name^_TCP_ConnectionState = 6u08
        Name^_Result = $$
        Name^_Result_Data = $$
        Name^_Res_Port=0u16
        Name^_Res_IP=0u32
         
        // TCP Message für Abfrage
         
        if Name^_Init == EIN then \\
            stringset(Name^_CRLF, 0x0A0Du16, 0u16); \\
            Name^_GET_1 = $GET /fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml$; \\
            endif
         
        // TCP Verbindung zum Host aufbauen
         
        if after(Name^_Init, 1000u64) then \\
            Name^_TCP_ConnectionState = connecttcp(9090u16,FritzBoxIP) \\
            endif
         
        // TCP Nachricht senden
         
        if change(Name^_TCP_ConnectionState) \\
            and Name^_TCP_ConnectionState == 0u08 then \\
            sendtcparray(9090u16, FritzBoxIP, Name^_String, size(Name^_String)) \\
            endif
         
        // jetzt hier noch ggfs. TCP Nachricht empfangen und dann TCP Verbindung schließen
         if event(readtcp(Name^_Res_Port,Name^_Res_IP,Name^_Result_Data)) and Name^_Res_IP == FritzBoxIP then {
                Name^_Result = Name^_Result_Data;
        } endif;
         
    
        if after(Name^_Init,30000u64) then {
            closetcp(9090u16,FritzBoxIP)
        } endif
         
    
                
    :end
    im Anhang seht ihr die Variablen u. welche Werte sie angenommen haben..
    unter Result_Data sieht man, das ist die Antwort auf ein anderes TCPSend...

    Gruß Martin
    Angehängte Dateien
    Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

    #2
    hmmm wo weist du denn den Wert zu bei:
    Name^_CRLF = $$

    kann sein, dass der Inhalt fehlt...

    ich glaube BMX hat irgendwo eine Datei wo diese Dinge definiert sind, dann kannst du die Variablen ohne eigenen Definition verwenden

    oder so:
    CRLF = $ $
    if systemstart() then {
    stringset(CRLF, 0x0d, 0u16);
    stringset(CRLF, 0x0a, 1u16)
    } endif
    EPIX
    ...und möge der Saft mit euch sein...
    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

    Kommentar


      #3
      ich hab da wieder meine Stärken ausgespielt .. und die liegen
      ganz klar bei copy/paste ...

      die Vorlage hab ich aus diesem Thread/Post von Jambala...

      wie gesagt.. so ganz versteh ich da noch nicht, was ich mache bzw.
      was ich machen muss.. deswegen funktionierts wohl auch nicht

      Gruß Martin
      Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

      Kommentar


        #4
        geht mir auch so ;-)

        das hat gefehlt
        stringset(CRLF, 0x0A0Du16, 0u16); \\
        - funktioniert es jetzt?

        beim eibPC bin ich ein "Nackerpatz" wenn du das verstehst
        EPIX
        ...und möge der Saft mit euch sein...
        Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

        Kommentar


          #5
          Zitat von EPIX Beitrag anzeigen

          das hat gefehlt

          - funktioniert es jetzt?

          beim eibPC bin ich ein "Nackerpatz" wenn du das verstehst
          wieso gefehlt.. steht doch im Code ??
          bei mir heißt es aber Name^CRLF ...

          wo es gefehlt hat, war am Ende meines Strings..
          Code:
          Name^_GET_1 = $GET /fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml$ + Name^CRLF ; \\
          leider hat das trotzdem nicht funktioniert...

          Nackerpatz.. ?? ne.. sagt ma nix.. aber dafür gibts ja Wörterbücher
          P.S. ich seh grad.. wir sind ja fast "Nachbarn".. ich Arbeite in der Nähe von Salzburg (ca. 30km)...
          Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

          Kommentar


            #6
            Moin,

            wenn Du ein Paket zurückbekommst, solltest Du nicht nur die IP prüfen sondern auch testen ob es der richtige Port ist.
            (Es kann ja sein, das Deine FB auf einem anderen Port was anderes bedient ...)

            Und Du mußt natürlich auch das "richtige" Paket schicken: Du baust ein "Name^_GET_1" auf sendest dann aber ein sendtcparray(9090u16, FritzBoxIP, Name^_String, size(Name^_String)).

            Schau mal, ob dann wirklich auch dein CRLF im Stringarray enthalten ist so wie Du das definiert hast.

            Gruß,
            Bernd

            Kommentar


              #7
              ok,

              aber sieht man auf dem Screenshot nicht, das die Antwort gar nicht
              ausgewertet wird..

              FBARL_Test_Result ist zum Beispiel leer.. also hat gar nichts von der IP empfangen.. oder ??

              vielleicht kurz als Background Info.. was ich vorhabe..

              ich will von der Fritzbox die Seite fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml abrufen... und aus dem XML File die SessionID
              auslesen..

              ähnliches wurde ja beim WeatherMacro (Wunderground) schon gemacht..

              Gruß Martin
              Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

              Kommentar


                #8
                Wie sieht denn nun genau Dein geändertes Macro aus? Was sendest Du denn nun?

                Gruß,
                Bernd

                Kommentar


                  #9
                  Hi,

                  also viel hab ich noch nicht geändert... nur den String der gesendet werden soll hab ich mit dem CRLF ergänzt..

                  Code:
                  :begin FBARL(Name,Dataset,FritzBoxIP)
                  
                  :info $FBARL-Makro$ \\
                        $Name des Macros$ \\
                        $Datensatznummer $ \\
                        $IP-Adresse der FritzBox$ \\
                  
                  :shortinfo $FBARL - Fritzbox Anrufliste$
                  
                      // Allgemeine Variablen definieren
                       
                      Name^_Init = after(systemstart() == EIN, 5000u64)
                      Name^_CRLF = $$
                      Name^_GET_1 = $$
                      Name^_String = $$
                      Name^_TCP_ConnectionState = 6u08
                      Name^_Result = $$
                      Name^_Result_Data = $$
                      Name^_Res_Port=0u16
                      Name^_Res_IP=0u32
                       
                      // TCP Message für Abfrage
                       
                      if Name^_Init == EIN then \\
                          stringset(Name^_CRLF, 0x0A0Du16, 0u16); \\
                          Name^_GET_1 = $GET /fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml$ + Name^_CRLF; \\
                          endif
                       
                      // TCP Verbindung zum Host aufbauen
                       
                      if after(Name^_Init, 1000u64) then \\
                          Name^_TCP_ConnectionState = connecttcp(9090u16,FritzBoxIP) \\
                          endif
                       
                      // TCP Nachricht senden
                       
                      if change(Name^_TCP_ConnectionState) \\
                          and Name^_TCP_ConnectionState == 0u08 then \\
                          sendtcparray(9090u16, FritzBoxIP, Name^_String, size(Name^_String)) \\
                          endif
                       
                      // jetzt hier noch ggfs. TCP Nachricht empfangen und dann TCP Verbindung schließen
                       if event(readtcp(Name^_Res_Port,Name^_Res_IP,Name^_Result_Data)) and Name^_Res_IP == FritzBoxIP then {
                              Name^_Result = Name^_Result_Data;
                      } endif;
                       
                  
                      if after(Name^_Init,30000u64) then {
                          closetcp(9090u16,FritzBoxIP);
                          Name^_Init = AUS
                      } endif
                       
                  
                              
                  :end
                  Gruß Martin
                  Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                  Kommentar


                    #10
                    Nö. Du sendest eigentlich IMHO einen leeren String. Schau mal genau, was Du eigentlich senden willst und dann schau mal bei sendtcparray nach.

                    Gruß,
                    Bernd

                    Kommentar


                      #11
                      Ahhhh.. Verda.... Du hast recht..

                      Das hätte ich sehen müssen...
                      Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                      Kommentar


                        #12
                        funktioniert es jetzt?

                        wo arbeitest du denn? - Traunstein?
                        EPIX
                        ...und möge der Saft mit euch sein...
                        Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                        Kommentar


                          #13
                          so.. habs geändert..

                          leider auch noch ohne Erfolg.. man.. des kann doch ned so schwer sein ??

                          Port hab ich jetzt noch auf 80 gestellt.. des scheint wohl der richtige zu sein, zumindest wenn ich Firebug nicht falsch verstanden hab: (Screenshot 1)


                          Code:
                              // Allgemeine Variablen definieren
                               
                              Name^_Init = after(systemstart() == EIN, 5000u64)
                                  Name^_CRLF = $$
                              Name^_GET_1 = $$
                              Name^_String = $$
                              Name^_TCP_ConnectionState = 6u08
                              Name^_Result = $$
                              Name^_Port = 80u16
                              Name^_Result_Data = $$
                              Name^_Res_Port=0u16
                              Name^_Res_IP=0u32
                               
                              // TCP Message für Abfrage
                               
                              if Name^_Init == EIN then \\
                                  stringset(Name^_CRLF, 0x0A0Du16, 0u16); \\
                                  Name^_GET_1 = $GET /fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml$ + Name^_CRLF; \\
                                  endif
                               
                              // TCP Verbindung zum Host aufbauen
                               
                              if after(Name^_Init, 1000u64) then \\
                                  Name^_TCP_ConnectionState = connecttcp(Name^_Port,FritzBoxIP) \\
                                  endif
                               
                              // TCP Nachricht senden
                               
                              if change(Name^_TCP_ConnectionState) \\
                                  and Name^_TCP_ConnectionState == 0u08 then \\
                                  sendtcparray(Name^_Port, FritzBoxIP, Name^_GET_1, size(Name^_String)) \\
                                  endif
                               
                              // jetzt hier noch ggfs. TCP Nachricht empfangen und dann TCP Verbindung schließen
                               if event(readtcp(Name^_Res_Port,Name^_Res_IP,Name^_Result_Data)) and Name^_Res_IP == FritzBoxIP then {
                                      Name^_Result = Name^_Result_Data;
                              } endif;
                               
                          
                              if after(Name^_Init,30000u64) then {
                                  closetcp(Name^_Port,FritzBoxIP);
                                  Name^_Init = AUS;
                                  Name^_TCP_ConnectionState = 6u08
                              } endif
                               
                          
                                      
                          :end
                          das Variablenfenster sieht jetzt schon mal anders aus..
                          leider immer noch nicht richtig...


                          nein .. nicht Traunstein.. östlich von Salzb. richtung Ostermiething..
                          noch a paar km weiter.. in am kleinen Kaff... (in Oberösterreich )
                          Angehängte Dateien
                          Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                          Kommentar


                            #14
                            Haaa.. hab mal aus dem TCPSendArray nur ein TCPSend
                            gemacht.. jetzt bekomm ich was:

                            if change(Name^_TCP_ConnectionState) \\
                            and Name^_TCP_ConnectionState == 0u08 then \\
                            sendtcp(Name^_Port, FritzBoxIP, Name^_GET_1) \\
                            endif
                            Code:
                            % Wert: HTTP/1.0 400 Bad Request  Content-Length: 182  Content-Type:  text/html; charset=utf-8    <HTML><HEAD><TITLE>400 Bad  Request  (ERR_INVALID_REQ)</TITLE></HEAD><BODY><H1>400  Bad  Request</H1><BR>ERR_INVALID_REQ<HR><B>Webserver</B>  Tue, 25 Jun 2013 18:44:53 GMT</BODY></HTML>
                            des gabs doch mal beim Wundergroundmacro auch.. was war da noch gleich zu tun ??

                            irgendwas musste an den Request angefügt werden.. wie bekomm ich des raus ??
                            Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                            Kommentar


                              #15
                              Jetzt hab ich noch das angefügt:
                              Code:
                                if Name^_Init == EIN then \\
                                      stringset(Name^_CRLF, 0x0A0Du16, 0u16); \\
                                      Name^_GET_1 = $GET /fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml [COLOR=Red]HTTP/1.0[/COLOR]$ + Name^_CRLF; \\
                                      endif
                              jetzt bekomm ich das aus dem Screenshot:
                              Angehängte Dateien
                              Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                              Kommentar

                              Lädt...
                              X