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 - Ausgabe bei Wetterwarnung (DWD)

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    924

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

SayIt - Ausgabe bei Wetterwarnung (DWD)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
40 Beiträge 10 Kommentatoren 6.1k Aufrufe 1 Watching
  • Ä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.
  • wendy2702W Offline
    wendy2702W Offline
    wendy2702
    schrieb am zuletzt editiert von
    #28

    Hi,

    ich hatte auch am Anfang ein kleines Problem mit Ivony.

    Bei mir lag es am kopieren des Access und Secret keys.

    Auf der Ivony Seite exact die keys markiert und im SayIt Adapter wurde trotzdem beim Einfügen noch ein leerzeichen davor gesetzt.

    Nachdem ich das gefunden hatte klappte die Ansage bei mir.

    An den Rot markierten Pfeilen war bei mir jeweils ein leerzeichen

    999_sayt.jpg

    Gruß

    Mirko

    Bitte keine Fragen per PN, die gehören ins Forum!

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    1 Antwort Letzte Antwort
    0
    • D Offline
      D Offline
      derrapf
      schrieb am zuletzt editiert von
      #29

      Hallo alle

      Habe auch gekämpft.

      Vernünftige Ansagen bekommt man nur mit Ivona, da die google API bei 72 Zeichen Schluss macht.

      D.h. längere Sätze werden erst gar nicht ausgegeben.

      Gruss Ralf

      1 Antwort Letzte Antwort
      0
      • wendy2702W Offline
        wendy2702W Offline
        wendy2702
        schrieb am zuletzt editiert von
        #30

        Wie habt ihr das Gelöst damit die Ansagen nicht Nachts gemacht werden?

        Oder ändert der DWD den Status in der Nacht nicht?

        Bitte keine Fragen per PN, die gehören ins Forum!

        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

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

          @wendy2702:

          Wie habt ihr das Gelöst damit die Ansagen nicht Nachts gemacht werden?

          Oder ändert der DWD den Status in der Nacht nicht? `

          Hi Mirko,

          ich habe die Aktualisierung (Cron) des Adapters so eingestellt, dass nachts keine Daten geholt werden.

          18 6-22 * * *
          

          Damit ist dann Ruhe.

          Gruß

          Thomas

          1 Antwort Letzte Antwort
          0
          • wendy2702W Offline
            wendy2702W Offline
            wendy2702
            schrieb am zuletzt editiert von
            #32

            Also holt der DWD Adapter keine Upates im Zeitraum 6-22 Uhr.

            Hm,

            weißt du ob es auch ne Möglichkeit gibt nur die Ansage zu verhindern?

            Mir wäre es lieber der DWD Adapter wäre ständig aktuell und nur die Ansage setzt aus.

            Bitte keine Fragen per PN, die gehören ins Forum!

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

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

              @wendy2702:

              Also holt der DWD Adapter keine Upates im Zeitraum 6-22 Uhr.

              Hm,

              weißt du ob es auch ne Möglichkeit gibt nur die Ansage zu verhindern?

              Mir wäre es lieber der DWD Adapter wäre ständig aktuell und nur die Ansage setzt aus. `

              Von 6-22 Uhr wird aktualisiert, von 22-6 Uhr dann nicht.

              Leider nein, so gut bin ich bei ioBroker noch nicht und Lösungen habe ich hier noch nicht gefunden.

              Deswegen mache ich es bisher so, besser als nachts nicht nur durch den Sturm geweckt zu werden sondern auch noch von ioBroker :mrgreen:

              1 Antwort Letzte Antwort
              0
              • wendy2702W Offline
                wendy2702W Offline
                wendy2702
                schrieb am zuletzt editiert von
                #34

                OK.

                Mache das jetzt auch erstmal so.

                Danke

                Bitte keine Fragen per PN, die gehören ins Forum!

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                1 Antwort Letzte Antwort
                0
                • D Offline
                  D Offline
                  derrapf
                  schrieb am zuletzt editiert von
                  #35

                  Hi

                  Ich hab das so gemacht:

                  Die Unter-Routine bekommt eine Zeitdauer in Minuten übergeben in welchem Abstand die Meldung wiederholt werden soll. 0 heisst keine Wiederholung.

                  Dazu legt sie einen Timer, abhängig von der id mit der getriggert wurde, an. Der wird zurückgesetzt, wenn sich der Triggerwert

                  so ändert, dass nichts mehr gesagt oder was anderes gesagt werden muss.

                  Die Routine bestimmt die Tageszeit und sagt zwischen 11 und 9 nichts. Damit ich auch nachts testen kann gibt es eine debug Variable die man dann auf true setzen kann. Dann wird immer geredet.

                  // --------------------------------------Unterprogramme --------------------------------
                  function saySomething(idGeraet, text, zeit)
                  {
                     var zeitms = zeit *60*1000;
                     var wiederholung = true;
                     if (zeit ===  0) {
                         wiederholung = false;
                     }
                     // Sage zum ersten Mal
                     var d = new Date ();
                     var h = d.getHours();
                  
                     if (debug || (h < 23) && (h > 9)) // nur zwischen 9 und 23 Uhr
                     {
                        log('attempt Saying: ('+zeitms+"):" + text);
                  
                       if (wiederholung) {
                         if (timer[idGeraet] === null) {
                           log('Saying every:'+zeitms+" ms:"+text);
                           timer[idGeraet] = setInterval(function() {
                                                                      if (debug || (h < 23) && (h > 9)) // nur zwischen 9 und 23 Uhr 
                                                                      {
                                                                         log('Repeated Saying:'+text);
                                                                         setState(idSprache, text);
                                                                      }
                                                                    }, zeitms);
                         } else {
                           log('timer ['+idGeraet+'] already set.');  
                         }
                       } else {
                         log('Saying nly once:'+text);
                       }
                       setState(idSprache, text);
                     } 
                     else
                     { 
                         log("Not saying anything, because it's too late");
                     }
                  }
                  
                  

                  Gruss Ralf

                  1 Antwort Letzte Antwort
                  0
                  • wendy2702W Offline
                    wendy2702W Offline
                    wendy2702
                    schrieb am zuletzt editiert von
                    #36

                    Danke!

                    Allerdings habe ich nicht viel Kenntnis von Javascript.

                    Hast du das direkt in das Ansagescript gepackt?

                    Bitte keine Fragen per PN, die gehören ins Forum!

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    1 Antwort Letzte Antwort
                    0
                    • D Offline
                      D Offline
                      derrapf
                      schrieb am zuletzt editiert von
                      #37

                      Hi

                      Ich warte bis sich die description des Datenpunkts ändert:

                      Du kannst in IOBroker ja mal ein Script anlegen und das hier unten reinkopieren.

                      Ich hoffe es läuft. Ist nur ein Ausschnitt aus meinem Gesamtkunstwerk.

                      Gruss Ralf

                      var idSprache        = 'sayit.0.tts.text';       // Sprachausgabe Browser
                      var idDWD            = 'dwd.0.warning.description'; //Warning description
                      var timer = {};
                      var debug = false;
                      
                      on(idDWD, function(obj) {
                            log("trigger DWD-Meldung:" + obj.newState.val);
                            var description = obj.newState.val;
                            if (description !== "") {
                                log("aktuell DWD-Meldung:" + description);
                                log("alt     DWD-Meldung:" + obj.oldState.val);
                                if (description !== obj.oldState.val) {
                                    log("Meldung geändert -> Timer clear");
                                    if (timer[idDWD] !== null) { clearInterval(idDWD); timer[idDWD] = null; }
                                }      
                                var headline = getState("dwd.0.warning.headline"/*Warning headline*/).val;
                                var message = headline +". "+description;
                      
                                var headline2 = getState("dwd.0.warning1.headline").val+". ";
                                log("Headline2:"+headline2);
                                var description2 = getState("dwd.0.warning1.description").val+".";
                                log("description2:"+description2);
                                message = message + ". "+ headline2 + description2 +". ";
                                log("-->DWD-Meldung" + message);
                                saySomething(idDWD, message, 60); //alle 60 min wiederholen
                            } else {
                                log("clear DWD-Meldung");
                                if (timer[idDWD] !== null) { clearInterval(idDWD); timer[idDWD] = null; }
                            }
                       }
                      );
                      
                      // --------------------------------------Unterprogramme --------------------------------
                      function saySomething(idGeraet, text, zeit)
                      {
                         var zeitms = zeit *60*1000;
                         var wiederholung = true;
                         if (zeit ===  0) {
                             wiederholung = false;
                         }
                         // Sage zum ersten Mal
                         var d = new Date ();
                         var h = d.getHours();
                      
                         if (debug || (h < 23) && (h > 9)) // nur zwischen 9 und 23 Uhr
                         {
                            log('attempt Saying: ('+zeitms+"):" + text);
                      
                           if (wiederholung) {
                             log ("Timer= " + timer[idGeraet] !== null);
                             if (timer[idGeraet] === null) {
                               log('Saying every:'+zeitms+" ms:"+text);
                               timer[idGeraet] = setInterval(function() {
                                                                          if (debug || (h < 23) && (h > 9)) // nur zwischen 9 und 23 Uhr 
                                                                          {
                                                                             log('Repeated Saying:'+text);
                                                                             setState(idSprache, text);
                                                                          }
                                                                        }, zeitms);
                               setState(idSprache, text);
                             } else
                             {
                               log('timer ['+idGeraet+'] already set.');  
                             }
                           } else {
                             log('Saying once:'+text);
                             setState(idSprache, text);
                           }
                         } 
                         else
                         { 
                             log("Not Saying because it's too late");
                         }
                      }
                      
                      
                      1 Antwort Letzte Antwort
                      0
                      • D Offline
                        D Offline
                        derrapf
                        schrieb am zuletzt editiert von
                        #38

                        Habe gerade einen Fehler bemerkt.

                        So müsste es richtiger sein:

                        function saySomething(idGeraet, text, zeit)
                        {
                           var zeitms = zeit *60*1000;
                           var wiederholung = true;
                           if (zeit ===  0) {
                               wiederholung = false;
                           }
                           // Sage zum ersten Mal
                           var d = new Date ();
                           var h = d.getHours();
                        
                           if (debug || (h < 23) && (h > 9)) // nur zwischen 9 und 23 Uhr
                           {
                              log('attempt Saying: ('+zeitms+"):" + text);
                        
                             if (wiederholung) {
                               log ("Timer= " + timer[idGeraet] !== null);
                               if (timer[idGeraet] === null) {
                                 log('Saying every:'+zeitms+" ms:"+text);
                                 timer[idGeraet] = setInterval(function() {
                                                                            var d = new Date ();
                                                                            var h = d.getHours();
                                                                            if (debug || (h < 23) && (h > 9)) // nur zwischen 9 und 23 Uhr 
                                                                            {
                                                                               log('Repeated Saying:'+text);
                                                                               setState(idSprache, text);
                                                                            }
                                                                          }, zeitms);
                                 setState(idSprache, text);
                               } else
                               {
                                 log('timer ['+idGeraet+'] already set.');  
                               }
                             } else {
                               log('Saying once:'+text);
                               setState(idSprache, text);
                             }
                           } 
                           else
                           { 
                               log("Not Saying because it's too late");
                           }
                        }
                        
                        

                        Gruss Ralf

                        1 Antwort Letzte Antwort
                        0
                        • wendy2702W Offline
                          wendy2702W Offline
                          wendy2702
                          schrieb am zuletzt editiert von
                          #39

                          Hi,

                          habe das gerade mal probiert.

                          Da kommt im log die Aussage das es zu spät sei:

                          javascript.0	2017-01-07 09:15:58.416	info	script.js.Ansage_Wetterwarnung_9_23Uhr: Not Saying because it's too late
                          javascript.0	2017-01-07 09:15:58.410	info	script.js.Ansage_Wetterwarnung_9_23Uhr: -->DWD-MeldungAmtliche WARNUNG vor LEICHTEM SCHNEEFALL. Es tritt im Warnzeitraum leichter Schneefall mit Mengen zwischen 1 cm und 3 cm auf. Verbreitet wird es
                          javascript.0	2017-01-07 09:15:58.410	info	script.js.Ansage_Wetterwarnung_9_23Uhr: description2:Es tritt mäßiger Frost zwischen -4 °C und -8 °C auf. Über Schnee sinken die Temperaturen auf Werte um -10 °C..
                          javascript.0	2017-01-07 09:15:58.410	info	script.js.Ansage_Wetterwarnung_9_23Uhr: Headline2:Amtliche WARNUNG vor FROST.
                          javascript.0	2017-01-07 09:15:58.410	info	script.js.Ansage_Wetterwarnung_9_23Uhr: Meldung geändert -> Timer clear
                          javascript.0	2017-01-07 09:15:58.410	info	script.js.Ansage_Wetterwarnung_9_23Uhr: alt DWD-Meldung:
                          javascript.0	2017-01-07 09:15:58.410	info	script.js.Ansage_Wetterwarnung_9_23Uhr: aktuell DWD-Meldung:Es tritt im Warnzeitraum leichter Schneefall mit Mengen zwischen 1 cm und 3 cm auf. Verbreitet wird es glatt.
                          javascript.0	2017-01-07 09:15:58.410	info	script.js.Ansage_Wetterwarnung_9_23Uhr: trigger DWD-Meldung:Es tritt im Warnzeitraum leichter Schneefall mit Mengen zwischen 1 cm und 3 cm auf. Verbreitet wird es glatt.
                          

                          Bitte keine Fragen per PN, die gehören ins Forum!

                          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

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

                            Hi,

                            welche Ursache könnte es haben, dass bei diesem Skript die eigentliche Meldung (also idDWD) nicht mit ausgegeben wird obwohl sie in den Datenpunkten vorhanden ist. Irgendwie sehe ich den Wald vor lauter Bäumen nicht…..

                            var Severity = "dwd.0.warning.severity"/*Warning severity*/;
                            var request = require("request");
                            
                            var ansage2 = "Eine bestehende Wetterwarnung wurde aufgehoben." ;
                            
                                on(Severity, function (obj) {
                                    if (obj.newState.val !==0) {
                                var idDWD = getState("dwd.0.warning.description"/*Warning description*/).val;            
                                var Begin = getState("dwd.0.warning.begin"/*Warning begin*/).val;
                                var End = getState("dwd.0.warning.end"/*Warning end*/).val;
                            
                                Url = "http://192.168.178.58:50000/tts=Der Deutsche Wetterdienst meldet." + idDWD ;
                            
                                request(Url);
                            
                                    }
                                    if (obj.newState.val === 0) {
                            
                                	Url = "http://192.168.178.58:50000/tts=" + ansage2 ;
                                    request(Url);
                                    }
                                });
                            

                            Danke für die Unterstützung.

                            Gruß

                            Thomas

                            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

                            711

                            Online

                            32.6k

                            Benutzer

                            82.2k

                            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