Ankündigung

Einklappen
Keine Ankündigung bisher.

TCP POST (Grafana/InfluxDB)

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

    TCP POST (Grafana/InfluxDB)

    Hi Leute, ich seh mal wieder den Fehler nicht..
    aber mit der Materie hab ich ja schon immer Probleme gehabt..

    Folgendes...

    Will vom Eibpc per POST Daten an die Influxdb schicken.. folgenden Code hab ich bis jetzt:
    Code:
    //Grafana
    TCP_ConnectionState = 99u08
    Port = 8086u16
    IPInflux = $192.168.178.65$
    TCP_ConnectionErrorCounter = 0u08
    myString = $$
    Infl_Init=AUS
    content = $$
    contentsize = 0u16
    GET_6 = $$
    Grafana_Init = AUS
    
    if Grafana_Init == EIN  then {
        content = $temperatur value=$+convert("HBO Bodentemp-1/4/8", $$);
        contentsize = size(content);
            stringset(CRLF, 0x0D0Au16, 0u16);
            GET_1 = $POST /write?db=events HTTP/1.1$ + CRLF;
            GET_2 = $Host: $+IPInflux+$:$+convert(Port,$$) + CRLF;
            GET_3 = $application/x-www-form-urlencoded; charset=UTF-8$ + CRLF;
            GET_4 = $Content-Length: $+convert(contentsize,$$) + CRLF;
            GET_5 = $$ + CRLF;
            GET_6 = convert(content, $$);
            myString = GET_1 + GET_2 + GET_3 + GET_4 + GET_5 + GET_6;
            Infl_Init=EIN;
    }endif
    
    
    // TCP Verbindung zum Host aufbauen
     
    if Infl_Init==EIN and TCP_ConnectionState >= 2u08  then {
        TCP_ConnectionState = connecttcp(Port, 192.168.178.65);
        Infl_Init=AUS
    } endif
    
    
    // TCP Nachricht senden
     
    if change(TCP_ConnectionState) and TCP_ConnectionState == 0u08 then {
        TCP_ConnectionErrorCounter = 0u08;
        sendtcparray(Port, 192.168.178.65, myString, size(myString));
        //TCP_Query_State = TCP_Query_State_QueryStarted;
        closetcp(Port, 192.168.178.65);
        Grafana_Init = AUS
    } endif
    Per Wireshark seh ich auch, das die Daten gesendet werden.. allerdings wird nichts in der DB geschrieben..
    (Von der Weboberfläche aus gehts.. also die DB an sich funktioniert)

    Ja.. es sind einige (gerade die IP) hard gecoded.. da ich an dem Code noch rumschraube bis er funktioniert
    hab ich da noch nichts optimiert.. also bitte nicht meckern..

    Vielleicht sieht ja jemand von euch wo das Problem liegen könnte..

    Verbesserungsvorschlag für eine neue Funktion des EibPCs..
    Die Befehle: GET, POST, PUT, DELETE und wie se alle heißen direkt zur Verfügung..
    zb. so:
    if event(GA) then POST(Port, IP, HOST, Data) endif... also das wär mal top.. dann könnte man sich
    div. Macros sparen..
    oder gar:
    Variable = GET(Port, IP, bla bla bla) und die Variable enthält dann die Antwort..

    *Tagträumerei*

    Gruß Martin

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

    #2
    Hi Martin,

    bei mir enden die Zeilen immer mit ...121984348 HTTP/1.0$ + CRLF@ + CRLF@;\\
    Vielleicht solltest du das noch hinter dein GET_6 packen?

    LG

    Kommentar


      #3
      geht es bei dir ?
      hast du es als Macro oder direkt im Code ?
      hab es nämlich nicht als Macro.. und ich dachte die @ Zeichen werden nur da benötigt..
      Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

      Kommentar


        #4
        Ja ich habe es im Macro. Aber ich dachte mehr an das HTTP!

        Kommentar


          #5
          hab ich probiert.. half nix..
          kannst du mal das Macro posten ?

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

          Kommentar


            #6
            Hier ist das Macro. Ist zum ansteuern einer FosCam
            Code:
            :begin FOSCAMgetMotionDetectConfig(FoscamIP, FoscamPort, FoscamUser, FoscamPwd, FoscamTrigger,FoscamDetection)
            :info $controls FOSCAM via CGI$\\
                $IP Address$\\
                $IP Port [u16]$\\
                $Cam-Username$\\
                $Cam-Password$\\
                $Trigger$\\
                $Enable/Disable Motion Detection\\
            :shortinfo $controls FOSCAM FI 9805W$\\
            
            FOS_XML_Message=$$
            FOS_handle=$$
            :var CRLF@
            CRLF@= $$
            FOS_GetMotionSET=$$
            FOS_GetMotionUnSET=$$
            :var FPort@
            FPort@=0u16
            :var FIP@
            FIP@=0u32
            
            
            
            if systemstart() then{\\
            stringset(CRLF@, 0x0A0Du16, 0u16);\\
            FOS_GetMotionUnSET=$GET /cgi-bin/CGIProxy.fcgi?usr%3Dei... ...rea6%3D1023%26area7%3D1086%26area8%3D30%26area9%3D1024%261434121984348 HTTP/1.0$ + CRLF@ + CRLF@;\\
            FOS_GetMotionSET = $GET /cgi-bin/CGIProxy.fcgi?usr%3DeibPC%26pwd%3DmyLo... ...D30%26area9%3D1024%261434121909850 HTTP/1.0$ + CRLF@ + CRLF@\\
            }endif
            
            //communication variables
            FoscamSendDelay
            FoscamSendDelay = 500u64
            
            FOSCAMconnectionState
            FOSCAMconnectionState = 6u08
            
            FOSCAMCommandSent
            FOSCAMCommandSent=0b01
            
            Foscam_Init=AUS
            Fos_CNT_ConnectTCP=0u08
            Fos_CNT_SendTCP=0u08
            Fos_CNT_ReceiveTCP=0u08
            Fos_CNT_CloseTCP=0u08
            Fos_CNT_FailTCP=0u08
            Fos_CNT_CloseTCP_03=0u08
            
            // connect to host
            
            if after(FoscamTrigger, FoscamSendDelay) then \\
                FOSCAMconnectionState = connecttcp(FoscamPort, FoscamIP);\\
                Fos_CNT_ConnectTCP=Fos_CNT_ConnectTCP+1u08\\
            endif
            
            // Send and Activate Motion Detection
            if(after(FoscamTrigger,1000u64) == EIN and FoscamDetection) then \\
            sendtcparray(FoscamPort, FoscamIP, FOS_GetMotionSET,size(FOS_GetMotionSET));\\
            FOSCAMCommandSent=1b01;\\
            endif
            
            // Send and Deactivate Motion Detection
            if(after(FoscamTrigger,1000u64) == EIN and !FoscamDetection) then \\
            sendtcparray(FoscamPort, FoscamIP, FOS_GetMotionUnSET,size(FOS_GetMotionUnSET));\\
            FOSCAMCommandSent=1b01;\\
            endif
            
            
            if(after(FoscamTrigger,10000u64) == EIN) then {\\
                closetcp(FoscamPort,FoscamIP);\\
                FoscamTrigger=AUS}endif
            
            //failed TCP Connection
            if change(FOSCAMconnectionState) \\
                and FOSCAMconnectionState >= 2u08 \\
                and FOSCAMconnectionState <= 6u08 then \\
                Fos_CNT_FailTCP=Fos_CNT_FailTCP+1u08\\
            endif
            
            // receive data
            if event(readtcp(FPort@, FIP@,FOS_XML_Message)) and (FPort@==FoscamPort) and (FIP@==FoscamIP) then {
                FOS_handle=FOS_XML_Message;\\
                Fos_CNT_ReceiveTCP=Fos_CNT_ReceiveTCP+1u08\\
            } endif
            
            :end

            Kommentar


              #7
              ach so.. dachte du hast direkt was für Influx.. ok.. pass ich mir an..
              hab ich zwar bei meinem jetzt auch gemacht.. aber irgendwie will er noch nicht..

              Danke schön !!
              Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

              Kommentar


                #8
                Hab mir den Macro jetzt angesehen.. das ist ja eigentlich das Standardmacro für so was.. eigentlich hab ich
                genau so etwas auch verwendet um es für Influxdb anzupassen.. leider ohne Erfolg, wie man ja hier sieht...

                deswegen probier ich jetzt mit meinem Code weiter..

                Hab jetzt mal, nur um Fehler auszuschließen viele Dinge hard gecodet (IP, Port) ..

                wer findet den Fehler ?

                Code:
                //Grafana
                TCP_ConnectionState = 99u08
                Port = 8086u16
                IPInflux = 192.168.178.65
                TCP_ConnectionErrorCounter = 0u08
                myString = $$
                Infl_Init=AUS
                content = $$
                contentsize = 0u16
                GET_6 = $$
                Grafana_Init = AUS
                
                if Grafana_Init == EIN  then {
                        stringset(CRLF, 0x0D0Au16, 0u16);
                    content = $temperatur value=$+convert("HBO Bodentemp-1/4/8", $$);
                    contentsize = size(content);
                        GET_1 = $POST /write?db=events HTTP/1.0$ + CRLF;
                        GET_2 = $Host: 192.168.178.65:8086$ + CRLF;
                        GET_3 = $application/x-www-form-urlencoded; charset=UTF-8$ + CRLF;
                        GET_4 = $Content-Length: $+convert(contentsize,$$) + CRLF;
                    GET_5 = $$ + CRLF;
                        GET_6 = convert(content, $$) + CRLF;
                        myString = GET_1 + GET_2 + GET_3 + GET_4 + GET_5+ GET_6;
                        Infl_Init=EIN;
                }endif
                
                
                // TCP Verbindung zum Host aufbauen
                 
                if Infl_Init==EIN and TCP_ConnectionState >= 2u08  then {
                    TCP_ConnectionState = connecttcp(8086u16, 192.168.178.65);
                    Infl_Init=AUS
                } endif
                
                
                // TCP Nachricht senden
                 
                if change(TCP_ConnectionState) and TCP_ConnectionState == 0u08 then {
                    TCP_ConnectionErrorCounter = TCP_ConnectionErrorCounter + 1u08;
                    sendtcparray(8086u16, 192.168.178.65, myString, size(myString));
                    closetcp(8086u16, 192.168.178.65);
                    Grafana_Init = AUS
                } endif
                hab das ganze auch mal mit diesem Code verglichen.. mir ist nichts aufgefallen:
                https://knx-user-forum.de/forum/supp...s-post-request
                Zuletzt geändert von Brick; 10.01.2016, 10:47.
                Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                Kommentar


                  #9
                  so sieht die myString Variable aus.. eigentlich ganz schön:
                  Code:
                  % Typ: erweiterter Text
                  % Wert: POST /write?db=events HTTP/1.0
                  
                  Host: 192.168.178.65:8086
                  
                  application/x-www-form-urlencoded; charset=UTF-8
                  
                  Content-Length: 22
                  
                  
                  
                  temperatur value=16.50
                  %
                  %
                  Hier der Header wenn man es über die Weboberfläche eingibt:
                  Bereich.png
                  Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                  Kommentar


                    #10
                    Ich meine Du mußt Deine Daten in JSON verpacken. Aber warum schickst Du nicht einfach ein UDP Paket?

                    Gruß,
                    Bernd

                    Kommentar


                      #11
                      UDP... bringt welche Vorteile?

                      in JSON .. mit deim EibPC ?
                      bist du dir sicher ?
                      Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                      Kommentar


                        #12
                        Mal ganz abgesehen vom eigentlichen Posting:
                        Es wurde hier ja zurecht angemerkt (u.a. auch von saft6luck) , dass man für den Linefeed immer das stringset Konstrukt
                        Code:
                        stringset(CRLF, 0x0D0Au16, 0u16)
                        nutzen muss.
                        Wie seinerzeit versprochen, geht das nun auch mit
                        Code:
                        MyString=tostring(Byte1, Byte2, ... ByteN)
                        direkt.
                        EDIT: Zudem der Hinweis fürs Grundsätzliche zum TCP auf https://knx-user-forum.de/forum/supp...117#post897117
                        Zuletzt geändert von enertegus; 10.01.2016, 17:38.
                        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                        Enertex Produkte kaufen

                        Kommentar


                          #13
                          Zitat von enertegus Beitrag anzeigen
                          Mal ganz abgesehen vom eigentlichen Posting:
                          Es wurde hier ja zurecht angemerkt (u.a. auch von saft6luck) , dass man für den Linefeed immer das stringset Konstrukt
                          Code:
                          stringset(CRLF, 0x0D0Au16, 0u16)
                          nutzen muss.
                          nutz ich doch... steht auch so im geposteten Code..

                          das Macro aus dem Thread schau ich mir mal an.. danke !!

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

                          Kommentar


                            #14
                            Hab das Macro mal so:
                            Code:
                            IPSendClient(192.168.178.65,8086u16,myString,Influx_Start)
                            eingebunden.. nachdem ich Influx_Start auf EIN gesetzt hab, hats natürlich nicht funktioniert.. auch Wireshark hat nichts erkannt..
                            scheinbar wurde na noch nix gesendet.

                            ich hasse es, wenn dinge nicht funktionieren und ich nicht weiß wieso..

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

                            Kommentar


                              #15
                              Tja wenn alles nur so leicht gehen würde wie ESP Programming....;-)

                              Kommentar

                              Lädt...
                              X