Ankündigung

Einklappen
Keine Ankündigung bisher.

DWD Pollenflug Binding Benachrichtigung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    DWD Pollenflug Binding Benachrichtigung

    Hallo zusammen,

    ich bin Allergiker und möchte gerne daher das Pollenflug Binding vom DWD zu benutzen um mich über den Pollenflug am kommenden Tag zu benachrichtigen:

    Im DWD Pollenflug Binding, gibt es Gräser, Roggen, Birke Erle etc.. Desweiteren gibt es für jedes Allergen Today, Tomorrow und AfterTommorow.

    Nun habe ich mir für jedes Allergen eine Regel gebaut, die bei bestimmten String Inhalten eine Benachrichtigung raus schickt.

    Diese Rule habe ich quasi 5 mal (für jedes Allergen einmal):

    Code:
    rule "Pollenwarnung Gräser"
    when
    
    Item pollenTodayGraeser changed or
    Item pollenTomorrowGraeser changed or
    Item pollenDayAfterTomorrowGraeser changed
    
    then
    
    val String strMessage = (pollenTodayGraeser.state.toString).toLowerCase
    val String strMessage2 = (pollenTomorrowGraeser.state.toString).toLowerCase
    val String strMessage3 = (pollenDayAfterTomorrowGraeser.state.toString).toL owerCase
    
    if(strMessage.contains("0-1")) {
    
    sendBroadcastNotification("Achtung Heute kein bis niedriger Pollenflug Gräser!")
    }
    
    if(strMessage.contains("1")) {
    
    sendBroadcastNotification("Achtung Heute niedriger Pollenflug Gräser!")
    }
    
    if(strMessage.contains("1-2")) {
    
    sendBroadcastNotification("Achtung Heute niedriger bis mittlerer Pollenflug Gräser!")
    }
    
    if(strMessage.contains("2")) {
    
    sendBroadcastNotification("Achtung Heute mittlerer Pollenflug Gräser!")
    }
    
    if(strMessage.contains("2-3")) {
    
    sendBroadcastNotification("Achtung Heute mittlerer bis starker Pollenflug Gräser!")
    }
    
    if(strMessage.contains("3")) {
    
    sendBroadcastNotification("Achtung Heute starker Pollenflug Gräser!")
    }
    
    if(strMessage2.contains("0-1")) {
    
    sendBroadcastNotification("Achtung Morgen kein bis niedriger Pollenflug Gräser!")
    }
    
    if(strMessage2.contains("1")) {
    
    sendBroadcastNotification("Achtung Morgen niedriger Pollenflug Gräser!")
    }
    
    if(strMessage2.contains("1-2")) {
    
    sendBroadcastNotification("Achtung Morgen niedriger bis mittlerer Pollenflug Gräser!")
    }
    
    if(strMessage2.contains("2")) {
    
    sendBroadcastNotification("Achtung Morgen mittlerer Pollenflug Gräser!")
    }
    
    if(strMessage2.contains("2-3")) {
    
    sendBroadcastNotification("Achtung Morgen mittlerer bis starker Pollenflug Gräser!")
    }
    
    if(strMessage2.contains("3")) {
    
    sendBroadcastNotification("Achtung Morgen starker Pollenflug Gräser!")
    }
    
    if(strMessage3.contains("0-1")) {
    
    sendBroadcastNotification("Achtung Übermorgen kein bis niedriger Pollenflug Gräser!")
    }
    
    if(strMessage3.contains("1")) {
    
    sendBroadcastNotification("Achtung Übermorgen niedriger Pollenflug Gräser!")
    }
    
    if(strMessage3.contains("1-2")) {
    
    sendBroadcastNotification("Achtung Übermorgen niedriger bis mittlerer Pollenflug Gräser!")
    }
    
    if(strMessage3.contains("2")) {
    
    sendBroadcastNotification("Achtung Übermorgen mittlerer Pollenflug Gräser!")
    }
    
    if(strMessage3.contains("2-3")) {
    
    sendBroadcastNotification("Achtung Übermorgen mittlerer bis starker Pollenflug Gräser!")
    }
    
    if(strMessage3.contains("3")) {
    
    sendBroadcastNotification("Achtung Übermorgen starker Pollenflug Gräser!")
    }
    
    end

    Etwas unschön ist, dass wenn eine Aktualisierung der Items gepusht wird durch das Binding, erhalte ich 30 Benachrichtigungen auf mein Handy. Ist ja auch normal bei dem Aufbau der Rules.

    Hat jemand ein Idee wie man das etwas besser machen kann und vor allem die Benachrichtigung vielleicht bündeln kann?

    #2
    Dafür gibt es Gruppen

    Also, als erstes wäre es wichtig, die Itemnamen etwas sinnvoller zu gestalten, z.B. pollen_Graeser_0, pollen_Graeser_1 und pollen_Graeser_2 (entsprechend für Roggen, Birke, Beifuss usw.). Dann braucht es noch ein Gruppenitem pro Tag, nennen wir sie mal gPollen0, gPollen1 und gPollen2.
    Nun geht es damit los, dass Du den Trigger der Rule auf Member of gPollen0 changed reduzieren kannst. Egal, welches Item sich ändert, die Rule triggert.
    Dann kannst Du in der Rule die Gruppe durchlaufen und gezielt alle Daten zusammenfassen. Da kommt es nun auf die persönliche Vorliebe an. z.B. eine Meldung pro Tag (also heute, morgen, übermorgen), innerhalb der Meldung sortiert nach Schwere. Im Beispiel nur für heute:
    Code:
    rule "Pollenwarnung"
    when
        Member of gPollen0 changed
    then
        if(gPollen0.members.filter[i|i.state != "0"].size == 0) // Kein Pollenflug, keine Meldung
            return;
        var String strMessage0 = "Achtung! Heute "
        var String strState = ""
        gPollen0.members.sortBy[state].forEach[i|
            if(strState != i.state.toString) {
                strState = i.state.toString
                switch (strState) {
                    case "0-1" : strMessage0 = strMessage0 + "kein bis niedriger Pollenflug für "
                    case "1"   : strMessage0 = strMessage0 + "niedriger Pollenflug für "
                    case "1-2" : strMessage0 = strMessage0 + "niedriger bis mittlerer Pollenflug für "
                    case "2"   : strMessage0 = strMessage0 + "mittlerer Pollenflug für "
                    case "2-3" : strMessage0 = strMessage0 + "mittlerer bis starker Pollenflug für "
                    case "3"   : strMessage0 = strMessage0 + "starker Pollenflug für "
                }
            }
            strMessage0 = strMessage0 + i.name.split("_").get(1) + ", "
        ]
        sendBroadcastNotification(strMessage0)
    end
    Die Rule ist noch nicht perfekt, man könnte beispielsweise das jeweils vorletzte Komma einer Aufzählung durch die Zeichenfolge " und" ersetzen (mit führendem Leerzeichen...) und natürlich müsste das letzte Komma vor dem Versenden durch einen Punkt ersetzt werden. Aber das sind vielleicht verschmerzbare Schönheitsfehler.

    Kommentar


      #3
      Okay das bedeutet, ich muss für jeden Tag eine dieser Rule bauen?

      in gPollen0 müssen dann alle Items für Heute drin sein auch unterschiedliche Pollenarten?

      Richtig?

      Wie oft am Tag würde die Rule am Tag getriggert und was würde sie mir für eine Nachricht schicken?

      Ich möchte eine Nachricht je Pollenart haben.

      Kommentar


        #4
        So wie ich die Rule angelegt habe, wird pro Tag eine Nachricht generiert, sortiert nach Stärke. Natürlich kann man das auch anders sortieren. Allerdings lassen sich damit weniger gute Zusammenfassungen erreichen.
        Die Rule triggert, wenn es Änderungen an den Items gibt, was soweit ich weiß einmal täglich passiert, kann aber auch sein, dass die Werte mehrfach am Tag aktualisiert werden.

        Kommentar


          #5
          Andere Variante: Alle Items kommen in eine gemeinsame Gruppe gPollen. Eine Rule:
          Code:
          rule "Pollenwarnung"
          when
              Member of gPollen changed
          then
              var String strMessage = "Achtung! Pollenflugvorhersage für "
              gPollen.members.filter[i|i.name.split("_").get(2) == "0"].forEach[p|
                  var String strSorte = p.name.split("_").get(1)
                  strMessage = strMessage + strSorte + ": "
                  gPollen.members.filter[j|j.name.split("_").get(1) == strSorte && j.state.toString != "-1"].sortBy[name].forEach[q| // Zeile korrigiert
                      switch (q.name.split("_").get(2)) {
                          case "0" : strMessage = strMessage + ": Heute "
                          case "1"   : strMessage = strMessage + ", morgen "
                          case "2"   : strMessage = strMessage + " und übermorgen "
                      }
                      switch (q.state.toString) {
                          case "0-1" : strMessage = strMessage + "kein bis niedriger"
                          case "1"   : strMessage = strMessage + "niedriger"
                          case "1-2" : strMessage = strMessage + "niedriger bis mittlerer"
                          case "2"   : strMessage = strMessage + "mittlerer"
                          case "2-3" : strMessage = strMessage + "mittlerer bis starker"
                          case "3"   : strMessage = strMessage + "starker"
                      }
                      strMessage = strMessage + " Pollenflug"
                  ]
                  strMessage = strMessage + "."
                  sendBroadcastNotification(strMessage)
              ]
          end
          Die Rule erzeugt pro Pollensorte eine Meldung, in der für die drei Tage in aufsteigender Reihenfolge die jeweiligen Werte geliefert werden.

          Da nur am Wochenende eine Vorhersage für übermorgen geliefert wird, werden die ungültig gekennzeichenten Felder ("-1") ausgeblendet.
          Zuletzt geändert von udo1toni; 05.09.2020, 19:21. Grund: Tippfehler in Zeile 9 des Codes korrigiert.

          Kommentar


            #6
            Ui, machst dir aber echt Arbeit Danke.

            Bekomme mein einfügen den folgenden Fehler:

            Code:
            
            Configuration model 'pollenflug.rules' has errors, therefore ignoring it: [27,5]: extraneous input ']' expecting 'end'
            Kann ich denn die Item Namen so lassen oder muss ich die umbenennen, damit die Rule funktioniert (ausgenommen der Zuweisung in die Gruppe gPollen:

            Code:
            String pollenTodayEsche "Esche [MAP(pollen.map):%s]" <garden> (gPollenflugEsche) {channel="dwdpollenflug:region:dwd:region40:ash#to day"}
            String pollenTomorrowEsche "Esche morgen [MAP(pollen.map):%s]" <garden> (gPollenflugEsche) {channel="dwdpollenflug:region:dwd:region40:ash#to morrow"}
            String pollenDayAfterTomorrowEsche "Esche übermorgen [MAP(pollen.map):%s]" <garden> (gPollenflugEsche) {channel="dwdpollenflug:region:dwd:region40:ash#da yafter_to"}
            
            String pollenTodayErle "Erle [MAP(pollen.map):%s]" <garden> (gPollenflugErle) {channel="dwdpollenflug:region:dwd:region40:alder# today"}
            String pollenTomorrowErle "Erle morgen [MAP(pollen.map):%s]" <garden> (gPollenflugErle) {channel="dwdpollenflug:region:dwd:region40:alder# tomorrow"}
            String pollenDayAfterTomorrowErle "Erle übermorgen [MAP(pollen.map):%s]" <garden> (gPollenflugErle) {channel="dwdpollenflug:region:dwd:region40:alder# dayafter_to"}
            
            String pollenTodayAmbrosia "Ambrosia [MAP(pollen.map):%s]" <garden> (gPollenflugAmbrosia) {channel="dwdpollenflug:region:dwd:region40:ambros ia#today"}
            String pollenTomorrowAmbrosia "Ambrosia morgen [MAP(pollen.map):%s]" <garden> (gPollenflugAmbrosia) {channel="dwdpollenflug:region:dwd:region40:ambros ia#tomorrow"}
            String pollenDayAfterTomorrowAmbrosia "Ambrosia übermorgen [MAP(pollen.map):%s]" <garden> (gPollenflugAmbrosia) {channel="dwdpollenflug:region:dwd:region40:ambros ia#dayafter_to"}
            
            String pollenTodayBirke "Birke [MAP(pollen.map):%s]" <garden> (gPollenflugBirke) {channel="dwdpollenflug:region:dwd:region40:birch# today"}
            String pollenTomorrowBirke "Birke morgen [MAP(pollen.map):%s]" <garden> (gPollenflugBirke) {channel="dwdpollenflug:region:dwd:region40:birch# tomorrow"}
            String pollenDayAfterTomorrowBirke "Birke übermorgen [MAP(pollen.map):%s]" <garden> (gPollenflugBirke) {channel="dwdpollenflug:region:dwd:region40:birch# dayafter_to"}
            
            String pollenTodayGraeser "Gräser [MAP(pollen.map):%s]" <garden> (gPollenflugGraeser) {channel="dwdpollenflug:region:dwd:region40:grasse s#today"}
            String pollenTomorrowGraeser "Gräser morgen [MAP(pollen.map):%s]" <garden> (gPollenflugGraeser) {channel="dwdpollenflug:region:dwd:region40:grasse s#tomorrow"}
            String pollenDayAfterTomorrowGraeser "Gräser übermorgen [MAP(pollen.map):%s]" <garden> (gPollenflugGraeser) {channel="dwdpollenflug:region:dwd:region40:grasse s#dayafter_to"}
            
            String pollenTodayHasel "Hasel [MAP(pollen.map):%s]" <garden> (gPollenflugHasel) {channel="dwdpollenflug:region:dwd:region40:hazel# today"}
            String pollenTomorrowHasel "Hasel morgen [MAP(pollen.map):%s]" <garden> (gPollenflugHasel) {channel="dwdpollenflug:region:dwd:region40:hazel# tomorrow"}
            String pollenDayAfterTomorrowHasel "Hasel übermorgen [MAP(pollen.map):%s]" <garden> (gPollenflugHasel) {channel="dwdpollenflug:region:dwd:region40:hazel# dayafter_to"}
            
            String pollenTodayBeifuss "Beifuß [MAP(pollen.map):%s]" <garden> (gPollenflugBeifuss) {channel="dwdpollenflug:region:dwd:region40:mugwor t#today"}
            String pollenTomorrowBeifuss "Beifuß morgen [MAP(pollen.map):%s]" <garden> (gPollenflugBeifuss) {channel="dwdpollenflug:region:dwd:region40:mugwor t#tomorrow"}
            String pollenDayAfterTomorrowBeifuss "Beifuß übermorgen [MAP(pollen.map):%s]" <garden> (gPollenflugBeifuss) {channel="dwdpollenflug:region:dwd:region40:mugwor t#dayafter_to"}
            
            String pollenTodayRoggen "Roggen [MAP(pollen.map):%s]" <garden> (gPollenflugRoggen) {channel="dwdpollenflug:region:dwd:region40:rye#to day"}
            String pollenTomorrowRoggen "Roggen morgen [MAP(pollen.map):%s]" <garden> (gPollenflugRoggen) {channel="dwdpollenflug:region:dwd:region40:rye#to morrow"}
            String pollenDayAfterTomorrowRoggen "Roggen übermorgen [MAP(pollen.map):%s]" <garden> (gPollenflugRoggen) {channel="dwdpollenflug:region:dwd:region40:rye#da yafter_to"}
            Zuletzt geändert von SaschaQ; 03.09.2020, 17:32.

            Kommentar


              #7
              Ja, da hat sich ein Tippfehler in Zeile 9 eingeschlichen ganz am Ende steht versehentlich ein ] statt eines |. Ich hab das oben korrigiert!

              Kommentar


                #8
                Kann ich die Namen der Items so lassen, wie ich oben beschrieben habe, damit die Rule funktioniert?

                Ich hatte es jetzt nochmal eingefügt und erhalte im Log diese Meldung: (Kann ich das ignorieren?)


                Code:
                
                2020-09-06 08:52:13.157 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'pollenflug.rules', using it anyway:
                
                There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.
                
                There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.
                
                There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.
                
                There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.

                Zuletzt geändert von SaschaQ; 06.09.2020, 07:54.

                Kommentar


                  #9
                  Nein, es ist essenziell, dass die Itemnamen Unterstriche enthalten. Die Rule berechnet die Ausgaben anhand des Itemnamens und des Itemstatus.
                  Deshalb müssen die Items so aussehen:
                  Code:
                  Group gPollen
                  
                  String pollen_Esche_0    "Esche [MAP(pollen.map):%s]"               <garden> (gPollen,gPollenflugEsche)    {channel="dwdpollenflug:region:dwd:region40:ash#today"}
                  String pollen_Esche_1    "Esche morgen [MAP(pollen.map):%s]"        <garden> (gPollen,gPollenflugEsche)    {channel="dwdpollenflug:region:dwd:region40:ash#tomorrow"}
                  String pollen_Esche_2    "Esche übermorgen [MAP(pollen.map):%s]"    <garden> (gPollen,gPollenflugEsche)    {channel="dwdpollenflug:region:dwd:region40:ash#dayafter_to"}
                  
                  String pollen_Erle_0     "Erle [MAP(pollen.map):%s]"                <garden> (gPollen,gPollenflugErle)     {channel="dwdpollenflug:region:dwd:region40:alder#today"}
                  String pollen_Erle_1     "Erle morgen [MAP(pollen.map):%s]"         <garden> (gPollen,gPollenflugErle)     {channel="dwdpollenflug:region:dwd:region40:alder#tomorrow"}
                  String pollen_Erle_2     "Erle übermorgen [MAP(pollen.map):%s]"     <garden> (gPollen,gPollenflugErle)     {channel="dwdpollenflug:region:dwd:region40:alder#dayafter_to"}
                  
                  String pollen_Ambrosia_0 "Ambrosia [MAP(pollen.map):%s]"            <garden> (gPollen,gPollenflugAmbrosia) {channel="dwdpollenflug:region:dwd:region40:ambrosia#today"}
                  String pollen_Ambrosia_1 "Ambrosia morgen [MAP(pollen.map):%s]"     <garden> (gPollen,gPollenflugAmbrosia) {channel="dwdpollenflug:region:dwd:region40:ambrosia#tomorrow"}
                  String pollen_Ambrosia_2 "Ambrosia übermorgen [MAP(pollen.map):%s]" <garden> (gPollen,gPollenflugAmbrosia) {channel="dwdpollenflug:region:dwd:region40:ambrosia#dayafter_to"}
                  
                  String pollen_Birke_0    "Birke [MAP(pollen.map):%s]"               <garden> (gPollen,gPollenflugBirke)    {channel="dwdpollenflug:region:dwd:region40:birch#today"}
                  String pollen_Birke_1    "Birke morgen [MAP(pollen.map):%s]"        <garden> (gPollen,gPollenflugBirke)    {channel="dwdpollenflug:region:dwd:region40:birch#tomorrow"}
                  String pollen_Birke_2    "Birke übermorgen [MAP(pollen.map):%s]"    <garden> (gPollen,gPollenflugBirke)    {channel="dwdpollenflug:region:dwd:region40:birch#dayafter_to"}
                  
                  String pollen_Graeser_0  "Gräser [MAP(pollen.map):%s]"              <garden> (gPollen,gPollenflugGraeser)  {channel="dwdpollenflug:region:dwd:region40:grasses#today"}
                  String pollen_Graeser_1  "Gräser morgen [MAP(pollen.map):%s]"       <garden> (gPollen,gPollenflugGraeser)  {channel="dwdpollenflug:region:dwd:region40:grasses#tomorrow"}
                  String pollen_Graeser_2  "Gräser übermorgen [MAP(pollen.map):%s]"   <garden> (gPollen,gPollenflugGraeser)  {channel="dwdpollenflug:region:dwd:region40:grasses#dayafter_to"}
                  
                  String pollen_Hasel_0    "Hasel [MAP(pollen.map):%s]"               <garden> (gPollen,gPollenflugHasel)    {channel="dwdpollenflug:region:dwd:region40:hazel#today"}
                  String pollen_Hasel_1    "Hasel morgen [MAP(pollen.map):%s]"        <garden> (gPollen,gPollenflugHasel)    {channel="dwdpollenflug:region:dwd:region40:hazel#tomorrow"}
                  String pollen_Hasel_2    "Hasel übermorgen [MAP(pollen.map):%s]"    <garden> (gPollen,gPollenflugHasel)    {channel="dwdpollenflug:region:dwd:region40:hazel#dayafter_to"}
                  
                  String pollen_Beifuss_0  "Beifuß [MAP(pollen.map):%s]"              <garden> (gPollen,gPollenflugBeifuss)  {channel="dwdpollenflug:region:dwd:region40:mugwort#today"}
                  String pollen_Beifuss_1  "Beifuß morgen [MAP(pollen.map):%s]"       <garden> (gPollen,gPollenflugBeifuss)  {channel="dwdpollenflug:region:dwd:region40:mugwort#tomorrow"}
                  String pollen_Beifuss_2  "Beifuß übermorgen [MAP(pollen.map):%s]"   <garden> (gPollen,gPollenflugBeifuss)  {channel="dwdpollenflug:region:dwd:region40:mugwort#dayafter_to"}
                  
                  String pollen_Roggen_0   "Roggen [MAP(pollen.map):%s]"              <garden> (gPollen,gPollenflugRoggen)   {channel="dwdpollenflug:region:dwd:region40:rye#today"}
                  String pollen_Roggen_1   "Roggen morgen [MAP(pollen.map):%s]"       <garden> (gPollen,gPollenflugRoggen)   {channel="dwdpollenflug:region:dwd:region40:rye#tomorrow"}
                  String pollen_Roggen_2   "Roggen übermorgen [MAP(pollen.map):%s]"   <garden> (gPollen,gPollenflugRoggen)   {channel="dwdpollenflug:region:dwd:region40:rye#dayafter_to"}
                  Wobei die jeweils zweite Gruppe für die Rule keine Rolle spielt, die erste Gruppe gPollen ist aber nicht optional, sie ist die Grundlage für die Rule.
                  Zuletzt geändert von udo1toni; 07.09.2020, 05:10.

                  Kommentar


                    #10
                    Hallo Udo,

                    ich habe das nun alles so umgesetzt. Ich erhalte aber auch keinen Fehler, aber auch keine Benachrichtigung.

                    Kann ich das irgendwie sehen, woran es hängt?

                    Kommentar


                      #11
                      Mach doch vor dem "sendBroadcastNotification" eine logInfo mit der Nachricht. Dann siehst Du ja, was gesendet werden sollte und ob das sinnig ist.

                      Kommentar


                        #12
                        Es wird ja garkeine Meldung produziert.

                        Kommentar


                          #13
                          Vielleicht ist es die Fehlermeldung:

                          Code:
                          2020-09-06 08:52:13.157 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'pollenflug.rules', using it anyway: There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context. There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context. There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context. There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.
                          Ich erhalte auf jedenfall im Eventlog die Meldung, dass die Items aktualisiert werden:

                          Code:
                          2020-09-09 13:53:25.510 [vent.ItemStateChangedEvent] - pollen_Beifuss_1 changed from NULL to 0-1
                          2020-09-09 13:53:25.511 [vent.ItemStateChangedEvent] - pollen_Roggen_1 changed from NULL to 0
                          Zuletzt geändert von SaschaQ; 09.09.2020, 13:10.

                          Kommentar


                            #14
                            Ich muss mir das noch mal näher anschauen, aber momentan komme ich nicht dazu...

                            Kommentar


                              #15
                              Das wäre total klasse, aber eilt nicht.

                              Ich vermute dass in der Rule irgendwas noch nicht stimmt, da die Items alle aktualisiert werden und auch ein neuen Status bekommen.

                              Danke Dir.

                              Kommentar

                              Lädt...
                              X