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. JavaScript
  5. [Script] DWD/UWZ/NINA Warnungen als Push/Sprachnachrichten

NEWS

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

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

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

[Script] DWD/UWZ/NINA Warnungen als Push/Sprachnachrichten

Geplant Angeheftet Gesperrt Verschoben JavaScript
1.5k Beiträge 53 Kommentatoren 571.7k Aufrufe 52 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.
  • T ticaki

    Hab noch Multitarget hinzugefügt wo es ging. Telegram, ioGo, email, Alexa, Sayit, Home24
    Zu Pushover hab ich nix gefunden.
    Leider geht das mit Alexa nicht bei mir. Der Echo macht was er soll, aber der Echo dot 2 Gen will keine announcement/ssml abspielen und mit speak funktioniert es nicht sauber. :(

    Das Script kommt jetzt auch mit Gruppen klar, da kann man keine Lautstärke übertragen, konfiguriert sollte sie trotzdem werden.

    Das sollte jetzt aber die letzte Funktion gewesen sein, die neue/alte Fehler produziert,

    //Version 1.15.4
    //nachbearbeitet von ticaki
    /*
    
    */
    /* ************************************************************************* */
    /*             Script zum Übertragen der DWD-Wetterwarnungen über            */
    /*             Telegram, Pushover, Home24-Mediaplayer oder SayIt             */
    /*     mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals)     */
    /*                    Stand: 130022017    PrinzEisenherz1                    */
    /*                                                                           */
    /*                                                                           */
    /*                                                                           */
    /* ************************************************************************* */
    
    /* ************************************************************************* */
    /* NICHT EDITIEREN */
    var konstanten = [
       {"name":'telegram',"value":1},
       {"name":'pushover',"value":2},
       {"name":'email',"value":4},
       {"name":'sayit',"value":8},
       {"name":'home24',"value":16},
       {"name":'alexa',"value":32},
       {"name":'state',"value":64},
       {"name":'iogo',"value":128}
    ];
    const TELEGRAM = konstanten[0].value;
    const PUSHOVER = konstanten[1].value;
    const EMAIL = konstanten[2].value;
    const SAYIT = konstanten[3].value;
    const HOMETWO = konstanten[4].value;
    const ALEXA = konstanten[5].value;
    const STATE = konstanten[6].value;
    const IOGO = konstanten[7].value;
    var pushdienst=0;
    /* ************************************************************************* */
    /*                       Konfiguration ab hier                               */
    /* ************************************************************************* */
    
    /* Konfiguration der zu nutzenden Ausgabe um //pushdienst+= PUSHOVER; zu aktivieren, bitte die // enfernen, also pushdienst+= PUSHOVER; */
    pushdienst+= TELEGRAM;          // Auskommentieren zum aktivieren
    //pushdienst+= PUSHOVER;          // Auskommentieren zum aktivieren
    pushdienst+= EMAIL;             // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
    //pushdienst+= SAYIT;             // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
    //pushdienst+= HOMETWO;           // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
    pushdienst+= ALEXA;             // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
    pushdienst+= STATE;             // Auskommentieren zum aktivieren. State befindet sich unter onClickMessageState.message
    //pushdienst+= IOGO;              // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
    
    /* Einstellungen zur Emailbenachrichtigung*/
    var senderEmailID = []; // mit Sender Emailadresse füllen. email Adapter muß installiert sein. 1 Eintrag erlaubt [] oder ["email1"]
    var empfaengerEmailID = [];// mit Empfänger Emailadresse füllen. Mehrere Empfänger möglich. [] oder ["email1"] oder ["email1","email2"]
    
    /* Konfiguration Sprachausgabe über Home24-Mediaplayer */
    var idMediaplayer = ["192.168.178.68:50000"]; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer mehrere Möglich - ungetestet
    
    /* Konfiguration Telegram */
    var telegramUser = []; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
    
    /* Konfiguration Sprachausgabe über SayIt */
    var idSayIt = ["sayit.0.tts.text"]; // mehrfach Einträge möglich
    var lautstaerke = [60]; // gleiche Anzahl wie idSayIt
    
    /* Konfiguration Sprachausgabe über Alexa
    /* mehrere Einträge möglich, bei mir ging nur der Echo, 2 dots 2.Gen reagieren nicht auf announcement. */
    var idAlexaSerial =[]; // die reine Seriennummer des Echos z.B.: var idAlexaSerial =['G090RV32984110Y','G090RV32984110Y']
    var alexaVolumen = [40]; // Lautstärke die gleiche Anzahl an Einträgen wie bei idAlexaSerial
    
    //Konfiguration von ioGo
    var ioGoUser = []; // // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
    
    //StatePfad um Mitteilungen auszulösen darunter werden jeweils Punkte für jede Ausgabemöglichkeit erstellt.
    var onClickMessageState = 'javascript.0.DWD_Script.'; // abschließender Punkt . nicht vergessen
    
    // Filtereinstellungen
    const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden;
    const maxhoehe = 1000 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden
    
    //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" KEINE Anpassung nötig
    const formatierungString = "TT.MM.YY SS:mm";
    
    // Sprachausgabe Zeiten
    // Für durchgehende Sprachausgabe die Einstellung der Zeiten auf '' setzen. z.B. var startTimeSpeak = '';
    var startTimeSpeak = '6:45';// Zeiten mo-fr ab der Sprachausgaben ok sind. Nicht unter 6 Uhr gehen oder den Schedule ändern
    var startTimeSpeakWeekend = '9:00';// sa + so Bemerkung siehe oben
    var endTimeSpeak = '22:30'; // ab diesem Zeitpunkt gibt es keine Sprachausgabe
    
    // Automatikmodus auschalten
    var autoMode = true;
    //Auslösen der Pushnachricht über States ignoriert Sprachausgabezeiten
    var forcedSpeak = false;
    // keine Ansage über m/s Knoten und Windstärke. Die Angabe mit Kilometer pro Stunde wird angesagt
    var WindForceDetailsSpeak = false;
    
    /* ************************************************************************* */
    /* ************************************************************************* */
    /* ************************************************************************* */
    /*                       Konfiguration Ende                                  */
    /* ************************************************************************* */
    /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
    /* ************************************************************************* */
    /* ************************************************************************* */
    /* ************************************************************************* */
    var placeHolder = 'XXXXPLACEHOLDERXXXX';
    var idAlexa = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.announcement';
    var idAlexaVolumen = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.speak-volume';
    var forceSpeak = false;
    /* Arrays festlegen */
    const InitArraylength = 9;
    var newDescriptions = [InitArraylength];
    var oldDescriptions = [InitArraylength];
    var newHeadlines = [InitArraylength];
    var oldHeadlines = [InitArraylength];
    var newBegins = [InitArraylength];
    var oldBegins = [InitArraylength];
    var newEnds = [InitArraylength];
    var oldEnds = [InitArraylength];
    var newInstruction = [InitArraylength];
    var oldData = [InitArraylength];
    var newData = [InitArraylength];
    var timer = null;
    var onClickCheckRun = false;
    
    function getFullId(a,b) {
     return a.replace(placeHolder,b)
    }
    /* Überpüfe die Konfiguration soweit möglich */
    if ((pushdienst&ALEXA) != 0) {
     for (let a=0;a<idAlexaSerial.length;a++) {
       if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
         log('Alexa-Serial '+idAlexaSerial[a]+' ist fehlerhaft. Überpüfen!','error');
         stopScript();
       }
     }
    }
    
    if ((pushdienst&SAYIT) != 0) {
     for (let a=0;a<idSayIt.length;a++) {
       if (
         !existsState(idSayIt[a])
       ) {
         log('SayIt-Konfiguration ist fehlerhaft. Überpüfen!','error');
         stopScript();
       }
     }
    }
    
    if ((pushdienst&EMAIL) != 0) {
     if (senderEmailID.length>1) {
       log('eMail-Konfiguration ist fehlerhaft. Nur 1 Eintrag in senderEmailID erlaubt!','error');
       stopScript();
     }
    }
    
    
    
    
    
    /* erstmaliges Befüllen der arrays */
    for (let a=0;a<InitArraylength;a++) {
       var id = "dwd.0.warning";
       if (a!=0) id+=a.toString();
       id+='.object';
       var warn = {};
       if (existsState(id)) warn = JSON.parse(getState(id).val);
       warn = convertJsonDWD(warn);
       newDescriptions[a] = warn.description;
       oldDescriptions[a] = warn.description;
       newHeadlines[a] = warn.headline;
       oldHeadlines[a] = warn.headline;
       newBegins[a] = warn.start;
       oldBegins[a] = warn.start;
       newEnds[a] = warn.end;
       oldEnds[a] = warn.end;
       newData[a] = {"level":warn.level,"type":warn.type};
       oldData[a] = {"level":warn.level,"type":warn.type};
    }
    
    // State der Pushnachrichten über pushover/telegram spiegelt
    const mirrorMessageState = onClickMessageState+'message';
    if (!existsState(mirrorMessageState)) {
       createState(mirrorMessageState,'', {
           read: true,
           write: false,
           desc: "Beschreibung",
           type: "string",
       });
    }
    
    // State über den man gesonderte Aktionen auslösen kann, gibt die höchste Warnstufe aus.
    // Warning types
    var warningTypesString = [
       'Gewitter',
       'Sturm',
       'Regen',
       'Schnee',
       'Nebel',
       'Frost',
       'Glatteis',
       'Tauwetter',
       'Hitzewarnungen',
       'UV_Warnungen'/*,
       'Kuestenwarnungen',
       'Binnenseewarnungen'*/
    ];
    const stateAlert = // Änderungen auch in SetAlertState() anpassen
    [
       {"name":'level',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
       {"name":'type',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
       {"name":'start',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string",name:''}},
       {"name":'end',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string", name:''}},
    ]
    {
       let stateAlertId = onClickMessageState+'alert.';
       let allStateExist = true;
       for (let b=0;b<warningTypesString.length;b++) {
           for (let a=0;a<stateAlert.length;a++)
           {
               let stateAlertIdFull = stateAlertId+warningTypesString[b]+'.'+stateAlert[a].name;
               stateAlert[a].type.name = stateAlertIdFull.toString();
               if (!existsState(stateAlertIdFull)) {
                   createState(stateAlertIdFull,stateAlert[a].default, stateAlert[a].type);
                   allStateExist=false;
               }
           }
       }
       if (allStateExist) SetAlertState();
    }
    
    // Nachrichtenversand per Click States erzeugen und subscript
    for (var a=0;a<konstanten.length;a++){
       if (!existsState(onClickMessageState+'Commands.'+konstanten[a].name)) {
           createState(onClickMessageState+'Commands.'+konstanten[a].name,false, {
               read: true,
               write: true,
               desc: "Beschreibung",
               type: "boolean",
               def: false
           });
       }
       if (existsState(onClickMessageState+'Commands.'+konstanten[a].name)){
           subscribe({id: onClickMessageState+'Commands.'+konstanten[a].name},function(obj){
               if (!obj.state.val) return;
               setState(obj.id,false,true);
               let b = obj.id.split('.');
               let d = konstanten.findIndex(function(c){return (c.name===b[b.length-1]);})
               if (d == -1) {log('Fehler. State nicht in Konstanten enthalten','error'); return;}
               if ((pushdienst & konstanten[d].value) == 0) return;
               let oldPushdienst = pushdienst;
               pushdienst = konstanten[d].value*1;
               for (let i=0;i<oldDescriptions.length;i++) {
                   oldHeadlines[i] = '';
                   oldDescriptions[i] = '';
                   oldBegins[i] = '';
                   oldEnds[i] = '';
                   oldData[i] = {"type":-1,"level":-1};
               }
               forceSpeak = forcedSpeak;
               onClickCheckRun = true;
               check();
               onClickCheckRun = false;
               forceSpeak = false;
               pushdienst = oldPushdienst;
           })
       }
    }
    
    // Zeitsteuerung für SayIt & Alexa
    var START = new Date();
    var ENDE = new Date();
    setWeekend();
    
    function setWeekend()
    {
       if (forceSpeak) return;
       let date = new Date();
       let n = date.getDay();
       let weekend = 0;
       weekend = (n === 0 || n == 6) ? 1 : 0;
       if(weekend == 1){                     // wenn Wochenende, dann setze Start auf 9h, sonst 6:45h
           START = convertStringToDate(startTimeSpeakWeekend);
       }
       else{
           START = convertStringToDate(startTimeSpeak);
       }
       ENDE = convertStringToDate(endTimeSpeak);
    }
    
    function convertStringToDate(s) {
       if (typeof s !== 'string' ) return null;
       var e = s.split(':');
       if (!Array.isArray(e) || e.length != 2) return null;
       var d = new Date();
       d.setHours(e[0]);
       d.setMinutes(e[1]);
       d.setSeconds(0);
       return d;
    }
    
    function check() {
       if (!forcedSpeak) forceSpeak = (!startTimeSpeakWeekend||!startTimeSpeak||!endTimeSpeak);
       setWeekend();
    
       SetAlertState();
    
       let activeCount = 0;
       newDescriptions.forEach((item, i) => {if (item) activeCount++;});
    
       /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
       if(newDescriptions.findIndex(function(a){return (!!a);})==-1 && oldDescriptions.findIndex(function(a){return (!!a);})!=-1) {
           let MeldungSDWD = 'Achtung' + '  .  ' + 'Alle Warnmeldungen des DWD wurden aufgehoben';
    
           /* Bereich für Sprachausgabe über SayIt & Alexa & Home24*/
           if ( forceSpeak || compareTime(START, ENDE, 'between')){                  // Ansage über Sayit nur im definierten Zeitbereich
               /*if ((pushdienst & SAYIT)!=0) {
                   setState(idSayIt, lautstaerke + ";" + MeldungSDWD);
               }
               if ((pushdienst & ALEXA)!=0) {
                   setState(idAlexaVolumen, alexaVolumen);
                   setState(idAlexa, MeldungSDWD);
               }
               if((pushdienst & HOMETWO)!=0 ){
                   var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSDWD;
                   request(Url);
               }*/
               sendMessage(pushdienst,'','',MeldungSDWD,'');
           }
           let pushmsg = 'Alle Warnmeldungen des DWD wurden aufgehoben';
           /*if ((pushdienst & TELEGRAM)!=0 ) {
               sendTo ("telegram.0", pushmsg);
           }
           if ((pushdienst & PUSHOVER)!=0 ) {
               sendTo("pushover.0", pushmsg);
           }
           if ((pushdienst & IOGO)!=0 ) {
               sendioGo('Wetterentwarnung', pushmsg);
           }
           if ((pushdienst & STATE)!=0 ) {
               setState(mirrorMessageState, pushmsg);
           }
           if ((pushdienst & EMAIL)!=0 ) {
               sendEmail('Wetterentwarnung des DWD(iobroker)',pushmsg);
           }*/
           sendMessage(pushdienst,'Wetterentwarnung',pushmsg,'','');
           sendMessage(pushdienst,'Wetterentwarnung des DWD(iobroker)','','',pushmsg);
    
           /* alle Sicherungen Wetterwarnung löschen */
           oldHeadlines = newHeadlines.slice();
           oldDescriptions = newDescriptions.slice();
           oldBegins = newBegins.slice();
           oldEnds = newEnds.slice();
           oldData = newData.slice();
           return;
       }
    
       /* Variablen für Meldungen Text */
       var MeldungNew = '';
       /* Variablen für Meldungen Sprache */
       var MeldungSpracheDWD = [];
       var MeldungNewSprache = '';
       var MeldungOldSprache = '';
       var AllEmailMsg = '';
       var AllEmailMsgDelete = '';
    
       var headline;
       var description;
       var begin;
       var end;
       var i;
       var warn;
    
       /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */
       for(i = 0; i < newDescriptions.length; i++) {
           headline = oldHeadlines[i];
           description = oldDescriptions[i];
           end = getFormatDate(oldEnds[i]);
           if(description !== undefined && headline !== undefined && description !== '' && newDescriptions.indexOf(description) == -1 ) {
               MeldungOldSprache = headline + ' gültig bis ' + getFormatDateSpeak(end) + ' Uhr wurde aufgehoben' + '  .  ';
               let pushmsg = "Die Wetterwarnung " +"'"+ headline + " gültig bis " + end + "'" + " des DWD wurde aufgehoben.";
               pushmsg += ' Insgesamt '+(activeCount==1 ?'eine gültige Warnung.':activeCount+' gültige Warnungen.');
               /*if ((pushdienst & TELEGRAM)!=0) {
                   sendTo ("telegram.0", pushmsg);
               }
               if ((pushdienst & PUSHOVER)!=0) {
                   sendTo("pushover.0", pushmsg);
               }
               if ((pushdienst & IOGO)!=0) {
                   sendioGo('Wetterentwarnung',pushmsg);
               }
               if ((pushdienst & STATE)!=0 ) {
                   setState(mirrorMessageState, pushmsg);
               }*/
               if ((pushdienst & EMAIL)!=0 ) {
                   AllEmailMsgDelete+=pushmsg+'\n\n';
               }
               sendMessage(pushdienst,'Wetterentwarnung',pushmsg,'','');
               /* Verknüpfen aller aufgehobenen Wetterwarnungen */
               if(MeldungOldSprache !== "" && MeldungOldSprache !== undefined){
                   MeldungSpracheDWD.push(MeldungOldSprache);
               }
           }
       }
       let gefahr = false;
       /* Bereich für 'Neue Amtliche Wetterwarnung' */
       for(i = 0; i < newDescriptions.length; i++) {
           headline = newHeadlines[i];
           description = newDescriptions[i];
           begin = getFormatDate(new Date(newBegins[i]));
           end = getFormatDate(new Date(newEnds[i]));
           let level = newData[i].level;
           var instruction = newInstruction[i];
           if(description !== undefined && description !== "" && oldDescriptions.indexOf(description) == -1 ) {
               MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
               if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNew+='\nHandlungsanweisungen: '+instruction;
               if (activeCount>1) MeldungNew += ' Insgesamt '+activeCount+' gültige Warnungen.'
               /* Entfernen °C für Sprachausgabe */
               var replaceDescription0 = entferneDatenpunkt(description);
               /* ab Level 4 zusätzlicher Hinweis */
               if (!gefahr) gefahr=level>3;
               let topic = (level>3)?'Wichtige Wetterwarnung':'Wetterwarnung';
               MeldungNewSprache = (level>3)?'Achtung Unwetter ':'' + headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + '  .  ';
               if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNewSprache+='Handlungsanweisungen: '+instruction;
    
               sendMessage(pushdienst,topic,MeldungNew,'','');
               /*if ((pushdienst & TELEGRAM)!=0) {
                   sendTo ("telegram.0", MeldungNew);
               }
               if ((pushdienst & PUSHOVER)!=0) {
                   sendTo("pushover.0", MeldungNew);
               }
               if ((pushdienst & IOGO)!=0) {
                   sendioGo(topic,MeldungNew);
               }
               if ((pushdienst & STATE)!=0 ) {
                   setState(mirrorMessageState,MeldungNew);
               }*/
               if ((pushdienst & EMAIL)!=0 ) {
                   AllEmailMsg+=MeldungNew+'\n\n';
               }
               /* Verknüpfen aller neuen Warnmeldungen */
               if(MeldungNewSprache !== "" && MeldungNewSprache !== undefined){
                   MeldungSpracheDWD.push(MeldungNewSprache);
               }
           }
       }
       /* Bereich für Sprachausgabe */
       if (onClickCheckRun) {
           if (MeldungSpracheDWD.length==0) MeldungSpracheDWD.push('Es liegen keine Warnmeldungen des DWD vor.');
       }
       if (MeldungSpracheDWD.length>0 && (forceSpeak || compareTime(START, ENDE, 'between')) && (pushdienst & (HOMETWO+SAYIT+ALEXA))!=0 ) {
           let a=1000;
           let b = a;
           let c = a;
           while (MeldungSpracheDWD.length>0)
           {
               let b = 60000;
               let msgAppend = '';
               if (MeldungSpracheDWD.length > 1) {
                   if (MeldungSpracheDWD.length-1==1) {
                       msgAppend = ' Eine weitere neue Warnung.';
                   } else {
                       msgAppend = MeldungSpracheDWD.length-1+' weitere neue Warnungen.';
                   }
               } else {
                   if (activeCount==0) msgAppend = ' keine weitere Warnung.';
                   else {
                       if (activeCount==1) msgAppend = ' Ingesamt eine aktive Warnung.';
                       else msgAppend = ' Insgesamt '+activeCount+ 'aktive Warnungen.';
                   }
               }
               if((pushdienst & HOMETWO)!=0 ){
                   setTimeout(function(msg,msg2){
                     sendMessage(HOMETWO,'','',msg+msg2,'');
    
                       /*var Url2 = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + msg+msg2;
                       log('Url2 :' + Url2);
                       request(Url2);*/
                   },a,MeldungSpracheDWD[0], msgAppend);
               }
               /* Bereich für Sprachausgabe über SayIt + Alexa */
               if ((pushdienst & SAYIT)!=0) {
                   setTimeout(function(msg,msg2){
                     sendMessage(SAYIT,'','',msg+msg2,'');
                       //setState(idSayIt, lautstaerke + ";" + msg+msg2);
                   },b,MeldungSpracheDWD[0], msgAppend);
               }
               if ((pushdienst & ALEXA)!=0) {
                   setTimeout(function(msg,msg2){
                     sendMessage(ALEXA,'','',msg+msg2,'');
                       //setState(idAlexaVolumen, alexaVolumen);
                       //setState(idAlexa, msg+msg2);
                   },c,MeldungSpracheDWD[0], msgAppend);
               }
               a+=60000;
               b+=45000;
               c+=30000;
               MeldungSpracheDWD.shift();
           }
       }
    
       AllEmailMsg+=AllEmailMsgDelete;
       if ((pushdienst & EMAIL)!=0 && AllEmailMsg != '') {
           //sendEmail(gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",AllEmailMsg);
           sendMessage(EMAIL,gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",'','',AllEmailMsg);
       }
    
       /* Neue Werte sichern */
       oldHeadlines = newHeadlines.slice();
       oldDescriptions = newDescriptions.slice();
       oldBegins = newBegins.slice();
       oldEnds = newEnds.slice();
       oldData = newData.slice();
    }
    
    /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */
    function entferneDatenpunkt(beschreibung) {
       var rueckgabe;
       rueckgabe = beschreibung;
       try {
    
           rueckgabe = rueckgabe.replace(/\°C/g, "Grad");
           rueckgabe = rueckgabe.replace(/km\/h/g, "Kilometer pro Stunde");
           if (!WindForceDetailsSpeak) {
               rueckgabe = rueckgabe.replace(/[0-9]+.m\/s..[0-9]+kn..Bft.[0-9]+/g, "");
           } else {
               rueckgabe = rueckgabe.replace(/kn/g, " Knoten");
               rueckgabe = rueckgabe.replace(/Bft/g, " Windstärke");
               rueckgabe = rueckgabe.replace(/m\/s/g, " Meter pro Sekunde");
           }
       }
       catch(e) {log(e,'warn');}
       return rueckgabe;
    }
    
    on(/^dwd\.0\..*\.object$/, function(dp) {
       let i = getIdIndex(dp.id);
       var warn = null;
       if (dp.state.val != '') warn = JSON.parse(dp.state.val);
       warn = convertJsonDWD(warn);
       newDescriptions[i] = warn.description ;
       newHeadlines[i] = warn.headline;
       newBegins[i] = warn.start;
       newEnds[i] = warn.end;
       newInstruction[i] = warn.instruction;
       newData[i].level = warn.level;
       newData[i].type = warn.type;
       if(timer) clearTimeout(timer);
       if (autoMode) timer = setTimeout(check, 10000);
    });
    
    function convertJsonDWD(warn) {
       warn = (!warn || warn === ''? {} : warn);
       if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level < minlevel)) warn = {};
       let a = warn.description === undefined ? '' : warn.description;
       let b = warn.headline === undefined ? '' : warn.headline;
       let c = warn.start === undefined ? null : warn.start||null;
       let d = warn.end === undefined ? null : warn.end||null;
       let e = warn.instruction === undefined ? '' : warn.instruction;
       let f = warn.type === undefined ? -1 : warn.type;
       let g = warn.level === undefined ? -1 : warn.level;
       return {"description":a,"headline":b,"start":c,"end":d,"instruction":e,"type":f,"level":g};
    }
    
    function getIdIndex(a) {
       a = a.split('.');
       if (a[2].length == 7) return 0
       return a[2][7];
    }
    function getFormatDate(a) {
       if (!a || a === '') return '';
       return formatDate(a.getTime(), formatierungString);
    }
    // @PARAM Rückgabe von getFormatDate
    function getFormatDateSpeak(a) {
       if (!a || a === '') return '';
       let b = a.split('.');
       let m = '';
       switch (b[1]) {
           case '01': m='Januar';break;
           case '02': m='Februar';break;
           case '03': m='März';break;
           case '04': m='April';break;
           case '05': m='Mai';break;
           case '06': m='Juni';break;
           case '07': m='Juli';break;
           case '08': m='August';break;
           case '09': m='September';break;
           case '10': m='Oktober';break;
           case '11': m='November';break;
           case '12': m='Dezember';break;
           default: m='';
       }
       b[1]=m; // setze Monatsname
       // entferne Jahr
       let c = b[2].split(' ');
       c[0]='';
       b[2] = c.join(' ');
       return b.join(' ');
    }
    
    function SetAlertState(){
       let stateAlertid = onClickMessageState+'alert.';
       for (let b=0;b<warningTypesString.length;b++)
       {
           let stateAlertIdFull = stateAlertid+warningTypesString[b]+'.';
           let AlertLevel = -1;
           let AlertType = -1;
           let AlertStart = null;
           let AlertEnd = null;
           let AlertIndex = -1;
           for (let c=0;c<newData.length;c++) {
               if (newData[c].type == b && newData[c].level > AlertLevel) {
                   AlertLevel=newData[c].level;
                   AlertIndex=c;
               }
           }
           if (getState(stateAlertIdFull+stateAlert[0].name).val!=AlertIndex) {
               setState(stateAlertIdFull+stateAlert[0].name,AlertLevel);
               setState(stateAlertIdFull+stateAlert[1].name,b);
               setState(stateAlertIdFull+stateAlert[2].name,(AlertIndex>-1)?formatDate(new Date(newBegins[AlertIndex]))||null:null);
               setState(stateAlertIdFull+stateAlert[3].name,(AlertIndex>-1)?formatDate(new Date(newEnds[AlertIndex]))||null:null);
           }
       }
    }
    
    function sendMessage(pushdienst, topic, msgsingle, msgspeak, msgall) {
     if (msgsingle) {
       if ((pushdienst & TELEGRAM)!=0) {
         if (telegramUser.length>0) {
           for (let a=0;a<telegramUser.length;a++) {
             sendTo ("telegram.0", {user: telegramUser[a], text: msgsingle});
           }
         } else {
           sendTo ("telegram.0", msgsingle);
         }
       }
       if ((pushdienst & PUSHOVER)!=0) {
         sendTo("pushover.0", msgsingle);
       }
       if ((pushdienst & IOGO)!=0) {
         if (ioGoUser.length>0) {
           for (let a=0;a<ioGoUser.length;a++) {
             sendTo('iogo.0', "send", {
               user:                   ioGoUser[a],
               text:                   topic,
               title:                  msgsingle
             });
           }
         } else {
           sendTo('iogo.0', "send", {
             text:                   topic,
             title:                  msgsingle
           });
         }
       }
       if ((pushdienst & STATE)!=0 ) {
         setState(mirrorMessageState,msgsingle,true);
       }
     }
     if(msgspeak){
       if((pushdienst & HOMETWO)!=0 ){
         for(let a=0;a<idMediaplayer.length;a++) {
           var Url2 = "http://" + idMediaplayer[a] + "/track=4fachgong.mp3|tts=" + msgspeak;
           log('Url2 :' + Url2);
           request(Url2);
         }
       }
       if ((pushdienst & SAYIT)!=0) {
         for(let a=0;a<idSayIt.length;a++) {
           setState(idSayIt[a], lautstaerke[a] + ";" + msgspeak);
         }
       }
       if ((pushdienst & ALEXA)!=0) {
    
          for(let a=0;a<idAlexaSerial.length;a++) {
                   // Wenn auf Gruppe keine Lautstärken regelung möglich
                   if (existsState(getFullId(idAlexaVolumen,idAlexaSerial[a]))) setState(getFullId(idAlexaVolumen,idAlexaSerial[a]), alexaVolumen[a]);
                   setState(getFullId(idAlexa,idAlexaSerial[a]), msgspeak);
         }
       }
     }
     if (msgall &&(pushdienst & EMAIL)!=0) {
       if (empfaengerEmailID.length>0) {
         for (let a=0;a<empfaengerEmailID.length;a++) {
           sendTo("email", senderEmailID[0]?{from: senderEmailID[0], to: empfaengerEmailID[a], subject: topic, text: msgall}:{to: empfaengerEmailID[a], subject: topic, text: msgall});
         }
       } else {
         sendTo("email", senderEmailID[0]?{from: senderEmailID[0], subject: topic, text: msgall}:{subject: topic, text: msgall});
       }
     }
    }
    
    /* function sendioGo(topic, msg) {
     if ((pushdienst & IOGO)!=0) {
       if (ioGoUser.length>0) {
         for (let a=0;a<ioGoUser.length;a++) {
           sendTo('iogo.0', "send", {
             user:                   ioGoUser[a],
             text:                   topic,
             title:                  msg
           });
         ]
       } else {
         sendTo('iogo.0', "send", {
           text:                   topic,
           title:                  msg
         });
       }
     }
    }*/
    
    

    crunchipC Abwesend
    crunchipC Abwesend
    crunchip
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #69

    @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

    Das Script kommt jetzt auch mit Gruppen klar,

    Gruppen ging doch auch schon in vorherigen Versionen, ab dem Zeitpunkt als du alexa hinzugefügt hattest
    mal sehn, ich hab dot 3. Gen und echo 2. Gen

    umgestiegen von Proxmox auf Unraid

    T 1 Antwort Letzte Antwort
    0
    • crunchipC crunchip

      @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

      Das Script kommt jetzt auch mit Gruppen klar,

      Gruppen ging doch auch schon in vorherigen Versionen, ab dem Zeitpunkt als du alexa hinzugefügt hattest
      mal sehn, ich hab dot 3. Gen und echo 2. Gen

      T Nicht stören
      T Nicht stören
      ticaki
      schrieb am zuletzt editiert von ticaki
      #70

      @crunchip
      Ob es ging weiß ich nicht, jedoch hab ich ne Fehlermeldung gehabt, weil Gruppierungen keine Lautstärke unterstützen. Zumindest meine Gruppierung. :) Ich prüfe jetzt einfach ob der State da ist.

      Dann brauche ich in der Küche einen dot 3. gen

      Fehlerbehebung:

      • Einzelne Wetterentwarnung wurde nicht gesendet.

      v1.15.6

      • wieder meine Daten drin
      • role geändert auf button von Control states

      //Version 1.15.6
      //nachbearbeitet von ticaki
      /*
      
      */
      /* ************************************************************************* */
      /*             Script zum Übertragen der DWD-Wetterwarnungen über            */
      /*             Telegram, Pushover, Home24-Mediaplayer oder SayIt             */
      /*     mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals)     */
      /*                    Stand: 130022017    PrinzEisenherz1                    */
      /*                                                                           */
      /*                                                                           */
      /*                                                                           */
      /* ************************************************************************* */
      
      /* ************************************************************************* */
      /* NICHT EDITIEREN */
      var konstanten = [
         {"name":'telegram',"value":1},
         {"name":'pushover',"value":2},
         {"name":'email',"value":4},
         {"name":'sayit',"value":8},
         {"name":'home24',"value":16},
         {"name":'alexa',"value":32},
         {"name":'state',"value":64},
         {"name":'iogo',"value":128}
      ];
      const TELEGRAM = konstanten[0].value;
      const PUSHOVER = konstanten[1].value;
      const EMAIL = konstanten[2].value;
      const SAYIT = konstanten[3].value;
      const HOMETWO = konstanten[4].value;
      const ALEXA = konstanten[5].value;
      const STATE = konstanten[6].value;
      const IOGO = konstanten[7].value;
      var pushdienst=0;
      /* ************************************************************************* */
      /*                       Konfiguration ab hier                               */
      /* ************************************************************************* */
      
      /* Konfiguration der zu nutzenden Ausgabe um //pushdienst+= PUSHOVER; zu aktivieren, bitte die // enfernen, also pushdienst+= PUSHOVER; */
      //pushdienst+= TELEGRAM;          // Auskommentieren zum aktivieren
      //pushdienst+= PUSHOVER;          // Auskommentieren zum aktivieren
      //pushdienst+= EMAIL;             // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
      //pushdienst+= SAYIT;             // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
      //pushdienst+= HOMETWO;           // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
      //pushdienst+= ALEXA;             // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
      //pushdienst+= STATE;             // Auskommentieren zum aktivieren. State befindet sich unter onClickMessageState.message
      //pushdienst+= IOGO;              // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
      
      /* Einstellungen zur Emailbenachrichtigung*/
      var senderEmailID = [""]; // mit Sender Emailadresse füllen. email Adapter muß installiert sein. 1 Eintrag erlaubt [] oder ["email1"]
      var empfaengerEmailID = [""];// mit Empfänger Emailadresse füllen. Mehrere Empfänger möglich. [] oder ["email1"] oder ["email1","email2"]
      
      /* Konfiguration Sprachausgabe über Home24-Mediaplayer */
      var idMediaplayer = ["192.168.178.68:50000"]; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer mehrere Möglich - ungetestet
      
      /* Konfiguration Telegram */
      var telegramUser = []; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
      
      /* Konfiguration Sprachausgabe über SayIt */
      var idSayIt = ["sayit.0.tts.text"]; // mehrfach Einträge möglich
      var lautstaerke = [60]; // gleiche Anzahl wie idSayIt
      
      /* Konfiguration Sprachausgabe über Alexa
      /* mehrere Einträge möglich, bei mir ging nur der Echo, 2 dots 2.Gen reagieren nicht auf announcement. */
      var idAlexaSerial =['']; // die reine Seriennummer des Echos z.B.: var idAlexaSerial =['G090RV32984110Y','G090RV32984110Y']
      var alexaVolumen = [40]; // Lautstärke die gleiche Anzahl an Einträgen wie bei idAlexaSerial
      
      //Konfiguration von ioGo
      var ioGoUser = []; // // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
      
      //StatePfad um Mitteilungen auszulösen darunter werden jeweils Punkte für jede Ausgabemöglichkeit erstellt.
      var onClickMessageState = 'javascript.0.DWD_Script.'; // abschließender Punkt . nicht vergessen
      
      // Filtereinstellungen
      const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden;
      const maxhoehe = 1410 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden
      
      //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" KEINE Anpassung nötig
      const formatierungString = "TT.MM.YY SS:mm";
      
      // Sprachausgabe Zeiten
      // Für durchgehende Sprachausgabe die Einstellung der Zeiten auf '' setzen. z.B. var startTimeSpeak = '';
      var startTimeSpeak = '6:45';// Zeiten mo-fr ab der Sprachausgaben ok sind. Nicht unter 6 Uhr gehen oder den Schedule ändern
      var startTimeSpeakWeekend = '9:00';// sa + so Bemerkung siehe oben
      var endTimeSpeak = '22:30'; // ab diesem Zeitpunkt gibt es keine Sprachausgabe
      
      // Automatikmodus auschalten
      var autoMode = true;
      //Auslösen der Pushnachricht über States ignoriert Sprachausgabezeiten
      var forcedSpeak = true;
      // keine Ansage über m/s Knoten und Windstärke. Die Angabe mit Kilometer pro Stunde wird angesagt
      var WindForceDetailsSpeak = false;
      
      /* ************************************************************************* */
      /* ************************************************************************* */
      /* ************************************************************************* */
      /*                       Konfiguration Ende                                  */
      /* ************************************************************************* */
      /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
      /* ************************************************************************* */
      /* ************************************************************************* */
      /* ************************************************************************* */
      var SPEAK = ALEXA+HOMETWO+SAYIT;
      var PUSH = TELEGRAM+PUSHOVER+IOGO+STATE;
      var ALLMSG = EMAIL;
      var placeHolder = 'XXXXPLACEHOLDERXXXX';
      var idAlexa = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.announcement';
      var idAlexaVolumen = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.speak-volume';
      var forceSpeak = false;
      /* Arrays festlegen */
      const InitArraylength = 9;
      var newDescriptions = [InitArraylength];
      var oldDescriptions = [InitArraylength];
      var newHeadlines = [InitArraylength];
      var oldHeadlines = [InitArraylength];
      var newBegins = [InitArraylength];
      var oldBegins = [InitArraylength];
      var newEnds = [InitArraylength];
      var oldEnds = [InitArraylength];
      var newInstruction = [InitArraylength];
      var oldData = [InitArraylength];
      var newData = [InitArraylength];
      var timer = null;
      var onClickCheckRun = false;
      
      function getFullId(a,b) {
       return a.replace(placeHolder,b)
      }
      /* Überpüfe die Konfiguration soweit möglich */
      if ((pushdienst&ALEXA) != 0) {
       for (let a=0;a<idAlexaSerial.length;a++) {
         if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
           log('Alexa-Serial '+idAlexaSerial[a]+' ist fehlerhaft. Überpüfen!','error');
           stopScript();
         }
       }
      }
      
      if ((pushdienst&SAYIT) != 0) {
       for (let a=0;a<idSayIt.length;a++) {
         if (
           !existsState(idSayIt[a])
         ) {
           log('SayIt-Konfiguration ist fehlerhaft. Überpüfen!','error');
           stopScript();
         }
       }
      }
      
      if ((pushdienst&EMAIL) != 0) {
       if (senderEmailID.length>1) {
         log('eMail-Konfiguration ist fehlerhaft. Nur 1 Eintrag in senderEmailID erlaubt!','error');
         stopScript();
       }
      }
      
      /* erstmaliges Befüllen der arrays */
      for (let a=0;a<InitArraylength;a++) {
         var id = "dwd.0.warning";
         if (a!=0) id+=a.toString();
         id+='.object';
         var warn = {};
         if (existsState(id)) warn = JSON.parse(getState(id).val);
         warn = convertJsonDWD(warn);
         newDescriptions[a] = warn.description;
         oldDescriptions[a] = warn.description;
         newHeadlines[a] = warn.headline;
         oldHeadlines[a] = warn.headline;
         newBegins[a] = warn.start;
         oldBegins[a] = warn.start;
         newEnds[a] = warn.end;
         oldEnds[a] = warn.end;
         newData[a] = {"level":warn.level,"type":warn.type};
         oldData[a] = {"level":warn.level,"type":warn.type};
      }
      
      // State der Pushnachrichten über pushover/telegram spiegelt
      const mirrorMessageState = onClickMessageState+'message';
      if (!existsState(mirrorMessageState)) {
         createState(mirrorMessageState,'', {
             read: true,
             write: false,
             desc: "Beschreibung",
             type: "string",
         });
      }
      
      // State über den man gesonderte Aktionen auslösen kann, gibt die höchste Warnstufe aus.
      // Warning types
      var warningTypesString = [
         'Gewitter',
         'Sturm',
         'Regen',
         'Schnee',
         'Nebel',
         'Frost',
         'Glatteis',
         'Tauwetter',
         'Hitzewarnungen',
         'UV_Warnungen'/*,
         'Kuestenwarnungen',
         'Binnenseewarnungen'*/
      ];
      const stateAlert = // Änderungen auch in SetAlertState() anpassen
      [
         {"name":'level',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
         {"name":'type',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
         {"name":'start',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string",name:''}},
         {"name":'end',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string", name:''}},
      ]
      {
         let stateAlertId = onClickMessageState+'alert.';
         let allStateExist = true;
         for (let b=0;b<warningTypesString.length;b++) {
             for (let a=0;a<stateAlert.length;a++)
             {
                 let stateAlertIdFull = stateAlertId+warningTypesString[b]+'.'+stateAlert[a].name;
                 stateAlert[a].type.name = stateAlertIdFull.toString();
                 if (!existsState(stateAlertIdFull)) {
                     createState(stateAlertIdFull,stateAlert[a].default, stateAlert[a].type);
                     allStateExist=false;
                 }
             }
         }
         if (allStateExist) SetAlertState();
      }
      
      // Nachrichtenversand per Click States erzeugen und subscript
      for (var a=0;a<konstanten.length;a++){
         if (!existsState(onClickMessageState+'Commands.'+konstanten[a].name)) {
             createState(onClickMessageState+'Commands.'+konstanten[a].name,false, {
                 read: true,
                 write: true,
                 desc: "Beschreibung",
                 type: "boolean",
                 role: "button",
                 def: false
             });
         }
         if (existsState(onClickMessageState+'Commands.'+konstanten[a].name)){
             subscribe({id: onClickMessageState+'Commands.'+konstanten[a].name},function(obj){
                 if (!obj.state.val) return;
                 setState(obj.id,false,true);
                 let b = obj.id.split('.');
                 let d = konstanten.findIndex(function(c){return (c.name===b[b.length-1]);})
                 if (d == -1) {log('Fehler. State nicht in Konstanten enthalten','error'); return;}
                 if ((pushdienst & konstanten[d].value) == 0) return;
                 let oldPushdienst = pushdienst;
                 pushdienst = konstanten[d].value*1;
                 for (let i=0;i<oldDescriptions.length;i++) {
                     oldHeadlines[i] = '';
                     oldDescriptions[i] = '';
                     oldBegins[i] = '';
                     oldEnds[i] = '';
                     oldData[i] = {"type":-1,"level":-1};
                 }
                 forceSpeak = forcedSpeak;
                 onClickCheckRun = true;
                 check();
                 onClickCheckRun = false;
                 forceSpeak = false;
                 pushdienst = oldPushdienst;
             })
         }
      }
      
      // Zeitsteuerung für SayIt & Alexa
      var START = new Date();
      var ENDE = new Date();
      setWeekend();
      
      function setWeekend()
      {
         if (forceSpeak) return;
         let date = new Date();
         let n = date.getDay();
         let weekend = 0;
         weekend = (n === 0 || n == 6) ? 1 : 0;
         if(weekend == 1){                     // wenn Wochenende, dann setze Start auf 9h, sonst 6:45h
             START = convertStringToDate(startTimeSpeakWeekend);
         }
         else{
             START = convertStringToDate(startTimeSpeak);
         }
         ENDE = convertStringToDate(endTimeSpeak);
      }
      
      function convertStringToDate(s) {
         if (typeof s !== 'string' ) return null;
         var e = s.split(':');
         if (!Array.isArray(e) || e.length != 2) return null;
         var d = new Date();
         d.setHours(e[0]);
         d.setMinutes(e[1]);
         d.setSeconds(0);
         return d;
      }
      
      function check() {
         if (!forcedSpeak) forceSpeak = (!startTimeSpeakWeekend||!startTimeSpeak||!endTimeSpeak);
         setWeekend();
      
         SetAlertState();
      
         let activeCount = 0;
         newDescriptions.forEach((item, i) => {if (item) activeCount++;});
      
         /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
         if(newDescriptions.findIndex(function(a){return (!!a);})==-1 && oldDescriptions.findIndex(function(a){return (!!a);})!=-1) {
             let MeldungSDWD = 'Achtung' + '  .  ' + 'Alle Warnmeldungen des DWD wurden aufgehoben';
      
             /* Bereich für Sprachausgabe über SayIt & Alexa & Home24*/
             if ( forceSpeak || compareTime(START, ENDE, 'between')){                  // Ansage über Sayit nur im definierten Zeitbereich
                 sendMessage(pushdienst&SPEAK,'','',MeldungSDWD,'');
             }
             let pushmsg = 'Alle Warnmeldungen des DWD wurden aufgehoben';
             sendMessage(pushdienst&PUSH,'Wetterentwarnung',pushmsg,'','');
             sendMessage(pushdienst&ALLMSG,'Wetterentwarnung des DWD(iobroker)','','',pushmsg);
      
             /* alle Sicherungen Wetterwarnung löschen */
             oldHeadlines = newHeadlines.slice();
             oldDescriptions = newDescriptions.slice();
             oldBegins = newBegins.slice();
             oldEnds = newEnds.slice();
             oldData = newData.slice();
             return;
         }
      
         /* Variablen für Meldungen Text */
         var MeldungNew = '';
         /* Variablen für Meldungen Sprache */
         var MeldungSpracheDWD = [];
         var MeldungNewSprache = '';
         var MeldungOldSprache = '';
         var AllEmailMsg = '';
         var AllEmailMsgDelete = '';
      
         var headline;
         var description;
         var begin;
         var end;
         var i;
         var warn;
      
         /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */
         for(i = 0; i < newDescriptions.length; i++) {
           description = oldDescriptions[i];
           headline = oldHeadlines[i];
             if(description !== undefined && headline !== undefined && description !== '' && newDescriptions.indexOf(description) == -1 ) {
                 end = getFormatDate(oldEnds[i]);
      
                 let pushmsg = "Die Wetterwarnung " +"'"+ headline + " gültig bis " + end + "'" + " des DWD wurde aufgehoben.";
                 pushmsg += ' Insgesamt '+(activeCount==1 ?'eine gültige Warnung.':activeCount+' gültige Warnungen.');
                 AllEmailMsgDelete+=pushmsg+'\n\n';
                 sendMessage(pushdienst&PUSH,'Wetterentwarnung',pushmsg,'','');
      
                 /* Sprache: Verknüpfen aller aufgehobenen Wetterwarnungen */
                 MeldungOldSprache = headline + ' gültig bis ' + getFormatDateSpeak(end) + ' Uhr wurde aufgehoben' + '  .  ';
                 MeldungSpracheDWD.push(MeldungOldSprache);
             }
         }
         let gefahr = false;
         /* Bereich für 'Neue Amtliche Wetterwarnung' */
         for(i = 0; i < newDescriptions.length; i++) {
             headline = newHeadlines[i];
             description = newDescriptions[i];
             let level = newData[i].level;
             var instruction = newInstruction[i];
             if(description !== undefined && description !== "" && oldDescriptions.indexOf(description) == -1 ) {
                 begin = getFormatDate(new Date(newBegins[i]));
                 end = getFormatDate(new Date(newEnds[i]));
                 MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
                 if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNew+='\nHandlungsanweisungen: '+instruction;
                 if (activeCount>1) MeldungNew += ' Insgesamt '+activeCount+' gültige Warnungen.'
                 /* ab Level 4 zusätzlicher Hinweis */
                 if (!gefahr) gefahr=level>3;
                 let topic = (level>3)?'Wichtige Wetterwarnung':'Wetterwarnung';
      
                 sendMessage(pushdienst&PUSH,topic,MeldungNew,'','');
                 AllEmailMsg+=MeldungNew+'\n\n';
                 /* Sprache: Verknüpfen aller neuen Warnmeldungen */
      
                 var replaceDescription0 = entferneDatenpunkt(description);
                 MeldungNewSprache = (level>3)?'Achtung Unwetter ':'' + headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + '  .  ';
                 if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNewSprache+='Handlungsanweisungen: '+instruction;
                 MeldungSpracheDWD.push(MeldungNewSprache);
             }
         }
         /* Bereich für Sprachausgabe */
         if (onClickCheckRun) {
             if (MeldungSpracheDWD.length==0) MeldungSpracheDWD.push('Es liegen keine Warnmeldungen des DWD vor.');
         }
         if (MeldungSpracheDWD.length>0 && (forceSpeak || compareTime(START, ENDE, 'between')) && (pushdienst & (HOMETWO+SAYIT+ALEXA))!=0 ) {
             let a=1000;
             let b = a;
             let c = a;
             while (MeldungSpracheDWD.length>0)
             {
                 let b = 60000;
                 let msgAppend = '';
                 if (MeldungSpracheDWD.length > 1) {
                     if (MeldungSpracheDWD.length-1==1) {
                         msgAppend = ' Eine weitere neue Warnung.';
                     } else {
                         msgAppend = MeldungSpracheDWD.length-1+' weitere neue Warnungen.';
                     }
                 } else {
                     if (activeCount==0) msgAppend = ' keine weitere Warnung.';
                     else {
                         if (activeCount==1) msgAppend = ' Ingesamt eine aktive Warnung.';
                         else msgAppend = ' Insgesamt '+activeCount+ 'aktive Warnungen.';
                     }
                 }
                 if((pushdienst & HOMETWO)!=0 ){
                     setTimeout(function(msg,msg2){
                       sendMessage(HOMETWO,'','',msg+msg2,'');
                     },a,MeldungSpracheDWD[0], msgAppend);
                 }
                 /* Bereich für Sprachausgabe über SayIt + Alexa */
                 if ((pushdienst & SAYIT)!=0) {
                     setTimeout(function(msg,msg2){
                       sendMessage(SAYIT,'','',msg+msg2,'');
                     },b,MeldungSpracheDWD[0], msgAppend);
                 }
                 if ((pushdienst & ALEXA)!=0) {
                     setTimeout(function(msg,msg2){
                       sendMessage(ALEXA,'','',msg+msg2,'');
                     },c,MeldungSpracheDWD[0], msgAppend);
                 }
                 a+=60000;
                 b+=45000;
                 c+=30000;
                 MeldungSpracheDWD.shift();
             }
         }
      
         AllEmailMsg+=AllEmailMsgDelete;
         if ((pushdienst & ALLMSG)!=0 && AllEmailMsg != '') {
             //sendEmail(gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",AllEmailMsg);
             sendMessage(pushdienst&ALLMSG,gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",'','',AllEmailMsg);
         }
      
         /* Neue Werte sichern */
         oldHeadlines = newHeadlines.slice();
         oldDescriptions = newDescriptions.slice();
         oldBegins = newBegins.slice();
         oldEnds = newEnds.slice();
         oldData = newData.slice();
      }
      
      /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */
      function entferneDatenpunkt(beschreibung) {
         var rueckgabe;
         rueckgabe = beschreibung;
         try {
      
             rueckgabe = rueckgabe.replace(/\°C/g, "Grad");
             rueckgabe = rueckgabe.replace(/km\/h/g, "Kilometer pro Stunde");
             if (!WindForceDetailsSpeak) {
                 rueckgabe = rueckgabe.replace(/[0-9]+.m\/s..[0-9]+kn..Bft.[0-9]+/g, "");
             } else {
                 rueckgabe = rueckgabe.replace(/kn/g, " Knoten");
                 rueckgabe = rueckgabe.replace(/Bft/g, " Windstärke");
                 rueckgabe = rueckgabe.replace(/m\/s/g, " Meter pro Sekunde");
             }
         }
         catch(e) {log(e,'warn');}
         return rueckgabe;
      }
      
      on(/^dwd\.0\..*\.object$/, function(dp) {
         let i = getIdIndex(dp.id);
         var warn = null;
         if (dp.state.val != '') warn = JSON.parse(dp.state.val);
         warn = convertJsonDWD(warn);
         newDescriptions[i] = warn.description ;
         newHeadlines[i] = warn.headline;
         newBegins[i] = warn.start;
         newEnds[i] = warn.end;
         newInstruction[i] = warn.instruction;
         newData[i].level = warn.level;
         newData[i].type = warn.type;
         if(timer) clearTimeout(timer);
         if (autoMode) timer = setTimeout(check, 10000);
      });
      
      function convertJsonDWD(warn) {
         warn = (!warn || warn === ''? {} : warn);
         if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level < minlevel)) warn = {};
         let a = warn.description === undefined ? '' : warn.description;
         let b = warn.headline === undefined ? '' : warn.headline;
         let c = warn.start === undefined ? null : warn.start||null;
         let d = warn.end === undefined ? null : warn.end||null;
         let e = warn.instruction === undefined ? '' : warn.instruction;
         let f = warn.type === undefined ? -1 : warn.type;
         let g = warn.level === undefined ? -1 : warn.level;
         return {"description":a,"headline":b,"start":c,"end":d,"instruction":e,"type":f,"level":g};
      }
      
      function getIdIndex(a) {
         a = a.split('.');
         if (a[2].length == 7) return 0
         return a[2][7];
      }
      function getFormatDate(a) {
         if (!a || a === '') return '';
         return formatDate(a.getTime(), formatierungString);
      }
      // @PARAM Rückgabe von getFormatDate
      function getFormatDateSpeak(a) {
         if (!a || a === '') return '';
         let b = a.split('.');
         let m = '';
         switch (b[1]) {
             case '01': m='Januar';break;
             case '02': m='Februar';break;
             case '03': m='März';break;
             case '04': m='April';break;
             case '05': m='Mai';break;
             case '06': m='Juni';break;
             case '07': m='Juli';break;
             case '08': m='August';break;
             case '09': m='September';break;
             case '10': m='Oktober';break;
             case '11': m='November';break;
             case '12': m='Dezember';break;
             default: m='';
         }
         b[1]=m; // setze Monatsname
         // entferne Jahr
         let c = b[2].split(' ');
         c[0]='';
         b[2] = c.join(' ');
         return b.join(' ');
      }
      
      function SetAlertState(){
         let stateAlertid = onClickMessageState+'alert.';
         for (let b=0;b<warningTypesString.length;b++)
         {
             let stateAlertIdFull = stateAlertid+warningTypesString[b]+'.';
             let AlertLevel = -1;
             let AlertType = -1;
             let AlertStart = null;
             let AlertEnd = null;
             let AlertIndex = -1;
             for (let c=0;c<newData.length;c++) {
                 if (newData[c].type == b && newData[c].level > AlertLevel) {
                     AlertLevel=newData[c].level;
                     AlertIndex=c;
                 }
             }
             if (getState(stateAlertIdFull+stateAlert[0].name).val!=AlertIndex) {
                 setState(stateAlertIdFull+stateAlert[0].name,AlertLevel);
                 setState(stateAlertIdFull+stateAlert[1].name,b);
                 setState(stateAlertIdFull+stateAlert[2].name,(AlertIndex>-1)?formatDate(new Date(newBegins[AlertIndex])):'');
                 setState(stateAlertIdFull+stateAlert[3].name,(AlertIndex>-1)?formatDate(new Date(newEnds[AlertIndex])):'');
             }
         }
      }
      
      function sendMessage(pushdienst, topic, msgsingle, msgspeak, msgall) {
       if (msgsingle) {
         if ((pushdienst & TELEGRAM)!=0) {
           if (telegramUser.length>0) {
             for (let a=0;a<telegramUser.length;a++) {
               sendTo ("telegram.0", {user: telegramUser[a], text: msgsingle});
             }
           } else {
             sendTo ("telegram.0", msgsingle);
           }
         }
         if ((pushdienst & PUSHOVER)!=0) {
           sendTo("pushover.0", msgsingle);
         }
         if ((pushdienst & IOGO)!=0) {
           if (ioGoUser.length>0) {
             for (let a=0;a<ioGoUser.length;a++) {
               sendTo('iogo.0', "send", {
                 user:                   ioGoUser[a],
                 text:                   topic,
                 title:                  msgsingle
               });
             }
           } else {
             sendTo('iogo.0', "send", {
               text:                   topic,
               title:                  msgsingle
             });
           }
         }
         if ((pushdienst & STATE)!=0 ) {
           setState(mirrorMessageState,msgsingle,true);
         }
       }
       if(msgspeak){
         if((pushdienst & HOMETWO)!=0 ){
           for(let a=0;a<idMediaplayer.length;a++) {
             var Url2 = "http://" + idMediaplayer[a] + "/track=4fachgong.mp3|tts=" + msgspeak;
             log('Url2 :' + Url2);
             request(Url2);
           }
         }
         if ((pushdienst & SAYIT)!=0) {
           for(let a=0;a<idSayIt.length;a++) {
             setState(idSayIt[a], lautstaerke[a] + ";" + msgspeak);
           }
         }
         if ((pushdienst & ALEXA)!=0) {
      
            for(let a=0;a<idAlexaSerial.length;a++) {
                     // Wenn auf Gruppe keine Lautstärken regelung möglich
                     if (existsState(getFullId(idAlexaVolumen,idAlexaSerial[a]))) setState(getFullId(idAlexaVolumen,idAlexaSerial[a]), alexaVolumen[a]);
                     setState(getFullId(idAlexa,idAlexaSerial[a]), msgspeak);
           }
         }
       }
       if (msgall &&(pushdienst & EMAIL)!=0) {
         if (empfaengerEmailID.length>0) {
           for (let a=0;a<empfaengerEmailID.length;a++) {
             sendTo("email", senderEmailID[0]?{from: senderEmailID[0], to: empfaengerEmailID[a], subject: topic, text: msgall}:{to: empfaengerEmailID[a], subject: topic, text: msgall});
           }
         } else {
           sendTo("email", senderEmailID[0]?{from: senderEmailID[0], subject: topic, text: msgall}:{subject: topic, text: msgall});
         }
       }
      }
      
      
      

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      sigi234S 1 Antwort Letzte Antwort
      0
      • T ticaki

        @crunchip
        Ob es ging weiß ich nicht, jedoch hab ich ne Fehlermeldung gehabt, weil Gruppierungen keine Lautstärke unterstützen. Zumindest meine Gruppierung. :) Ich prüfe jetzt einfach ob der State da ist.

        Dann brauche ich in der Küche einen dot 3. gen

        Fehlerbehebung:

        • Einzelne Wetterentwarnung wurde nicht gesendet.

        v1.15.6

        • wieder meine Daten drin
        • role geändert auf button von Control states

        //Version 1.15.6
        //nachbearbeitet von ticaki
        /*
        
        */
        /* ************************************************************************* */
        /*             Script zum Übertragen der DWD-Wetterwarnungen über            */
        /*             Telegram, Pushover, Home24-Mediaplayer oder SayIt             */
        /*     mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals)     */
        /*                    Stand: 130022017    PrinzEisenherz1                    */
        /*                                                                           */
        /*                                                                           */
        /*                                                                           */
        /* ************************************************************************* */
        
        /* ************************************************************************* */
        /* NICHT EDITIEREN */
        var konstanten = [
           {"name":'telegram',"value":1},
           {"name":'pushover',"value":2},
           {"name":'email',"value":4},
           {"name":'sayit',"value":8},
           {"name":'home24',"value":16},
           {"name":'alexa',"value":32},
           {"name":'state',"value":64},
           {"name":'iogo',"value":128}
        ];
        const TELEGRAM = konstanten[0].value;
        const PUSHOVER = konstanten[1].value;
        const EMAIL = konstanten[2].value;
        const SAYIT = konstanten[3].value;
        const HOMETWO = konstanten[4].value;
        const ALEXA = konstanten[5].value;
        const STATE = konstanten[6].value;
        const IOGO = konstanten[7].value;
        var pushdienst=0;
        /* ************************************************************************* */
        /*                       Konfiguration ab hier                               */
        /* ************************************************************************* */
        
        /* Konfiguration der zu nutzenden Ausgabe um //pushdienst+= PUSHOVER; zu aktivieren, bitte die // enfernen, also pushdienst+= PUSHOVER; */
        //pushdienst+= TELEGRAM;          // Auskommentieren zum aktivieren
        //pushdienst+= PUSHOVER;          // Auskommentieren zum aktivieren
        //pushdienst+= EMAIL;             // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
        //pushdienst+= SAYIT;             // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
        //pushdienst+= HOMETWO;           // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
        //pushdienst+= ALEXA;             // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
        //pushdienst+= STATE;             // Auskommentieren zum aktivieren. State befindet sich unter onClickMessageState.message
        //pushdienst+= IOGO;              // Auskommentieren zum aktivieren. Einstellungen nicht vergessen
        
        /* Einstellungen zur Emailbenachrichtigung*/
        var senderEmailID = [""]; // mit Sender Emailadresse füllen. email Adapter muß installiert sein. 1 Eintrag erlaubt [] oder ["email1"]
        var empfaengerEmailID = [""];// mit Empfänger Emailadresse füllen. Mehrere Empfänger möglich. [] oder ["email1"] oder ["email1","email2"]
        
        /* Konfiguration Sprachausgabe über Home24-Mediaplayer */
        var idMediaplayer = ["192.168.178.68:50000"]; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer mehrere Möglich - ungetestet
        
        /* Konfiguration Telegram */
        var telegramUser = []; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
        
        /* Konfiguration Sprachausgabe über SayIt */
        var idSayIt = ["sayit.0.tts.text"]; // mehrfach Einträge möglich
        var lautstaerke = [60]; // gleiche Anzahl wie idSayIt
        
        /* Konfiguration Sprachausgabe über Alexa
        /* mehrere Einträge möglich, bei mir ging nur der Echo, 2 dots 2.Gen reagieren nicht auf announcement. */
        var idAlexaSerial =['']; // die reine Seriennummer des Echos z.B.: var idAlexaSerial =['G090RV32984110Y','G090RV32984110Y']
        var alexaVolumen = [40]; // Lautstärke die gleiche Anzahl an Einträgen wie bei idAlexaSerial
        
        //Konfiguration von ioGo
        var ioGoUser = []; // // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];
        
        //StatePfad um Mitteilungen auszulösen darunter werden jeweils Punkte für jede Ausgabemöglichkeit erstellt.
        var onClickMessageState = 'javascript.0.DWD_Script.'; // abschließender Punkt . nicht vergessen
        
        // Filtereinstellungen
        const minlevel = 0 // Warnungen gleich oder unterhalb dieses Levels nicht senden;
        const maxhoehe = 1410 // Warnung für eine Höhe oberhalb dieses Wertes nicht senden
        
        //Formatierungsstring für Datum/Zeit Alternative "TT.MM.YYYY SS:mm" KEINE Anpassung nötig
        const formatierungString = "TT.MM.YY SS:mm";
        
        // Sprachausgabe Zeiten
        // Für durchgehende Sprachausgabe die Einstellung der Zeiten auf '' setzen. z.B. var startTimeSpeak = '';
        var startTimeSpeak = '6:45';// Zeiten mo-fr ab der Sprachausgaben ok sind. Nicht unter 6 Uhr gehen oder den Schedule ändern
        var startTimeSpeakWeekend = '9:00';// sa + so Bemerkung siehe oben
        var endTimeSpeak = '22:30'; // ab diesem Zeitpunkt gibt es keine Sprachausgabe
        
        // Automatikmodus auschalten
        var autoMode = true;
        //Auslösen der Pushnachricht über States ignoriert Sprachausgabezeiten
        var forcedSpeak = true;
        // keine Ansage über m/s Knoten und Windstärke. Die Angabe mit Kilometer pro Stunde wird angesagt
        var WindForceDetailsSpeak = false;
        
        /* ************************************************************************* */
        /* ************************************************************************* */
        /* ************************************************************************* */
        /*                       Konfiguration Ende                                  */
        /* ************************************************************************* */
        /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
        /* ************************************************************************* */
        /* ************************************************************************* */
        /* ************************************************************************* */
        var SPEAK = ALEXA+HOMETWO+SAYIT;
        var PUSH = TELEGRAM+PUSHOVER+IOGO+STATE;
        var ALLMSG = EMAIL;
        var placeHolder = 'XXXXPLACEHOLDERXXXX';
        var idAlexa = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.announcement';
        var idAlexaVolumen = 'alexa2.0.Echo-Devices.'+placeHolder+'.Commands.speak-volume';
        var forceSpeak = false;
        /* Arrays festlegen */
        const InitArraylength = 9;
        var newDescriptions = [InitArraylength];
        var oldDescriptions = [InitArraylength];
        var newHeadlines = [InitArraylength];
        var oldHeadlines = [InitArraylength];
        var newBegins = [InitArraylength];
        var oldBegins = [InitArraylength];
        var newEnds = [InitArraylength];
        var oldEnds = [InitArraylength];
        var newInstruction = [InitArraylength];
        var oldData = [InitArraylength];
        var newData = [InitArraylength];
        var timer = null;
        var onClickCheckRun = false;
        
        function getFullId(a,b) {
         return a.replace(placeHolder,b)
        }
        /* Überpüfe die Konfiguration soweit möglich */
        if ((pushdienst&ALEXA) != 0) {
         for (let a=0;a<idAlexaSerial.length;a++) {
           if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
             log('Alexa-Serial '+idAlexaSerial[a]+' ist fehlerhaft. Überpüfen!','error');
             stopScript();
           }
         }
        }
        
        if ((pushdienst&SAYIT) != 0) {
         for (let a=0;a<idSayIt.length;a++) {
           if (
             !existsState(idSayIt[a])
           ) {
             log('SayIt-Konfiguration ist fehlerhaft. Überpüfen!','error');
             stopScript();
           }
         }
        }
        
        if ((pushdienst&EMAIL) != 0) {
         if (senderEmailID.length>1) {
           log('eMail-Konfiguration ist fehlerhaft. Nur 1 Eintrag in senderEmailID erlaubt!','error');
           stopScript();
         }
        }
        
        /* erstmaliges Befüllen der arrays */
        for (let a=0;a<InitArraylength;a++) {
           var id = "dwd.0.warning";
           if (a!=0) id+=a.toString();
           id+='.object';
           var warn = {};
           if (existsState(id)) warn = JSON.parse(getState(id).val);
           warn = convertJsonDWD(warn);
           newDescriptions[a] = warn.description;
           oldDescriptions[a] = warn.description;
           newHeadlines[a] = warn.headline;
           oldHeadlines[a] = warn.headline;
           newBegins[a] = warn.start;
           oldBegins[a] = warn.start;
           newEnds[a] = warn.end;
           oldEnds[a] = warn.end;
           newData[a] = {"level":warn.level,"type":warn.type};
           oldData[a] = {"level":warn.level,"type":warn.type};
        }
        
        // State der Pushnachrichten über pushover/telegram spiegelt
        const mirrorMessageState = onClickMessageState+'message';
        if (!existsState(mirrorMessageState)) {
           createState(mirrorMessageState,'', {
               read: true,
               write: false,
               desc: "Beschreibung",
               type: "string",
           });
        }
        
        // State über den man gesonderte Aktionen auslösen kann, gibt die höchste Warnstufe aus.
        // Warning types
        var warningTypesString = [
           'Gewitter',
           'Sturm',
           'Regen',
           'Schnee',
           'Nebel',
           'Frost',
           'Glatteis',
           'Tauwetter',
           'Hitzewarnungen',
           'UV_Warnungen'/*,
           'Kuestenwarnungen',
           'Binnenseewarnungen'*/
        ];
        const stateAlert = // Änderungen auch in SetAlertState() anpassen
        [
           {"name":'level',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
           {"name":'type',"default":-1,"type":{ read: true, write: false, type: "number",name:''}},
           {"name":'start',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string",name:''}},
           {"name":'end',"default":null,"type":{ read: true, write: false, role: "value.datetime",type: "string", name:''}},
        ]
        {
           let stateAlertId = onClickMessageState+'alert.';
           let allStateExist = true;
           for (let b=0;b<warningTypesString.length;b++) {
               for (let a=0;a<stateAlert.length;a++)
               {
                   let stateAlertIdFull = stateAlertId+warningTypesString[b]+'.'+stateAlert[a].name;
                   stateAlert[a].type.name = stateAlertIdFull.toString();
                   if (!existsState(stateAlertIdFull)) {
                       createState(stateAlertIdFull,stateAlert[a].default, stateAlert[a].type);
                       allStateExist=false;
                   }
               }
           }
           if (allStateExist) SetAlertState();
        }
        
        // Nachrichtenversand per Click States erzeugen und subscript
        for (var a=0;a<konstanten.length;a++){
           if (!existsState(onClickMessageState+'Commands.'+konstanten[a].name)) {
               createState(onClickMessageState+'Commands.'+konstanten[a].name,false, {
                   read: true,
                   write: true,
                   desc: "Beschreibung",
                   type: "boolean",
                   role: "button",
                   def: false
               });
           }
           if (existsState(onClickMessageState+'Commands.'+konstanten[a].name)){
               subscribe({id: onClickMessageState+'Commands.'+konstanten[a].name},function(obj){
                   if (!obj.state.val) return;
                   setState(obj.id,false,true);
                   let b = obj.id.split('.');
                   let d = konstanten.findIndex(function(c){return (c.name===b[b.length-1]);})
                   if (d == -1) {log('Fehler. State nicht in Konstanten enthalten','error'); return;}
                   if ((pushdienst & konstanten[d].value) == 0) return;
                   let oldPushdienst = pushdienst;
                   pushdienst = konstanten[d].value*1;
                   for (let i=0;i<oldDescriptions.length;i++) {
                       oldHeadlines[i] = '';
                       oldDescriptions[i] = '';
                       oldBegins[i] = '';
                       oldEnds[i] = '';
                       oldData[i] = {"type":-1,"level":-1};
                   }
                   forceSpeak = forcedSpeak;
                   onClickCheckRun = true;
                   check();
                   onClickCheckRun = false;
                   forceSpeak = false;
                   pushdienst = oldPushdienst;
               })
           }
        }
        
        // Zeitsteuerung für SayIt & Alexa
        var START = new Date();
        var ENDE = new Date();
        setWeekend();
        
        function setWeekend()
        {
           if (forceSpeak) return;
           let date = new Date();
           let n = date.getDay();
           let weekend = 0;
           weekend = (n === 0 || n == 6) ? 1 : 0;
           if(weekend == 1){                     // wenn Wochenende, dann setze Start auf 9h, sonst 6:45h
               START = convertStringToDate(startTimeSpeakWeekend);
           }
           else{
               START = convertStringToDate(startTimeSpeak);
           }
           ENDE = convertStringToDate(endTimeSpeak);
        }
        
        function convertStringToDate(s) {
           if (typeof s !== 'string' ) return null;
           var e = s.split(':');
           if (!Array.isArray(e) || e.length != 2) return null;
           var d = new Date();
           d.setHours(e[0]);
           d.setMinutes(e[1]);
           d.setSeconds(0);
           return d;
        }
        
        function check() {
           if (!forcedSpeak) forceSpeak = (!startTimeSpeakWeekend||!startTimeSpeak||!endTimeSpeak);
           setWeekend();
        
           SetAlertState();
        
           let activeCount = 0;
           newDescriptions.forEach((item, i) => {if (item) activeCount++;});
        
           /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */
           if(newDescriptions.findIndex(function(a){return (!!a);})==-1 && oldDescriptions.findIndex(function(a){return (!!a);})!=-1) {
               let MeldungSDWD = 'Achtung' + '  .  ' + 'Alle Warnmeldungen des DWD wurden aufgehoben';
        
               /* Bereich für Sprachausgabe über SayIt & Alexa & Home24*/
               if ( forceSpeak || compareTime(START, ENDE, 'between')){                  // Ansage über Sayit nur im definierten Zeitbereich
                   sendMessage(pushdienst&SPEAK,'','',MeldungSDWD,'');
               }
               let pushmsg = 'Alle Warnmeldungen des DWD wurden aufgehoben';
               sendMessage(pushdienst&PUSH,'Wetterentwarnung',pushmsg,'','');
               sendMessage(pushdienst&ALLMSG,'Wetterentwarnung des DWD(iobroker)','','',pushmsg);
        
               /* alle Sicherungen Wetterwarnung löschen */
               oldHeadlines = newHeadlines.slice();
               oldDescriptions = newDescriptions.slice();
               oldBegins = newBegins.slice();
               oldEnds = newEnds.slice();
               oldData = newData.slice();
               return;
           }
        
           /* Variablen für Meldungen Text */
           var MeldungNew = '';
           /* Variablen für Meldungen Sprache */
           var MeldungSpracheDWD = [];
           var MeldungNewSprache = '';
           var MeldungOldSprache = '';
           var AllEmailMsg = '';
           var AllEmailMsgDelete = '';
        
           var headline;
           var description;
           var begin;
           var end;
           var i;
           var warn;
        
           /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */
           for(i = 0; i < newDescriptions.length; i++) {
             description = oldDescriptions[i];
             headline = oldHeadlines[i];
               if(description !== undefined && headline !== undefined && description !== '' && newDescriptions.indexOf(description) == -1 ) {
                   end = getFormatDate(oldEnds[i]);
        
                   let pushmsg = "Die Wetterwarnung " +"'"+ headline + " gültig bis " + end + "'" + " des DWD wurde aufgehoben.";
                   pushmsg += ' Insgesamt '+(activeCount==1 ?'eine gültige Warnung.':activeCount+' gültige Warnungen.');
                   AllEmailMsgDelete+=pushmsg+'\n\n';
                   sendMessage(pushdienst&PUSH,'Wetterentwarnung',pushmsg,'','');
        
                   /* Sprache: Verknüpfen aller aufgehobenen Wetterwarnungen */
                   MeldungOldSprache = headline + ' gültig bis ' + getFormatDateSpeak(end) + ' Uhr wurde aufgehoben' + '  .  ';
                   MeldungSpracheDWD.push(MeldungOldSprache);
               }
           }
           let gefahr = false;
           /* Bereich für 'Neue Amtliche Wetterwarnung' */
           for(i = 0; i < newDescriptions.length; i++) {
               headline = newHeadlines[i];
               description = newDescriptions[i];
               let level = newData[i].level;
               var instruction = newInstruction[i];
               if(description !== undefined && description !== "" && oldDescriptions.indexOf(description) == -1 ) {
                   begin = getFormatDate(new Date(newBegins[i]));
                   end = getFormatDate(new Date(newEnds[i]));
                   MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description;
                   if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNew+='\nHandlungsanweisungen: '+instruction;
                   if (activeCount>1) MeldungNew += ' Insgesamt '+activeCount+' gültige Warnungen.'
                   /* ab Level 4 zusätzlicher Hinweis */
                   if (!gefahr) gefahr=level>3;
                   let topic = (level>3)?'Wichtige Wetterwarnung':'Wetterwarnung';
        
                   sendMessage(pushdienst&PUSH,topic,MeldungNew,'','');
                   AllEmailMsg+=MeldungNew+'\n\n';
                   /* Sprache: Verknüpfen aller neuen Warnmeldungen */
        
                   var replaceDescription0 = entferneDatenpunkt(description);
                   MeldungNewSprache = (level>3)?'Achtung Unwetter ':'' + headline + " gültig vom " + getFormatDateSpeak(begin) + " Uhr, bis " + getFormatDateSpeak(end) + " Uhr. " + replaceDescription0 + '  .  ';
                   if (!!instruction && typeof instruction === 'string' && instruction.length > 2) MeldungNewSprache+='Handlungsanweisungen: '+instruction;
                   MeldungSpracheDWD.push(MeldungNewSprache);
               }
           }
           /* Bereich für Sprachausgabe */
           if (onClickCheckRun) {
               if (MeldungSpracheDWD.length==0) MeldungSpracheDWD.push('Es liegen keine Warnmeldungen des DWD vor.');
           }
           if (MeldungSpracheDWD.length>0 && (forceSpeak || compareTime(START, ENDE, 'between')) && (pushdienst & (HOMETWO+SAYIT+ALEXA))!=0 ) {
               let a=1000;
               let b = a;
               let c = a;
               while (MeldungSpracheDWD.length>0)
               {
                   let b = 60000;
                   let msgAppend = '';
                   if (MeldungSpracheDWD.length > 1) {
                       if (MeldungSpracheDWD.length-1==1) {
                           msgAppend = ' Eine weitere neue Warnung.';
                       } else {
                           msgAppend = MeldungSpracheDWD.length-1+' weitere neue Warnungen.';
                       }
                   } else {
                       if (activeCount==0) msgAppend = ' keine weitere Warnung.';
                       else {
                           if (activeCount==1) msgAppend = ' Ingesamt eine aktive Warnung.';
                           else msgAppend = ' Insgesamt '+activeCount+ 'aktive Warnungen.';
                       }
                   }
                   if((pushdienst & HOMETWO)!=0 ){
                       setTimeout(function(msg,msg2){
                         sendMessage(HOMETWO,'','',msg+msg2,'');
                       },a,MeldungSpracheDWD[0], msgAppend);
                   }
                   /* Bereich für Sprachausgabe über SayIt + Alexa */
                   if ((pushdienst & SAYIT)!=0) {
                       setTimeout(function(msg,msg2){
                         sendMessage(SAYIT,'','',msg+msg2,'');
                       },b,MeldungSpracheDWD[0], msgAppend);
                   }
                   if ((pushdienst & ALEXA)!=0) {
                       setTimeout(function(msg,msg2){
                         sendMessage(ALEXA,'','',msg+msg2,'');
                       },c,MeldungSpracheDWD[0], msgAppend);
                   }
                   a+=60000;
                   b+=45000;
                   c+=30000;
                   MeldungSpracheDWD.shift();
               }
           }
        
           AllEmailMsg+=AllEmailMsgDelete;
           if ((pushdienst & ALLMSG)!=0 && AllEmailMsg != '') {
               //sendEmail(gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",AllEmailMsg);
               sendMessage(pushdienst&ALLMSG,gefahr?"Wichtige Wetterwarnungen des DWD(iobroker)":"Wetterwarnungen des DWD(iobroker)",'','',AllEmailMsg);
           }
        
           /* Neue Werte sichern */
           oldHeadlines = newHeadlines.slice();
           oldDescriptions = newDescriptions.slice();
           oldBegins = newBegins.slice();
           oldEnds = newEnds.slice();
           oldData = newData.slice();
        }
        
        /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */
        function entferneDatenpunkt(beschreibung) {
           var rueckgabe;
           rueckgabe = beschreibung;
           try {
        
               rueckgabe = rueckgabe.replace(/\°C/g, "Grad");
               rueckgabe = rueckgabe.replace(/km\/h/g, "Kilometer pro Stunde");
               if (!WindForceDetailsSpeak) {
                   rueckgabe = rueckgabe.replace(/[0-9]+.m\/s..[0-9]+kn..Bft.[0-9]+/g, "");
               } else {
                   rueckgabe = rueckgabe.replace(/kn/g, " Knoten");
                   rueckgabe = rueckgabe.replace(/Bft/g, " Windstärke");
                   rueckgabe = rueckgabe.replace(/m\/s/g, " Meter pro Sekunde");
               }
           }
           catch(e) {log(e,'warn');}
           return rueckgabe;
        }
        
        on(/^dwd\.0\..*\.object$/, function(dp) {
           let i = getIdIndex(dp.id);
           var warn = null;
           if (dp.state.val != '') warn = JSON.parse(dp.state.val);
           warn = convertJsonDWD(warn);
           newDescriptions[i] = warn.description ;
           newHeadlines[i] = warn.headline;
           newBegins[i] = warn.start;
           newEnds[i] = warn.end;
           newInstruction[i] = warn.instruction;
           newData[i].level = warn.level;
           newData[i].type = warn.type;
           if(timer) clearTimeout(timer);
           if (autoMode) timer = setTimeout(check, 10000);
        });
        
        function convertJsonDWD(warn) {
           warn = (!warn || warn === ''? {} : warn);
           if (warn != {} && (warn.altitudeStart>maxhoehe || warn.level < minlevel)) warn = {};
           let a = warn.description === undefined ? '' : warn.description;
           let b = warn.headline === undefined ? '' : warn.headline;
           let c = warn.start === undefined ? null : warn.start||null;
           let d = warn.end === undefined ? null : warn.end||null;
           let e = warn.instruction === undefined ? '' : warn.instruction;
           let f = warn.type === undefined ? -1 : warn.type;
           let g = warn.level === undefined ? -1 : warn.level;
           return {"description":a,"headline":b,"start":c,"end":d,"instruction":e,"type":f,"level":g};
        }
        
        function getIdIndex(a) {
           a = a.split('.');
           if (a[2].length == 7) return 0
           return a[2][7];
        }
        function getFormatDate(a) {
           if (!a || a === '') return '';
           return formatDate(a.getTime(), formatierungString);
        }
        // @PARAM Rückgabe von getFormatDate
        function getFormatDateSpeak(a) {
           if (!a || a === '') return '';
           let b = a.split('.');
           let m = '';
           switch (b[1]) {
               case '01': m='Januar';break;
               case '02': m='Februar';break;
               case '03': m='März';break;
               case '04': m='April';break;
               case '05': m='Mai';break;
               case '06': m='Juni';break;
               case '07': m='Juli';break;
               case '08': m='August';break;
               case '09': m='September';break;
               case '10': m='Oktober';break;
               case '11': m='November';break;
               case '12': m='Dezember';break;
               default: m='';
           }
           b[1]=m; // setze Monatsname
           // entferne Jahr
           let c = b[2].split(' ');
           c[0]='';
           b[2] = c.join(' ');
           return b.join(' ');
        }
        
        function SetAlertState(){
           let stateAlertid = onClickMessageState+'alert.';
           for (let b=0;b<warningTypesString.length;b++)
           {
               let stateAlertIdFull = stateAlertid+warningTypesString[b]+'.';
               let AlertLevel = -1;
               let AlertType = -1;
               let AlertStart = null;
               let AlertEnd = null;
               let AlertIndex = -1;
               for (let c=0;c<newData.length;c++) {
                   if (newData[c].type == b && newData[c].level > AlertLevel) {
                       AlertLevel=newData[c].level;
                       AlertIndex=c;
                   }
               }
               if (getState(stateAlertIdFull+stateAlert[0].name).val!=AlertIndex) {
                   setState(stateAlertIdFull+stateAlert[0].name,AlertLevel);
                   setState(stateAlertIdFull+stateAlert[1].name,b);
                   setState(stateAlertIdFull+stateAlert[2].name,(AlertIndex>-1)?formatDate(new Date(newBegins[AlertIndex])):'');
                   setState(stateAlertIdFull+stateAlert[3].name,(AlertIndex>-1)?formatDate(new Date(newEnds[AlertIndex])):'');
               }
           }
        }
        
        function sendMessage(pushdienst, topic, msgsingle, msgspeak, msgall) {
         if (msgsingle) {
           if ((pushdienst & TELEGRAM)!=0) {
             if (telegramUser.length>0) {
               for (let a=0;a<telegramUser.length;a++) {
                 sendTo ("telegram.0", {user: telegramUser[a], text: msgsingle});
               }
             } else {
               sendTo ("telegram.0", msgsingle);
             }
           }
           if ((pushdienst & PUSHOVER)!=0) {
             sendTo("pushover.0", msgsingle);
           }
           if ((pushdienst & IOGO)!=0) {
             if (ioGoUser.length>0) {
               for (let a=0;a<ioGoUser.length;a++) {
                 sendTo('iogo.0', "send", {
                   user:                   ioGoUser[a],
                   text:                   topic,
                   title:                  msgsingle
                 });
               }
             } else {
               sendTo('iogo.0', "send", {
                 text:                   topic,
                 title:                  msgsingle
               });
             }
           }
           if ((pushdienst & STATE)!=0 ) {
             setState(mirrorMessageState,msgsingle,true);
           }
         }
         if(msgspeak){
           if((pushdienst & HOMETWO)!=0 ){
             for(let a=0;a<idMediaplayer.length;a++) {
               var Url2 = "http://" + idMediaplayer[a] + "/track=4fachgong.mp3|tts=" + msgspeak;
               log('Url2 :' + Url2);
               request(Url2);
             }
           }
           if ((pushdienst & SAYIT)!=0) {
             for(let a=0;a<idSayIt.length;a++) {
               setState(idSayIt[a], lautstaerke[a] + ";" + msgspeak);
             }
           }
           if ((pushdienst & ALEXA)!=0) {
        
              for(let a=0;a<idAlexaSerial.length;a++) {
                       // Wenn auf Gruppe keine Lautstärken regelung möglich
                       if (existsState(getFullId(idAlexaVolumen,idAlexaSerial[a]))) setState(getFullId(idAlexaVolumen,idAlexaSerial[a]), alexaVolumen[a]);
                       setState(getFullId(idAlexa,idAlexaSerial[a]), msgspeak);
             }
           }
         }
         if (msgall &&(pushdienst & EMAIL)!=0) {
           if (empfaengerEmailID.length>0) {
             for (let a=0;a<empfaengerEmailID.length;a++) {
               sendTo("email", senderEmailID[0]?{from: senderEmailID[0], to: empfaengerEmailID[a], subject: topic, text: msgall}:{to: empfaengerEmailID[a], subject: topic, text: msgall});
             }
           } else {
             sendTo("email", senderEmailID[0]?{from: senderEmailID[0], subject: topic, text: msgall}:{subject: topic, text: msgall});
           }
         }
        }
        
        
        

        sigi234S Online
        sigi234S Online
        sigi234
        Forum Testing Most Active
        schrieb am zuletzt editiert von sigi234
        #71

        @ticaki

        09:20:01.568	info	javascript.0 (7676) Start javascript script.js.Alexa.Ansage_DWD_16
        09:20:01.568	error	javascript.0 (7676) script.js.Alexa.Ansage_DWD_16 compile failed: at script.js.Alexa.Ansage_DWD_16:71
        09:20:32.692	info	javascript.0 (7676) Stop script script.js.Alexa.Ansage_DWD_16
        09:20:32.697	info	javascript.0 (7676) Start javascript script.js.Alexa.Ansage_DWD_16
        09:20:32.697	error	javascript.0 (7676) script.js.Alexa.Ansage_DWD_16 compile failed: at script.js.Alexa.Ansage_DWD_16:71
        

        var ioGoUser = [xxxxxx@liwest.at]; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];

        javascript.0	2020-03-02 09:31:08.165	error	(7676) at process._tickCallback (internal/process/next_tick.js:68:7)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) at promise.then (C:\Program Files\iobroker\Test\node_modules\standard-as-callback\built\index.js:19:49)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) at tryCatcher (C:\Program Files\iobroker\Test\node_modules\standard-as-callback\built\utils.js:11:23)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) at client.get (C:\Program Files\iobroker\Test\node_modules\iobroker.js-controller\lib\states\statesInRedis.js:580:17)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) at adapter.getForeignState (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1055:17)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) at createProblemObject (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1464:17)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) at prepareScript (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1411:37)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) at compile (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1188:28)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) at Object.createScript (vm.js:277:10)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) at new Script (vm.js:83:7)
        javascript.0	2020-03-02 09:31:08.165	error	(7676) SyntaxError: Invalid or unexpected token
        

        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Immer Daten sichern!

        T 1 Antwort Letzte Antwort
        0
        • sigi234S sigi234

          @ticaki

          09:20:01.568	info	javascript.0 (7676) Start javascript script.js.Alexa.Ansage_DWD_16
          09:20:01.568	error	javascript.0 (7676) script.js.Alexa.Ansage_DWD_16 compile failed: at script.js.Alexa.Ansage_DWD_16:71
          09:20:32.692	info	javascript.0 (7676) Stop script script.js.Alexa.Ansage_DWD_16
          09:20:32.697	info	javascript.0 (7676) Start javascript script.js.Alexa.Ansage_DWD_16
          09:20:32.697	error	javascript.0 (7676) script.js.Alexa.Ansage_DWD_16 compile failed: at script.js.Alexa.Ansage_DWD_16:71
          

          var ioGoUser = [xxxxxx@liwest.at]; // Einzelnutzer ['Hans']; Multinutzer ['Hans','Gretel']; Nutzer vom Adapter übernehmen [];

          javascript.0	2020-03-02 09:31:08.165	error	(7676) at process._tickCallback (internal/process/next_tick.js:68:7)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) at promise.then (C:\Program Files\iobroker\Test\node_modules\standard-as-callback\built\index.js:19:49)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) at tryCatcher (C:\Program Files\iobroker\Test\node_modules\standard-as-callback\built\utils.js:11:23)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) at client.get (C:\Program Files\iobroker\Test\node_modules\iobroker.js-controller\lib\states\statesInRedis.js:580:17)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) at adapter.getForeignState (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1055:17)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) at createProblemObject (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1464:17)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) at prepareScript (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1411:37)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) at compile (C:\Program Files\iobroker\Test\node_modules\iobroker.javascript\main.js:1188:28)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) at Object.createScript (vm.js:277:10)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) at new Script (vm.js:83:7)
          javascript.0	2020-03-02 09:31:08.165	error	(7676) SyntaxError: Invalid or unexpected token
          
          T Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von ticaki
          #72

          @sigi234
          Das ist ein Array mit Strings: ['']

          var ioGoUser = ['xxxxxx@liwest.at'];
          

          ich ändere die Vorgabe im nächsten Update in [''] aktuell würde [''] zu einem Verhalten führen das ich nicht kenne

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          M 1 Antwort Letzte Antwort
          0
          • T ticaki

            @sigi234
            Das ist ein Array mit Strings: ['']

            var ioGoUser = ['xxxxxx@liwest.at'];
            

            ich ändere die Vorgabe im nächsten Update in [''] aktuell würde [''] zu einem Verhalten führen das ich nicht kenne

            M Offline
            M Offline
            MartyBr
            schrieb am zuletzt editiert von
            #73

            @ticaki
            Ich muss bei telegram.0 die folgende Syntax einhalten:

            const MyChatId = "126373828";
            sendTo ("telegram.0", {text: pushmsg, ChatId: MyChatId});

            Du hast ja nun die Variable User bei telegram eingefügt. Kannst du bitte auch die ChatId aufnehmen?

            Gruß
            Martin


            Intel NUCs mit Proxmox / Iobroker als VM unter Debian
            Raspeberry mit USB Leseköpfen für Smartmeter
            Homematic und Homematic IP

            T 1 Antwort Letzte Antwort
            0
            • M MartyBr

              @ticaki
              Ich muss bei telegram.0 die folgende Syntax einhalten:

              const MyChatId = "126373828";
              sendTo ("telegram.0", {text: pushmsg, ChatId: MyChatId});

              Du hast ja nun die Variable User bei telegram eingefügt. Kannst du bitte auch die ChatId aufnehmen?

              T Nicht stören
              T Nicht stören
              ticaki
              schrieb am zuletzt editiert von ticaki
              #74

              @MartyBr
              sind davon mehrfache möglich?

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              1 Antwort Letzte Antwort
              0
              • T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von
                #75

                ChatID ist im Script enthalten (ungetestet)

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                M 1 Antwort Letzte Antwort
                0
                • T ticaki

                  ChatID ist im Script enthalten (ungetestet)

                  M Offline
                  M Offline
                  MartyBr
                  schrieb am zuletzt editiert von
                  #76

                  @ticaki
                  Danke, werde ich testen.

                  Gruß
                  Martin


                  Intel NUCs mit Proxmox / Iobroker als VM unter Debian
                  Raspeberry mit USB Leseköpfen für Smartmeter
                  Homematic und Homematic IP

                  1 Antwort Letzte Antwort
                  0
                  • T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von ticaki
                    #77

                    @sigi234
                    Ich hab auf Github im Test Ordner eine Betascript das aktuell DWD leicht getestet und UWZ leicht getestet unterstützt. Hab die Datenstruktur komplett umgebaut. Der Datenpath zu DWD oder UWZ ist noch nicht konfigurierbar.
                    über MODE stellt man ein was man will. Für DWD & UWZ Script 2 mal anlegen.

                    Bezogen auf das Script unter Test

                    • maxhoehe: Warnung wird gefiltert, wenn die Warnung erst bei höheren Lagen starte.
                    • minhoehe: Warnung wird gefiltert, wenn die Warnung bei niedrigeren Lagen endet.
                    • MODE Wert: 'DWD' oder 'UWZ'
                    • warnlevel: Meldungen mit zusätzlichen Hinweisen versehen z.B. eMail-Betreff "Wichtige Wetterwarnung" / UWZ und DWD benutzen nicht die gleiche Level bedeutung. DWD lvl 4-5 ist schlimm-Weltuntergang. UWZ hab ich welche mit 11-13 für starken Schneefall gesehen.
                    • Alle UWZ *.object Datenpunkte werden überwacht egal wieviele Regionen angelegt sind. Muß da in Zukunft noch eine Ausgabe für die Region einbauen.

                    Zu diesen "Höhenlagen": In jeder Warnung ist der Wert für von X Meter bis Y Meter vorgesehen. Die werden nicht grundlos mitgeschickt. Gerade wenn es große Höhenunterschiede in der Region gibt, ist es sinnvoll diese so zu setzen das es passt. Wobei Maxhoehe etwas höher und minhoehe etwas niedriger zu setzen ist.

                    Bei UWZ gibt es keine Schlagzeile wie z.B. Amtliche Warnung vor Windboen die baue ich im Code, falls eine davon falsch ist, bitte melden.

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    sigi234S 1 Antwort Letzte Antwort
                    0
                    • T ticaki

                      @sigi234
                      Ich hab auf Github im Test Ordner eine Betascript das aktuell DWD leicht getestet und UWZ leicht getestet unterstützt. Hab die Datenstruktur komplett umgebaut. Der Datenpath zu DWD oder UWZ ist noch nicht konfigurierbar.
                      über MODE stellt man ein was man will. Für DWD & UWZ Script 2 mal anlegen.

                      Bezogen auf das Script unter Test

                      • maxhoehe: Warnung wird gefiltert, wenn die Warnung erst bei höheren Lagen starte.
                      • minhoehe: Warnung wird gefiltert, wenn die Warnung bei niedrigeren Lagen endet.
                      • MODE Wert: 'DWD' oder 'UWZ'
                      • warnlevel: Meldungen mit zusätzlichen Hinweisen versehen z.B. eMail-Betreff "Wichtige Wetterwarnung" / UWZ und DWD benutzen nicht die gleiche Level bedeutung. DWD lvl 4-5 ist schlimm-Weltuntergang. UWZ hab ich welche mit 11-13 für starken Schneefall gesehen.
                      • Alle UWZ *.object Datenpunkte werden überwacht egal wieviele Regionen angelegt sind. Muß da in Zukunft noch eine Ausgabe für die Region einbauen.

                      Zu diesen "Höhenlagen": In jeder Warnung ist der Wert für von X Meter bis Y Meter vorgesehen. Die werden nicht grundlos mitgeschickt. Gerade wenn es große Höhenunterschiede in der Region gibt, ist es sinnvoll diese so zu setzen das es passt. Wobei Maxhoehe etwas höher und minhoehe etwas niedriger zu setzen ist.

                      Bei UWZ gibt es keine Schlagzeile wie z.B. Amtliche Warnung vor Windboen die baue ich im Code, falls eine davon falsch ist, bitte melden.

                      sigi234S Online
                      sigi234S Online
                      sigi234
                      Forum Testing Most Active
                      schrieb am zuletzt editiert von sigi234
                      #78

                      @ticaki

                      Super, teste jetzt. Altes Skript und Objekte löschen? Oder ist es ein eigenständiges Skript?
                      Fragen Erledigt.

                      javascript.0	2020-03-03 16:34:47.310	error	(19128) at Script.runInContext (vm.js:133:20)
                      javascript.0	2020-03-03 16:34:47.310	error	(19128) at script.js.Alexa.Ansage_UWZ:241:9
                      javascript.0	2020-03-03 16:34:47.310	error	(19128) ReferenceError: getFullId is not defined
                      javascript.0	2020-03-03 16:34:47.310	error	(19128) ^
                      javascript.0	2020-03-03 16:34:47.310	error	(19128) if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                      javascript.0	2020-03-03 16:34:47.309	error	(19128) script.js.Alexa.Ansage_UWZ: script.js.Alexa.Ansage_UWZ:241
                      
                          for (let a=0;a<idAlexaSerial.length;a++) {
                              if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                                  log('Alexa-Serial '+idAlexaSerial[a]+' ist fehlerhaft. Überpüfen!','error');
                                  stopScript();
                              }
                          }
                      }
                      

                      2= 241

                      Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                      Immer Daten sichern!

                      T 1 Antwort Letzte Antwort
                      0
                      • T Nicht stören
                        T Nicht stören
                        ticaki
                        schrieb am zuletzt editiert von
                        #79

                        Oh hab ich nach dem Test noch nen Fehler eingebaut. Guck ich mir heute Abend an

                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                        Spenden

                        sigi234S 1 Antwort Letzte Antwort
                        0
                        • T ticaki

                          Oh hab ich nach dem Test noch nen Fehler eingebaut. Guck ich mir heute Abend an

                          sigi234S Online
                          sigi234S Online
                          sigi234
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #80

                          @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

                          Oh hab ich nach dem Test noch nen Fehler eingebaut. Guck ich mir heute Abend an

                          Danke dir.

                          Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                          Immer Daten sichern!

                          1 Antwort Letzte Antwort
                          0
                          • sigi234S sigi234

                            @ticaki

                            Super, teste jetzt. Altes Skript und Objekte löschen? Oder ist es ein eigenständiges Skript?
                            Fragen Erledigt.

                            javascript.0	2020-03-03 16:34:47.310	error	(19128) at Script.runInContext (vm.js:133:20)
                            javascript.0	2020-03-03 16:34:47.310	error	(19128) at script.js.Alexa.Ansage_UWZ:241:9
                            javascript.0	2020-03-03 16:34:47.310	error	(19128) ReferenceError: getFullId is not defined
                            javascript.0	2020-03-03 16:34:47.310	error	(19128) ^
                            javascript.0	2020-03-03 16:34:47.310	error	(19128) if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                            javascript.0	2020-03-03 16:34:47.309	error	(19128) script.js.Alexa.Ansage_UWZ: script.js.Alexa.Ansage_UWZ:241
                            
                                for (let a=0;a<idAlexaSerial.length;a++) {
                                    if (!existsState(getFullId(idAlexa,idAlexaSerial[a]))) {
                                        log('Alexa-Serial '+idAlexaSerial[a]+' ist fehlerhaft. Überpüfen!','error');
                                        stopScript();
                                    }
                                }
                            }
                            

                            2= 241

                            T Nicht stören
                            T Nicht stören
                            ticaki
                            schrieb am zuletzt editiert von ticaki
                            #81

                            @sigi234

                            Fehler gefunden, haben nur rund 200 Zeilen code gefehlt... hust :grin:
                            Sorry war wohl unaufmerksam beim copy&paste

                            @all
                            Multi-Echoausgabe mit Alexa funktioniert mit Echo ab 2gen und Echo dot ab 3gen. Hab jetzt einen 3er in der Küche :)

                            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                            Spenden

                            sigi234S LatziL 2 Antworten Letzte Antwort
                            0
                            • T ticaki

                              @sigi234

                              Fehler gefunden, haben nur rund 200 Zeilen code gefehlt... hust :grin:
                              Sorry war wohl unaufmerksam beim copy&paste

                              @all
                              Multi-Echoausgabe mit Alexa funktioniert mit Echo ab 2gen und Echo dot ab 3gen. Hab jetzt einen 3er in der Küche :)

                              sigi234S Online
                              sigi234S Online
                              sigi234
                              Forum Testing Most Active
                              schrieb am zuletzt editiert von
                              #82

                              @ticaki

                              Schaut gut aus.

                              Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                              Immer Daten sichern!

                              1 Antwort Letzte Antwort
                              0
                              • T ticaki

                                @sigi234

                                Fehler gefunden, haben nur rund 200 Zeilen code gefehlt... hust :grin:
                                Sorry war wohl unaufmerksam beim copy&paste

                                @all
                                Multi-Echoausgabe mit Alexa funktioniert mit Echo ab 2gen und Echo dot ab 3gen. Hab jetzt einen 3er in der Küche :)

                                LatziL Online
                                LatziL Online
                                Latzi
                                schrieb am zuletzt editiert von
                                #83

                                @ticaki ich verwende UWZ, bei mir kommt nichts über telegram (weder User noch ChatID ändern das Verhalten), alexa funktioniert wenn ich den DP javascript.0.UWZ_Script_alpha.Commands.alexa ansteuere.
                                Sollte doch bei telegram auch so laufen, oder muss ein Text im DP javascript.0.UWZ_Script_alpha.message stehen?
                                Was mache ich falsch???

                                T 1 Antwort Letzte Antwort
                                0
                                • LatziL Latzi

                                  @ticaki ich verwende UWZ, bei mir kommt nichts über telegram (weder User noch ChatID ändern das Verhalten), alexa funktioniert wenn ich den DP javascript.0.UWZ_Script_alpha.Commands.alexa ansteuere.
                                  Sollte doch bei telegram auch so laufen, oder muss ein Text im DP javascript.0.UWZ_Script_alpha.message stehen?
                                  Was mache ich falsch???

                                  T Nicht stören
                                  T Nicht stören
                                  ticaki
                                  schrieb am zuletzt editiert von ticaki
                                  #84

                                  @Latzi
                                  Wenn keine Warnmeldungen vorliegen und du über Stats einen Bericht auslöst ist das ein Sonderfall Zur Zeit wird dieser Fall nur für Sprachausgaben behandelt. Kann ich aber fix erweitern, wenn bedarf besteht.

                                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                  Spenden

                                  sigi234S LatziL 2 Antworten Letzte Antwort
                                  0
                                  • T ticaki

                                    @Latzi
                                    Wenn keine Warnmeldungen vorliegen und du über Stats einen Bericht auslöst ist das ein Sonderfall Zur Zeit wird dieser Fall nur für Sprachausgaben behandelt. Kann ich aber fix erweitern, wenn bedarf besteht.

                                    sigi234S Online
                                    sigi234S Online
                                    sigi234
                                    Forum Testing Most Active
                                    schrieb am zuletzt editiert von
                                    #85

                                    @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

                                    Kann ich aber fix erweitern, wenn bedarf besteht.

                                    Bitte, Danke

                                    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                    Immer Daten sichern!

                                    T 1 Antwort Letzte Antwort
                                    0
                                    • T ticaki

                                      @Latzi
                                      Wenn keine Warnmeldungen vorliegen und du über Stats einen Bericht auslöst ist das ein Sonderfall Zur Zeit wird dieser Fall nur für Sprachausgaben behandelt. Kann ich aber fix erweitern, wenn bedarf besteht.

                                      LatziL Online
                                      LatziL Online
                                      Latzi
                                      schrieb am zuletzt editiert von Latzi
                                      #86

                                      @ticaki alles klar, vielen Dank!!! Erweiterung ist nicht notwendig, dachte nur ich kann damit die Funktion testen.
                                      edit: Wenn´s @sigi234 brauchen kann, nehm ich´s auch dankend an ;-)

                                      T 1 Antwort Letzte Antwort
                                      0
                                      • LatziL Latzi

                                        @ticaki alles klar, vielen Dank!!! Erweiterung ist nicht notwendig, dachte nur ich kann damit die Funktion testen.
                                        edit: Wenn´s @sigi234 brauchen kann, nehm ich´s auch dankend an ;-)

                                        T Nicht stören
                                        T Nicht stören
                                        ticaki
                                        schrieb am zuletzt editiert von
                                        #87

                                        @Latzi
                                        UWZDE48653 da gibt es eine Warnung die ist noch bis 21:20 gültig stells gerade um und du solltest in 15-25 Sekunden die Warnung haben

                                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                        Spenden

                                        LatziL 1 Antwort Letzte Antwort
                                        0
                                        • sigi234S sigi234

                                          @ticaki sagte in [Script] DWD Warnungen als Pushnachrichten:

                                          Kann ich aber fix erweitern, wenn bedarf besteht.

                                          Bitte, Danke

                                          T Nicht stören
                                          T Nicht stören
                                          ticaki
                                          schrieb am zuletzt editiert von
                                          #88

                                          @sigi234
                                          ok mache ich... Done

                                          • onClick löst "Alle Warnungen aufgehoben" auf allen Schienen aus.
                                          • Variablen umbenannt
                                          • einzahl/mehrzahl korrigiert in Nachrichten

                                          Und um das Update zu erleichtern. Einfach ab diesem Abschnitt alles kopieren. Ich erwähne schon wenn ich neue Einstellungen bereitstelle :)

                                          /* ************************************************************************* */
                                          /* ************************************************************************* */
                                          /* ************************************************************************* */
                                          /*                       Konfiguration Ende                                  */
                                          /* ************************************************************************* */
                                          /*        Keine Anpassungen ab hier, außer du weißt was du tuest             */
                                          /* ************************************************************************* */
                                          /* ************************************************************************* */
                                          /* ************************************************************************* */
                                          

                                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                          Spenden

                                          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

                                          821

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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