Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Textlänge für Sprachausgaben (TTS) über SayIt

    NEWS

    • Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    Textlänge für Sprachausgaben (TTS) über SayIt

    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      Nordlicht last edited by

      Guten Abend,

      ich wundere mich immer, wie manche ganze "Romane" über Sayit ausgeben lassen ohne dass diese offenbar abgeschnitten / abgehackt sind. Die Textlänge (ich verwende Ivona) ist ja begrenzt. Wie lässt sich sowas bewerkstelligen?

      Gerne hätte ich am Morgen einen kurzen Bericht mit aktuellen Wetterdaten, doch das ist alles "zu lang".

      Ich überlege mir eventuell ein Sonos zuzulegen. Doch wenn hier nur "Kurzmeldungen" möglich wären ist dies auch nicht das Wahre. Kostet ja n' bisschen was.

      Für Tipps, Ratschläge und sonstiges bin ich sehr dank bar.

      Gruß

      Thomas

      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        @Nordlicht:

        Guten Abend,

        ich wundere mich immer, wie manche ganze "Romane" über Sayit ausgeben lassen ohne dass diese offenbar abgeschnitten / abgehackt sind. Die Textlänge (ich verwende Ivona) ist ja begrenzt. Wie lässt sich sowas bewerkstelligen?

        Gerne hätte ich am Morgen einen kurzen Bericht mit aktuellen Wetterdaten, doch das ist alles "zu lang".

        Ich überlege mir eventuell ein Sonos zuzulegen. Doch wenn hier nur "Kurzmeldungen" möglich wären ist dies auch nicht das Wahre. Kostet ja n' bisschen was.

        Für Tipps, Ratschläge und sonstiges bin ich sehr dank bar.

        Gruß

        Thomas `
        Benutze Ivona.

        1 Reply Last reply Reply Quote 0
        • N
          Nordlicht last edited by

          Hi Bluefox,

          ja habe ich inzwischen im Einsatz. Das Skript läuft soweit auch.

          Jetzt hapert es nur noch daran, das ich nicht weiß wie man das Skript triggert um es auszulösen.

          Welchen Befehl muss ich wohin schreiben damit dies funktioniert.

          Ich konnte dazu im Forum leider nichts finden was mir weiter helfen konnte.

          Gruß Thomas

          1 Reply Last reply Reply Quote 0
          • Bluefox
            Bluefox last edited by

            @Nordlicht:

            Hi Bluefox,

            ja habe ich inzwischen im Einsatz. Das Skript läuft soweit auch.

            Jetzt hapert es nur noch daran, das ich nicht weiß wie man das Skript triggert um es auszulösen.

            Welchen Befehl muss ich wohin schreiben damit dies funktioniert.

            Ich konnte dazu im Forum leider nichts finden was mir weiter helfen konnte.

            Gruß Thomas `
            Wie sieht dein Skript aus?

            1 Reply Last reply Reply Quote 0
            • N
              Nordlicht last edited by

              Das Skript ist hier aus dem Forum und wurde von mir etwas angepasst.

              ! //sayyit adapter var idSayIt = "sayit.0.tts.text" /*Text to speech*/; ! //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() ! // Die Außentemperatur ist xx. Das Wetter heute ist xx // Einfache Temperaturansage mit SayIt. // Variante 1 mittels splitten der Temperatur, damit die Ansage nicht // "Es sind 18 Punkt 2 Grad " sagt. ! var Temperatursensor = getState("yr.0.forecast.day0.temperature_actual"); /*Temperatursensor:1.TEMPERATURE*/ var temperatur = Temperatursensor.val.toString(); var temp_array = []; ! var MaxTemperatur = getState("yr.0.forecast.day0.temperature_max"); /*Forecast of temperature for today*/ var maxtemp = MaxTemperatur.val.toString(); var maxtemp_array = []; ! var witterung = getState("yr.0.forecast.day0.text").val ; /*Actual text*/ log('Wetter: ' + witterung); ! temp_array = temperatur.split("."); ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist. // Es wird dann nur "18" gelesen. if (!temp_array[1]) { temp_array[1] = "0"; log("Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt."); } ! maxtemp_array = maxtemp.split("."); ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist. // Es wird dann nur "18" gelesen. if (!maxtemp_array[1]) { maxtemp_array[1] = "0"; log("Die Nach-Kommastelle in maxtemp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt."); } ! setState (idSayIt, "Guten Morgen. heute ist " + w + "der " + t + "te" + m + j + ", Es ist" + h + "Uhr und " + mi + "Minuten" + " , Die Temperatur ist " + temp_array[0] + "," + temp_array[1] + " Graad." + witterung + ". Maximal heute." + temp_array[0] + "," + temp_array[1] + "Graad"); !

              Es läuft - solange es manuell gestartet wird. Das mit dem Trigger / schedule bekam ich nicht zum laufen.

              1 Reply Last reply Reply Quote 0
              • Bluefox
                Bluefox last edited by

                Das muss auf irgendein Ereignisse gekoppelt werden. Wie willst du es Triggern?

                Zeitlich oder zum Beispiel über Bewegungselber?

                1 Reply Last reply Reply Quote 0
                • N
                  Nordlicht last edited by

                  @Bluefox:

                  Das muss auf irgendein Ereignisse gekoppelt werden. Wie willst du es Triggern?

                  Zeitlich oder zum Beispiel über Bewegungselber? `

                  Zeitlich war ursprünglich angedacht.

                  Nicht uninteressant wäre auch über Bewegungsmelder - dann allerdings nur 1x (z.B. 1x zwischen 6 und 7 Uhr) und dann für den Rest des Tages nicht mehr.

                  OffTopic: Habe es eben nochmals von Hand gestartet. Ivona scheint auch ein "Längenproblem" zu haben. Der Satz wurde leicht abgeschnitten ("Maximal heute 9 komma…...)

                  1 Reply Last reply Reply Quote 0
                  • P
                    pix last edited by

                    Hallo,

                    ich würde es so machen:

                    ! //sayit adapter var idSayIt = "sayit.0.tts.text"; // Text to speech var heutenochansagen = 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() ! // Die Außentemperatur ist xx. Das Wetter heute ist xx // Einfache Temperaturansage mit SayIt. // Variante 1 mittels splitten der Temperatur, damit die Ansage nicht // "Es sind 18 Punkt 2 Grad " sagt. ! var Temperatursensor = getState("yr.0.forecast.day0.temperature_actual"); /*Temperatursensor:1.TEMPERATURE*/ var temperatur = Temperatursensor.val.toString(); var temp_array = []; ! var MaxTemperatur = getState("yr.0.forecast.day0.temperature_max"); /*Forecast of temperature for today*/ var maxtemp = MaxTemperatur.val.toString(); var maxtemp_array = []; ! var witterung = getState("yr.0.forecast.day0.text").val ; /*Actual text*/ log('Wetter: ' + witterung); ! temp_array = temperatur.split("."); ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist. // Es wird dann nur "18" gelesen. if (!temp_array[1]) { temp_array[1] = "0"; log("Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt."); } ! maxtemp_array = maxtemp.split("."); ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist. // Es wird dann nur "18" gelesen. if (!maxtemp_array[1]) { maxtemp_array[1] = "0"; log("Die Nach-Kommastelle in maxtemp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt."); } var ansage = "Guten Morgen. heute ist " + w + "der " + t + "te" + m + j + ", Es ist" + h + "Uhr und " + mi + "Minuten" + " , Die Temperatur ist " + temp_array[0] + "," + temp_array[1] + " Grad." + witterung + ". Maximal heute." + temp_array[0] + "," + temp_array[1] + "Grad"; ! setState (idSayIt, ansage); } ! var idMotion = "hm-rpc.0.XXX1234567.STATE" // ID des Bewegungsmelders on (idMotion, function (obj) { if (obj.state.val === true && heutenochansagen === true) { var jetzt = new Date(); var stunde = jetzt.getHours(); var wochentag = jetzt.getDay() // wenn werktags zwischen 6 und 7 Uhr oder am Wochenende zwischen 8 und 9 Uhr if ( ((stunde > 6 && stunde < 7) && (wochentag > 0 && wochentag < 6)) || ((stunde > 8 && stunde < 9) && (wochentag == 0 || wochentag == 6)) ) { baueAnsage(); heutenochansagen = false; log('Sayitausgabe Tagestemperatur durch Bewegungsmelder ausgelöst'); } } }); ! // bei Skriptstart immer ansagen baueAnsage(); log('Sayitausgabe Tagestemperatur durch Scriptstart ausgelöst'); // jeden Werktag um 6:00h schedule("0 6 * * 1-5", function() { if (heutenochansagen === true) { // wenn heute noch angesagt werden muss baueAnsage(); // Ansage bauen heutenochansagen = false; // flag für heutige Ansage auf false log('Sayitausgabe Tagestemperatur durch Schedule Werktag ausgelöst'); } }); // jeden Wochenendtag um 8:00h schedule("0 8 * * 6,7", function() { if (heutenochansagen === true) { baueAnsage(); heutenochansagen = false; log('Sayitausgabe Tagestemperatur durch Schedule Wochenende ausgelöst'); } }); // Flag für Ansage um Mitternacht zurücksetzen auf true schedule("0 0 * * *", function() { heutenochansagen = true; }); !
                    Beachte: Bei Skriptstart (also beim Ändern des Skriptes oder Javascript-Instanz-Neustart wird das Flag zur Ansage wieder auf true gesetzt.

                    Es gibt im Forum eine Funktion isTimeInRange, die eigentlich für das Triggern innerhalb eines Zeitraums da ist. Lies dich mal ein. Habe das jetzt hier mal etwas einfacher gelöst.

                    Gruß

                    Pix

                    1 Reply Last reply Reply Quote 0
                    • N
                      Nordlicht last edited by

                      Vielen Dank Pix. Ich werde mich da mal einlesen.

                      Mein Problem ist einfach - bei son manchen Dingen - dass mir ein zum einlernen geeignetes Beispiel fehlt.

                      Wenn man erst mal eine funktionierende Sache hat, dann lässt sich darauf aufbauen (lernen).

                      Schönen Tag Dir noch.

                      Gruß

                      Thomas

                      1 Reply Last reply Reply Quote 0
                      • N
                        Nordlicht last edited by

                        Ich möchte noch schnell eine Rückmeldung geben.

                        Das mit den Skripten klappt soweit.

                        Einziges Problem welches zu beobachten ist. Ivona schneidet die Ansagen teilweise ab.

                        Beispiel: Ansage wäre "Alle Wetterwarnungen des Deutschen Wetterdienstes wurden aufgehoben"

                        Ansage war dann: "Alle Wetterwarnungen des Deutschen Wetterdienstes wurden au"

                        Woran kann das noch liegen? Ich hänge mal einen Screenshot der Adapter Javaskript und Sayit hier mit an. Ich kann an den Einstellungen nichts falsches sehen. Unklar ist mir nur die Zeile bei Javaskript mit den Modulen. Ob das im Zusammenhang steht?

                        Gruß

                        Thomas
                        1641_sayit.jpg
                        1641_javasript.jpg

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        954
                        Online

                        32.3k
                        Users

                        80.9k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        1696
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo