echodevice - auf Voice-Reading reagieren / bei IF-Statement "contains" möglich?

Begonnen von Felix_86, 13 Juli 2019, 16:36:16

Vorheriges Thema - Nächstes Thema

Felix_86

Hallo zusammen,

nachdem ich nun das echodevice seit einigen Wochen erfolgreich bei mir im Einsatz habe und ich damit meinen Echo Dot als Lautsprecher für FHEM nutze, möchte ich nun Spracheingaben über den Echo Dot in FHEM verarbeiten.

Ich habe also ein notify, welches auf das Reading "voice" des echodevice Alias Echo Dot reagiert. Soweit kein Problem.

Nun habe ich festgestellt, dass das Reading manchmal das Wake Word "Alexa" mit anzeigt und manchmal nicht.

Testweise habe ich mir das Event geloggt, jedes Mal, wenn sich das Reading ändert. Das steht dann im FHEM Log:
2019.07.13 14:14:07 3: ECHO_G090L9097123123123 --- voice: alexa wie warm ist es
2019.07.13 14:19:07 3: ECHO_G090L9097123123123 --- voice: wie warm ist es
2019.07.13 14:21:07 3: ECHO_G090L9097123123123 --- voice: alexa wie warm ist es
2019.07.13 14:24:07 3: ECHO_G090L9097123123123 --- voice: wie warm ist das wohnzimmer
2019.07.13 14:34:08 3: ECHO_G090L9097123123123 --- voice: wie warm ist das wohnzimmer
2019.07.13 14:36:08 3: ECHO_G090L9097123123123 --- voice: wie warm ist es im wohnzimmer
2019.07.13 14:37:08 3: ECHO_G090L9097123123123 --- voice: alexa wie warm ist das wohnzimmer
2019.07.13 14:38:08 3: ECHO_G090L9097123123123 --- voice: alexa wie warm ist es im wohnzimmer
2019.07.13 14:43:08 3: ECHO_G090L9097123123123 --- voice: hop hop
2019.07.13 14:44:08 3: ECHO_G090L9097123123123 --- voice: schalte wohnzimmer aus
2019.07.13 14:45:09 3: ECHO_G090L9097123123123 --- voice: wie warm ist es im wohnzimmer
2019.07.13 14:46:09 3: ECHO_G090L9097123123123 --- voice: wie warm ist es im wohnzimmer


Um nun in dem notify auf meine Frage / Befehle an den Echo Dot zu reagieren müsste ich beide Variante des Voice-Reading abfragen:

if ($EVENT eq "voice: alexa wie warm ist das wohnzimmer"){ # tue etwas in FHEM und gebe das Ergebnis über den Echo Dot aus }
if ($EVENT eq "voice: wie warm ist das wohnzimmer"){ # tue etwas in FHEM und gebe das Ergebnis über den Echo Dot aus }


Bei 2, 4 oder 10 IF-Bedingungen mag das noch handhabbar sein. Da ich aber mein Telegram-Notify mit 50 IF-Bedingungen nun sprachlich abbilden möchte, müsste ich 100 IF-Bedingungen in dem notify verfassen. Das Ganze wird dann wenig übersichtlich.

Daher meine Fragen:
1. Gibt es anstatt dem "eq" (für eine exakte Überprüfung der Bedingung) auch ein "contains" um Fragmente innerhalb des Events zu prüfen?
if ($EVENT contains "wie warm ist das wohnzimmer"){ # tue etwas in FHEM und gebe das Ergebnis über den Echo Dot aus }
   Damit wäre mir egal, was vor und / oder nach meinem Befehl noch kommt, solange diese Teil enthalten ist, greift die IF-Bedingungen.
2. Wie habt ihr das geregelt um Fragen / Befehle an Alexa über FHEM "beantworten" / ausführen zu lassen?

Wie immer besten Dank.
Grüße von Felix

Pi3, Raspbian 11, FHEM 6.2, ca 320 Device
SIGNALduino (TCM, TX, IT), CUL (EM, FS20, HMS), JeeLink (PCA301), HUEBridge, HUEDevice, mailcheck, echodevice, alexa, TelegramBot, Weather (OWM), DWD_OpenData, FRITZBOX, TabletUI, Calendar, Abfall, Vitoconnect, LGTV_WebOS

amenomade

if ($EVENT =~ /wie.warm.ist.das.wohnzimmer/)
oder
if ($EVENT =~ /warm.*wohnzimmer/)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Felix_86

besten Dank, amenomade.

Kann es sein, dass deutsche "Sonderzeichen" wie ß,ä,ö,ü ein Problem bei der Prüfing darstellen?

if ($EVENT eq "voice: alexa wie warm ist es draußen")
Das funktioniert zwar nicht immer zuverlässig aber immerhin.

if ($EVENT =~ /wie.warm.*draußen/)
Das funktioniert nie.
Grüße von Felix

Pi3, Raspbian 11, FHEM 6.2, ca 320 Device
SIGNALduino (TCM, TX, IT), CUL (EM, FS20, HMS), JeeLink (PCA301), HUEBridge, HUEDevice, mailcheck, echodevice, alexa, TelegramBot, Weather (OWM), DWD_OpenData, FRITZBOX, TabletUI, Calendar, Abfall, Vitoconnect, LGTV_WebOS

Byte09

Zitat von: Felix_86 am 14 Juli 2019, 17:36:02
besten Dank, amenomade.

Kann es sein, dass deutsche "Sonderzeichen" wie ß,ä,ö,ü ein Problem bei der Prüfing darstellen?

if ($EVENT eq "voice: alexa wie warm ist es draußen")
Das funktioniert zwar nicht immer zuverlässig aber immerhin.

if ($EVENT =~ /wie.warm.*draußen/)
Das funktioniert nie.

hi ,

mir ist in diesem zuammenhang völlig unklar wie ein 'eq' vergleich unzuverlässig sein kann. entweder er ist gleich oder nicht ?!

um zu der zweiten version etwas zu sagen wäre es gut, wenn du mal das konkrete event - aus dem monitor - hier postest .

genau dieses beispiel ist nicht in deinem ersten post.

gruss Byte09

Felix_86

Zitat von: Byte09 am 14 Juli 2019, 17:40:33
mir ist in diesem zuammenhang völlig unklar wie ein 'eq' vergleich unzuverlässig sein kann. entweder er ist gleich oder nicht ?!
Der Meinung bin ich auch.
Ich habe allerdings festgestellt, dass auf die Frage "wie warm ist es draußen" nicht immer eine Antwort kommt. Zwar wird das Voice-Reading aktualisiert, das notify reagiert, aber die Aktion nach dem IF-Vergleich wird nicht immer ausgeführt.
Wandel ich die Frage und die IF-Prüfung ab auf "wie warm ist es", dann ist der Vergleich 100% zuverlässig.
Ich habe die Vermutung, dass die textuelle Antwort von Amazon bzgl. der deutschen Sonderzeichen einen Zeichencode verwendet, der hier nicht kompatibel ist ?!

Identisch ist das Verhalten bei der Frage "wie warm ist es in der Küche" - darauf kommt nicht immer zuverlässig eine Antwort. Während "wie warm ist das Bad" immer zu 100% ein Antwort kommt,

Zitat von: Byte09 am 14 Juli 2019, 17:40:33
um zu der zweiten version etwas zu sagen wäre es gut, wenn du mal das konkrete event - aus dem monitor - hier postest .

genau dieses beispiel ist nicht in deinem ersten post.
Hier der Event Monitor:

2019-07-14 18:51:11 notify notify_Alexa_Voice_Kommandos active
2019-07-14 18:51:11 Global global MODIFIED notify_Alexa_Voice_Kommandos
2019-07-14 18:52:05 echodevice ECHO_G090L9123123123 voice: wie warm ist es draußen
2019-07-14 18:52:09 echodevice AmazonConnector list_SHOPPING_ITEM:
2019-07-14 18:52:09 echodevice AmazonConnector list_TASK:
2019-07-14 18:53:03 echodevice AmazonConnector connected
2019-07-14 18:53:03 echodevice AmazonConnector COOKIE_STATE: OK
2019-07-14 18:53:04 echodevice AmazonConnector timer_count: 0
2019-07-14 18:53:04 echodevice AmazonConnector timer_id: -
2019-07-14 18:53:04 echodevice AmazonConnector timer_remainingtime: 0
2019-07-14 18:53:04 echodevice AmazonConnector reminder_count: 0
2019-07-14 18:53:04 echodevice AmazonConnector alarm_count: 0
2019-07-14 18:53:04 echodevice AmazonConnector musicalarm_count: 0
2019-07-14 18:53:04 echodevice AmazonConnector config_address_from: xxxxx
2019-07-14 18:53:04 echodevice AmazonConnector config_address_to: -
2019-07-14 18:53:04 echodevice AmazonConnector config_address_between: -
2019-07-14 18:53:05 echodevice ECHO_G090L9123123123 voice: alexa wie warm ist es draußen
2019-07-14 18:53:09 echodevice AmazonConnector list_SHOPPING_ITEM:
2019-07-14 18:53:09 echodevice AmazonConnector list_TASK:
2019-07-14 18:53:12 notify notify_Alexa_Voice_Kommandos active
2019-07-14 18:53:12 Global global MODIFIED notify_Alexa_Voice_Kommandos
2019-07-14 18:53:26 CUL_TCM97001 Wetter T: 17.4
2019-07-14 18:54:03 SYSMON SysMon_Raspberry fhemuptime: 371255
2019-07-14 18:54:03 echodevice AmazonConnector timer_count: 0
2019-07-14 18:54:03 echodevice AmazonConnector timer_id: -
2019-07-14 18:54:03 echodevice AmazonConnector timer_remainingtime: 0
2019-07-14 18:54:03 echodevice AmazonConnector reminder_count: 0
2019-07-14 18:54:03 echodevice AmazonConnector alarm_count: 0
2019-07-14 18:54:03 echodevice AmazonConnector musicalarm_count: 0
2019-07-14 18:54:03 echodevice AmazonConnector connected
2019-07-14 18:54:03 echodevice AmazonConnector COOKIE_STATE: OK
2019-07-14 18:54:04 echodevice AmazonConnector config_address_from: xxxxx
2019-07-14 18:54:04 echodevice AmazonConnector config_address_to: -
2019-07-14 18:54:04 echodevice AmazonConnector config_address_between: -
2019-07-14 18:54:05 echodevice ECHO_G090L9123123123 voice: wie warm ist das bad
2019-07-14 18:54:09 echodevice AmazonConnector list_SHOPPING_ITEM:
2019-07-14 18:54:09 echodevice AmazonConnector list_TASK:
2019-07-14 18:54:12 CUL_TCM97001 Thermometer_BZ temperature: 19.9
2019-07-14 18:54:12 CUL_TCM97001 Thermometer_BZ T: 19.9 H: 59
2019-07-14 18:54:20 Global global SAVE
2019-07-14 18:55:04 echodevice AmazonConnector timer_count: 0
2019-07-14 18:55:04 echodevice AmazonConnector timer_id: -
2019-07-14 18:55:04 echodevice AmazonConnector timer_remainingtime: 0
2019-07-14 18:55:04 echodevice AmazonConnector reminder_count: 0
2019-07-14 18:55:04 echodevice AmazonConnector alarm_count: 0
2019-07-14 18:55:04 echodevice AmazonConnector musicalarm_count: 0
2019-07-14 18:55:04 echodevice AmazonConnector connected
2019-07-14 18:55:04 echodevice AmazonConnector COOKIE_STATE: OK
2019-07-14 18:55:04 echodevice AmazonConnector config_address_from: xxxxx
2019-07-14 18:55:04 echodevice AmazonConnector config_address_to: -
2019-07-14 18:55:04 echodevice AmazonConnector config_address_between: -
2019-07-14 18:55:05 echodevice ECHO_G090L9123123123 voice: alexa wie warm ist die küche

und hier das Logging durch das entsprechende notify:
2019.07.14 18:52:05 3: Notify getroffen mit Event --- voice: wie warm ist es draußen
2019.07.14 18:53:05 3: Notify getroffen mit Event --- voice: alexa wie warm ist es draußen
2019.07.14 18:54:05 3: Notify getroffen mit Event --- voice: wie warm ist das bad
2019.07.14 18:55:05 3: Notify getroffen mit Event --- voice: alexa wie warm ist die küche

Bei den Events 1,  2 und 4 wurde die entsprechende Aktion nicht ausgeführt, Event 3 hat funktioniert.
Grüße von Felix

Pi3, Raspbian 11, FHEM 6.2, ca 320 Device
SIGNALduino (TCM, TX, IT), CUL (EM, FS20, HMS), JeeLink (PCA301), HUEBridge, HUEDevice, mailcheck, echodevice, alexa, TelegramBot, Weather (OWM), DWD_OpenData, FRITZBOX, TabletUI, Calendar, Abfall, Vitoconnect, LGTV_WebOS

amenomade

Dann
if ($EVENT =~ /wie.warm.*drau.en/)
Wird aber auch natürlich auf "Wie warm ist es denn, sag mal endlich, draupen" oder "drauken" reagieren.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Byte09

ich habe da eben mal etwas rumprobiert und konnte keine probleme bei der erkennung von küche, draußen etc. feststellen . es wird bei mir immer korrekt erkannt. Ich habe dazu allerdings nicht notify genutzt , insofern keine Ahnung ob es sich hier anders verhält.

gruss Byte09

Felix_86

Zitat von: amenomade am 14 Juli 2019, 19:38:52
Dann
if ($EVENT =~ /wie.warm.*drau.en/)
Wird aber auch natürlich auf "Wie warm ist es denn, sag mal endlich, draupen" oder "drauken" reagieren.

Leider nein:
if ($EVENT =~ /wie.warm.*drau.en/) {Log 3,"Draußen getroffen"}
else {Log 3,"$EVENT - Kein passender Befehl gefunden";}

erzeugt:
2019.07.14 19:57:11 3: Notify getroffen mit Event --- voice: wie warm ist es draußen
2019.07.14 19:57:11 3: voice: wie warm ist es draußen - Kein passender Befehl gefunden


Zitat von: Byte09 am 14 Juli 2019, 19:47:55
ich habe da eben mal etwas rumprobiert und konnte keine probleme bei der erkennung von küche, draußen etc. feststellen . es wird bei mir immer korrekt erkannt. Ich habe dazu allerdings nicht notify genutzt , insofern keine Ahnung ob es sich hier anders verhält.

gruss Byte09
Im Gui habe ich auch keine Probleme. Dort werden die Zeichen korrekt angezeigt, auch im Log.
Grüße von Felix

Pi3, Raspbian 11, FHEM 6.2, ca 320 Device
SIGNALduino (TCM, TX, IT), CUL (EM, FS20, HMS), JeeLink (PCA301), HUEBridge, HUEDevice, mailcheck, echodevice, alexa, TelegramBot, Weather (OWM), DWD_OpenData, FRITZBOX, TabletUI, Calendar, Abfall, Vitoconnect, LGTV_WebOS

Felix_86

Ich habe nun im echodevice und im "Echo Dot"-Device die BrowserLanguage auf "de,de-DE" gestellt, es war zuvor noch der Standardwert "de,en-US;q=0.7,en;q=0.3"
weiter habe ich die IF-Prüfung angepasst:
if ($EVENT =~ /voice:.wie.warm.*drau..en/)
Damit erhalte ich nun eine Antwort auf die Außentemperatur:
2019-07-14 20:26:12 echodevice ECHO_G090L9097123123 voice: wie warm ist es draußen
2019-07-14 20:26:17 echodevice AmazonConnector list_SHOPPING_ITEM:
2019-07-14 20:26:17 echodevice AmazonConnector list_TASK:
2019-07-14 20:27:11 SYSMON SysMon_Raspberry fhemuptime: 376842
2019-07-14 20:27:11 echodevice AmazonConnector connected
2019-07-14 20:27:11 echodevice AmazonConnector COOKIE_STATE: OK
2019-07-14 20:27:11 echodevice AmazonConnector timer_count: 0
2019-07-14 20:27:11 echodevice AmazonConnector timer_id: -
2019-07-14 20:27:11 echodevice AmazonConnector timer_remainingtime: 0
2019-07-14 20:27:11 echodevice AmazonConnector reminder_count: 0
2019-07-14 20:27:11 echodevice AmazonConnector alarm_count: 0
2019-07-14 20:27:11 echodevice AmazonConnector musicalarm_count: 0
2019-07-14 20:27:11 echodevice AmazonConnector config_address_from: xxx
2019-07-14 20:27:11 echodevice AmazonConnector config_address_to: -
2019-07-14 20:27:11 echodevice AmazonConnector config_address_between: -
2019-07-14 20:27:12 echodevice ECHO_G090L9097123123 voice: sprich mir nach Aktuell sind es draussen 18,2 Grad.
2019-07-14 20:27:17 echodevice AmazonConnector list_SHOPPING_ITEM:
2019-07-14 20:27:17 echodevice AmazonConnector list_TASK:
2019-07-14 20:28:05 CUL_TCM97001 Thermometer_KU temperature: 22.5
2019-07-14 20:28:05 CUL_TCM97001 Thermometer_KU T: 22.5 H: 54
2019-07-14 20:28:11 SYSMON SysMon_Raspberry fhemuptime: 376903
2019-07-14 20:28:11 echodevice AmazonConnector timer_count: 0
2019-07-14 20:28:11 echodevice AmazonConnector timer_id: -
2019-07-14 20:28:11 echodevice AmazonConnector timer_remainingtime: 0
2019-07-14 20:28:11 echodevice AmazonConnector reminder_count: 0
2019-07-14 20:28:11 echodevice AmazonConnector alarm_count: 0
2019-07-14 20:28:11 echodevice AmazonConnector musicalarm_count: 0
2019-07-14 20:28:11 echodevice AmazonConnector connected
2019-07-14 20:28:11 echodevice AmazonConnector COOKIE_STATE: OK
2019-07-14 20:28:11 echodevice AmazonConnector config_address_from: xxx
2019-07-14 20:28:11 echodevice AmazonConnector config_address_to: -
2019-07-14 20:28:11 echodevice AmazonConnector config_address_between: -
2019-07-14 20:28:12 echodevice ECHO_G090L9097123123 voice: wie warm ist es draußen
2019-07-14 20:28:17 echodevice AmazonConnector list_SHOPPING_ITEM:
2019-07-14 20:28:17 echodevice AmazonConnector list_TASK:
2019-07-14 20:29:11 SYSMON SysMon_Raspberry fhemuptime: 376963
2019-07-14 20:29:11 echodevice AmazonConnector connected
2019-07-14 20:29:11 echodevice AmazonConnector COOKIE_STATE: OK
2019-07-14 20:29:11 echodevice AmazonConnector timer_count: 0
2019-07-14 20:29:11 echodevice AmazonConnector timer_id: -
2019-07-14 20:29:11 echodevice AmazonConnector timer_remainingtime: 0
2019-07-14 20:29:11 echodevice AmazonConnector reminder_count: 0
2019-07-14 20:29:11 echodevice AmazonConnector alarm_count: 0
2019-07-14 20:29:11 echodevice AmazonConnector musicalarm_count: 0
2019-07-14 20:29:11 echodevice AmazonConnector config_address_from: xxx
2019-07-14 20:29:11 echodevice AmazonConnector config_address_to: -
2019-07-14 20:29:11 echodevice AmazonConnector config_address_between: -
2019-07-14 20:29:12 echodevice ECHO_G090L9097123123 voice: sprich mir nach Aktuell sind es draussen 18,2 Grad.
Grüße von Felix

Pi3, Raspbian 11, FHEM 6.2, ca 320 Device
SIGNALduino (TCM, TX, IT), CUL (EM, FS20, HMS), JeeLink (PCA301), HUEBridge, HUEDevice, mailcheck, echodevice, alexa, TelegramBot, Weather (OWM), DWD_OpenData, FRITZBOX, TabletUI, Calendar, Abfall, Vitoconnect, LGTV_WebOS

Byte09

Zitat von: Felix_86 am 14 Juli 2019, 20:04:46
.....
Im Gui habe ich auch keine Probleme. Dort werden die Zeichen korrekt angezeigt, auch im Log.


sie werden nicht nur korrrekt dargestellt, es wird je nach 'satz' geschaltet.

gruss Byte09

amenomade

Stimmt, Sonderzeichen sind in Unicode multibytes Chars. Deswegen matcht es mit zwei Punkte und nicht mit nur einem.
Alternativen kann man hier lesen:
https://www.regular-expressions.info/unicode.html
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus