NEWS
Frage zu "getIdByName()
-
Hallo,
mit diesem Blockly versuche ich die Lautstärke eines variablen Echo-Dot zu setzten.
Ändert sich der Wert "l_EchoDot", dann setzte Volume des Echos mit Namen (m_EchoDot) entsprechend.
Da ich Blockly "getIdByName" nicht finde, habe ich das in die Funktion gepackt.!
volume = 0-100
Echodot = ist der Name des Gerätes hier bspw. "Echo-Buero" - Name ist natürlich eindeutig.Beim Funktionsaufruf tritt aber ein Fehler auf und komme da nicht weiter .. :
State "alexa2.0.Echo-Devices.G0911Wxxxxxxxxxx,alexa2.0.Smart-Home-Devices.123123123-1232-1233-123a-412312312313.Player.volume" not found
-
@muetzeheinrich
Du übergibst an getIdByName(name) den Wert eines Datenpunktes, nicht den Namen des Gerätes. Besser so: -
gestern Abend war das Brett vorm Kopf schon ziemlich dick
Ich möchte die Werte der beiden Datenpunkte der Funktion übergeben. Volume hier "56" und Dot ist "Echo-Buero".
Erst als ich testweise auch mit deiner Variante Warnung erhalten habe ist mir aufgefallen, dass der Namen des Echos-Dot nicht eindeutig ist.
Der kommt einmal unter "alexa2.0.Echo-Devices" und ein weiteres mal unter "alexa2.0.Smart-Home-Devices" vor.Schade - dann kann so nicht funktionieren. Bin mir auch unsicher, ob man den Namen unter "alexa2.0.Echo-Devices" manuell ändern kann - wird wahrscheinlich wieder überschrieben.
LG
-
ich bin leider immer noch mit dem Blockly zugange.
Kann es sein das Namen kein ASCII 45 (-) enthalten sollte?
"Echo-Schlafzimmer" führt zu State "undefined.Player.volume" not found
"EchoSchlafzimmer" hingegen funktioniert.
-
@muetzeheinrich sagte: Kann es sein das Namen kein ASCII 45 (-) enthalten sollte?
Im Namen sind alle Zeichen möglich, das "-" sollte kein Problem sein.
-
.. habe es noch mal geprüft. Es ist wirklich so !
"Echo-Buero" führt zur Warnung "State "undefined.Player.volume" not found"
"EchoBuero" findet das Gerät und setzt volume. -
@muetzeheinrich
Dann checke mal mit einem TestSkript, wenn der Name "Echo-Schlafzimmer" ist:log(getIdByName("Echo-Schlafzimmer"));
-
@paul53 sagte in Frage zu "getIdByName():
log(getIdByName("Echo-Schlafzimmer"));
script.js.TEST.ss99: undefined
-
@muetzeheinrich sagte: script.js.TEST.ss99: undefined
Das Objekt mit dem Namen "Echo-Schlafzimmer" existiert?
-
-
@muetzeheinrich
Komisch: Ich habe es gerade mit einem Device-Namen "Echo-Schlafzimmer" getestet und es funktioniert. -
"das gibst doch nicht" war meine erste Reaktion! Irgendwo muss aber ein Unterschied sein ..
{ "from": "system.adapter.alexa2.0", "user": "system.user.admin", "ts": 1613250245358, "common": { "name": "Echo-Schlafzimmer", "read": true, "write": false, "icon": "icons/echo_dot3.png" }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "_id": "alexa2.0.Echo-Devices.G090Xxxxxxxxxxxxx", "type": "device" }
log(getIdByName("Echo-Schlafzimmer")); erzeugt :
22:35:01.450 info javascript.0 (25703) script.js.TEST.ss99: undefinedich weis gerade nicht weiter .
-
Versuch mit "EchoSchlafzimmer gibt die ID wieder..
25703) script.js.TEST.ss99: alexa2.0.Echo-Devices.G090XG1103xxxxxxx
-
@muetzeheinrich sagte: Versuch mit "EchoSchlafzimmer gibt die ID wieder..
Starte mal nach Änderung in "Echo-Schlafzimmer" die Javascript-Instanz neu. Es ist offenbar ein Puffer-Problem.
-
@paul53 sagte in Frage zu "getIdByName():
Starte mal nach Änderung in "Echo-Schlafzimmer" die Javascript-Instanz neu.
javascript.0 2021-02-13 23:03:40.095 info (13206) script.js.TEST.ss99: registered 0 subscriptions and 0 schedules javascript.0 2021-02-13 23:03:40.094 info (13206) script.js.TEST.ss99: undefined javascript.0 2021-02-13 23:03:40.086 info (13206) Start javascript script.js.TEST.ss99
-
-
@muetzeheinrich sagte: script.js.TEST.ss99: undefined
Mit?
log(getIdByName("Echo-Schlafzimmer"));
Ich habe "Echo-Schlafzimmer" in "Aussen / Garten" geändert und erst nach Neustart der Javascript-Instanz funktionierte
log(getIdByName('Aussen / Garten'));
-
! zuerst mal für vielen Dank für deine Zeit.
Es ist so, wie du es geschrieben hast. Wenn die Javascript-Instanz nach umbennen von Namen neu gestartet wird, dann klappt es. Vielleicht wird ein cache neu erzeugt - habe es heute noch ein paar mal hin und her probiert. Sehr wahrscheinlich habe gestern die falsche JS-Instanz neu gestartet.
Das löst leider mein ursprüngliches Problem der mehrfach vorkommenden Gerätenamen nicht. Ich habe nur wenig Javascript Kenntnis, für if then else reicht es aber
.
Mit Versuch und Irrtum ist nun diese Blockly-Funktion entstanden , vielleicht geht es auch sicherer / einfachervar arr = getIdByName(echodot); if (arr != null) { for (var i = 0; i < arr.length; i++) { if (arr[i].indexOf("Echo-Devices") > -1) { setState(arr[i] + '.Player.volume', volume) } } } else { log ("Echo nicht vorhanden") }