HomeMatic Timerwerte: Unterschied zwischen den Versionen

Aus FHEMWiki
K (typo)
K (Typos korrigiert; Perl Code mit syntaxhighlight formatiert; Wikify; Schreibweise Home*M*atic)
Zeile 1: Zeile 1:
Homematic Timerzeiten
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.  
 
 
HM 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 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.
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 Multipikator.  
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.
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.


Zeile 11: Zeile 8:


Daraus ergeben sich folgende mögliche Werte:
Daraus ergeben sich folgende mögliche Werte:
* 0.1s bis 3.1s (Werte 1-31  mit Multipikator 0,1 - Auflösung 0,1 Sekunden)
* 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 Multipikator 1 - Auflösung 1 Sekunde)
* 3.2 bis 31s (Werte 1-31  mit Multiplikator 1 - Auflösung 1 Sekunde)
* 31.1 bis 155s = 2min35s (Werte 1-31  mit Multipikator 5 - Auflösung 5 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 Multipikator 10 - Auflösung 5 Sekunde)
* 155.1 bis 310s = 5min10s (Werte 1-31  mit Multiplikator 10 - Auflösung 5 Sekunden)
* 310.1s bis 31min (Werte 1-31  mit Multipikator 60 - Auflösung 1 Minute)
* 310.1s bis 31min (Werte 1-31  mit Multiplikator 60 - Auflösung 1 Minute)
* 31min bis 155min = 2h35min (Werte 1-31  mit Multipikator 300 - Auflösung 5 Minuten)
* 31min bis 155min = 2h35min (Werte 1-31  mit Multiplikator 300 - Auflösung 5 Minuten)
* 155min bis 310min = 5h10min (Werte 1-31  mit Multipikator 600 - Auflösung 10 Minuten)
* 155min bis 310min = 5h10min (Werte 1-31  mit Multiplikator 600 - Auflösung 10 Minuten)
* 310min bis 30h (Werte 1-31  mit Multipikator 3600 - Auflösung 1 Stunde, wobei der letzte Wert 31 Sekunden x 3600 = 31 Stunden als "immer an" interpretiert wird.
* 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 also auch als 30*600 darstellen


In FHEM genutzten Timerwerte die nicht den darstellbaren Werte 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 der Wert 1800 (6x300) gerundet, obwohl 1860 (60x31) näher wäre.
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.


cul_hm verwendet diese Funktion um die Timerwerte umzusetzen:
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($) {####################
  sub CUL_HM_encodeTime16($) {####################
   my $v = shift;
   my $v = shift;
Zeile 41: Zeile 38:
   return ($ret);
   return ($ret);
  }
  }
 
</syntaxhighlight>


[[Kategorie:HomeMatic Components|2Info]]
[[Kategorie:HomeMatic Components|2Info]]
[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]

Version vom 11. März 2021, 18:31 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.

CUL_HM verwendet diese Funktion um die Timerwerte umzusetzen:

 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);
 }