Das Problem wurde im ioBroker-Forum und im Github auch schon angesprochen...
Laut Bluefox..... it's not a Bug, it's a feature
Das Problem wurde im ioBroker-Forum und im Github auch schon angesprochen...
Laut Bluefox..... it's not a Bug, it's a feature
Ok, aber soweit ich das lese betrifft das die Aktualisierung der Scrip Engine in Vis. Das muss wirklich nicht dauernd aktualisiert sein. Da reicht es im Grunde wenn der richtige Datenpunkt ausgewählt wird.
Die VIS soll ja dann den Datenpunkt aktuell aus den Objekten auswählen.
Bei mit klappt das zumindest richtig, obwohl auch bei mir in der Script Engine der (hier sogar) vorletzte Anrufer steht. Bei einem Anruf wird mir aber trotzdem der aktuelle Anrufer angesagt.
habs grade mal ausprobiert, wie im ioBroker-Forum auch schon rausgefunden... nach Neustart des Admin-Adapters ist es jetzt wieder aktuell.... aber wird ebend nicht aktualisiert..
Die Ansicht im Script muss ja auch nicht aktualisiert werden. Das verbraucht doch nur unnötig Resourcen. Wichtig ist doch das der richtige Datenpunkt abgefragt wird und der dann im laufenden Script die richtige Antwort erhält. Genau so steht das in dem Artikel im Forum.
Ich denke mal das das auch ein pasendes Feature ist, da ja viele Adapter darauf ausgelegt sind möglichst Resourcenschonend zu agieren. Wenn der VIS-Objektviewer alle paar Minuten (oder wann auch immer) aktualisiert belegt das eben Rechen- und Speicherkapazität die gar nicht nötig ist. Hauptsache ist doch das ich im Editor den richtigen Datenpunkt einsetze.
Und genau da scheint ja dann doch das Problem zu liegen, wenn meine Anrufansage immer genau das ansagt, was in dem veralteten DP steht...
Andere Idee? vielleicht braucht der TR-64 Adapter ein bischen, um den DP zu aktualisieren? Und da ist der Befehl schon an Alexa raus?
Wäre es vielleicht sinnvoll, den Trigger nicht auf ringing = true sondern auf callerName wurde aktualisiert zu ändern?
Mal ne blöde Frage:
Hast du es schon mal mit einem JS versucht?
on({id: 'tr-064.0.callmonitor.ringing', val: true, ack: true}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
var idEcho = "alexa2.0.Echo-Devices.G2A0P3077XXXXLLE";
var volume = getState(idEcho+".Player.volume"/*volume*/).val;
var Anrufer = String(getState("tr-064.0.callmonitor.inbound.callerName").val);
var Nummer = String(getState("tr-064.0.callmonitor.inbound.caller").val);
if (Anrufer.length === 0){ // Gibt es einen Namen im Adressbuch oder nur eine Nummer
log("kein name");
Anrufer = NummerInText(Nummer);
}
setStateDelayed(idEcho+".Player.volume"/*volume*/,80, 1700, false);
setStateDelayed(idEcho+".Commands.speak"/*speak*/, (String('Anruf von ') + Anrufer), 2000, false);
setStateDelayed(idEcho+".Player.volume"/*volume*/,40, 5000, false);
});
function NummerInText(Nummer){
var text = "unbekannt ";
var einzeln = Array("null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun");
for (var i = 0; i <Nummer.length; i++){
text += einzeln[parseInt(Nummer.substr(i,1))] + " ";
}
return text;
}
Alles anzeigen
Importiere doch das Ding oben mal kurz und lasse das schnell bei dir laufen (Geräte anpassen). Das funktioniert bei mir zu 100% richtig. Wenn das bei dir auch funktioniert müssen wir im Blockly suchen ansonsten im TR064 Adapter hätte ich jetzt mal vorgeschlagen.
Vielleicht lässt sich der Fehler ja irgendwie eingrenzen.
Heute wirds leider nix mehr, meine Frau ist schon im Bett und da steht auch ein Telefon und eine Alexa die den Anrufer verkünden würde....
Ich mach mich da mal morgen nachmittag dran... und probiere mal sowohl deine als auch meine alternative aus.
Chaot mit deinem js-Script lief es genauso, das der letzte Anrufer angesagt wurde...
Ich habe jetzt bei meinem Script eine Verzögerung der Sprachausgabe von 1 Sekunde eingebaut...
Jetzt läuft es ohne Probleme... wahrscheinlich braucht der TR-64-Adapter einfach einen kleinen Moment um den Wert zu aktualisieren.
Du hattest das ja in deinem ursprünglichen auch drin, damit Alexa das zwischen den Klingeltönen ansagt...
Könntest ja nochmal versuchen den Delay wegzulassen... Vielleicht kannst du mein Problem dann ja nachstellen.
Nachtrag:
Die Variante, den Trigger auf Änderung von callerName zu setzten, funktioniert an sich auch... nur wenn 2 mal nacheinander der gleiche anruft, bleibt sie natürlich stumm. Also nicht Praxistauglich.
kann es sein, das sie Übergabe der Lautstärke nicht immer funktioniert?
Ich denke das da noch ein bisschen der Wurm drin ist.
Scheinbar geht der Befehl auf dem Weg in die AlexaCloud verloren. Zumindest im Protokoll taucht nichts dergleichen auf.
na warten wirs mal ab... der Adapter ist ja noch recht jung...
Der ist ja noch recht früh im Beta.
Ich denke das sich da in den nächsten 6 Monaten so einiges ergeben wird.
Sieht man ja beispielsweise am Backup-Adapter. Der ist blitzschnell gewachsen und mittlerweile funktioniert der astrein.
Wie gesagt, das geht schnell:
https://forum.iobroker.net/viewtopic.php?…6ed84199dd5964a
hier ist auch die Lautstärkeänderung drin die scheinbar lahmt.
cool. ich update grade mal und werde testen....
Heute 3 Anrufe und alle Korrekt mit richtiger Ansage und Lautstärke.
so habe mein Anrufer-Script nochmal aktualisiert, da der tr-064 wohl manchmal etwas langsam zu sein scheint und ich mit einem festen Delay nicht so recht auskomme... ich möchte den Anrufer ja auch möglichst schnell ansagen lassen....
Also trigger ich jetzt auf die Aktualisierung von "callerName" und es läuft sehr gut... damit brauche ich auch keinen Delay in der Ansage.... Alexa quatscht einfach los, wenn der Wert aktualisiert wird...
auch die Änderung der Lautstärke funktioniert seit alexa2 Version 0.4.0 zuverlässig
ups... wollte meins gestern eigentlich auch noch dazu hochladen... hab ich wohl vergessen...
meins sieht eigentlich genauso aus, nur das ich ebend auf die Aktualisierung von callerName triggere, damit Alexa auch zuverlässig den richtigen Namen ansagt.
achso.. und ich lese erst die aktuelle Lautstärke aus und speicher sie in einer Variablen damit ich hinterher wieder auf die vorherige Lautstärke zurück ändere.
Ist ne gute Idee mit der Lautstärke als Variable, werd ich wohl auch einbauen. Der Trigger ist bei mir nicht so wild, weil ich den Timeout drin habe, somit ist alles richtig bis Alexa anfängt zu regen.
Den Timeout mit dem extra Block über dem speak einzubauen scheint wohl besser zu klappen, da das Script dann wohl wirklich ne Sekunde wartet, bis es den Wert ausliest.
Ich hatte bisher immer die Verzögerung direkt im Objekt genutzt (der Haken hinten)
Ich vermute mal, das das Script dann sofort ausliest und nur die Ausgabe verzögert...