NEWS
Alexa per Telegram sprechen lassen
-
Jetzt geht dann noch das nächste Projekt an, wie ich mit Telegram den ioBroker steuern kann, bzw. Statusmeldungen auf Telegram bekomme. `
Kannst ja mal damit spielen….(aktivierungswort ist MENÜ (menü geht auch)
`var Devices = [ { Name: 'Kaminlampe', Ort: "Wohnzimmer", an: true, aus: false, Objekt: "hm-rpc.0.xxx.3.STATE", Beschreibung: "Steckdose an der die Kaminlampe im Wohnzimmer angeschlossen ist"}, { Name: 'Fensterlampe', Ort: "Wohnzimmer", an: true, aus: false, Objekt: "hue.0.Philips_hue.Fensterlampe.on", Beschreibung: "Fensterlampe Wohnzimmer"}, { Name: 'Tischlampe', Ort: "Wohnzimmer", an: true, aus: false, Objekt: "hm-rpc.0.xxx.3.STATE", Beschreibung: "Steckdose an der die Tischlampe im Wohnzimmer angeschlossen ist"}, { Name: 'Schranklampe', Ort: "Wohnzimmer", an: true, aus: false, Objekt: "hm-rpc.xxx.3.STATE", Beschreibung: "Steckdose an der die Schranklampe im Wohnzimmer angeschlossen ist"}, { Name: 'Deckenlampe', Ort: "Wohnzimmer", an: true, aus: false, Objekt: "hue.0.Philips_hue.Deckenlampe.on", Beschreibung: "Deckenlampe Wohnzimmer"}, { Name: 'Licht komplett', Ort: "Wohnzimmer", an: true, aus: false, Objekt: "hue.0.Philips_hue.Wohnzimmer.on", Beschreibung: "Licht Wohnzimmer komplett"}, { Name: 'Fernseher', Ort: "Wohnzimmer", an: 2, aus: 0, Objekt: "harmony.0.Wohnzimmer.activities.Fernsehen", Beschreibung: "Fernseher Wohnzimmer über Harmony"}, { Name: 'Flurlicht', Ort: "Flur", an: true, aus: false, Objekt: "hue.0.Philips_hue.Flur-Kellertreppe.on", Beschreibung: "Flur Treppenlicht"}, ]; function DistinctKeyValues(Array, Key) { var unique = {}; var distinct = []; for( var i in Array ){ if (!Array[i].selection) { continue; } if( typeof(unique[Array[i][Key]]) == "undefined"){ distinct.push(Array[i][Key]); } unique[Array[i][Key]] = 0; } return distinct; } function ArrayDeselectKeyValues(Array, Key, Value) { for( var i in Array ) { if (Array[i][Key] != Value) { Array[i].selection = false; } } return Array; } function Array2ID(Array, Key, Value) { for( var i in Array ) { if (Array[i][Key] == Value) { break; } } return i; } function Key2Keyboard(Array, Key) { Distinct = [], OuterArray = []; Distinct = DistinctKeyValues(Array, Key); for( var i in Distinct ){ InnerArray = []; item = {}; item.text = Distinct[i]; item.callback_data = "___" + Key + ","+ Distinct[i]; InnerArray.push(item); OuterArray.push(InnerArray); } return OuterArray; } function SwitchKeyboard(Array, Key, Value) { Distinct = [], OuterArray = []; Distinct = ['an', 'aus']; for( var i in Distinct ){ InnerArray = []; item = {}; item.text = Distinct[i]; item.callback_data = "___" + Key + ","+ Distinct[i]; InnerArray.push(item); OuterArray.push(InnerArray); } return OuterArray; } function MenuFrageKey(Frage, Key, Array) { MenuFrage(Frage, Array, Key2Keyboard(Array, Key)); } function MenuFrageDevice(ID, Array) { Objekt = Array[ID].Objekt; Status=getState(Objekt).val; if (Status === Array[ID].an) { MenuFrage("Status von " + Array[ID].Name + ": eingeschaltet.\nWas wollen Sie tun?",Array, SwitchKeyboard(Array, '*'+Array[ID].Name, Array[ID].Name)); } else { MenuFrage("Status von " + Array[ID].Name + ": ausgeschaltet.\nWas wollen Sie tun?",Array, SwitchKeyboard(Array, '*'+Array[ID].Name, Array[ID].Name)); } } function MenuFrage(Frage, Array, KeyboardArray) { sendTo('telegram.0', { chatId: getState("telegram.0.communicate.requestChatId").val, text: Frage, reply_markup: { inline_keyboard: KeyboardArray, resize_keyboard: false, one_time_keyboard: true } }); return; } function MenuAntwortDeselect(Array, Key, Value) { MenuAntwort(Array, Key, Value); ArrayDeselectKeyValues(Array, Key, Value); } function MenuAntwort(Array, Key, Value) { sendTo('telegram.0', { chatId: getState("telegram.0.communicate.requestChatId").val, text: Key + ': ' + Value, editMessageText: { options: { chat_id: getState("telegram.0.communicate.requestChatId").val, message_id: getState("telegram.0.communicate.requestMessageId").val, } } }); return Array; } on({id: "telegram.0.communicate.request", ack: false, change: 'any'}, function (obj) { command = obj.state.val.substring(obj.state.val.indexOf(']')+1); console.log("Received: " + command); // Menü beginnen if (command.toUpperCase() ==="MENÜ") { //Reset previous selections for( var i in Devices ){ Devices[i].selection=true; } MenuFrageKey('Wo willst du etwas tun?', 'Ort', Devices); } // Antwort verarbeiten else if (command.startsWith("___")) { command = command.slice(3,command.length); var KeyVal = command.split(","); var Key = KeyVal[0]; var Value = KeyVal[1]; if (Key == 'Ort') { MenuAntwortDeselect(Devices, Key, Value); MenuFrageKey('Welches Gerät willst du steuern', 'Name', Devices); } else if (Key == 'Name') { MenuAntwortDeselect(Devices, Key, Value); ID=Array2ID(Devices, Key, Value); MenuFrageDevice(ID, Devices); } else if (Key.startsWith("*")) { Key=Key.slice(1,Key.length); ID=Array2ID(Devices, 'Name', Key); setState(Devices[ID].Objekt, Devices[ID][Value]); MenuAntwort(Devices, Devices[ID].Name, Value); } else { console.log("Else: ___" + command); } } else { console.log("Else: " + command); } });` Das Funktioniert bei mir überhaupt nicht. Es öffnet sich keinerlei Menu in Telegram.[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i] ``` `
-
> gibt es die Möglichkeit Alexa per Telegram anzutriggern. Und dann einen Text zu schicken den Alexa dann vorspricht?
Die Aufgabenstellung läßt sich doch recht elegant per IFTTT und dem Alexa Adaperter 2.0 lösen:Per Telegramm eine Nachricht mit z.B. "Telegram_Alexa" und Inhalt "Lies diesen Satz vor" an @Ifttt senden.
Dann per Webhook den Datenpunkt im iobroker mit dem String "Lies diesen Satz vor" füllen.
Und abschließend den Datenpunkt auf Änderung überwachen und bei Änderung den Wert vorlesen lassen.
Ist eigentlich ganz easy und schnell zu realisieren.
Grüße
-
@dslraser
Ich hab das blockly heute auch mal ausprobiert, leider läuft es bei mir nicht. Das aktivierungs Wort nimmt er an, wenn ich dann aber das schreibe was der Dot sagen soll, kommt immer "ich verstehe xy nicht ".
Mit welchen Command2text Befehl wird das Script gestartet? Ich verwende schalte an/aus und setze es auf True.....liegt da der Fehler?
Gruß Peter -
@Treep77 sagte in Alexa per Telegram sprechen lassen:
@dslraser
Ich hab das blockly heute auch mal ausprobiert, leider läuft es bei mir nicht. Das aktivierungs Wort nimmt er an, wenn ich dann aber das schreibe was der Dot sagen soll, kommt immer "ich verstehe xy nicht ".
Mit welchen Command2text Befehl wird das Script gestartet? Ich verwende schalte an/aus und setze es auf True.....liegt da der Fehler?
Gruß Petermeinst du das Blockly von dslraser vom 23. Jänner?
Da wird mMn kein Command2Text verwendet.
Ich hab das nichteinmal installiert.
Hier noch das Blockly
Alexa-Speak.txt -
@Negalein ja genau das meinte ich. Hab wohl den falschen Button erwischt, wollte eigentlich auf seinen Post antworten.
Hmm ohne Text2command...dann muss ich nachher mal schauen. -
@Treep77 sagte in Alexa per Telegram sprechen lassen:
@dslraser
Ich hab das blockly heute auch mal ausprobiert, leider läuft es bei mir nicht. Das aktivierungs Wort nimmt er an, wenn ich dann aber das schreibe was der Dot sagen soll, kommt immer "ich verstehe xy nicht ".wo kommt das, auf der Tastatur in Telegram ? (da kommt das bei mir auch) Oder kommt so eine Ansage von Alexa ?
Mit welchen Command2text Befehl wird das Script gestartet? Ich verwende schalte an/aus und setze es auf True.....liegt da der Fehler?
Gruß Peterohne extra text2command (das wird für das Blockly nicht benötigt. (Wenn Du dieses Blockly meinst ?)
Oder meinst Du dieses Script hier ?
Starte mal den Alexa2 Adapter neu, das kann auch helfen...
-
Ich habe das Blockly mal auf einen Echo reduziert und alles aufgeklappt, dann sieht man die Funktionsweise besser. Dieses Aktivierungswort ist hier Wohnzimmer, dieses sendest Du per Telegram, dann erscheint das auch im Telegram Adapter in den Objekten, damit kann Telegram erstmal nix anfangen und es kommt diese Meldung "ich verstehe xyz nicht" auf dem Display.
Dieses Wort wird in eine Variable geschrieben und mit den Datenpunkten vom Telegram Adapter abgeglichen. Da dort aber noch Zeichen in eckigen Klammern stehen werden diese entfernt. Wenn in diesem Beispiel das Wort Wohnzimmer gefunden wird, wird es mit dem Text Wohnzimmer ganz rechts im Blockly verglichen und wenn es übereinstimmt wird die Variable auf wahr gesetzt.Der zweite Teil arbeitet dann mit dieser Variablen weiter und sendet über speak (hier den Echo dazu auswählen) den Text, den Du als zweites in Telegam sendest an den ausgewählten ECHO. Anschließend wird die Variable wieder auf falsch gesetzt und das Spiel kann von vorn beginnen.
Weil es übersichtlicher ist habe ich die Variablen so wie die Echos genannt und auch den Namen so gewählt wo sie stehen.
Wenn Du mehrere Echos hast, und diese Beiden dicht beieinander stehen und sich gegenseitig "hören" können, kannst Du den anderen Echo unter Umständen sogar damit steuern. Z.B. wenn Du den einen anschreibst und dann z.B. schreibst, Alexa, mach dies und das (Befehl). Bei mir steht einer im Wohnzimmer und einer in der Küche (es gibt nur einen Durchgang und keine Tür zwischen den Räumen), dann hören die sich gegenseitig.Hier mal als Beispiel über speak
Und hier mal über ssml (Alexa2 Adapter 2.2.0), mit z.B. Vicki als Stimme
-
@dslraser genau das blockly mein ich.
Mittlerweile läuft es. Ich hab das T2C weggelassen, dann geht es. Es hat mich anfangs nur etwas irritiert das er im telegram immer sagt "ich verstehe "wohnzimmer" nicht" ....scheint aber normal zu sein. -
@dslraser Ich seh Grad du hattest nochmal geantwortet und es erklärt. Vielen Dank für die Beschreibung.
Meine Küche ist auch direkt neben dem Wohnzimmer, das muss ich nachher gleich mal testen. Danke für den Tipp. -
Falls Du HUE Lampen hast bzw. eine HUE Bridge und den HUE Adapter installiert hast (bei mir HUE Adapter 0.6.9), dann kannst Du zusätzlich in dem Raum, in dem der ECHO spricht, noch eine Lampe, oder auch alle Lampen im ganzen Raum blinken lassen, oder eben jede andere HUE Lampe die Du ins Blockly schreibst. Hier blinkt die Lampe rot, vorher wird der alte Zustand der Lampe abgespeichert und wenn das blinken beendet ist wieder hergestellt.
-
@dslraser
Ich verwend dein Blockly schon sehr lange.
Funktioniert perfekt.Bei mir kommt auch keine Meldung mit "ich verstehe ...... nicht".
-
@Negalein sagte in Alexa per Telegram sprechen lassen:
Bei mir kommt auch keine Meldung mit "ich verstehe ...... nicht".
Das kam bei mir sonst auch nicht, keine Ahnung warum das jetzt kommt
-
@dslraser sagte in Alexa per Telegram sprechen lassen:
Das kam bei mir sonst auch nicht, keine Ahnung warum das jetzt kommt
gerade nochmals getestet!
Es kommt bei mir keine Meldung mit "ich verstehe ...... nicht". -
@Negalein sagte in Alexa per Telegram sprechen lassen:
@dslraser sagte in Alexa per Telegram sprechen lassen:
Das kam bei mir sonst auch nicht, keine Ahnung warum das jetzt kommt
gerade nochmals getestet!
Es kommt bei mir keine Meldung mit "ich verstehe ...... nicht".Habe es gefunden, das kommt vom text2command Adapter. Wenn ich den ausschalte kommt der Satz nicht. Ein par Sachen habe ich da aber noch drin die ich noch umstellen will, dann brauche ich den aktuell nicht mehr.
-
ich habe jetzt noch mal etwas in dem Script gebastelt. Die Grundfunktion ist die gleiche wie sonst auch, als Ansage habe ich ssml im Alexa2 Adapter 2.2.0 verwendet.
Eingebaut habe ich folgendes. Es wird bei der Eingabe und absenden des Triggerwortes bereits am angeschriebenen ECHO angekündigt das gleich eine Nachricht kommt. Dem Nachricht schreibenden wird sofort ein Telegram gesendet das er nun eine Minute Zeit hat (änderbar im Blockly) seine Nachricht zu senden. Falls man vergisst die Nachricht zu schicken, oder was dazwischen kommt wird die Ansage auf dem ECHO beendet (und auch so angesagt) und der Nachricht schreibende bekommt ein Telegram das die Zeit abgelaufen ist. Wird die Nachricht in der vorgegebenen Zeit versendet, kommt die natürlich auch als Ansage am Echo an und der Nachricht schreibende bekommt eine Telegram Rückmeldung.
Zusätzlich habe ich eine HUE Lampe mit eingebunden die während dieser Nachrichten Anfrage/Ansage blinkt (in der vorher verwendeten Farbe).
Wer Telegram Bestätigungen oder blinkende Lampen nicht will, kann diese Bausteine einfach deaktivieren oder löschen.
Vielleicht kann es ja Jemand gebrauchen. -
@dslraser sagte in Alexa per Telegram sprechen lassen:
ich habe jetzt noch mal etwas in dem Script gebastelt. Die Grundfunktion ist die gleiche wie sonst auch, als Ansage habe ich ssml im Alexa2 Adapter 2.2.0 verwendet.
Super
Werde ich gleich testen! -
@dslraser sagte in Alexa per Telegram sprechen lassen:
ich habe jetzt noch mal etwas in dem Script gebastelt. Die Grundfunktion ist die gleiche wie sonst auch, als Ansage habe ich ssml im Alexa2 Adapter 2.2.0 verwendet.
Hallo
Ich bin erst heute dazu gekommen!
Sehe ich das richtig, dass es nur für 1 Raum ist?
Also müssten die Blöcke x-fach kopiert und eingefügt werden?Beim anderen Blockly sind x Räume.
-
@Negalein
ja, ich habe das nur erstmal für einen gemacht (hat ja nicht jeder mehrere Alexas ) -
@Negalein
und wenn Du den äußersten blauen falls mache Block kopierst wird ja der gesamte Inhalt mit kopiert, den Inhalt musst Du dann natürlich anpassen.
In dem Dir bekannten Blockly sind es auch jede Menge falls mache Blöcke, nur der Inhalt ist zugeklappt. -
Ich habe jetzt angefangen alles ohne text2command abzufragen und mir für die wichtigsten Abfragen ein Menü zusammen gestellt.
In dieses Menü habe ich auch die "Telegram Nachricht an einen Echo senden" Funktion mit rein gepackt. Stimmen kann ich auch vorher umschalten. Ich habe erstmal drei Stimmen eingebaut.
Wenn das Blockly fertig ist kann ich das hier ja bei Bedarf zur Verfügung stellen.
Mit dem Klick auf Übersicht kommt man immer wieder ins "Hauptmenü".
Sieht erstmal so aus:Hauptmenü