NEWS
Javascript-Gerät (ohne an/aus) für Alexa anlegen?
-
Hallo alle
Ich hatte diese Frage schon mal im Thread http://forum.iobroker.net/viewtopic.php?f=37&t=5943
gestellt. Da der aber als gelöst arkiert ist, wird ihn wohl niemand mehr anschauen; deswegen hier nochmal als neuer Thread.
Und zwar ist es mir mit dem dort genannten Stück Code gelungen den Verstärker über einen Http Request für Mediola mit "Alexa Verstärker einschalten" ein- bzw. auszuschalten.
Ich habe dazu folgenden Code verwendet:
var code_ampon = '19082600000100240708C3...101010102010102040506'; var code_ampoff = '19082600000100240708C3...22F00905DB20001020101'; var str_url_pre = '/command?XC_PASS=pass&code='; var str_url_tail = '&XC_FNC=Send2'; var logOn = true; // Skript Logausgabe ein- (true) / ausschalten (false). Fehler werden immer ausgegeben. var forecreation = false; // Default: false. true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden) var http = require('http'); // Node Module http verwenden var options_on = { host: '192.168.111.155', path: str_url_pre + code_ampon + str_url_tail, port: 80, method: 'GET' // in der Regel: "GET" }; var options_off = { host: '192.168.1.155', path: str_url_pre + code_ampoff + str_url_tail, port: 80, method: 'GET' // in der Regel: "GET" }; // Datenpunkte anlegen: // ----------------------------------------------------------------------------- var pfad = "mediola.alexatrigger" + "."; // PFad unter dem in der Javascript-Instanz die Datenpunkte angelegt werden sollen: // Datenpunktnamen: var idAlexaVerstaerker = pfad + 'Verstärker'; createState(idAlexaVerstaerker, 0, forecreation, { name: 'Verstärker', desc: 'Trigger mit Level für Alexa um einen hhtp request zu erzeugen', type: 'number', unit: '', role: 'value' }); // Funktionen: function mediolaRequest(state) { var options = options_on; log ('------------------------------------------------------'); log ('State=' +state); if (state===0) { log('ausschalten'); options = options_off; } else if (state == 100) { log('einschalten'); options = options_on; } else if (state =="leiser") { options = option_leiser; } log ('options=' +options.host + options.path); var req = http.get(options, function(res) {}); if(logOn) log("-------End-Result-------:"); req.on('error', function(e) { // Fehler abfangen log('ERROR: ' + e.message,"warn"); }); log('-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-'); } //------------- Verstärker ----------------------------------------------------- on({id: "javascript."+instance+"."+idAlexaVerstaerker ,change:'any'}, function (obj) { if(logOn) log("Alexa Trigger Verstärker wurde geschrieben: " + obj.state.val +"/"+obj._id); mediolaRequest(obj.state.val); log ('Mediola-Ende'); });
Ich komme nun aber nicht dahinter was ich genau scripten muss um den Verstärker leiser oder lauter zu stellen.
Ich möchte also sagen können "Alexa Verstärker leiser" bzw. "Alexa Verstärker lauter".
Kann mir jemand auf die Sprünge helfen wie das anzustellen ist?
Gruss Ralf
-
var code_ampon = '19082600000100240708C3...101010102010102040506'; var code_ampoff = '19082600000100240708C3...22F00905DB20001020101';
das ist der Code der gesendet wird um den Verstäker an oder aus zu schalten.. wie ist den der für laut und leise ??
-
Hi
Ja, genau. Der war mir nur zu lang, Der hätte den Quell-Code unübersichtlich gemacht. Ist ja auch nicht wirklich relevant. Aber ja, das sind die Mediola IR Codes für an und aus.
Die für laut und leise sehen ähnlich aus.
Man kann sich vorstellen, dass es für die Beiden natürlich dann auch die enstprechenden Variablen; sprich die daraus aufgebauten Http Request geben wird.
Was ich an dem Ganzen aber nicht auf die Reihe bekomme, ist wie ich das Gerät im ioBroker anlegen muss damit es auf "Verstärker leiser" reagiert.
Mit dem Code oben lege ich ja nur ein Gerät "Verstärker" an und Alexa reagiert auf "ein"/"aus" oder "einschalten"/ "ausschalten".
Das will ich aber in dem Fall nicht. Bei IR Geräten gibt es halt nicht nur ein/aus sondern eben "Lauter", "leiser".
Oder eben sowas sowas wie "Verstärker auf Eingang Phono schalten" oder "Blurayplayer schneller Vorlauf" usw. Das! krieg ich nicht auf die Reihe.
Alexa kennt wohl nur ein aus und irgendwelche Prozentangaben um z.B. Dimmer zu steuern. Aber das ist ja für die ganzen HiFi Geräte viel zu wenig,
Gruss Ralf
-
Oder eben sowas sowas wie "Verstärker auf Eingang Phono schalten" oder "Blurayplayer schneller Vorlauf" usw. Das! krieg ich nicht auf die Reihe.
Alexa kennt wohl nur ein aus und irgendwelche Prozentangaben um z.B. Dimmer zu steuern. Aber das ist ja für die ganzen HiFi Geräte viel zu wenig, `
Korrigiert mich bitte wenn ich falsch liege, aber ich fürchte das geht mit der einfachen Smart-Home-API von Alexa nicht. Da wird ein Custom Skill fällig, was aber wesentlich mehr Arbeit für Bluefox bedeutet. Keine Ahnung wie weit die Entwicklung da fortgeschritten ist. -
ganz ruhig mit die Pferde…
an aus -- geht
und den dimmer Wert kannst du als Lautstärke einprogrammieren.. würde lauten "Alexa, Verstärker auf 30%" oder was weiss ich
der restliche Mediazugs ... ist so ne sache was die API hergibt.. schalte Radio an .. schalte DVD an.. schalte TV an.. müsste auch gehen soweit die Datenpunkte da sind und diese in den Cloud Adapter eingebunden sind.
Man muss halt minimalistisch denken.. Verstärker auf Eingang Phono schalten -> schalte Phono an
-
Hi
> und den dimmer Wert kannst du als Lautstärke einprogrammieren.. würde lauten "Alexa, Verstärker auf 30%" oder was weiss ich
Genau das geht nicht. Der IR-Code bewegt den Laustärkereglermotor nach links oder nach rechts. Entsprechend wie lange man drauf drückt.Zumindest bei der Original-Fernbedienung. Aber das kann leider Mediola (wie viele andere Dinge) nicht. D.h. ein Request bewegt den Motor einfach ein paar Grad nach links oder rechts. Man muss also den Request öfter absetzen wenn man es viel lauter haben will; man müsste also "Alexa Verstärker lauter" mehrfach sagen (wen es so funktionieren würde). Der Verstärker kennt keine absolute Position des Lautstärkereglers.
> "Man muss halt minimalistisch denken.. Verstärker auf Eingang Phono schalten -> schalte Phono an"
Mein Blurayplayer hat 'ne rote Taste und mein Sat Receiver auch. Was sagst Du da?
"Alexa Rot-Sat an" oder "Alxa Rotbluray an" ?
Und was mach ich bei Stop, Play, Pause, usw?
"Alexa Bluraystop an"?
Bescheuerter gehts leider kaum noch. Das ist ja weit weg von intuitiv.
Abgesehen davon müsste ich ja dann für fast jede Taste meiner elf HiFi-Geräte ein Iobroker-Gerät anlegen. Das ist ja kaum pflegbar.
Aber wenn ich Euch richtig verstanden habe, gib es also keinen Trick wie man das vernünftiger machen könnte als die oben Genannten?
Dann werde ich mich wohl weiterhin mit dem Drücken von Tasten begnügen müssen und mich nur auf das Ein und Ausschalte der Geräte beschränken.
Schön wäre wen man Alexa einfach Sätze lernen und dahinter Aktionen definiern könnte. So ungefähr wie beim text2command Addon.
Gruss Ralf
-
Bescheuerter gehts leider kaum noch. Das ist ja weit weg von intuitiv. `
Tja, Amazon meint "an, aus, setze auf %" reicht aus, um ein Smart Home zu steuern. Angeblich unterstützen meine Rolläden "öffnen" und "schließen" nicht. Ging aber mal… -
Die Hoffnung stirbt zuletzt. Vielleicht ändert sich da noch was in Zuknft.
Kann man sich bei Amazon irgendwo beschweren, bzw. gibt es eine Möglichkeit Verbesserungsvorschläge einzukippen?
Also auch so dass die gelesen und berücksichtigt werden. Foren gibts bestimmt genug die von Amazon ignoriert werden.
Gruss Ralf
-
Hallo Ralf,
Ich werde das mit dem Logitech Harmony Hub versuchen.
Je nach verwendeter "Activity", was quasi den Scenen bei der Heimautomatisierung entspricht, haben die gleichen Befehle (Tasten) unterschiedliche Auswirkungen.
Schaue ich z.B TV ohne AVR, ändern die Lautstärketasten den Fernseher.
Beim Schauen mit AVR ändert sich die Lautstärke des AVR.
Das gleiche passiert mit "Mute" oder der Programmwahl.
Letztendlich kann man mit einheitlichen Sprachbefehlen verschiedene Geräte je nach Activity steuern.
Sobald ich den Hub habe, werde ich es testen 8-)
Tschau
Uwe
-
Hallo Uwe
Klingt gut.
Dann brauch ich aber den Harmony Hub.
Ich hab das mit der Lautstärke übrigens jetzt so gelöst:
Ich gebe dem Gerät “Verstärker“ nun eine Prozentzahl mit. Alles über 50% dreht den Lautstärke Regler nach rechts und alles unter 50% dreht ihn nach links. 100% entspricht “an“ und schaltet den Verstärker an; entsprechend schaltet 0% aus. Ich habe dann noch eingestellt, dass je weiter die Prozentwerte von 50 entfernt sind desto öfter wird der Request aufgerufen.
Bedeutet:
“Alexa, Verstärker auf 40%" dreht den Regler zweimal um ein paar Grad nach links, “Alexa, Verstärker auf 10%“ dreht den Regler 6 mal nach links usw.
Die Prozentzahl ist bei mir also nicht die Position des Reglers, sondern sein Drehwinkel. Ich kann damit also steuern wie viel lauter oder leiser ich's haben will.
Das Problem war auch, dass ich das Wort “Lautstärke“ nicht verwenden konnte, weil Alexa das immer für ihre eigene Lautstärke verwendet hat.
Auch habe ich den Eindruck, dass “Verstärker“ ein Wort ist, das sie sehr schwer versteht - ich brauche immer mehrere Versuche. Aber grundsätzlich geht's so.
Ist zwar nicht schön, aber man kann damit erstmal leben.
Gruss Ralf
-
Ich hab das mit der Lautstärke übrigens jetzt so gelöst:
Ich gebe dem Gerät “Verstärker“ nun eine Prozentzahl mit. Alles über 50% dreht den Lautstärke Regler nach rechts und alles unter 50% dreht ihn nach links. 100% entspricht “an“ und schaltet den Verstärker an; entsprechend schaltet 0% aus. Ich habe dann noch eingestellt, dass je weiter die Prozentwerte von 50 entfernt sind desto öfter wird der Request aufgerufen.
Bedeutet:
“Alexa, Verstärker auf 40% dreht den Regler zweimal im ei paar Grad nach links, “Alexa, Verstärker auf 10%“ dreht den Regler 6mal nach links usw.
Die Prozentzahl ist bei mir also nicht die Position des Regler, sondern sein Drehwinkel. Ich kann damit also steuern wie viel lautet oder leiser ich's haben will. `
Interessanter Ansatz. Spontan fällt mir ein, dass du per Skript https://github.com/ioBroker/ioBroker.javascript#on–-subscribe-on-changes-or-updates-of-some-state könntest. Wenn du jetzt sagst "Verstärker auf 40%" dann kann das Skript anhand dem alten Zustand (z.B. 60%) ermitteln, dass du 2x nach links drehen musst.Der Callback bekommt dafür ja newState.val und oldState.val
-
Hi AlCalzone
Stimme Dir grundsätzlich zu; das Problem ist aber dass ich keinen absoluten Wert der Reglerstellung bestimmen kann, da man den ja auch manuell verstellen kann. Ich weiss also grundsätzlich nicht wo er steht..
Gruss Ralf