NEWS
DWD Warnungen ein/ausblenden
-
Hallo,
ich möchte gerne meine Wetterwarnungen auf dem Startbildschirm "Home" anzeigen lassen wenn es neue Warnungen gibt.
Vielleicht auch als Popup… Da diese Meldungen aber über den anderen Informationen liegen sollen, müsste es eine Funktion "schließen" geben, damit ich die Infos darunter auch bei aktiver Warnung noch lesen kann.
Nun haben die DWD Informationen aus dem Adapter ja keine Information, die als true oder false steht um Meldungen zu erkennen und damit die Variable für einbelden oder nicht.
Ich nutze zur Zeit ja das Script für Erkennung meines Briefkastens, das sollte doch nach dem gleichen Prinzip funktionieren oder?
Ich habe also eine neue Seite angelegt die DWD heißt und die dann eingeblendet werden soll...
Hier das Script:
/* Oeffnungen zaehlen und in VIS anzeigen für hofi77 http://forum.iobroker.net/viewtopic.php?f=21&t=1703#p14520 Bitte var idBewegungsmelder = 'hm-rpc.0.Mxxxxxxxxxx.1.STATE', anpassen mit eigener Seriennummer erstellt: 14.11.2015 von Pix */ createState('VIS.Briefkasten_voll_zeigen', false, { //umbenennen in ('VIS.DWD_Warnungen', false, { read: true, write: true, type: 'boolean', name: 'Briefkasten voll in VIS Widget anzeigen', //umbenennen in name: 'DWD_Warnungen Widget anzeigen', desc: 'Steuervariable für VIS Widget Sichtbarkeit' }); createState('VIS.Briefwürfe_zaehlen', 0, { //Dieser Absatz müsste doch überflüssig sein oder? read: true, write: true, type: 'number', name: 'Briefwürfe zählen', desc: 'Counter für Briefwürfe, wird mit schedule zurückgesetzt' }); var idBewegungsmelder = 'hm-rpc.0.MEQ0215699.1.STATE', //muss heißen var idDWDWarnungen = '???', idCountMotion = 'VIS.Briefwürfe_zaehlen', //Überflüssig idShowMotion = 'VIS.Briefkasten_voll_zeigen'; //Überflüssig on({ id: idBewegungsmelder, //umbenennen id: idDWDWarnungen, val: true }, function (obj) { var counter = getState(idCountMotion).val; // bisherige Zahl aus Variable einlesen //Überflüssig setState(idCountMotion, ++counter); // eins hochzählen //Überflüssig setState(idShowMotion, true); // Steuerung VIS-Widget Sichtrbarkeit auf wahr //Überflüssig // setStateDelayed(idShowMotion, false, 10000); // nach 10.000 ms wieder ausblenden //Überflüssig }); on({ id: "hm-rpc.0.MEQ0215699.3.STATE", // Hier fehlt mir die Idee val: true // hier ggf. false eintragen. Abhängig davon, ob Tür offen = true oder false //belibt so }, function (obj) { //bleibt so setState(idCountMotion, 0); // reset //bleibt so setState(idShowMotion, false); // Steuerung VIS-Widget Sichtrbarkeit auf aus //bleibt so }); on(idBewegungsmelder, function (obj) { //umbenennen on(idDWDWarnungen, function (obj) { log('Briefkasten betätigt, View wird gewechselt'); //umbenennen DWD wird gewechselt setState ('vis.0.control.command', {instance: 'FFFFFFFF', command: 'cmd', data: 'Haupt'}); // hier den Namen der Ziel-View eintragen });
Kann mir jemand sagen an welchen stelle das so möglich ist, oder wo etwas geändert werden muss? Ich möchte nämlich gerne verstehen was ich ändern muss um damit selbst meine Scripte ändern zu können.
Vielen Dank schonmal
Gruß Sven
-
Ich mache das wie folgt:
Wetter Widget ist nur sichtbar wenn ein eigens erstellter Datenpunkt "Wetterwarnung_Bestaetigung" true ist. Der Datenpunkt wird über ein Script gesteuert. Gibt es eine neue Warnung oder Änderung einer bestehenden, wird der Datenpunkt auf true gesetzt. Über dem Wetter Widget liegt ein weiteres, transparentes Widget mit dem ich den Wert von "Wetterwarnung_Bestaetigung" manuell auf false setzen kann (bestätigen). Das transparente Widget ist ebenfalls nur sichtbar wenn der Datenpunkt true ist.
Zusätzlich habe ich auch noch ein Widget mit dem ich die Wetterwarnung wieder anzeigen kann (Datenpunkt auf false setzen).
MfG, Andre
Geschrieben mit Tapatalk
-
Hallo Andre,
vielen Dank für deine Beschreibung. Ich habe verstanden wie du das meinst, allerdings kann ich es noch nicht ganz umsetzen.
Bist du so nett und postest einemmal deine zugehörigen scripte? Ich dachte nämlich das ich das was du beschrieben hast mit dem Script oben schon ähnlich abgebildet hatte. Allerdings klappte das nicht.
Gruß Sven
Gesendet von iPhone mit Tapatalk
-
Also hier gleich mal vorweg meine Widgets:
!
[{"tpl":"tplDwdAdapter","data":{"visibility-cond":"==","visibility-val":"false","oid-begin":"dwd.0.warning.begin","oid-end":"dwd.0.warning.end","oid-headline":"dwd.0.warning.headline","oid":"dwd.0.warning.description","oid-severity":"dwd.0.warning.severity","visibility-oid":"javascript.0.vis.wetterwarnung.bestaetigung1","name":"Popup - Wetterwarnung 1","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"235px","top":"635px","color":"","width":"895px","height":"128px","background-color":"","padding":"","margin-top":"","font-size":"medium","z-index":"10","border-radius":"25px","border-style":"none","padding-top":""},"widgetSet":"dwd"},{"tpl":"tplMetroTileToggle","data":{"oid":"javascript.0.vis.wetterwarnung.bestaetigung1","visibility-cond":"==","visibility-val":"false","hover":false,"transform":false,"bg_class_false":"","bg_class_true":"","icon_class_false":"","icon_class_true":"","icon_badge_false":"","icon_badge_true":"","badge_bg_class_false":"","badge_bg_class_true":"","brand_bg_class_false":"","brand_bg_class_true":"","badge_top":"0","badge_left":"0","gestures-offsetX":0,"gestures-offsetY":0,"visibility-oid":"javascript.0.vis.wetterwarnung.bestaetigung1","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"name":"Popup - Bestätigung Wetterwarnung 1"},"style":{"left":"235px","top":"635px","padding":"0px","width":"895px","height":"128px","z-index":"11","opacity":"0"},"widgetSet":"metro"}] !
Zwei Widgets. Das DWD Widget für die Warnung selbst, das Tile Toggle Widget zum manuellen bestätigen der Warnung oben drüber.Mit dem Script wird es jetzt ein bisschen komplizierter.
Da ich mir bis zu drei Wetterwarnungen anzeigen lasse, ebenso wie eine Meldung "Keine Wetterwarnungen vorhanden", ist in dem Script auch noch eine Variable enthalten, die mir Sagt ob überhaupt eine Wetterwarnung vorhanden ist.
Hier mal das Script mit kurzen Kommentaren:
!
// Datenpunkte anlegen createState('vis.wetterwarnung.vorhanden', false, {name: 'Liegt mindestens eine Wetterwarnung vor?'}); // Variable für "Ist eine Wetterwarnung vorhanden?" createState('vis.wetterwarnung.bestaetigung1', false, {name: 'Bestätigung der Wetterwarnung1'}); // Variablen für die Bestätigung und damit die Sichtbarkeit der einzelnen Warnungen createState('vis.wetterwarnung.bestaetigung2', false, {name: 'Bestätigung der Wetterwarnung2'}); createState('vis.wetterwarnung.bestaetigung3', false, {name: 'Bestätigung der Wetterwarnung3'}); ! // Datenpunkt-IDs var idVorhanden = "vis.wetterwarnung.vorhanden"; var idBestaetigung1 = "vis.wetterwarnung.bestaetigung1"; var idWarnung1 = "dwd.0.warning.severity"; var idBestaetigung2 = "vis.wetterwarnung.bestaetigung2"; var idWarnung2 = "dwd.0.warning2.severity"; var idBestaetigung3 = "vis.wetterwarnung.bestaetigung3"; var idWarnung3 = "dwd.0.warning3.severity"; ! // Variablendeklaration und Initialisierung bei Scriptstart var stateVorhanden = getState(idVorhanden).val; var stateBestaetigung1 = getState(idBestaetigung1).val; var stateWarnung1 = getState(idWarnung1).val; var stateBestaetigung2 = getState(idBestaetigung2).val; var stateWarnung2 = getState(idWarnung1).val; var stateBestaetigung3 = getState(idBestaetigung3).val; var stateWarnung3 = getState(idWarnung1).val; ! // Funktion zum Ermitteln ob Wetterwarnungen vorliegen function setvorhanden() { if (stateWarnung1 !== 0 || stateWarnung2 !== 0 || stateWarnung3 !== 0) { // Wenn severity bei einer Warnung ungleich 0, dann liegt mindestens eine Warnung vor. setState(idVorhanden, true); } else { setState(idVorhanden, false); } } ! // Funktionsaufruf bei Scriptstart setvorhanden(); ! // Funktionsaufruf bei Änderung der Stati on(idWarnung1, function(dp) { // Wenn severity sich ändert... stateWarnung1 = dp.newState.val; // Neuen severity Wert in den state schreiben... setState(idBestaetigung1, false); // Bestätigung auf "nicht bestätigt setzten" setvorhanden(); // Funktion zum Vorhandensein aufrufen um auch den Status für das Vorhandensein einer Warnung zu aktualisieren }); on(idWarnung2, function(dp) { stateWarnung2 = dp.newState.val; setState(idBestaetigung2, false); setvorhanden(); }); on(idWarnung3, function(dp) { stateWarnung3 = dp.newState.val; setState(idBestaetigung3, false); setvorhanden(); }); !
Wo ich das hier aber gerade so nochmal durchdenke und teste fällt mir auf, dass in meinem Script noch ein Denkfehler ist. So wird aktuell der Status für die Bestätigung auch auf false gesetzt wenn eine Warnung aufgehoben wird (also z.B. severity von 1 auf 0 gesetzt wird).Das fällt bei mir in vis aber nicht auf, da in diesem Fall meine Widgets sowieso durchsichtig sind…
Werde das nochmal ein bisschen umkonfigurieren müssen...
MfG,
André