HomeMatic Timerwerte: Unterschied zwischen den Versionen

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
K (Typos korrigiert; Perl Code mit syntaxhighlight formatiert; Wikify; Schreibweise Home*M*atic)
Keine Bearbeitungszusammenfassung
 
Zeile 20: Zeile 20:


In FHEM genutzte Timerwerte, die nicht den darstellbaren Werten entsprechen, werden gerundet. Dabei scheint FHEM nicht immer den Besten, also naheliegensten Wert zu verwenden. Möglicherweise verhindert ein Bug, dass der Zeitwert 31s immer sinnvoll verwendet wird. So wird von FHEM ''on-for-timer 1861'' auf den Wert 1800 (6x300) gerundet, obwohl 1860 (60x31) näher wäre.
In FHEM genutzte Timerwerte, die nicht den darstellbaren Werten entsprechen, werden gerundet. Dabei scheint FHEM nicht immer den Besten, also naheliegensten Wert zu verwenden. Möglicherweise verhindert ein Bug, dass der Zeitwert 31s immer sinnvoll verwendet wird. So wird von FHEM ''on-for-timer 1861'' auf den Wert 1800 (6x300) gerundet, obwohl 1860 (60x31) näher wäre.
[[CUL_HM]] verwendet diese Funktion um die Timerwerte umzusetzen:
<syntaxhighlight lang="perl">
sub CUL_HM_encodeTime16($) {####################
  my $v = shift;
  return "0000" if($v !~ m/^[+-]?\d+(\.\d+)?$/ || $v < 0.05);
  my $ret = "FFFF";
  my $mul = 10;
  for(my $i = 0; $i < 32; $i++) {
    if($v*$mul < 0x7ff) {
      $ret=sprintf("%04X", ((($v*$mul)<<5)+$i));
      last;
    }
    $mul /= 2;
  }
  return ($ret);
}
</syntaxhighlight>
[[Kategorie:HomeMatic Components|2Info]]
[[Kategorie:HOWTOS]]

Aktuelle Version vom 12. März 2021, 03:48 Uhr

HomeMatic Aktoren beherrschen "on for-timer" im Aktor. Die Zeiten werden dabei in einem 8 Bit Wert übergeben. Obgleich dies besser ist als bei FS20, das nur 7 Bit übermittelt, sind damit trotzdem nur 512 Werte möglich. Um mit diesen Werten im unteren Bereich möglichst fein aufzulösen, andererseits aber auch lange Zeiten zu ermöglichen, ist die Verteilung nicht linear.

Die Timerwerte sind dabei so aufgebaut, dass die zur Verfügung stehenden 8 Bit in einen Bereich zu 5 Bit und einen zu 3 Bit aufgespalten werden. Der 5 Bit Anteil stellt die Sekundenwerte von 1-31 dar, der 3 Bit Anteil ist ein Multiplikator. Da man mit 3 Bit 8 Werte darstellen kann, gibt es 8 Multiplikatorwerte, diese sind 0.1, 1, 5, 10, 60, 300, 600 und 3600.

Damit lassen sich die zur Verfügung stehenden Timerwerte bilden.

Daraus ergeben sich folgende mögliche Werte:

  • 0.1s bis 3.1s (Werte 1-31 mit Multiplikator 0,1 - Auflösung 0,1 Sekunden)
  • 3.2 bis 31s (Werte 1-31 mit Multiplikator 1 - Auflösung 1 Sekunde)
  • 31.1 bis 155s = 2min35s (Werte 1-31 mit Multiplikator 5 - Auflösung 5 Sekunden)
  • 155.1 bis 310s = 5min10s (Werte 1-31 mit Multiplikator 10 - Auflösung 5 Sekunden)
  • 310.1s bis 31min (Werte 1-31 mit Multiplikator 60 - Auflösung 1 Minute)
  • 31min bis 155min = 2h35min (Werte 1-31 mit Multiplikator 300 - Auflösung 5 Minuten)
  • 155min bis 310min = 5h10min (Werte 1-31 mit Multiplikator 600 - Auflösung 10 Minuten)
  • 310min bis 30h (Werte 1-31 mit Multiplikator 3600 - Auflösung 1 Stunde, wobei der letzte Wert 31 Sekunden x 3600 = 31 Stunden als "immer an" interpretiert wird)

Aufgrund der überlappenden Zeitbereiche ist die Codierung nicht eindeutig. 1800 Sekunden lassen sich z.B. sowohl als 6*300 als auch als 30*600 darstellen.

In FHEM genutzte Timerwerte, die nicht den darstellbaren Werten entsprechen, werden gerundet. Dabei scheint FHEM nicht immer den Besten, also naheliegensten Wert zu verwenden. Möglicherweise verhindert ein Bug, dass der Zeitwert 31s immer sinnvoll verwendet wird. So wird von FHEM on-for-timer 1861 auf den Wert 1800 (6x300) gerundet, obwohl 1860 (60x31) näher wäre.