Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. SayIt - Ausgabe bei Wetterwarnung (DWD)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SayIt - Ausgabe bei Wetterwarnung (DWD)

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

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

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

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

        @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 Reply Last reply Reply Quote 0
        • wendy2702
          wendy2702 last edited by

          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.

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

            @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 Reply Last reply Reply Quote 0
            • wendy2702
              wendy2702 last edited by

              OK.

              Mache das jetzt auch erstmal so.

              Danke

              1 Reply Last reply Reply Quote 0
              • D
                derrapf last edited by

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

                  Danke!

                  Allerdings habe ich nicht viel Kenntnis von Javascript.

                  Hast du das direkt in das Ansagescript gepackt?

                  1 Reply Last reply Reply Quote 0
                  • D
                    derrapf last edited by

                    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 Reply Last reply Reply Quote 0
                    • D
                      derrapf last edited by

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

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

                          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 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          718
                          Online

                          31.7k
                          Users

                          79.8k
                          Topics

                          1.3m
                          Posts

                          10
                          40
                          5388
                          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