Da ich nach meiner (https://forum.fhem.de/index.php/topic,85690.msg782207.html#msg782207) genauen Umsetzung gefragt wurde und der
Original-Thread (https://forum.fhem.de/index.php/topic,85690.msg780809.html#msg780809) geschlossen wurde hier noch mal alles zusammengefasst.
sub qlock2() {
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $Minute = $Minuten;
my $Stunde = $Stunden;
my $spoke = "Es ist $Stunden Uhr $Minuten";
## 24h in 12h umwandeln
if ($Stunden <= 12) { $Stunde = $Stunden }
if ($Stunden >= 13) { $Stunde = $Stunden - 12 }
if ($Stunden == 0) { $Stunde = 12 }
## Wahlweise West- oder Ost-VAriante. Bitte den jeweils anderen Block auskommentieren!
{
## Ost: Zwischen Minute 13 und 17 sowie ab Minute 23 die nächste Stunde ansagen > drei viertel 12 um 11:45 Uhr
if ((($Minuten >= 13 && $Minuten <= 17) || $Minuten >= 23) && ($Stunde >= 1 && $Stunde <= 11)) { $Stunde = $Stunde + 1 }
elsif ((($Minuten >= 13 && $Minuten <= 17) || $Minuten >= 23) && $Stunde == 12) { $Stunde = $Stunde - 11 }
}
##{
## West: Ab Minute 23 die nächste Stunde ansagen > viertel vor 12 um 11:45 Uhr
## if ($Minuten >= 23 && ($Stunde >= 1 && $Stunde <= 11)) { $Stunde = $Stunde + 1 }
## elsif ($Minuten >= 23 && $Stunde == 12) { $Stunde = $Stunde - 11 }
##}
## Zusammensetzen der gesprochenen Uhrzeit
if ($Minute =~ (/(^0{1})|(5)|(10)|(15)|(20)|(25)|(30)|(35)|(40)|(45)|(50)|(55)|(60)/)) {
my @hourNames=('eins','zwei','drei','vier','fünf','sechs','sieben','acht','neun','zehn','elf','zwölf');
$Stunde=$hourNames[$Stunde-1];
if ($Minute =~ /(^0{1})|(60)/) {
$spoke = "Es ist ein Uhr" if ($Stunde eq "eins");
$spoke = "Es ist $Stunde Uhr" if ($Stunde ne "eins");
}
elsif ($Minute == 5) {
$spoke = "Es ist fünf nach $Stunde";
}
elsif ($Minute == 10) {
$spoke = "Es ist zehn nach $Stunde";
}
elsif ($Minute == 15) {
##$spoke = "Es ist viertel nach $Stunde";
$spoke = "Es ist viertel $Stunde";
}
elsif ($Minute == 20) {
$spoke = "Es ist zwanzig nach $Stunde";
}
elsif ($Minute == 25) {
$spoke = "Es ist fünf vor halb $Stunde";
}
elsif ($Minute == 30) {
$spoke = "Es ist halb $Stunde";
}
elsif ($Minute == 35) {
$spoke = "Es ist fünf nach halb $Stunde";
}
elsif ($Minute == 40) {
$spoke = "Es ist zwanzig vor $Stunde";
}
elsif ($Minute == 45) {
##$spoke = "Es ist viertel vor $Stunde";
$spoke = "Es ist drei viertel $Stunde";
}
elsif ($Minute == 50) {
$spoke = "Es ist zehn vor $Stunde";
}
elsif ($Minute == 55) {
$spoke = "Es ist fünf vor $Stunde";
}
}
## Ausgabe der gesprochenen Uhrzeit: "Es ist ..." in ein Reading, oder direkt als Sprachausgabe oder...
fhem "setreading du_Wordclock zeit $spoke";
##fhem "set Sonos_Wohnzimmer_PLAY3 speak 40 de $spoke";
##return $spoke;
}
defmod doif_Wordclock DOIF ([+60]) ({{qlock2}})
attr doif_Wordclock disable 0
attr doif_Wordclock do always
attr doif_Wordclock room Wordclock
defmod du_Wordclock dummy
attr du_Wordclock room Wordclock
attr du_Wordclock stateFormat zeit
<li data-row="1"
data-col="1"
data-sizex="1"
data-sizey="1">
<div class="vbox items-center">
<div data-type="label"
data-device="du_Wordclock"
data-get="zeit"
class="gigantic thin">
</div>
<div data-type="label"
data-device="EG_Echo_Wohnzimmer"
data-hide-on="0"
data-get="timer_remainingtime"
data-substitution="toDate().hhmmss()"
class="grande thin top-space">
</div>
</div>
</li>
Viel Spass