Die Uhrzeit in Worten - oder aus 13:50 Uhr wird "Es ist zehn vor zwei" im FTUI

Begonnen von TomLee, 03 Juni 2018, 21:46:32

Vorheriges Thema - Nächstes Thema

TomLee

Da ich nach meiner genauen Umsetzung gefragt wurde und der
Original-Thread 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