NEWS
DWD Warnung als Telegramm
-
Ich will mir, wenn es eine Wetterwarnung gibt ein Telegramm zusenden lassen.
Ebenso wenn die Warnung aufgehoben wurde.
Das funktioniert auch, allerdings nur bedingt.
Ich bekomme ein Telegramm in dem der erste Teil mit Beginn und Ende enthalten ist.
Der Teil in dem text, Headline und Description stehen sollte fehlt. (wobei unter Objekten in diesen etwas drinnen steht)
Telegramm sieht so aus:
"Achtung Wetterwarnungen gültig vom 13.12.2016 05:22 bis 13.12.2016 10:00 : "
Kann sich das mal jemand ansehen und evtl. korrigieren ?
var Severity = "dwd.0.warning.severity"/*Warning severity*/; on(Severity, function (obj){ if (obj.newState.val !==0) { var Begin = getState("dwd.0.warning.begin"/*Warning begin*/).val; var End = getState("dwd.0.warning.end"/*Warning end*/).val; var text = getState("dwd.0.warning.text"/*Warning text*/).val; var Headline = getState("dwd.0.warning.headline"/*Warning headline*/).val; var Description = getState("dwd.0.warning.description"/*Warning description*/).val; var DWD_telegramm = "Achtung Wetterwarnungen " + Headline + " gültig vom " + Begin + " bis " + End + ": " + Description ; sendTo ("telegram.0", DWD_telegramm); //sendTo('telegram.0', "Wetterwarnungen " + ': ' + text + " gültig vom " + Begin + " bis " + End + ': ' + Description); //setState (idSayIt2, "Achtung Wetterwarnungen " + Headline + " gültig vom " + Begin + " bis " + End + ': ' + Description); } if (obj.newState.val === 0) { sendTo ("telegram.0", "Alle Wetterwarnungen des Deutschen Wetterdienstes wurden aufgehoben") ; //sendTo('telegram.0', "de;80;Alle Wetterwarnungen des Deutschen Wetterdienstes wurden aufgehoben") ; } //log ("Achtung Wetterwarnungen " + Headline + " gültig vom " + Begin + " bis " + End + ': ' + Description); log ( "Wetterwarnungen " + text + " gültig vom " + Begin + " bis " + End + ': ' + Description); });
-
Funktioniert bei mir einwandfrei.
Folgendes ist mir aufgefallen:
1.) Der Text per Telegram und der Logtext sind unterschiedlich, da Du einmal "Description" und einmal "Text" verwendest.
2.) Die Description ist aber genau das, was man eigentlich will, die Meldung im Telegram ist perfekt.
3.) Der Logtext wird in der normalen Anzeige abgeschnitten, was mich selber wundert. Geht man mit der Maus ohne klicken rauf, zeigt die Hoverfunktion aber den gesamten text.
<u>Meine Ausgabe sieht so aus:</u> ````
Achtung Wetterwarnungen
Amtliche WARNUNG vor FROST gültig vom 14.12.2016 18:00 bis 15.12.2016 11:00: Es tritt leichter Frost zwischen 0 °C und -3 °C auf.Man kann schön testen, indem man bei den Objecten die Severity verändert. So muss man nicht auf echte Änderungen warten. Schaue es Dir also nochmal an. Das Skript ist in Ordnung. So long, Fitti
-
Falls es doch nicht klappt…
Nur eine Vermutung...
kann es vielleicht an der asyncronen Abarbeitung liegen?
Das telegram wird geschickt, aber die Werte sind noch nicht gefüllt?
-
Da sind immer Werte drinnen. Außer beim allersten Start. Sie werden bei Änderungen über schrieben.
Weiterhin triggert man ja auf eine Änderung.
-
Falls es doch nicht klappt…
Nur eine Vermutung...
kann es vielleicht an der asyncronen Abarbeitung liegen?
Das telegram wird geschickt, aber die Werte sind noch nicht gefüllt? `
Genau das ist es wohl.
Habe die Bedingung zum Auslösen händisch geändert.
Die Variablen sind durch eine momentan anstehende Warnung bereits gefüllt.
Dann kommt auch der ganze Text per Telegramm an.
Also müsste wohl eine Verzögerung in das Script ?
Kann mir (als Vollnoob) jemand zeigen an welcher Stelle diese am besten rein sollte und wie diese auszusehen hat ?
-
Falls es doch nicht klappt…
Nur eine Vermutung...
kann es vielleicht an der asyncronen Abarbeitung liegen?
Das telegram wird geschickt, aber die Werte sind noch nicht gefüllt? `
Genau das ist es wohl.
Habe die Bedingung zum Auslösen händisch geändert.
Die Variablen sind durch eine momentan anstehende Warnung bereits gefüllt.
Dann kommt auch der ganze Text per Telegramm an.
Also müsste wohl eine Verzögerung in das Script ?
Kann mir (als Vollnoob) jemand zeigen an welcher Stelle diese am besten rein sollte und wie diese auszusehen hat ? `
Hast du die Verzögerung inzwischen eingebaut? Habe dein oberes Script auch seit paar Wochen im Einsatz. -
Falls es doch nicht klappt…
Nur eine Vermutung...
kann es vielleicht an der asyncronen Abarbeitung liegen?
Das telegram wird geschickt, aber die Werte sind noch nicht gefüllt? `
Genau das ist es wohl.
Habe die Bedingung zum Auslösen händisch geändert.
Die Variablen sind durch eine momentan anstehende Warnung bereits gefüllt.
Dann kommt auch der ganze Text per Telegramm an.
Also müsste wohl eine Verzögerung in das Script ?
Kann mir (als Vollnoob) jemand zeigen an welcher Stelle diese am besten rein sollte und wie diese auszusehen hat ?
Hast du die Verzögerung inzwischen eingebaut? Habe dein oberes Script auch seit paar Wochen im Einsatz.
Angeregt durch den thread http://forum.iobroker.net/viewtopic.php?f=21&t=4622 habe ich etwas rumprobiert, aber ohne Erfolg.Habe dann versucht mit Blockly.
Für den Bereich "1. mache" hinter dem "timeout" von 10s muss noch was rein.Und zwar soll an telegram geschickt werden die Daten vom DWD-Adapter:
dwd.0.warning.begin
dwd.0.warning.end
dwd.0.warning.text
dwd.0.warning.headline
dwd.0.warning.description
Wie übergebe ich diese Werte über Blockly an telegram?
Hier mein bisheriger Block zum Importieren:
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="Za9:z_OdHrl8gT]^gQ[c" x="-562" y="-237"><mutation items="1"></mutation>
<field name="CONDITION">ne</field><value name="OID0"><shadow type="field_oid" id="{YQ%X[0%aZ?wT=y5x(E-"><field name="oid">dwd.0.warning.severity</field></shadow></value> <statement name="STATEMENT"><block type="controls_if" id="plycChL,3pMlxYR65=0r"><mutation elseif="1"></mutation> <value name="IF0"><block type="logic_compare" id="S+LPUIh7VMv@[]rVKTyz"><field name="OP">NEQ</field> <value name="A"><block type="get_value" id="_4aPvN2IM%4J:.YTPNEt"><field name="ATTR">val</field> <field name="OID">dwd.0.warning.severity</field></block></value> <value name="B"><block type="math_number" id="cI~Jnwi%eY+-81OZ81c2"><field name="NUM">0</field></block></value></block></value> <statement name="DO0"><block type="timeouts_settimeout" id="A?rWXoM=A?4m6iP3sK8V"><field name="NAME">timeout</field> <field name="DELAY">10000</field></block></statement> <value name="IF1"><block type="logic_compare" id="[qlBv{(7-QMPq`|?^vuz"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="{{iqDnb:d^{~VF1f}K!A"><field name="ATTR">val</field> <field name="OID">dwd.0.warning.severity</field></block></value> <value name="B"><block type="math_number" id="F,+_tEi%aV/0!K)czU8n"><field name="NUM">0</field></block></value></block></value> <statement name="DO1"><block type="telegram" id="bj;-+)BQ+pYRIL#wkOj?"><field name="INSTANCE">.1</field> <value name="MESSAGE"><shadow type="text" id="rfJDep:!7yaK~PbK.h%B"><field name="TEXT">Alle Wetterwarnungen des Deutschen Wetterdienstes wurden aufgehoben</field></shadow></value></block></statement></block></statement></block></xml>
EDIT: der Trigger muss auf "aktualisiert" anstatt "geändert" eingestellt sein!
-
Falls es doch nicht klappt…
Nur eine Vermutung...
kann es vielleicht an der asyncronen Abarbeitung liegen?
Das telegram wird geschickt, aber die Werte sind noch nicht gefüllt? `
Genau das ist es wohl.
Habe die Bedingung zum Auslösen händisch geändert.
Die Variablen sind durch eine momentan anstehende Warnung bereits gefüllt.
Dann kommt auch der ganze Text per Telegramm an.
Also müsste wohl eine Verzögerung in das Script ?
Kann mir (als Vollnoob) jemand zeigen an welcher Stelle diese am besten rein sollte und wie diese auszusehen hat ? `
Vielleicht so:var Severity = "dwd.0.warning.severity"/*Warning severity*/; on(Severity, function (obj){ if (obj.newState.val !==0) { var Begin = getState("dwd.0.warning.begin"/*Warning begin*/).val; var End = getState("dwd.0.warning.end"/*Warning end*/).val; var text = getState("dwd.0.warning.text"/*Warning text*/).val; var Headline = getState("dwd.0.warning.headline"/*Warning headline*/).val; var Description = getState("dwd.0.warning.description"/*Warning description*/).val; var DWD_telegramm = "Achtung Wetterwarnungen " + Headline + " gültig vom " + Begin + " bis " + End + ": " + Description ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm); //sendTo('telegram.0', "Wetterwarnungen " + ': ' + text + " gültig vom " + Begin + " bis " + End + ': ' + Description); //setState (idSayIt2, "Achtung Wetterwarnungen " + Headline + " gültig vom " + Begin + " bis " + End + ': ' + Description); }, 1000); } if (obj.newState.val === 0) { sendTo ("telegram.0", "Alle Wetterwarnungen des Deutschen Wetterdienstes wurden aufgehoben") ; //sendTo('telegram.0', "de;80;Alle Wetterwarnungen des Deutschen Wetterdienstes wurden aufgehoben") ; } //log ("Achtung Wetterwarnungen " + Headline + " gültig vom " + Begin + " bis " + End + ': ' + Description); log ( "Wetterwarnungen " + text + " gültig vom " + Begin + " bis " + End + ': ' + Description); });
-
Also ich habe mittlerweile ne Lösung für das Problem! Ich stelle später mal das Script hier rein wenn es gewünscht ist!
Gruß Johnny
-
Hallo,
hier eine mögliche Lösung
~~![](</s><URL url=)<link_text text="http://uploads.tapatalk-cdn.com/2017010 ... 482b62.jpg">http://uploads.tapatalk-cdn.com/20170107/ee6a0a17c5f0b3e1500b4ce092482b62.jpg</link_text>" />
Gruß Sven
Gesendet von iPhone mit Tapatalk~~
-
Also ich habe mittlerweile ne Lösung für das Problem! Ich stelle später mal das Script hier rein wenn es gewünscht ist!
Gruß Johnny `
Natürlich. Immer her damit! -
Hallo,
hier eine mögliche Lösung
~~![](</s><URL url=)<link_text text="http://uploads.tapatalk-cdn.com/2017010 ... 482b62.jpg">http://uploads.tapatalk-cdn.com/20170107/ee6a0a17c5f0b3e1500b4ce092482b62.jpg</link_text>" />
Gruß Sven
Gesendet von iPhone mit Tapatalk~~ `
Danke. Wieder was für Blockly gelernt. -
So, hier mein Lösungsansatz.
!
/* Script zum Übertragen der DWD-Wetterwarnungen an Telegram */ ! var idWarnung = "dwd.0.warning.description"; var idWarnung1 = "dwd.0.warning1.description"; var idWarnung2 = "dwd.0.warning2.description"; ! function check(){ var Warnung = getState(idWarnung).val; if (Warnung !== "") { var Begin = getState("dwd.0.warning.begin").val; var End = getState("dwd.0.warning.end").val; var text = getState("dwd.0.warning.text").val; var Headline = getState("dwd.0.warning.headline").val; var Description = getState("dwd.0.warning.description").val; var DWD_telegramm = Headline + "\ngültig vom " + Begin + " bis " + End + "\n" + Description ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm); }, 1 * 1000); } else { sendTo ("telegram.0", "Alle Wetterwarnungen des Deutschen Wetterdienstes wurden aufgehoben") ; } } ! function check1(){ var Warnung1 = getState(idWarnung1).val; if (Warnung1 !== "") { var Begin = getState("dwd.0.warning1.begin").val; var End = getState("dwd.0.warning1.end").val; var text = getState("dwd.0.warning1.text").val; var Headline = getState("dwd.0.warning1.headline").val; var Description = getState("dwd.0.warning1.description").val; var DWD_telegramm = Headline + "\ngültig vom " + Begin + " bis " + End + "\n" + Description ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm); }, 1 * 1000); } else { sendTo ("telegram.0", "Wetterwarnung No.2 des Deutschen Wetterdienstes wurden aufgehoben") ; } } ! function check2(){ var Warnung2 = getState(idWarnung2).val; if (Warnung2 !== "") { var Begin = getState("dwd.0.warning2.begin").val; var End = getState("dwd.0.warning2.end").val; var text = getState("dwd.0.warning2.text").val; var Headline = getState("dwd.0.warning2.headline").val; var Description = getState("dwd.0.warning2.description").val; var DWD_telegramm = Headline + "\ngültig vom " + Begin + " bis " + End + "\n" + Description ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm); }, 1 * 1000); } else { sendTo ("telegram.0", "Wetterwarnung No.3 des Deutschen Wetterdienstes wurden aufgehoben") ; } } ! on(idWarnung, function (obj){ if (obj.newState.val !== obj.oldState.val) { check(); } }); ! on(idWarnung1, function (obj){ if (obj.newState.val !== obj.oldState.val) { check1(); } }); ! on(idWarnung2, function (obj){ if (obj.newState.val !== obj.oldState.val) { check2(); } }); !
Bei mir klappt es einwandfrei.
Bis jetzt fg
Gruß
Johnny
-
So, hier mein Lösungsansatz.
!
/* Script zum Übertragen der DWD-Wetterwarnungen an Telegram */ ! var idWarnung = "dwd.0.warning.description"; var idWarnung1 = "dwd.0.warning1.description"; var idWarnung2 = "dwd.0.warning2.description"; ! function check(){ var Warnung = getState(idWarnung).val; if (Warnung !== "") { var Begin = getState("dwd.0.warning.begin").val; var End = getState("dwd.0.warning.end").val; var text = getState("dwd.0.warning.text").val; var Headline = getState("dwd.0.warning.headline").val; var Description = getState("dwd.0.warning.description").val; var DWD_telegramm = Headline + "\ngültig vom " + Begin + " bis " + End + "\n" + Description ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm); }, 1 * 1000); } else { sendTo ("telegram.0", "Alle Wetterwarnungen des Deutschen Wetterdienstes wurden aufgehoben") ; } } ! function check1(){ var Warnung1 = getState(idWarnung1).val; if (Warnung1 !== "") { var Begin = getState("dwd.0.warning1.begin").val; var End = getState("dwd.0.warning1.end").val; var text = getState("dwd.0.warning1.text").val; var Headline = getState("dwd.0.warning1.headline").val; var Description = getState("dwd.0.warning1.description").val; var DWD_telegramm = Headline + "\ngültig vom " + Begin + " bis " + End + "\n" + Description ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm); }, 1 * 1000); } else { sendTo ("telegram.0", "Wetterwarnung No.2 des Deutschen Wetterdienstes wurden aufgehoben") ; } } ! function check2(){ var Warnung2 = getState(idWarnung2).val; if (Warnung2 !== "") { var Begin = getState("dwd.0.warning2.begin").val; var End = getState("dwd.0.warning2.end").val; var text = getState("dwd.0.warning2.text").val; var Headline = getState("dwd.0.warning2.headline").val; var Description = getState("dwd.0.warning2.description").val; var DWD_telegramm = Headline + "\ngültig vom " + Begin + " bis " + End + "\n" + Description ; setTimeout(function() { sendTo ("telegram.0", DWD_telegramm); }, 1 * 1000); } else { sendTo ("telegram.0", "Wetterwarnung No.3 des Deutschen Wetterdienstes wurden aufgehoben") ; } } ! on(idWarnung, function (obj){ if (obj.newState.val !== obj.oldState.val) { check(); } }); ! on(idWarnung1, function (obj){ if (obj.newState.val !== obj.oldState.val) { check1(); } }); ! on(idWarnung2, function (obj){ if (obj.newState.val !== obj.oldState.val) { check2(); } }); !
Bei mir klappt es einwandfrei.
Bis jetzt fg
Gruß
Johnny `
Sauber! Werde ich wohl übernehmen wegen der 3 Wetter-Warnungen.Ansonsten, mit dem Blockly hat es auch funktioniert:
1146_unbenannt.jpg -
Sauber! Werde ich wohl übernehmen wegen der 3 Wetter-Warnungen. `
[Spielverderber_on]Wir hatten heute morgen 4 Wetterwarnungen, von denen die ersten drei gelb, die vierte rot war
[Spielverderber_off]
Gruß
Rainer
-
Ich erweitere Blockly grade für die 3 Warnungsstufen.
Poste es wenn es fertig ist
Gruß Sven
Gesendet von iPhone mit Tapatalk
-
[offtopic]
Ich will in Österreich auch so einen tollen gratis Wetterwarndienst.
[/offtopic]
-
Meins kann man auch ohne probleme auf eine Wetterwarnung reduzieren oder auf 10 erhöhen. Wie man es am liebsten will.
Ist im Script glaube ich selbsterklärend.
Da muss mal also keinen Mädchenmodus (Spielverderber) anwenden… Lach
-
So nach etwas Pause bin ich auch wieder da und will mich erst mal bedanken.
Habe das Skript von PrinzEisenherz1 auf 4 Meldungen erweitert, läuft bisher ohne Probleme.
Gesendet von iPhone mit Tapatalk
-
Freut mich das es klappt bei dir.
Ist zwar noch nicht ganz perfekt das Script aber nach m Urlaub setz ich mich nochmal ran.
Hab da noch ein zwei Ideen.