Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Datentyp für Temperaturen - Anzeige in ETS

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - Datentyp für Temperaturen - Anzeige in ETS

    Hallo,

    Temperaturdaten vom 1 Wire werden in einer ETS mit komplett leerer Datenbank angezeigt. Im Gruppenmonitor wird die die Temperatur von Hex 0x075F korrekt nach 18,87 umgerechnet. Doch voher weiss die ETS wie umgerechnet werden soll? Am Telegramm kann ich es nicht erkennen. Gruppenadressen sind im Projekt keine angelegt.

    Ich frage, weil ich mit einer anderen Hardware auch 2 Byte Temperaturwerte auf den Bus sende, diese aber ganz anders in Klartext konvertiert werden. Beispiel 0x08CA ergibt 4,04 und nicht wie erwartet 22,5.

    Any Ideas?

    VG

    mode

    #2
    Die ETS nimmt in diesem Fall das wahrscheinlichste (DPT 9.x) an und tut da mal raten
    Das WG macht das ähnlich, weil erfahrungsgemäss es die Leute nicht so damit haben den richtigen DPT einzustellen oder gar in der ETS zu "verbinden"..

    Zu richtigen Werten kommt man, indem man der ETS und dann via Export (nur ETS4, sonst manuell) dem WG das beibringt; 2 Byte können halt "IEEE 754 float" oder signed/unsigned 16 Bit sein..
    Nicht das ich das perfekt finde, ist aber so..

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      Nein, da muss noch mehr hinter stecken.
      Wenn die ETS raten würde, dann würde sie ja auch bei meinen selbst gesendeten Temperaturen richtig raten. Die Telegramme im Gruppenmonitor sind bis auf PhyAdr und GA gleich.

      Selbst im eib.log steht der richtige Datentyp beim Wiregate schon fest:
      Code:
      2012-11-16 00:17:13.772,A_GroupValue_Write,1.1.200,5/1/40,07 A1,19.53,DPT_Value_Temp,9.001,0,low,7,T_DATA_XXX_REQ,0
      bei der anderen 2 Byte Temperatur die nicht korrekt umgeformt wird steht folgendes:
      Code:
      2012-11-16 00:17:46.918,A_GroupValue_Write,1.1.80,9/0/10,08 FC,,,,0,low,6,T_DATA_XXX_REQ,0
      Kann es sein, dass diese Informationen in den Bytes stehten die im Gruppenmonitor garnicht angezeigt werden, sondern nur im Busmonitor? Dort sieht man immer 4 Bytes vor dem obligatorischen BC für den Telegrammbegin eines "normalen" Eib Telegramms.

      Kommentar


        #4
        Ok kann meine Frage selber beantworten.
        Ich hatte auf den 1 Wire Sensoren immer Tempreaturen < 20 Grad. Und da reicht es die Temp * 100 auf den Bus zu geben. Bei Temperaturen > 20 Grad muss aber noch mehr gerechnet werden.
        Quelle:
        KNX FAQ

        Dennoch wäre es interessant zu wissen, wie der Datentyp im EIB Telegramm mit übermittelt wird, ohne dass es in der ETS eingestellt werden muss.

        Kommentar


          #5
          Nun, die ETS hab ich ned programmiert, das ist nur eine Vermutung aufgrund beobachtung..

          Bei WG kann ich dir sicher sagen: das "vermutet" bei 2 Byte einfach erstmal DPT9 (IEEE float) sofern nicht anders konfiguriert.

          Im KNX-Telegramm steht das definitiv nicht drin (IMHO ein Designfehler, aber egal..);
          Am einfachsten prüfen kann man das im Gruppenmonitor der ETS, da kann man den DPT pro GA "on the fly" ändern.
          Bei signed/unsigned gehts auch ohne "im Kopf", bei float eher ned weil das format ist - nennen wir es mal: anders
          (da kann aber KNX nix für, da haben sich Mathematiker mit Mantisse&Co ausgetobt, um uns 1-2 Byte zu sparen - und dafür das leben schwer zu machen)

          Makki

          Wenns nicht geht: mal 2-3 Beispiele mit den zwei Bytes und dem Sollwert darin, ich hab da ein paar scripts..
          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
          -> Bitte KEINE PNs!

          Kommentar


            #6
            Indeed,
            es lag nur an dem Mantissendedönse was ich übersehene habe, da meine Testfühler alle unter 20 Grad angezeigt haben.

            Mit diesem Code wird alles gut
            Code:
                            while (g_to_knx >= 2047)    // DPT 9.001
                            {
                                tmp_div++;
                                g_to_knx /= 2;
                            }
                            g_to_knx |= (tmp_div<<11);
            DANKE!

            Kommentar


              #7
              Bitte.
              Und eine bitte: wie wärs dann einfach gleich decode_dpt9 aus
              /wiregated/trunk/usr/sbin/wiregated.pl
              zu nehmen und/oder gleich dazu zu sagen, das man gerade zu lernen versucht, es roh selber zu machen.. grmpf..

              Makki
              EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
              -> Bitte KEINE PNs!

              Kommentar

              Lädt...
              X