NEWS
Möglich ? Eine Prozentzahl von Alexa an ein Script übergeben ?
-
Hi,
ich möchte meinen Fernseher mit Alexa steuern. Habe mir also ein Script geschrieben welches die Lautstärke um 10 Punkte erhöht sobald es von Alexa aufgerufen wird (Verknüpfung über den Cloud-Adapter). In den Objekteigenschaften des Skriptes steht dieses auf type "Logikwert". Wenn ich das jetzt umstelle auf "Zahl" könnte ich dann jetzt z.b sagen: Alexa, die Lautstärke um 15 erhöhen. Kann ich diese 15 irgendwie an das Skript übergeben ??? Ist soetwas möglich ?
Sorry aber ich bin blutiger Anfänger mit ioBroker und Java…
-
Hi,
ich möchte meinen Fernseher mit Alexa steuern. Habe mir also ein Script geschrieben welches die Lautstärke um 10 Punkte erhöht sobald es von Alexa aufgerufen wird (Verknüpfung über den Cloud-Adapter). In den Objekteigenschaften des Skriptes steht dieses auf type "Logikwert". Wenn ich das jetzt umstelle auf "Zahl" könnte ich dann jetzt z.b sagen: Alexa, die Lautstärke um 15 erhöhen. Kann ich diese 15 irgendwie an das Skript übergeben ??? Ist soetwas möglich ?
Sorry aber ich bin blutiger Anfänger mit ioBroker und Java… `
Musst du nicht. Du ergänzst dein Objekt mitcommon.min = -1000000
common.max = 1000000
Und dann einfach im Skript vergleichst du neues Wert mit dem Letztem Wert und du hast deine Differenz.
-
Hi Joker,
ok, jetzt war Bluefox doch schneller. Da ich den Text aber bereits geschrieben habe und mit unsicher bin, ob seine Antwort wirklich deiner Frage beantwortet, hier noch mein Beitrag:
Also ein Datenpunkt kann mit den Objekteigenschaften
[...] "smartName": "bla blub", "type": "number", // <--entspricht "Zahl" im Reiter "allgemein" "unit": "%", "min": 0, "max": 100, "read": true, "write": true [...]
wunderbar mit Alexa per "Alexa, schalte bla blub auf x Prozent" gesteuert werden.
Mittels Java-Script kannst du dann jede Aktualisierung des entsprechenden Datenpunkts mitbekommen:
on({ id: "<dein von/alexa/gesteuerter/datenpunkt="">", change: "any" }, function (obj) { var x = obj.state.val; // machIrgendwas(x); });</dein>
Change: "any" ist nötig, damit das Script bei jeder Aktualisierung getriggert wird. "ne" für "not equal" würde nur Änderungen mitbekommen und dann könntest du nicht zweimal den gleichen Befehl schicken (also etwa zweimal hintereinander um 5% erhöhen). Für die Reduktion der Lautstärke benutzt du dann am besten einen zweiten Datenpunkt, damit keine seltsamen Sprachbefehle wie "schalte bla blub auf minus y%" oder ähnliches dabei rauskommen.
Übrigens macht Alexa bei den Befehlen "erhöhe um x %" eigentlich von alleine genau diese Funktionalität (dp_neu = dp_alt + x). Hier hast du nur das Problem, dass Alexa zwischenzeitliche manuelle Änderungen (z.B. per Fernbedienung) natürlich nicht mitbekommt und relative Änderungen immer auf den ihr zuletzt bekannten Wert vornimmt.
Erste Anlaufstelle für javascript-Befehle und deren Optionen ist immer die Hilfeseite des Adapters (das "?" am Ende des javascript-Adapters auf der Adapter-Seite).
Grundsätzliche javascript-Referenz findest du natürlich zuhauf im Internet (z.B. https://wiki.selfhtml.org/wiki/JavaScript). Grundsätzliche Programmiererfahrung sollte vorhanden sein bzw. muss sich angeeignet werden.
Viel Spaß und Erfolg, justr
-
Hi erst einmal Danke für eure Antworten! Ich weiss nicht ob ich es richtig rüber gebracht habe… Der eigentlich Datenpunkt, der tatsächlich den Fernseher anspricht, kann nur true oder False. Im Script muss ich eine Schleife durchlaufen, die jetzt diesen Datenpunkt x-mal auf true schaltet.
Ich habe mir das folgendermaßen zusammen gebastelt (Premiere, mein erstes Java-Script
for(var i=0; i<11; i++) { setTimeout(setState("samsung.0.Volume.Volume Up"/*Volume.Volume Up*/,true),1500); }
Ich kann über diesen Datenpunkt (oder einen anderen) auch nicht ermitteln, wo hoch die Lautstärke gerade eingestellt ist!
Daher möchte ich Alexa einfach sagen können, Alexa erhöhe die Lautstärke um 10, oder so ähnlich. Sollte ich dann auf weniger als 0 oder mehr als 100 kommen wäre das egal.
Ich muss also im Skript mitkriegen das es von Alexa aufgerufen wurde und muss dann dort die "übergebene Zahl" ermitteln.
Ich habe das jetzt mal so gemacht wie ihr es geraten habt (min + max habe ich in den Objecteigenschaften des Scriptes hinzugefügt), allerdings funktioniert es so noch nicht:
var x = getState("javascript.0.scriptEnabled.Fernseher.Volume+10"/*scriptEnabled.Fernseher.Volume+10*/).Val; for(var i=0; i
Obwohl ich "Zahl" in den Objekteigenschaften des Skriptes ausgewählt habe, kann ich als "Wert" nur true/False eintragen. Funktioniert es vielleicht deshalb nicht ?
-
Sodele, ich bin jetzt einen ganz anderen Weg gegangen!
Ich habe mir einfach einen eigenen Datenpunkt gemacht der von Alexa bedient wird. Diesen überwache ich per Skript und bei dem bekomme ich auch die Zahl, die von Alexa kommt, über den State mitgeteilt. Das funktioniert
-
Hallo Joker,
sehe ich das richtig? Du hast im Skripteditor einen Ordner "Fernseher" angelegt und darin dann das Skript "Volume+10"? Dann würde nämlich der Datenpunkt anzeigen, dass bzw. ob das Script an sich aktiv ist ("scriptEnabled"). Das hat nichts mit Triggerpunkten zu tun. Deswegen kennt er vermutlich nur true oder false und wird mit dem Play- und Pause-Button gesteuert.
Wie du mittlerweile festgestellt hast, brauchst du einen eigenen Datenpunkt mit Type "Zahl" bzw. "number", den du mit Alexa dann steuern kannst.
-
Hallo Joker,
sehe ich das richtig? Du hast im Skripteditor einen Ordner "Fernseher" angelegt und darin dann das Skript "Volume+10"? Dann würde nämlich der Datenpunkt anzeigen, dass bzw. ob das Script an sich aktiv ist ("scriptEnabled"). Das hat nichts mit Triggerpunkten zu tun. Deswegen kennt er vermutlich nur true oder false und wird mit dem Play- und Pause-Button gesteuert.
Wie du mittlerweile festgestellt hast, brauchst du einen eigenen Datenpunkt mit Type "Zahl" bzw. "number", den du mit Alexa dann steuern kannst. `
Ja, einen Datenpunkt habe ich ja jetzt gemacht und damit funktioniert es jetzt auch.
Ich habe aber ein neues Problem. Alexa akzeptiert kein "minus"…
Wenn ich sage: Setze Fernseher auf Lautstärke 20%! Dann wird der Datenpunkt auf 20% gesetzt. Alles Ok. Sage ich aber: Erhöhe um 10%! Dann versteht Alexa das nicht. Genauso wenig: verringere um 10%! Wird auch nicht erkannt. Ich kann nur absolute Werte angeben.
Da der Samsung-Datenpunkt aber nur true/false kennt und ich für Lauter und Leiser 2 getrennte Datenpunkte in einer Schleife ansprechen muss, kann ich leider über Alexa nur lauter machen da ich die aktuelle Lautstärke nicht abfragen kann
Oder hat jemand noch eine andere Idee was man da machen könnte ?
-
Hallo Joker,
sehe ich das richtig? Du hast im Skripteditor einen Ordner "Fernseher" angelegt und darin dann das Skript "Volume+10"? Dann würde nämlich der Datenpunkt anzeigen, dass bzw. ob das Script an sich aktiv ist ("scriptEnabled"). Das hat nichts mit Triggerpunkten zu tun. Deswegen kennt er vermutlich nur true oder false und wird mit dem Play- und Pause-Button gesteuert.
Wie du mittlerweile festgestellt hast, brauchst du einen eigenen Datenpunkt mit Type "Zahl" bzw. "number", den du mit Alexa dann steuern kannst. `
Ja, einen Datenpunkt habe ich ja jetzt gemacht und damit funktioniert es jetzt auch.
Ich habe aber ein neues Problem. Alexa akzeptiert kein "minus"…
Wenn ich sage: Setze Fernseher auf Lautstärke 20%! Dann wird der Datenpunkt auf 20% gesetzt. Alles Ok. Sage ich aber: Erhöhe um 10%! Dann versteht Alexa das nicht. Genauso wenig: verringere um 10%! Wird auch nicht erkannt. Ich kann nur absolute Werte angeben.
Da der Samsung-Datenpunkt aber nur true/false kennt und ich für Lauter und Leiser 2 getrennte Datenpunkte in einer Schleife ansprechen muss, kann ich leider über Alexa nur lauter machen da ich die aktuelle Lautstärke nicht abfragen kann
Oder hat jemand noch eine andere Idee was man da machen könnte ? `
Laut Dokumentation soll es gehen:https://developer.amazon.com/public/sol … agerequest
“Alexa, reduziere Gerätename um Anzahl Prozent”
“Alexa, erhöhe Gerätename um Anzahl Prozent”
Ich hoffe du sagst schon "Alexa erhöhe Fernseher um 10%" oder?
-
Gut…wenn ich es genau so ausspreche geht es
Nutzt mir aber nix! Wenn ich sage sie soll um 10% erhöhen setzt sie meinen Datenpunkt auf 100% ! Liegt es vielleicht daran das sie den aktuellen wert des Datenpunktes nicht kennt und sie versucht diese 10% auf zu addieren um dann wieder einen absoluten Wert zu übermitteln ?
-
Gut…wenn ich es genau so ausspreche geht es
Nutzt mir aber nix! Wenn ich sage sie soll um 10% erhöhen setzt sie meinen Datenpunkt auf 100% ! Liegt es vielleicht daran das sie den aktuellen wert des Datenpunktes nicht kennt und sie versucht diese 10% auf zu addieren um dann wieder einen absoluten Wert zu übermitteln ? `
Deswegen habe ich dir gesagt, dass du min, max auf -100000 und 100000 setzten solltest, dann wird Alexa dein Wert unendlich erhöhen oder verkleinen und du nur Differenz dann ausrechnen solltest. -
Gut…wenn ich es genau so ausspreche geht es
Nutzt mir aber nix! Wenn ich sage sie soll um 10% erhöhen setzt sie meinen Datenpunkt auf 100% ! Liegt es vielleicht daran das sie den aktuellen wert des Datenpunktes nicht kennt und sie versucht diese 10% auf zu addieren um dann wieder einen absoluten Wert zu übermitteln ?
Deswegen habe ich dir gesagt, dass du min, max auf -100000 und 100000 setzten solltest, dann wird Alexa dein Wert unendlich erhöhen oder verkleinen und du nur Differenz dann ausrechnen solltest.
Kapier ich irgendwie nicht :roll:
Hab ich jetzt so eingerichtet aber egal was ich für eine Prozentzahl ansage, Alexa setzt immer auf das maximal Mögliche (100000). Wie soll mir das helfen ?
-
Hi,
ich möchte meinen Fernseher mit Alexa steuern. Habe mir also ein Script geschrieben welches die Lautstärke um 10 Punkte erhöht sobald es von Alexa aufgerufen wird (Verknüpfung über den Cloud-Adapter). In den Objekteigenschaften des Skriptes steht dieses auf type "Logikwert". Wenn ich das jetzt umstelle auf "Zahl" könnte ich dann jetzt z.b sagen: Alexa, die Lautstärke um 15 erhöhen. Kann ich diese 15 irgendwie an das Skript übergeben ??? Ist soetwas möglich ?
Sorry aber ich bin blutiger Anfänger mit ioBroker und Java…
Hallo zusammen
Bin neu hier und bin beim googlen hier auf dieses Thema gestoßen… Da es genau das behandelt was ich momentan verzweifelt versuche zu realisieren, wollte ich fragen ob Sie die Steuerung mittels Alexa vernünftig lösen konnten.
Gruß
Gesendet von meinem SM-G950F mit Tapatalk