Ankündigung

Einklappen
Keine Ankündigung bisher.

TCP POST (Grafana/InfluxDB)

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

    #16
    hab mir eh schon überlegt ob ich es damit irgendwie hinbekommen würd
    Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

    Kommentar


      #17
      Zitat von Brick Beitrag anzeigen
      Hab das Macro mal so:
      Code:
      IPSendClient(192.168.178.65,8086u16,myString,Influx_Start)
      1. Hast Du Dir mal die Beispiele angesehen bzw. was willst Du machen:x?
      2. Gibt es ein event?
      IPSendClient macht kein POST oder GET in dem Sinne: Es verbindet sich vielmehr mit einem TCP-Server und dann setzt es ein Kommando ab und schließt die Verbindung. Vielleicht kann auch Kahler was dazu sagen. Der nutzt das Makro für seinen Yamaha Verstärker...
      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
      Enertex Produkte kaufen

      Kommentar


        #18
        Hi,

        1, ja hab ich mir angesehen.. das mit dem Receiver...
        Kennst du die Influxdb ?
        Eine recht schöne Datenbank.. diese will ich mit Werten füllen, da die ich mir später mit Grafana anzeigen lassen will...
        (http://www.philipotoole.com/influxdb-and-grafana-howto/)
        Hierzu muss ich werte von KNX an die Datenbank schicken.. für OpenHub gibt es da was.. auch für die Smartvisu.
        OpenHub will ich nicht einsetzen.. und das Plugin für die Smartvisu scheint bei mir auch nicht zu funktionieren.. deswegen
        bin ich ja so angefressen.. jetzt dacht ich mir.. evlt. gehts mit dem EibPC..

        2, Hab mir das Macro angesehen ... und auch verstanden wie es funktioniert.. deswegen hab ich einfach den "myString" der
        eigentlich schon richtig zusammengesetzt ist mit dem IPSendClient geschickt..

        Langsam denk ich aber, das es doch an dem String liegt, das dieser von der DB einfach nicht akzeptiert wird..

        Alles nicht so einfach wie anfangs gehofft..

        https://influxdb.com/docs/v0.9/guides/writing_data.html
        Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

        Kommentar


          #19
          Überarbeite ggf. Deine InfluxDB config (siehe hier) und dann schreibe die Daten über UDP (siehe hier)

          Gruß,
          Bernd

          Kommentar


            #20
            Hallo
            Welche Version von InfluxDB läuft den da.
            Ab der v0.9 hat sich einiges geändert .
            Ich schreibe mit einem Perl Script das so in die DB.
            Ist nur ein Test.
            Code:
            my $timestp1 = 1434055562000000000;
            system("curl -i -XPOST 'http://localhost:8086/write?db=my_db' --data-binary 'test value=4.21 $timestp'");
            Gruß NetFritz
            KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
            WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
            PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

            Kommentar


              #21
              Zitat von Brick Beitrag anzeigen
              Code:
              GET_6 = convert(content, $$) + CRLF;
              myString = GET_1 + GET_2 + GET_3 + GET_4 + GET_5+ GET_6;
              Am Schluss sollte das CRLF doch zwei mal stehen.
              Firma: Enertex Bayern GmbH, Ebermannstädter Straße 8, 91301 Forchheim
              Amazon: KNXnet/IP Router
              , KNXnet/IP Interface

              Kommentar


                #22
                hatte ich auch schon.. ich glaub ich werd Bernds Vorschlag mal probieren mit UDP... das scheint noch am wahrscheinlichsten
                zu funktionieren... hatte das in der config Datei eh schon parametriert.. jetzt muss ich nur noch den richtigen String per UDP
                verschicken.. mal schaun ob ich das hinbekomm...

                wenn nicht.. lass ichs bleiben.. will mich damit nicht tagelang rum ärgern...
                Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                Kommentar


                  #23
                  so.. ab jetzt frag ich nur noch Bernd... wie oft er mir schon den richtigen Hinweis gegeben hat, hab ich vergessen zu zählen

                  war eigentlich ganz einfach... UDP.. Eingestellt hatte ich das schon in der Config, da ich es vorher für Smarthome schon machen musste..
                  Im EibPC wars dann ganz einfach:

                  Code:
                  //Grafana
                  Influx_Start = AUS
                  content = $$
                  contentsize = 0u16
                  Influx_Set = AUS
                  LF = $$
                  
                  if cycle(0,30) then Influx_Start = EIN endif
                  
                  if Influx_Start == EIN  then {
                      stringset(LF, 0x0Au16, 0u16);
                      content =     $Temp_HBO_Boden value=$+convert("GA-HBO Bodentemp", $$)+LF+\\
                              $Temp_HBO_Luft value=$+convert("GA-HBO Lufttemp", $$)+LF+\\
                              $Temp_Aussen value=$+convert("GA-Aussentemp", $$)+LF+\\
                              $Temp_Zuber value=$+convert("GA-Zubertemperatur-", $$);
                      contentsize = size(content);
                      sendudparray(8089u16, InfluxIP, content, contentsize);
                      Influx_Start = AUS
                  }endif
                  Hiermit werden mir alles 30 Sec die Werte der 4 GA's in die Datenbank geschrieben.. lässt sich hoffentlich
                  noch stark erweitern.. was ich in den kommenden Tagen mal umsetzten werde..

                  Danke BMX nochmal für den Hinweis !

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

                  Kommentar


                    #24
                    Brick
                    Hast du das noch am laufen? Mir kam auch in den Sinn, die Daten mal vernünftig in einer TSDB zu loggen.

                    Kommentar


                      #25
                      Hi,

                      nein, ich hab schon seit zwei Jahren keinen EibPC mehr am laufen.. Sorry..
                      Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                      Kommentar


                        #26
                        Hallo,

                        ich wollte mal eine Rückmeldung da lassen. Ich habe das bei einem EibPC eingebaut.

                        In der influxdb.conf muss UDP für eine Datenbank friegegeben werden:
                        Code:
                        [[udp]]
                        enabled = true
                        bind-address = ":8089"
                        database = "eibpc"
                        retention-policy = ""
                        
                        # InfluxDB precision for timestamps on received points ("" or "n", "u", "ms", "s", "m", "h")
                        precision = "ms"
                        
                        batch-size = 5000
                        batch-pending = 10
                        batch-timeout = "1s"
                        read-buffer = 0
                        Wichtig ist hier die Angabe der database (eibpc) und der precision (ms). Ich möchte die Datenpunkte nur mit einer zeitlichen Auflösung von 1 ms abspeichern. Das passt dann auch zur EibPC-Funktion utctime(), die die Zeit ebenfalls in ms zurückgibt.

                        Dann hier erstmal der Beispielcode, Erklärung weiter unten:
                        Code:
                        //# InfluxDB
                        InfluxIP=a.b.c.d
                        InfluxTimestampLF=$$
                        InfluxContent1 = $$
                        InfluxContentSize1 = 0u16
                        InfluxContent2 = $$
                        InfluxContentSize2 = 0u16
                        InfluxContent3 = $$
                        InfluxContentSize3 = 0u16
                        InfluxContent4 = $$
                        InfluxContentSize4 = 0u16
                        InfluxContent5 = $$
                        InfluxContentSize5 = 0u16
                        InfluxContent6 = $$
                        InfluxContentSize6 = 0u16
                        InfluxContent7 = $$
                        InfluxContentSize7 = 0u16
                        
                        if cycle(1,0) then {
                        InfluxTimestampLF=$ $ + stringformat(utctime(), 0, 6, 1, 1) + LF;
                        InfluxContent1 = $raumtemperatur,raum=b_og1_buero_sued,typ=istwert wert=$ + stringformat("OG1 - Büro Süd - Temperatur Ist-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $raumtemperatur,raum=b_og1_buero_sued,typ=sollwert wert=$ + stringformat("OG1 - Büro Süd - Temperatur Soll-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $raumtemperatur,raum=b_og1_buero_sued,typ=stellwer t wert=$ + stringformat("OG1 - Büro Süd - Stellgröße - %-x/x/x",0,6,1,1) + InfluxTimestampLF + \\
                        $raumtemperatur,raum=b_og1_buero_gf,typ=istwert wert=$ + stringformat("OG1 - Büro GF - Temperatur Ist-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $raumtemperatur,raum=b_og1_buero_gf,typ=sollwert wert=$ + stringformat("OG1 - Büro GF - Temperatur Soll-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $raumtemperatur,raum=b_og1_buero_gf,typ=stellwert wert=$ + stringformat("OG1 - Büro GF - Stellgröße - %-x/x/x",0,6,1,1) + InfluxTimestampLF + \\
                        ...
                        $raumtemperatur,raum=b_og1_gf_nebenraum,typ=stellw ert wert=$ + stringformat("OG1 - Büro GF Nebenraum - Stellgröße - %-x/x/x",0,6,1,1) + InfluxTimestampLF;
                        
                        InfluxContent2 = ...
                        
                        InfluxContent3 = ...
                        
                        InfluxContent4 = ...
                        
                        InfluxContent5 = $wetter,position=wetterstation,typ=helligkeit_ost wert=$ + stringformat("Helligkeit Ost - Lux (0..99000)-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $wetter,position=wetterstation,typ=helligkeit_sued wert=$ + stringformat("Helligkeit Süd - Lux (0..99000)-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $wetter,position=wetterstation,typ=helligkeit_west wert=$ + stringformat("Helligkeit West - Lux (0..99000)-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $wetter,position=wetterstation,typ=helligkeit_daem merung wert=$ + stringformat("Dämmerung - Lux (0..999)-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $wetter,position=wetterstation,typ=windgeschwindig keit wert=$ + stringformat("Windgeschwindigkeit - m/s-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $wetter,position=wetterstation,typ=windalarm wert=$ + convert("Windalarm - an/aus-x/x/x",$$) + InfluxTimestampLF + \\
                        $wetter,position=wetterstation,typ=regenalarm wert=$ + convert("Regenalarm - an/aus-x/x/x",$$) + InfluxTimestampLF + \\
                        $wetter,position=wetterstation,typ=temperatur wert=$ + stringformat("Außentemperatur - °C-x/x/x",4,6,1,1) + InfluxTimestampLF;
                        
                        InfluxContent6 = $knxnetzteil,position=linie3,typ=spannung wert=$ + stringformat("KNX Linie 3 - Spannung - mV-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie4,typ=spannung wert=$ + stringformat("KNX Linie 4 - Spannung - mV-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie5,typ=spannung wert=$ + stringformat("KNX Linie 5 - Spannung - mV-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie6,typ=spannung wert=$ + stringformat("KNX Linie 6 - Spannung - mV-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie7,typ=spannung wert=$ + stringformat("KNX Linie 7 - Spannung - mV-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie3,typ=strom wert=$ + stringformat("KNX Linie 3 - Stromstärke - mA-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie4,typ=strom wert=$ + stringformat("KNX Linie 4 - Stromstärke - mA-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie5,typ=strom wert=$ + stringformat("KNX Linie 5 - Stromstärke - mA-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie6,typ=strom wert=$ + stringformat("KNX Linie 6 - Stromstärke - mA-x/x/x",4,6,1,0) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie7,typ=strom wert=$ + stringformat("KNX Linie 7 - Stromstärke - mA-x/x/x",4,6,1,0) + InfluxTimestampLF;
                        
                        InfluxContent7 = $knxnetzteil,position=linie3,typ=leistung wert=$ + stringformat("KNX Linie 3 - Leistung - W-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie4,typ=leistung wert=$ + stringformat("KNX Linie 4 - Leistung - W-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie5,typ=leistung wert=$ + stringformat("KNX Linie 5 - Leistung - W-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie6,typ=leistung wert=$ + stringformat("KNX Linie 6 - Leistung - W-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie7,typ=leistung wert=$ + stringformat("KNX Linie 7 - Leistung - W-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie3,typ=temperatur wert=$ + stringformat("KNX Linie 3 - Temperatur - °C-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie4,typ=temperatur wert=$ + stringformat("KNX Linie 4 - Temperatur - °C-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie5,typ=temperatur wert=$ + stringformat("KNX Linie 5 - Temperatur - °C-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie6,typ=temperatur wert=$ + stringformat("KNX Linie 6 - Temperatur - °C-x/x/x",4,6,1,1) + InfluxTimestampLF + \\
                        $knxnetzteil,position=linie7,typ=temperatur wert=$ + stringformat("KNX Linie 7 - Temperatur - °C-x/x/x",4,6,1,1) + InfluxTimestampLF;
                        
                        InfluxContentSize1 = size(InfluxContent1);
                        sendudparray(8089u16, InfluxIP, InfluxContent1, InfluxContentSize1);
                        InfluxContentSize2 = size(InfluxContent2);
                        sendudparray(8089u16, InfluxIP, InfluxContent2, InfluxContentSize2);
                        InfluxContentSize3 = size(InfluxContent3);
                        sendudparray(8089u16, InfluxIP, InfluxContent3, InfluxContentSize3);
                        InfluxContentSize4 = size(InfluxContent4);
                        sendudparray(8089u16, InfluxIP, InfluxContent4, InfluxContentSize4);
                        InfluxContentSize5 = size(InfluxContent5);
                        sendudparray(8089u16, InfluxIP, InfluxContent5, InfluxContentSize5);
                        InfluxContentSize6 = size(InfluxContent6);
                        sendudparray(8089u16, InfluxIP, InfluxContent6, InfluxContentSize6);
                        InfluxContentSize7 = size(InfluxContent7);
                        sendudparray(8089u16, InfluxIP, InfluxContent7, InfluxContentSize7);
                        } endif
                        FAQ:
                        • Warum baue ich jedes Paket in eigenen Variablen auf? Das dient einfach dem leichteren Debugging. Man kann sich im EibPC-Debugger jeerzeit alle Variablen ansehen. Das ist auch nötig, denn man muss darauf achten, dass die InfluxContentSize jedes Pakets unter 1400 bleibt!
                        • Warum wird fast überall stringformat() statt convert() benutzt? Bei den 32 und 64 Bit Datentypen liefert convert() die Exponentialdarstellung bei Wandlung in String. Damit kann InfluxDB dann nichts anfangen. Außerdem ist bei den Messwerten die zweite (manchmal auch schon die erste) Nachkommastelle weit außerhalb der Messgenauigkeit. Da sehe ich dann keinen Sinn, das Rauschen in die Datenbank zu speichern. Mit stringformat() kann man die Anzahl der Nachkommastellen festlegen, mit convert nicht.
                        • Warum dann trotzdem manchmal convert()? Das benutze ich bei den Boolean-Werten (z.B. an/aus)
                        • Zusammengehörige Werte fließen in das gleiche InfluxDB measurement (z.B. raumtemperatur) und werden über ihre Tags unterschieden (z.B. raum=b_og1_buero_sued,typ=istwert)
                        Das Ganze funktioniert seit ein paar Tagen zuverlässig. Mit Grafana kann man sich dann die entsprechenden Anzeigen basteln:
                        Screenshot 2022-04-28 at 09-23-54 KNX Netzteile - Grafana.png

                        Kommentar


                          #27
                          So, hier noch ein Bildchen von daheim:
                          Screenshot 2022-05-01 at 00-10-30 Raumtemperaturen - Grafana.png

                          Schon ziemlich cool, die InfluxDB/Grafana Kombination

                          Kommentar


                            #28
                            Sieht gut aus. Vielleicht kannst du uns ja am Laufenden halten, wenn du mehr mit Grafana über den EibPC visualisierst.

                            mfg
                            MfG MrKnx

                            Kommentar


                              #29
                              Wollte nochmal anmerken, dass das jetzt bei mir in den letzten drei Monaten stabil läuft. Sowohl privat, als auch in der Firma.

                              grafana-cafeteria.png

                              Kommentar


                                #30
                                Zitat von Saniersiedler Beitrag anzeigen
                                Hallo,

                                ich wollte mal eine Rückmeldung da lassen. Ich habe das bei einem EibPC eingebaut.

                                In der influxdb.conf muss UDP für eine Datenbank friegegeben werden:
                                Hi,

                                Danke für den Code.Hab gerade Influx im Docker aufgesetzt und hoffe die Tage mal ein paar Daten einspielen zu können.
                                Welche Influx Version hast du in Betrieb und nutzt du noch andere Plugins für die db?

                                Grüße Hannes

                                Kommentar

                                Lädt...
                                X