ZWave_thermostatSetpointSet -> halbes Grad

Begonnen von jather, 17 November 2016, 17:41:55

Vorheriges Thema - Nächstes Thema

jather

Hallo liebe community,

mich beschftigt aktuell der Wunsch die Temperatur an meinen Heizkörperthermostaten genauer als 1°C einstellen zu können, also z.b. möchte ich 21,5°C einstellen können.

Leider sind meine perl-Kenntnisse nur rudimentär, weshalb ich mich nicht wage das Modul 10_ZWave.pm zu verändern.
Sie reichen dennoch aus, um einen vermeintlichen Ansatzpunkt zu finden, an dem ein versirter perl-Virtuose hoffentlich in ein paar Minuten den gewünschten Effekt erzielen kann :)

Nach diesem Post https://forum.fhem.de/index.php/topic,14346.msg92497.html#msg92497 sind zwei Bytes für die Codierung der Temperatur zuständig und ich meine, dass über diese Bytes auch halbe Grade (oder sogar noch genauer?!) übermittelt werden können. Also z.b. für 21,5 °C => 2150 (dez) => 08 66 (hex).
Nach ein bisschen Stöbern in 10_ZWave.pm habe ich die Zeilen 1300ff. gefunden (ZWave_thermostatSetpointSet) welche den Set-Befehl verarbeiten und den entsprechenden HEX-Code generieren, der anschließend an das Ventil gesendet wird (korrigiert mich bitte, wenn ich falsch liege). Außerdem meine ich aus dem Code zu lesen, dass im ersten Argument des Funktionsaufrufs die Temperatur übermittelt wird.
Was ich bisher noch nicht herausgefunden habe ist, ob ZWave_thermostatSetpointSet prinzipiell mit floats arbeiten kann oder nicht.

Unabhängig davon schaffe ich es aber nicht meine Wunschtemperatur mit Nachkommastellen an ZWave_thermostatSetpointSet zu übermitteln. Ich vermute, es liegt an folgenden Zeilen (gefunden in ZWave_Cmd Zeilen 920-925):
if($cmdFmt !~ m/%s/ && $cmd !~ m/^config/) {
    for(my $i1 = 0; $i1<int(@a); $i1++) {
      return "Error: $a[$i1] is not a decimal number"
        if($a[$i1] !~ m/^[-\d]+$/);
    }
  }


So wie ich das sehe, werden hier alle Nicht-Integer Argumente abgefangen, weshalb auch die angegebene Fehlermeldung erscheint wenn ich "set HeizungWohnzimmer setpointHeating 21.5" (oder 21,5) eingebe.

Ich denke, der Block hat schon seine Daseinsberechtigung, aber ist es möglich hier eine Ausnahme für setpointHeating einzufügen?
Oder ist das der falsche Ansatz?

Viele Grüße!

krikan

Hallo!

Wenn ich die commandref richtig verstehe, dann unterstützt der Befehl "thermostatSetpointSet", auf den bei "setpointHeating" für erweiterte Steuerungsvarianten verwiesen wird, Nachkommastellen.
Das unterscheidet ihn gerade vom Befehl "setpointHeating", der nur Ganzzahlen versteht.
Funktioniert irgendetwas nicht, wenn Du statt "setpointHeating" den Befehl "thermostatSetpointSet" verwendest?

Gruß, Christian

jather

Besten Dank! Bisher habe ich immer setpointHeating verwendet. :-[ mit thermostatSetpointSet klappt es wunderbar  :)