NEWS
Skript - Alexa Speak wenn zwei Bedingungen erfüllt
-
Meinst du das so, also das der Wert den du einträgst auch ausgegeben wird?
const idSV = 'hm-rega.0.14932'; const idND = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands.doNotDisturb'; const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands.speak'; on({id: idSV}, function(dp) { // triggert bei Aktualisierung if(!getState(idND).val) { let txt = 'anderer Text'; if(dp.state.val) txt = dp.state.val; setState(idSpeak, txt); } });
-
Genau, also es soll quasi jedes mal wenn sich die SV "Alexa_TTS" ändert dessen Inhalt (Text) ausgegeben werden.
Das aber auch nur wenn donotdisturb auf false ist.
Der Inhalt der SV "Alexa_TTS" wird von den HM-Programmen geschrieben.Mich iritiert nun ein wenig die Zeile "anderer Text", kann die nicht raus?
Idealerweise setzen wir vor senden des speak commands (alexa2.0.Echo-Devices.xxxx.Commands.speak-volume) noch die Lautstärke auf z.B. 20 (kann ruhig im Script definiert werden)
-
@nils50122 sagte:
"anderer Text", kann die nicht raus?
Ja.
const idSV = 'hm-rega.0.14932'; const idND = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands.doNotDisturb'; const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands.speak'; on(idSV, function(dp) { // triggert bei Wertänderung if(!getState(idND).val) setState(idSpeak, dp.state.val); });
-
@nils50122 sagte in Skript - Alexa Speak wenn zwei Bedingungen erfüllt:
Idealerweise setzen wir vor senden des speak commands (alexa2.0.Echo-Devices.xxxx.Commands.speak-volume) noch die Lautstärke auf z.B. 20 (kann ruhig im Script definiert werden)
const idSV = 'hm-rega.0.14932'; const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands'; const ausgabelautstaerke = 20; on({id: idSV}, function(dp) { // triggert bei Aktualisierung if(!getState(idSpeak + '.doNotDisturb').val) { alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke); } }); function alexaSprich(idAlexa, text, lautstaerke) { var alteLautstaerke = getState(idAlexa + '.speak-volume').val; setState(idAlexa + '.speak-volume', lautstaerke); setState(idAlexa + '.speak', text); setState(idAlexa + '.speak-volume', alteLautstaerke); }
-
Sogar mit dem setzen der alten Lautstärke, was ein Luxus
Klappt perfekt, besten Dank.Die letzte bitte:
Ich würde eine zweite SV "Alexa TTS - High Prio" für Ausgaben die DoNotDisturb nicht interessiert, anlegen.
Welchen Teil im Skript muss ich löschen?
-
@nils50122 sagte in Skript - Alexa Speak wenn zwei Bedingungen erfüllt:
Ich würde eine zweite SV "Alexa TTS - High Prio" für Ausgaben die DoNotDisturb nicht interessiert, anlegen.
Welchen Teil im Skript muss ich löschen?const idSV = 'hm-rega.0.14932'; const idSV2 = 'hm-rega.0.14933'; const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands'; const idSpeak2 = 'alexa2.0.Echo-Devices.yyDeviceIDyy.Commands'; const ausgabelautstaerke = 20; const ausgabelautstaerke2 = 50; on({id: idSV}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus wenn doNotDisturb nicht gesetzt ist if(!getState(idSpeak + '.Commands.doNotDisturb').val) { alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke); } }); on({id: idSV2}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus auch wenn doNotDisturb gesetzt ist alexaSprich(idSpeak2, dp.state.val, ausgabelautstaerke2); }); function alexaSprich(idAlexa, text, lautstaerke) { var alteLautstaerke = getState(idAlexa + '.speak-volume').val; setState(idAlexa + '.speak-volume', lautstaerke); setState(idAlexa + '.speak', text); setState(idAlexa + '.speak-volume', alteLautstaerke); }
-
Wenn ich das richtig sehe, steuert das Skript nun zwei Devices an, oder?
Das soll schon beides auf dem selben ankommen.
-
@nils50122 sagte in Skript - Alexa Speak wenn zwei Bedingungen erfüllt:
Das soll schon beides auf dem selben ankommen.
on({id: idSV2}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus auch wenn doNotDisturb gesetzt ist alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke2); });
-
Anscheinend funktioniert das DoNotDisturb nicht korrekt (Übertragung IOBroker <-> Alexa).
Somit wurden wir nun schon mehrmals Nachts von der TTS geweckt.Kriegen wir es hin zusätzlich in das bereits vorhandene Skript eine Zeitprüfung (Zeitfenster 08:00 Uhr - 22:00 Uhr erlaubt, danach nicht) einzubauen?
-
@nils50122 Hier sollte doch doNotDisturb nicht beachtet werden.
Zeitprüfung:const idSV = 'hm-rega.0.14932'; const idSV2 = 'hm-rega.0.14933'; const idSpeak = 'alexa2.0.Echo-Devices.xxDeviceIDxx.Commands'; const idSpeak2 = 'alexa2.0.Echo-Devices.yyDeviceIDyy.Commands'; const ausgabelautstaerke = 20; const ausgabelautstaerke2 = 50; on({id: idSV}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus wenn doNotDisturb nicht gesetzt ist if(!getState(idSpeak + '.Commands.doNotDisturb').val && compareTime("08:00", "22:00", "between")) { alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke); } }); on({id: idSV2}, function(dp) { // triggert bei Aktualisierung und führt Sprachausgabe aus auch wenn doNotDisturb gesetzt ist if (compareTime("08:00", "22:00", "between")) { alexaSprich(idSpeak, dp.state.val, ausgabelautstaerke2); } }); function alexaSprich(idAlexa, text, lautstaerke) { var alteLautstaerke = getState(idAlexa + '.speak-volume').val; setState(idAlexa + '.speak-volume', lautstaerke); setState(idAlexa + '.speak', text); setState(idAlexa + '.speak-volume', alteLautstaerke); }
-
Gibt es eine Möglichkeit die Systemvariable (idSV und idSV2) nach erfolgreicher Übergabe zu leeren?
Ansonsten gibt es momentan immer das Problem, dass bei einem Neustart z.B. der Rega-Instanz, des IOBrokers, der Raspberrymatic die Systemvariable noch einmal übergeben wird.