Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - rrdfetch und Response

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

    - √ - rrdfetch und Response

    Hallo
    Ich möchte in meinen CV-Diagram auch die RRDs vom FLUSKO anzeigen.

    In der CV visu_config,xml habe ich folgendes Diagram erstellt.
    Code:
             <diagram height="300px" width="700px" period="24" refresh="300" series="hour"                      gridcolor="#707070" popup="true" previewlabels="true" tooltip="true" legendposition="nw">
                     <label>FLUSKO</label>
                     <axis position="right" unit=" W">temp</axis>
                     <rrd yaxis="temp" color="#ffff00" label="FLUSKO">flusko</rrd>
              </diagram>
    Diese RRDs kann man mit Hilfe von CURL von einer FLUSKO-API ausgeben lassen.
    Dazu habe ich unter /usr/lib/cgi-bin/rrdfetch etwas erweitert.

    Code:
    #!/bin/sh
    #echo Content-Type: text/plain
    echo Content-Type: application/json
    echo Content-Encoding: gzip
    echo
    
    #rrdtool fetch /var/www/rrd/Luftfeuchte_Bad_knx5-2-79.rrd AVERAGE -s-24h
    RRD=`echo "$QUERY_STRING" | sed -n 's/^.*rrd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
    DS=`echo "$QUERY_STRING" | sed -n 's/^.*ds=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
    START=`echo "$QUERY_STRING" | sed -n 's/^.*start=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
    END=`echo "$QUERY_STRING" | sed -n 's/^.*end=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
    RES=`echo "$QUERY_STRING" | sed -n 's/^.*res=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
    
    #FIXME: check path traversal
    
    # rrdtool fetchj /var/www/rrd/$RRD $DS -s$START -e$END -r$RES | gzip -c
    
     if [ "$RRD" == "flusko.rrd" ]
          then
           #wget -O - http://wiregate544/flot/curl_abfrage.php
           result=$(wget -qO- http://wiregate544/flot/curl_abfrage.php)
           echo "$result"
           echo "$result" >> /var/www/myhouse/log/flusko.txt
     else
          rrdtool fetchj /var/www/rrd/$RRD $DS -s$START -e$END -r$RES | gzip -c
     fi
    $result liefert nun die gleiche Antwort wie rrdfetch in Firebug Konsole allerdings wird mein Response in Firebug nicht angezeigt.

    Ich schreibe zur Kontrolle mit
    "echo "$result" >> /var/www/myhouse/log/flusko.txt"
    die Antwort in eine Datei, dort kommt sie richtig an.

    Wie kann ich denn eine Anwort an die CV senden?

    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

    #2
    Hi,
    auf die Schnelle würde ich sagen dass du die Ausgabe noch mit GZIP komprimieren musst, also: echo "$result" | gzip -c .

    Gruß
    Carsten

    Kommentar


      #3
      Hallo
      Ja jetzt ist die Antwort da, aber mein Diagram zeigt nicht an.
      Der Timestamp in der Antwort muss wohl der Java-Script Timestamp in ms sein?
      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


        #4
        Ja der Timestamp muss in ms sein. Ich hatte ein ähnliches Problem mit dem Timestamp aus einer MySQL-DB. Hab dann einfach bei der Ausgabe "000" angehängt.
        Allerdings wurde das Diagramm bei mir trotzdem schon angezeigt, nur mit einer falschen Zeiteinteilung. Vielleicht stimmt doch noch etwas an deinem Aufbau des JSON-Format nicht.

        Gruß
        Carsten

        Kommentar


          #5
          Hallo
          Hier mal der API-Aufruf mit PHP.
          Code:
          function curl_abfrage($token,$url,$sensor_id,$interval,$unit){
                  $request = $url.$sensor_id."?interval=".$interval. "&unit=" . $unit; 
                  $header=array();
                  $header[]="Accept: application/json";
                  $header[]="X-Version: 1.0";
                  $header[]='X-Token: '.$token;
                  
                  $ch=curl_init();
                  curl_setopt($ch,CURLOPT_URL,$request);
                  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
                  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
                  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
                  curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
                  
                  $str=curl_exec($ch);
                  curl_close($ch);
          #        $str=json_decode($str);
          #        for($x = 0; $x < count($str); $x++) { 
          #             $str[$x][0] = $str[$x][0]."000"; # Timestamp an JS-Timestamp anpassen
          #        }
          #       $str=json_encode($str);
                  return($str);
          }
          Wenn ich das so aufrufe bekomme ich das in Firebug so angezeigt.
          Code:
          GET http://wiregate544/cgi-bin/rrdfetch?rrd=flusko.rrd&ds=AVERAGE&start=end-24hour&end=now&res=60
          200 OK
          [IMG]chrome://firebug/content/blank.gif[/IMG] 1.61sjquery.js (Zeile 8434)
          ParameterHeaderAntwortJSONCookies
          [[1358693100,419],[1358694000,421],[1358694900,763],[1358695800,692],[1358696700,589],[1358697600,598],[1358698500,716],[1358699400,715],[1358700300,635],[1358701200,561],[1358702100,561],[1358703000,664],[1358703900,682],[1358704800,631],[1358705700,565],[1358706600,551],[1358707500,571],[1358708400,642],[1358709300,627],[1358710200,646],[1358711100,556],[1358712000,563],[1358712900,589],[1358713800,605],[1358714700,619],[1358715600,634],[1358716500,588],[1358717400,657],[1358718300,674],[1358719200,564],[1358720100,647],[1358721000,633],[1358721900,542],[1358722800,597],[1358723700,574],[1358724600,384],[1358725500,377],[1358726400,435],[1358727300,592],[1358728200,532],[1358729100,682],[1358730000,684],[1358730900,724],[1358731800,687],[1358732700,598],[1358733600,581],[1358734500,595],[1358735400,513],[1358736300,430],[1358737200,428],[1358738100,364],[1358739000,339],[1358739900,352],[1358740800,401],[1358741700,351],[1358742600,332],[1358743500,366],[1358744400,385],[1358745300,402],[1358746200,390],[1358747100,431],[1358748000,402],[1358748900,355],[1358749800,409],[1358750700,401],[1358751600,336],[1358752500,373],[1358753400,367],[1358754300,414],[1358755200,420],[1358756100,542],[1358757000,727],[1358757900,525],[1358758800,464],[1358759700,433],[1358760600,403],[1358761500,492],[1358762400,426],[1358763300,483],[1358764200,454],[1358765100,2189],[1358766000,470],[1358766900,449],[1358767800,465],[1358768700,419],[1358769600,404],[1358770500,573],[1358771400,483],[1358772300,485],[1358773200,398],[1358774100,365],[1358775000,476],[1358775900,539],[1358776800,496],[1358777700,444],[1358778600,667],[1358779500,"-nan"]]
          Der Timestamp ist in sec.
          Mache ich die Kommentare raus dann habe ich den Timestamp in ms,
          aber er steht dann in der Firebug Ausgabe in ""
          Code:
          [["1358694000000",421],["1358694900000",763],["1358695800000",692],["1358696700000",589],
          bei einem CV-Diagram sieht die Ausgabe so aus,
          da ist vor jedem Timestamp eine [
          und vor Value eine [
          und hinter Value zwei ]].
          und Value steht in "".
          Code:
          [[1358650500000,["23.40"]],[1358650800000,["23.40"]],[1358651100000,["23.40"]],
          Wie stelle ich das an, da ich das gleiche Ausgabeformat bekomme?
          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


            #6
            Mit dieser Curl-Funktion kenne ich mich leider nicht aus. Ich hatte mir in C ein Programm geschrieben, dass anhand der Übergabeparameter die Daten aus einer MySQL-DB selektiert und diese in dem richtigen Format zusammenbaut.

            Gruß
            Carsten

            Kommentar


              #7
              Hallo
              Ich werde das auch wohl zusammenbauen.
              Vielen Dank
              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


                #8
                Hallo
                So geht es.
                Code:
                        $str=json_decode($str);
                        $time_value = "[";
                        for($x = 0; $x < count($str); $x++) { 
                            $time_value =  $time_value . "[" . $str[$x][0] . "000" . ",[" . '"' . $str[$x][1] . '"' . "]],";
                        }
                        $str = substr_replace($time_value,']',-1,1);
                        return($str);
                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


                  #9
                  Siehe auch https://knx-user-forum.de/cometvisu/...e-daten.html#8
                  Es wäre mittelfristig sehr zielführend eine "Version" in den JSON-Output zu packen. Also bitte das auch alle -> rrdtool-devel schicken und das auch zu untermauern.

                  Makki

                  P.S.: Warum verwendet OpenWRT wohl rrdtool 1.0
                  EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                  -> Bitte KEINE PNs!

                  Kommentar

                  Lädt...
                  X