FHEM Forum

FHEM - Hausautomations-Systeme => KNX/EIB => Thema gestartet von: NehCoy am 13 Januar 2014, 14:55:44

Titel: Raumtemperatur von Gira 3fach plus und 5fach plus abfragen
Beitrag von: NehCoy am 13 Januar 2014, 14:55:44
Hallo zusammen!

Haben eben diesen Beitrag http://forum.fhem.de/index.php/topic,16092.0.html (http://forum.fhem.de/index.php/topic,16092.0.html) im Forum gefunden.
Kann man auch die Ist- und Soll-Temperatur von 3fach plus und 5fach plus KNX-Tastern von Gira abfragen?
Wäre es sogar möglich die Soll-Temperatur über den Bus zu ändern?
Falls ja: Wie? Gibt es dafür Anleitungen?

Vielen Dank für eure Hilfe!

Viele Grüße
Neh Coy
Titel: Antw:Raumtemperatur von Gira 3fach plus und 5fach plus abfragen
Beitrag von: mrabdip am 16 Januar 2014, 08:54:55
Hallo,

an diesem Thema war ich vor kurzem auch dran. Als erstes muss im Tastsensor eine Gruppenadresse für die Ist-Temperatur festgelegt werden (ETS-Software). Dann kann man dort definieren, dass die Temperatur alle n-Minuten auf den Bus gesendet wird, sowie bei n-Kelvin Temperaturänderung. Alternativ kann aus FHEM mit get die Gruppenadresse abgefragt werden.

Temperaturänderung geht auch. Dazu wird eine Gruppenadresse für die Solltemperatut erstellt (ETS). Dann muss das Beschreiben über den Bus zugelassen werden.
Titel: Antw:Raumtemperatur von Gira 3fach plus und 5fach plus abfragen
Beitrag von: NehCoy am 16 Januar 2014, 15:50:33
Hallo mrabdip!

Vielen Dank für deine Antwort!
Mit anderen Worten:

Kann man dann auch mit "set" eine neue Raumtemperatur vorgeben!?
Titel: Antw:Raumtemperatur von Gira 3fach plus und 5fach plus abfragen
Beitrag von: mrabdip am 16 Januar 2014, 18:58:06
Vorraussetzung, dass die Ist-Temperatur ausgelesen werden kann, ist die Verbindung mit einer EIB-Gruppenadressse. Ob der Elektriker eine vergeben  hat, muss man erst herausfinden/fragen. Wenn ja, kann meines Wissens die Temperatur abgefragt werden. Ich hab es bei mir so eingestellt, dass die Temperatur zyklisch gesendet wird.
Setzen der Solltemperatur müsste mit set funktionieren - wenn eine Gruppenadresse vorhanden ist. Allerdings erwartet der Sensor einen der Temperatur entsprechenden HEX-Wert. Da bin ich auch noch am tüfteln.
Titel: Antw:Raumtemperatur von Gira 3fach plus und 5fach plus abfragen
Beitrag von: NehCoy am 17 Januar 2014, 07:33:01
Okay, dann muss ich mal mit dem Elektriker reden.

Der Tastsensor erwartet einen Hex-Wert?
Vermutlich ist das Problem, dass du nicht weißt, HEX-Codiert übertragen wird, oder?
Bei 4 Byte und der Tatsache, das man Zehntelgrad einstellen kann, sage ich aus dem Bauchgefühl "float".
2 Byte (also vier Hex-Werte) würden bei Raumtemperatur auch locker reichen (1 Byte Raumtemperatur Grad, 1 Byte Zehntelgrad).
Und da für Zehtnelgrad sogar ein Nibble, also 4 Bits ausreichen, könnte man das sogar noch auf 3 HEX-Werte reduzieren.
Titel: Antw:Raumtemperatur von Gira 3fach plus und 5fach plus abfragen
Beitrag von: mrabdip am 21 Januar 2014, 20:34:25
Sorry, bin noch nicht dazugekommen. Werde das mal austesten.
Titel: Antw:Raumtemperatur von Gira 3fach plus und 5fach plus abfragen
Beitrag von: NehCoy am 24 Januar 2014, 07:41:23
Kein Stress... Habe Zeit.
Das heißt: Eigentlich habe ich recht wenig freie Zeit, von daher komme ich nicht so dazu "zu basteln", wie ich es gerne möchte.
Aber du kannst dir Zeit lassen und keinen Stress machen. ;)
Titel: Antw:Raumtemperatur von Gira 3fach plus und 5fach plus abfragen
Beitrag von: NehCoy am 29 Januar 2014, 13:59:10
Hi!

Ich (glaube ich) habe die Lösung gefunden:
Zitat
DPT 9.001 DPT_Value_Temp is a 2-octet float value.
The format is MEEEEMMM MMMM MMMM (16 bits). The value is then 0,01 x M x 2^E. The mantissa (M) is coded two's complement.
If I calculated correctly, $193D is 25,36 °C.

In Einzelschritten und händisch rechnet sich das also so:
0x193D  = 0b 0001 1001 0011 1101
M EEEE MMMMMMMMMMM
0 0011 00100111101

E = 0011 = 3
M = 0 0100111101 = 317

0,01 * M * 2^Ê=
0,01 * 317 * 2 ^ 3 =
0,01* 317 * 8 = 25,36

In C#-Code  steht nun bei mir das:
                    Int16 E, M;
                    double temperature;
                    value = Convert.ToInt16(textBox_value.Text, 16);
                    E = (Int16)(value & 0x7800);
                    E >>= 11;
                    M = (Int16)(value & ~0x7800);
                    temperature = 0.01 * M * Math.Pow(2, (double)E);
                    label_float_temp.Text = temperature.ToString() + "°C";

Scheint also zu passen!
Man muss nur bei negativen Temperaturen auf das Zweierkomplement achten.
Siehe: http://de.wikipedia.org/wiki/Zweierkomplement

In C würde ich das ganze so schreiben (ungetestet):
                    int16_t E, M;
                    float temperature;
                    /* value = ConvertToInt16(&ascii[pos]); */ /*<< Konvertierung über eine eigene Funktion eines ASCII Datenstroms bestehend aus HEX Zeichen in ein 16bit Integer*/
                    /* value = (int)strtol(&ascii[pos], NULL, 16); */ /*<< Konvertierung mit strtol-Funktion eines ASCII Datenstroms bestehend aus HEX Zeichen in ein 16bit Integer*/
                    E = value & 0x7800;
                    E >>= 11;
                    M = value & ~0x7800;
                    temperature = 0.01 * M *(1 << E);

Viele Grüße
NehCoy


P.S.:
Die Maske 0x7800 kommt daher:
MEEE EMMM MMMM MMMM
0111 1000 0000 0000
  7    8    0    0