Ankündigung

Einklappen
Keine Ankündigung bisher.

Negative Werte an RRDTool übergeben

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

    Negative Werte an RRDTool übergeben

    Hallo zusammen,

    ich lese per PHP und knxd regelmäßig einen Temperaturwert aus und übergebe diesen an RRDtool. Das klappt schon ganz gut, ich habe nur das Problem das negative Werte nicht richtig ausgelesen werden.

    Hat jemand eine Lösung, wie ich negative Werte korrekt übergeben kann?

    Hier mein bisheriger Code

    PHP-Code:
    $temperatur01 exec('knxtool read ip:localhost 4/4/4');
    $temperatur01 hexdec("$temperatur01");
    $temperatur01 $temperatur01 100;
    $temperatur01 round($temperatur01,2);
    echo (
    "$temperatur01");
    //Temperatur an rrdtool zum speichern übergeben
    exec("/usr/bin/rrdtool update /home/pi/Temperatur/aussentemperatur.rrd N:$temperatur01"); 

    #2
    Hallo
    Versuche doch mal $temperatur mit einem negativen Wertzu ersetzen z.B. "-25".
    Wenn das geht liegt es nicht an rrdtool.
    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


      #3
      Ich habe einen negativen Wert an rrdtool übergeben, das wird korrekt verarbeitet. Das Problem ist glaube ich, dass das Skript keinen negativen Wert übergibt.

      Kommentar


        #4
        Hallo
        Versuche intval($temperatur01)
        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


          #5
          Okay, ich probiere es aus.

          Kommentar


            #6
            mherrmann welchen DPT hat die Adresse 4/4/4 eigentlich? Wenn es DPT 9 ist, dann musst du das nach der richtigen Formel berechnen und nicht einfach HEX nach DEC umwandeln.
            EIB/KNX, VISU mit knxd + linknx + knxweb, Steuerbefehle via SMS und Email mit postfix + procmail

            Kommentar


              #7
              Vielen Dank für die Unterstützung. Ich habe von Dir, NetFritz einen Code in einem anderen Forum gefunden. Ich war so frei und habe diesen Code angepasst.

              PHP-Code:

              <?php
              $temperatur01 
              exec('knxtool read ip:localhost 4/4/4');

              $temperatur01 hexdec($temperatur01);
              $wert = ($temperatur01 0x07ff);
               if ((
              $temperatur01 0x08000) != 0)
                   {
                    
              $wert $wert 0xfffff800;
                    
              $wert $wert *-1;
                     }
               
              $wert $wert << (($temperatur01 0x07800) >> 11);
                if ((
              $temperatur01 0x08000) != 0)
                      {
                       
              $wert $wert * -1;
                       }
              $temperatur01=$wert/100;

              $temperatur01 round($temperatur01,2);

              echo (
              $temperatur01);

              //Temperatur an rrdtool zum speichern übergeben
              exec("/usr/bin/rrdtool update /home/pi/Temperatur/aussentemperatur.rrd N:$temperatur01");  



              ?>

              Kommentar


                #8
                Hallo
                Huch, das ist schon ewig her.
                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
                  Zitat von mherrmann Beitrag anzeigen
                  Vielen Dank für die Unterstützung. Ich habe von Dir, NetFritz einen Code in einem anderen Forum gefunden. Ich war so frei und habe diesen Code angepasst.
                  Ich möchte darauf hinweisen, dass der Code für negative Werte nicht stimmt, weil negative Werte im 2er-Komplement angegeben sind und entsprechend zurückgerechnet werden müssen und nicht einfach mit -1 multipliziert werden können. Die Umrechnungsformel müsste meiner Meinung nach so ausschauen:
                  Code:
                  $intval = hexdec($hexval);
                  
                  $exp  = ($intval & 0x7800) >> 11;
                  $mant = ($intval & 0x07ff);
                  
                  if (($intval & 0x8000) != 0) {
                    $mant = -((1 << 11) - $mant);
                  }
                  
                  $temp = ($mant << $exp) * 0.01;
                  EIB/KNX, VISU mit knxd + linknx + knxweb, Steuerbefehle via SMS und Email mit postfix + procmail

                  Kommentar

                  Lädt...
                  X