NEWS
Alexa per Telegram sprechen lassen
-
[Ich habe meinen Beitrag oben aktualisiert und das Blockly als Textdatei eingefügt. `
Danke dir!
Werd ich gleich testen!
Jetzt geht dann noch das nächste Projekt an, wie ich mit Telegram den ioBroker steuern kann, bzw. Statusmeldungen auf Telegram bekomme.
-
Ich habe hier ein Blockly (stammt aus der Facebookgruppe-nicht von mir)
Funktioniert bestens. `
Geil, hat sofort funktioniert!
Jetzt kann ich meiner Frau sagen, dass sie das Bier bringen soll! :lol: :lol:
-
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); } });` [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
-
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)
Danke
Ist das ein Blockly?
Ich schreib quasi in Telegram dann zB "Menü Fernseher an" und dann wird über den Harmony-adapter der Fernseher eingeschaltet.
-
das ist kein Blockly, das ist Javascript.
Es kommt dann ein Telegram Menü was Du beliebig erweitern kannst…
-
das ist kein Blockly, das ist Javascript.
Es kommt dann ein Telegram Menü was Du beliebig erweitern kannst… `
Danke
Habs als JS gespeichert!
Aber es schein unter "Objekte" - "Javascript.0" nicht auf!
Hier der Log dazu:
javascript.0 2019-01-23 17:57:33.989 info script.js.common.Telegram-Befehle: registered 1 subscription and 0 schedules javascript.0 2019-01-23 17:57:33.985 info Start javascript script.js.common.Telegram-Befehle
Es kommt dann ein Telegram Menü was Du beliebig erweitern kannst… `
Wo finde ich das Menü?
Im Telegram-Adapter?
-
das ist kein Blockly, das ist Javascript.
Es kommt dann ein Telegram Menü was Du beliebig erweitern kannst… `
Danke
Habs als JS gespeichert!
Aber es schein unter "Objekte" - "Javascript.0" nicht auf!
Hier der Log dazu:
javascript.0 2019-01-23 17:57:33.989 info script.js.common.Telegram-Befehle: registered 1 subscription and 0 schedules javascript.0 2019-01-23 17:57:33.985 info Start javascript script.js.common.Telegram-Befehle
Es kommt dann ein Telegram Menü was Du beliebig erweitern kannst… `
Wo finde ich das Menü?
Im Telegram-Adapter? ` Du startest das Script und dann gibst Du bei Telegram das Wort menü ein und sendest es ab.
Du kannst das Script um beliebig viele Räume und Geräte erweitern.
Einfach mal den oberen Teil im Script ansehen, das sollte selbsterklärend sein.
Ein Menü sollte bei Telegram auch mit diesem Script schon kommen, nur schalten kannst Du Deine Geräte erst wenn Du die im Script eingefügt hast.
Sieht dann so aus…
![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201901 ... 3748b5.jpg">https://uploads.tapatalk-cdn.com/20190123/98462dfc5a8ae9172819b9ad4d3748b5.jpg</link_text>" />![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201901 ... d2ca5f.jpg">https://uploads.tapatalk-cdn.com/20190123/64589157df54256760a3554cf3d2ca5f.jpg</link_text>" />![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201901 ... 2c2da9.jpg">https://uploads.tapatalk-cdn.com/20190123/046da7d7a8971f76223724c3f82c2da9.jpg</link_text>" />~~~~ -
Du startest das Script und dann gibst Du bei Telegram das Wort menü ein und sendest es ab. `
Ah, jetzt hab ich es verstanden!
Danke dir!
-
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