Hauptmenü

Alexa Zeitansage

Begonnen von neyzen, 15 April 2020, 22:45:43

Vorheriges Thema - Nächstes Thema

neyzen

Hallo,

leider war ich mir nicht Sicher in welcher Gruppe ich meine Anfrage stellen sollte (DOIF oder Sprachsteuerung)

Ich habe ein dummy in der ich eine Zeitangabe habe, die sich jede Minute ändert.
Mit Hilfe dieser DOIF unterscheide ich ob es nur noch Minuten sind die Verbleiben oder Stunden und Minuten sind und gebe das dan von meiner Alexa als Ansage aus. Dies funktioniert auch aber meine Alexa sagt z.b. bei 01:23 --> Es sind noch null eins Stunden und 23 Minuten...
Bei 00:03 --> Es sind noch null drei Minuten...

Wie schaffe ich es das Alexa mit die Stundenname ohne die Null ausgibt und auch die Minuten?

Folgende def:

([RoutineAlexa:dim] eq "9" and [NamazaKalanZaman:zeitOhneSekunden] < "01:00") (set ECHO_G2A0P3088333058E speak Das nächste Gebät ist in [NamazaKalanZaman:zeitOhneSekunden:[...(\d\d)]] minuten)
DOELSEIF
([RoutineAlexa:dim] eq "9" and [NamazaKalanZaman:zeitOhneSekunden] > "00:59") (set ECHO_G2A0P3088333058E speak Das nächste Gebät ist in [NamazaKalanZaman:zeitOhneSekunden:[(\d\d)]] Stunden und [NamazaKalanZaman:zeitOhneSekunden:[...(\d\d)]] minuten)

KyleK

Ich würde es mit dem Echo-Befehl speak_ssml und dem Attribut say-as time probieren.
FHEM on Futro S940
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

Damian

Sprachausgabe ohne führende Nullen lässt sich leicht mit sprintf realisieren:

z. B.

(set ECHO_G2A0P3088333058E speak Das nächste Gebät ist in {(sprintf("%d",[NamazaKalanZaman:zeitOhneSekunden:[...(\d\d)]]))} minuten)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

@neyzen Du erinnerst Dich an diese Diskussion?

Du vergleichst hier wieder Zeiten in String Form mit numerischen Vergleichsoperatoren. Damit werden immer nur die ersten Zahlen aus dem String (also die Stunden) verglichen. Wenn Du es besser machen willst: nimm lt und gt statt < und >

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

neyzen

Zitat von: Damian am 17 April 2020, 09:35:36
Sprachausgabe ohne führende Nullen lässt sich leicht mit sprintf realisieren:

z. B.

(set ECHO_G2A0P3088333058E speak Das nächste Gebät ist in {(sprintf("%d",[NamazaKalanZaman:zeitOhneSekunden:[...(\d\d)]]))} minuten)

Vielen Dank Damian, damit funktioniert es perfekt

neyzen

Zitat von: Otto123 am 17 April 2020, 11:27:33
@neyzen Du erinnerst Dich an diese Diskussion?

Du vergleichst hier wieder Zeiten in String Form mit numerischen Vergleichsoperatoren. Damit werden immer nur die ersten Zahlen aus dem String (also die Stunden) verglichen. Wenn Du es besser machen willst: nimm lt und gt statt < und >

Gruß Otto

Vielen Dank Otto,

das war der Feinschliff :)

([RoutineAlexa:dim] eq "9" and [NamazaKalanZaman:zeitOhneSekunden] lt "01:00") (set ECHO_G2A0P3088333058E speak Das nächste Gebät ist in {(sprintf("%d",[NamazaKalanZaman:zeitOhneSekunden:[...(\d\d)]]))} minuten)
DOELSEIF
([RoutineAlexa:dim] eq "9" and [NamazaKalanZaman:zeitOhneSekunden] gt "00:59") (set ECHO_G2A0P3088333058E speak Das nächste Gebät ist in  {(sprintf("%d",[NamazaKalanZaman:zeitOhneSekunden:[(\d\d)]]))} Stunde und {(sprintf("%d",[NamazaKalanZaman:zeitOhneSekunden:[...(\d\d)]]))} minuten)

neyzen

#6
(set ECHO_G2A0P3088333058E speak Das nächste Gebät ist in {(sprintf("%d",[NamazaKalanZaman:zeitOhneSekunden:[...(\d\d)]]))} minuten)

Hallo nochmals,
mit der obigen Definition kann ich mir ja schön die verbleibenden Minuten ansagen lassen.
Ich wollte jetzt das ganze auch nochmal mit den Stunden ausgeben lassen. Also wenn ich z.B. als Restzeit 01:23 habe, würde ich gerne das Alexa sagt, es sind noch 1 Stunde und 23 minuten. Wie kann ich den den oberen code erweitern, das das mit den Stunden auch klappt?

Otto123

#7
Ganz andere Ansatz (Prinzip):
{my $ttt="01:23:25";; my @arr=split (':',$ttt);;return int($arr[0])}

Also Deine Stunden: int($arr[0])
Deine Minuten: int($arr[1])
Deine Sekunden :int($arr[2])

Oder eben so wie bisher nach Damians Vorschlag (ohne das ich das wirklich verstanden hätte - einfach linear "hochcodiert" ;) ):
in {(sprintf("%d",[NamazaKalanZaman:zeitOhneSekunden:[(\d\d)]]))} Stunden und {(sprintf("%d",[NamazaKalanZaman:zeitOhneSekunden:[...(\d\d)]]))} minuten
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

neyzen

Uyy das ging schnell.
Funktioniert, habs mit der zweiten Variante hinbekommen.
Danke Otto!
P.S. Ich verstehe manchmal auch nicht was ich mache und wundere mich das es funktioniert wie ich es will :D
Ich glaub das ist der tolle support hier im Forum