diff --git a/fhem/contrib/DS_Starter/60_Watches.pm b/fhem/contrib/DS_Starter/60_Watches.pm
index ec29f9d86..54bd079f2 100644
--- a/fhem/contrib/DS_Starter/60_Watches.pm
+++ b/fhem/contrib/DS_Starter/60_Watches.pm
@@ -71,6 +71,8 @@ BEGIN {
# Versions History intern
my %vNotesIntern = (
+ "0.22.0" => "09.05.2020 new attr 'digitalBorderDistance' for left and rigtht border distance of digital text ",
+ "0.21.1" => "09.05.2020 fix calculate forerun of 'text' dynamically if digitalTextDigitNumber=0 ",
"0.21.0" => "08.05.2020 support of alarm time of model digital 'watch' ",
"0.20.1" => "08.05.2020 asynchron read digital text and much more fixes, set client as default timeSource ",
"0.20.0" => "07.05.2020 asynchron read alarmTime reading, some fixes ",
@@ -109,7 +111,8 @@ sub Initialize {
$hash->{FW_summaryFn} = \&FWebFn;
$hash->{FW_detailFn} = \&FWebFn;
$hash->{AttrFn} = \&Attr;
- $hash->{AttrList} = "digitalColorBackground:colorpicker ".
+ $hash->{AttrList} = "digitalBorderDistance:slider,0,1,40 ".
+ "digitalColorBackground:colorpicker ".
"digitalColorDigits:colorpicker ".
"digitalDisplayPattern:countdownwatch,staticwatch,stopwatch,text,watch ".
"digitalDigitAngle:slider,-30,0.5,30,1 ".
@@ -341,7 +344,7 @@ sub Attr {
}
if ($cmd eq "set") {
- if ($aName eq "digitalTextDigitNumber" && $aVal !~ /^[0-9]+$/x) {
+ if ($aName =~ /digitalTextDigitNumber|digitalBorderDistance/ && $aVal !~ /^[0-9]+$/x) {
return qq{The value of "$aName" is not valid. Only integers are allowed !};
}
}
@@ -411,7 +414,6 @@ sub digitalWatch {
my ($d) = @_;
my $hash = $defs{$d};
my $alarmdef = "00:00:00";
- my $hattr = AttrVal($d, "htmlattr", "width='150' height='50'");
my $bgc = AttrVal($d, "digitalColorBackground", "C4C4C4");
my $dcd = AttrVal($d, "digitalColorDigits", "000000");
my $addp = AttrVal($d, "digitalDisplayPattern", "watch");
@@ -423,6 +425,8 @@ sub digitalWatch {
my $adsd = AttrVal($d, "digitalSegmentDistance", 0.5);
my $adda = AttrVal($d, "digitalDigitAngle", 9);
my $adtdn = AttrVal($d, "digitalTextDigitNumber", 0);
+ my $abdist = AttrVal($d, "digitalBorderDistance", 8);
+ my $hattr = AttrVal($d, "htmlattr", "width='150' height='50'");
my $tsou = AttrVal($d, "timeSource", "client");
my $deftxt = " ";
@@ -430,40 +434,34 @@ sub digitalWatch {
my $ddt = ReadingsVal ($d, "displayText", $deftxt);
my $alarm = ReadingsVal ($d, "alarmTime", "aa:bb:cc");
- my $ddp = "###:##:##"; # dummy
- my ($h,$m,$s,$txtc) = (0,0,0,0);
- my $forerun = ""; # init Vorlauf bei Laufschrift
+ my $ddp = "###:##:##"; # dummy
+ my ($h,$m,$s,$txtc) = (0,0,0,0);
- if($addp !~ /text/) {
- $ddt = "((hours_$d < 10) ? '0' : '') + hours_$d + ':' +
- ((minutes_$d < 10) ? '0' : '') + minutes_$d + ':' +
- ((seconds_$d < 10) ? '0' : '') + seconds_$d";
+ my $bdist = ""; # Abstand zum linken und rechten Rand
+ for (my $i=0; $i<=$abdist; $i++ ) {
+ $bdist .= " ";
}
- if($addp eq "watch") {
+ if($addp !~ /text/) {
+ $ddt = "((hours_$d < 10) ? '0' : '') + hours_$d + ':' +
+ ((minutes_$d < 10) ? '0' : '') + minutes_$d + ':' +
+ ((seconds_$d < 10) ? '0' : '') + seconds_$d";
+ } else {
+ $ddt = "'".$ddt."'";
+ }
+
+ if($addp eq "watch") { # Digitaluhr
$ddp = "###:##:##";
} elsif ($addp eq "stopwatch" || $addp eq "countdownwatch") {
$alarmdef = "aa:bb:cc" if($addp eq "stopwatch"); # Stoppuhr bei Start 00:00:00 nicht Alerm auslösen
$ddp = "###:##:##";
- } elsif ($addp eq "staticwatch") {
+ } else { # statische Uhrzeitanzeige
$ddp = "###:##:##";
$h = ReadingsVal($d, "hour" , 0);
$m = ReadingsVal($d, "minute", 0);
$s = ReadingsVal($d, "second", 0);
-
- } elsif ($addp eq "text") {
- $txtc = length($ddt);
- $txtc = $adtdn if($adtdn); # per Attribut definierte Anzahl der TextDigits im Display
- $ddp = "";
-
- for(my $i = 0; $i <= $txtc; $i++) { # die Anzahl der TextDigits im Display berechnen
- $ddp .= "#";
- $forerun .= " "; # Vorlauf bei Laufschrift = Länge des Schriftzuges (default)
- }
-
- $ddt = "' ".$ddt."'";
}
return "
@@ -496,11 +494,12 @@ sub digitalWatch {
var minutes_$d;
var seconds_$d;
var startDate_$d;
- var almtime0_$d = '$alarm'; // Alarmzeit initialisieren
- var digitxt_$d = ' $deftxt'; // default Digitaltext initialisieren
- var tlength_$d = '$txtc'; // Textlänge Digitaltext initialisieren
- var tticker_$d = '$rdtt'; // Tickereinstellung initialisieren
- var zmodulo_$d = 0; // Hilfszähler
+ var almtime0_$d = '$alarm'; // Alarmzeit initialisieren
+ var digitxt_$d = '$deftxt'; // default Digitaltext initialisieren
+ var tticker_$d = '$rdtt'; // Tickereinstellung initialisieren
+ var zmodulo_$d = 0; // Hilfszähler
+ var distBorderright_$d = '$bdist'; // Abstand zum rechten Rand
+ var distBorderleft_$d = '$bdist'; // Abstand zum linken Rand
function SegmentDisplay_$d(displayId_$d) {
this.displayId_$d = displayId_$d;
@@ -1355,26 +1354,34 @@ sub digitalWatch {
}
}
- if (watchkind_$d == 'text') {
+ if (watchkind_$d == 'text') {
+ tlength_$d = digitxt_$d.length; // Länge des Textes
+ if($adtdn > 0) {
+ tlength_$d = $adtdn;
+ }
+
display_$d.pattern = ''; // Template erstellen
+ forerun_$d = ''; // Vorlauf Textticker initialisieren
for (var i = 0; i <= tlength_$d; i++) {
display_$d.pattern += '#';
+ forerun_$d += ' ';
}
- display_$d.pattern += ' '; // Abstand Text zum rechten Rand
-
- var rttime = new Date();
- var rthours = rttime.getHours();
- var rtminutes = rttime.getMinutes();
- var rtseconds = rttime.getSeconds();
- var rtmillis = rttime.getMilliseconds();
+ display_$d.pattern += distBorderright_$d; // Abstand Text zum rechten Rand
+ display_$d.pattern = distBorderleft_$d + display_$d.pattern //
- if (tticker_$d == 'on') { // Text als Laufband ?
- var text_$d = '$forerun'+digitxt_$d+' ';
+ if (tticker_$d == 'on') { // Text als Laufband ?
+ var rttime = new Date();
+ var rthours = rttime.getHours();
+ var rtminutes = rttime.getMinutes();
+ var rtseconds = rttime.getSeconds();
+ var rtmillis = rttime.getMilliseconds();
+
+ var text_$d = forerun_$d+digitxt_$d+' ';
var index_$d = ( 2 * (rtseconds + 60*rtminutes + 24*60*rthours) + Math.floor(rtmillis / 500) ) % (text_$d.length - 6);
- value_$d = text_$d.substr(index_$d, tlength_$d+parseInt(1));
+ value_$d = distBorderleft_$d + text_$d.substr(index_$d, tlength_$d+1);
} else {
- value_$d = digitxt_$d;
+ value_$d = distBorderleft_$d + digitxt_$d;
}
if (modulo2_$d != zmodulo_$d) {
@@ -1382,12 +1389,7 @@ sub digitalWatch {
url_$d = makeCommand(command);
\$.get( url_$d, function (data) {
digitxt_$d = data.replace(/\\n/g, '');
- digitxt_$d = ' '+digitxt_$d;
- tlength_$d = digitxt_$d.length-1; // Länge des Textes abzgl. 1 für ' '
- if($adtdn > 0) {
- tlength_$d = $adtdn;
- }
- return (digitxt_$d, tlength_$d);
+ return (digitxt_$d);
}
);
}
@@ -2607,6 +2609,13 @@ Als Zeitquelle können sowohl der Client (Browserzeit) als auch der FHEM-Server
Model: Digital