NEWS
Sayit Skript startet nicht selbst und hackt Text ab
-
Guten Abend,
ich hab da ein Problem mit Sayit.
Zum einen startet das Skript nicht zu eingestellten Zeit. Nur wenn ioBroker neu gestartet wird, dann startet das Skript.
Zum anderen wird die Ansage abgehackt, das letzte Wort wird meist ganz verschluckt oder nur gerade noch der Anfang wiedergegeben.
Letzteres habe ich mit einigen Ansagen, kann aber im Aufbau des Skriptes nichts feststellen woran es liegen könnte.
Hier mal das o.g. Skript:
! ````
//sayit adapter
var idSayIt = "sayit.0.tts.text"; // Text to speech
var abend = true; // Flag für heutige Ansage
! function baueAnsage() {
//Wochentag ermitteln
var d = new Date ();
var weekday = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
var w = weekday[d.getDay()];
! //Tagesdatum ermitteln
var t = d.getDate();
! //Monat ermitteln
var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
var m = month[d.getMonth()];
! //Jahr ermitteln
var j = d.getFullYear()
! //Stunde ermitteln
h = d.getHours()
! //Minute ermitteln
mi = d.getMinutes()var ansage = "Hier steht dann der Ansagetext der wiedergegeben werden soll. ";
! setState (idSayIt, ansage);
}
! // jeden Werktag um 19:30h
schedule("30 19 * * *", function() {
if (abend === true) { // wenn heute noch angesagt werden muss
baueAnsage(); // Ansage bauen
abend = false; // flag für heutige Ansage auf false
log('Sayitausgabe Tagestemperatur durch Schedule Werktag ausgelöst');
}
});
! // Flag für Ansage um Mitternacht zurücksetzen auf true
schedule("0 0 * * *", function() {
abend = true;
});Verwendet wird übrigens Ivona als TTS. Hat zu den beiden Problemen vielleicht jemand eine Idee wie diese zu lösen wären. Abgehackte Ansagen klingen nicht so toll. Schönen Abend und vielen Dank schon mal, Thomas
-
Hallo Thomas,
Zum einen startet das Skript nicht zu eingestellten Zeit. Nur wenn ioBroker neu gestartet wird, dann startet das Skript. ` Bist du sicher, dass du hier den ganzen Code eingestellt hast?
Denn das Skript ruft die Funktion nicht ausserhalb der schedules um 19:30 Uhr und 0 Uhr auf. :? :?: :roll:
Wozu ist das flag abend, wenn nur per Zeitsteuerung gestartet werden soll?
var ansage = "Hier steht dann der Ansagetext der wiedergegeben werden soll. "; ````Diesem Code kann man nicht entnehmen, ob die Ansage fehlerhaft ist und deshalb nicht getätigt wird (zB zu lang). Was sagt das Log zur Sayitausgabe? Die Ansagen werden doch geloggt. Gruß Pix
-
@pix:Wozu ist das flag abend, wenn nur per Zeitsteuerung gestartet werden soll?
var ansage = "Hier steht dann der Ansagetext der wiedergegeben werden soll. "; ````Diesem Code kann man nicht entnehmen, ob die Ansage fehlerhaft ist und deshalb nicht getätigt wird (zB zu lang). Was sagt das Log zur Sayitausgabe? Die Ansagen werden doch geloggt. `
Hallo Pix,
ich habe die von Dir genannten Beispiele ( http://forum.iobroker.net/viewtopic.php?p=40589#p40589genommen und lediglich jenen Teil des Codes entnommen, die nicht benötigt werden. Die Flag stammt also von Dir 8-) . Ich selbst hätte es so nicht gewusst, weil ich eben nach einem funktionierenden Code gesucht habe anhand dessen ich weiter aufbauen / lernen kann.
Das Skript soll letztendlich nichts anders tun, als um die Zeit XX:XX den Text YYY abzuspielen. Ich habe mehrere Skripte, zeitlich über den Tag verteilt, die alle genauso "gestrickt" sind. Einige funktionieren, andere wieder nicht.
Vielleicht hatte ich mich auch unklar ausgedrückt, ich weiß es leider nicht. Wenn ja sorry, das war sicher keine böse Absicht.
In wie weit es auch mit dem Skript zusammenhängt, dass der Text hinten abgeschnitten ist (letztes Wort weg oder auch die 2. Silbe fehlt) kann ich nicht sagen. Die Skripte machen mich momentan wirklich irre :roll:
Gruß
Thomas
-
Da ich die Problematik mit "Keine Ansage" bzw. "abgehakt" immer noch nicht dauerhaft in den Griff bekommen habe hier nochmal das ganze Skript welches ich hier im Einsatz habe.
! ````
//sayit adapter
var idSayIt = "sayit.2.tts.text"; // Text to speech
var ansage15 = true; // Flag für heutige Ansage
! function baueAnsage() {
//Wochentag ermitteln
var d = new Date ();
var weekday = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
var w = weekday[d.getDay()];
! //Tagesdatum ermitteln
var t = d.getDate();
! //Monat ermitteln
var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
var m = month[d.getMonth()];
! //Jahr ermitteln
var j = d.getFullYear()
! //Stunde ermitteln
h = d.getHours()
! //Minute ermitteln
mi = d.getMinutes()var ansage = "Halli Hallo. " + ", Es ist" + h + "Uhr und " + mi + "Minuten. Hier steht die zu sprechende Ansage für die Wiedergabe, ";
! setState (idSayIt, ansage);
! }
! // jeden Werktag um 15:00 Uhr
schedule("2 15 * * *", function() {
if (ansage15 === true) { // wenn heute noch angesagt werden muss
baueAnsage(); // Ansage bauen
ansage15 = false; // flag für heutige Ansage auf false
log('Sayitausgabe Tagestemperatur durch Schedule Werktag ausgelöst');
}
});
! // Flag für Ansage um Mitternacht zurücksetzen auf true
schedule("0 0 * * *", function() {
ansage15 = true;
});Ich habe 3 Szenarien. Es gibt Tage an denen es funktioniert und dann wieder Tage an denen nichts ausgelöst wird - ohne dass etwas verändert worden wäre. Das 3\. Szenario ist, dass der Text einfach abgeschnitten wird und die Wiedergabe nur noch
Es ist 15 Uhr und 0 Minuten. Hier steht die zu sprechende Ansage für die WieDERGABE,
(abgeschnittener Teil ist in Großbuchstaben dargestellt) An der Länge des Textes kann es im Hinblick auf das Abhaken nicht liegen, dann dürfte es nach meinem Verständnis nie funktionieren. Ist der Raspi3 eventuell doch überfordert, weil es mal geht und mal nicht? Mir gehen meine (Anfänger-)Ideen für eine Lösung nun wirklich aus. Gruß Thomas
-
Keine Ahnung was das Problem verursacht, aber ich würde in diesem Fall das Problem "per Hand" eingrenzen.
Also viel weniger Code nehmen, sprich mal einen statischen, kurzen Text, dann einen statischen langen Text, mal ohne Zeitgeber und dann mit probieren und so vortasten, ab wann das Problem auftritt.
Ich reloade oder stoppe/starte Skripte auch gerne nach einer Skriptänderung, bei größeren Sachen starte ich auch den Raspi neu.
-
Mich macht eben das geht / geht nicht wahnsinnig.
Einen Neustart vom Raspi mache ich auch öfter. Danach klappt es auch meist…. teilweise hackt er trotzdem die letzte Satzsilbe ab.
Mein Hauptproblem liegt derzeit einfach noch darin, dass ich noch Skript-Anfänger bin und hier noch keine großen Schritte wagen kann. Im Augenblick orientiere ich mich an Skripten, wie z.B. das genannte, und "forme" die nach Bedarf um. So wirklich ein gutes Tutorial gibt es nicht und das macht den Einstieg einfach schwerer. Alleine bin ich da denke ich nicht.
-
Hallo Nordlicht,
ich würde die für die beschriebene Aufgabe das Skript auch deutlich kürzen, um so Fehler auszuschließen.
Wenn das Skript immer um 15 Uhr startet, dann lass doch das Errechnen der Zeit und vor allem des Datums. Schreib einfach:
var ansage = "Hallihallo, es ist schon wieder drei Uhr ....";
Dann kannst du alles darüber von//Wochentag ermitteln
bis````
mi = d.getMinutes()Gruß Pix
-
@pix:Hallo Nordlicht,
ich würde die für die beschriebene Aufgabe das Skript auch deutlich kürzen, um so Fehler auszuschließen.
Wenn das Skript immer um 15 Uhr startet, dann lass doch das Errechnen der Zeit und vor allem des Datums. Schreib einfach:
var ansage = "Hallihallo, es ist schon wieder drei Uhr ....";
Dann kannst du alles darüber von//Wochentag ermitteln
bis````
mi = d.getMinutes()Gruß Pix `
Hi Pix,
danke, ich hab das mal so übernommen und werde sehen was passiert.
Wenn in einer Ansage jedoch die Uhrzeit mit dabei sein muss, dann wäre das Skript schon richtig, oder ist es dann trotzdem zu lang?
Gruß
NordlichtHH