Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Sayit Skript startet nicht selbst und hackt Text ab

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

Sayit Skript startet nicht selbst und hackt Text ab

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
8 Beiträge 3 Kommentatoren 1.4k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • N Offline
    N Offline
    Nordlicht
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      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

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • N Offline
        N Offline
        Nordlicht
        schrieb am zuletzt editiert von
        #3

        @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 Antwort Letzte Antwort
        0
        • N Offline
          N Offline
          Nordlicht
          schrieb am zuletzt editiert von
          #4

          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 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            Solear
            schrieb am zuletzt editiert von
            #5

            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.

            iobroker als LXC unter Proxmox

            1 Antwort Letzte Antwort
            0
            • N Offline
              N Offline
              Nordlicht
              schrieb am zuletzt editiert von
              #6

              @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 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                pix
                schrieb am zuletzt editiert von
                #7

                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

                ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                1 Antwort Letzte Antwort
                0
                • N Offline
                  N Offline
                  Nordlicht
                  schrieb am zuletzt editiert von
                  #8

                  @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 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  800

                  Online

                  32.4k

                  Benutzer

                  81.6k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe