Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Sayit Skript startet nicht selbst und hackt Text ab

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Sayit Skript startet nicht selbst und hackt Text ab

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

      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
      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo Thomas,

        @Nordlicht:

        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
        1 Reply Last reply Reply Quote 0
        • N
          Nordlicht last edited by

          @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

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

            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
            1 Reply Last reply Reply Quote 0
            • S
              Solear last edited by

              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.

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

                @Solear:

                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.

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

                  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
                  1 Reply Last reply Reply Quote 0
                  • N
                    Nordlicht last edited by

                    @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

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    545
                    Online

                    31.7k
                    Users

                    79.7k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    1307
                    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