Ankündigung

Einklappen
Keine Ankündigung bisher.

DWD Plugin

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

    #46
    Kurze Frage: So wie ich das aus dem aktuellen Newsletter sehe, dürften ab Mitte März die Warnings (und mind. der UV Index aus directory = 'gds/specials/warnings/FG') nicht mehr funktionieren? Ich nehme an ein Umbau ist aktuell nicht geplant?

    "Wie mit Newslettern im Oktober 2015 angekuendigt wird die Bereitstellung von Warnungen ueber /gds/specials/warnings am 15.03.2016 eingestellt. Die amtlichen Warnungen des DWD finden Sie in verschiedenen Varianten unter /gds/specials/alerts. Bitte beachten Sie, dass nur der Warnstatus unter /gds/specials/alerts/cap/GER in jedem Falle dem aktuellsten Stand entspricht."

    Kommentar


      #47
      Das würde mich auch interessieren.

      Ich habe seit einigen Tagen eine Fehlermeldung:

      Code:
      2016-01-21 10:40:06,639 ERROR    dwd          Logic: dwd, File: /usr/local/smarthome/plugins/dwd/__init__.py, Line: 156, Method: current, Exception: list index out of range -- scheduler.py:_task:334
      Traceback (most recent call last):
        File "/usr/local/smarthome/lib/scheduler.py", line 327, in _task
          exec(obj.bytecode)
        File "/usr/local/smarthome/logics/wetter.py", line 49, in <module>
          current = sh.dwd.current('Hannover-Flh.')
        File "/usr/local/smarthome/plugins/dwd/__init__.py", line 156, in current
          date = re.findall(r"\d\d\.\d\d\.\d\d\d\d", header)[0].split('.')
      IndexError: list index out of range
      Demnach funktioniert natürlich "Current" nicht mehr. Hat der DWD vielleicht schon etwas umgestellt, oder bin ich alleine mit diesem Problem?

      Kommentar


        #48
        auf dem FTP liegen jetzt auch .html files.. einfach die Zeile wo er aus dem directory einliest den index ändern

        sollte so funzen:

        files = self._retr_list(directory)
        if files == []:
        return {}
        last = sorted(files)[-2]

        davor wars ein -1 glaube ich..

        Kommentar


          #49
          Das hat funktioniert.

          Super, vielen Dank!!

          Kommentar


            #50
            wenn jemand weiss, wie ich bei "_retr_list" nur Files mit bestimmten Dateiendungen bzw. ohne bestimmte Endungen auswählen kann, wäre natürlich die bessere Lösung ;-)

            Kommentar


              #51
              Falls das noch wer braucht: ich habe die Warnings, den UV Index und die Pollen auf die "alerts" Folder angepasst, wie sie laut Info Mail von Mitte März an nur noch supported werden. Alles noch ohne Gewähr, da ich aktuell auch noch teste. Die Files an den Orten sollten identisch mit vorher sein:

              Code:
                  def warnings(self, region, location):
                      directory = 'gds/specials/alerts/txt'
              [...]
                  def uvi(self, location):
                      directory = 'gds/specials/alerts/health'
              [...]
                  def pollen(self, region):
                      filename = 'gds/specials/alerts/health/s_b31fg.xml'

              Kommentar


                #52
                Und wohl noch eine Änderung. Die Current-Methode geht nun erstmal gar nicht mehr, da im /gds/gds/specials/observations/tables/germany nun nur noch html-Files abliegen.

                Anbei nun die schönere Lösung, ähnlich wie das Original implementiert. Ich hoffe es ist stabil genug für die unschönen DWD Daten..

                Code:
                    def current(self, location):
                        directory = 'gds/specials/observations/tables/germany'
                        cleanr =re.compile('<.*?>') #clean html tags
                        files = self._retr_list(directory)
                        if files == []:
                            return {}
                        last = sorted(files)[-1]
                        fb = self._retr_file(last)
                
                        matchObj = re.findall(r'<tr>(.*?)</tr>', fb, re.M|re.I|re.S)  
                        legend = re.sub(cleanr,'', matchObj[0])
                        legend = list(filter(None, [s.strip() for s in legend.splitlines()]))  #filter empty lines
                 
                        fb = fb.splitlines()
                        if len(fb) < 8:
                            logger.info("problem fetching {0}".format(last))
                            return {}
                        header = fb[3] # index angepasst
                        date = re.findall(r"\d\d\.\d\d\.\d\d\d\d", header)[0].split('.')
                        date = "{}-{}-{}".format(date[2], date[1], date[0])      
                        
                        for element in matchObj:                  
                            if element.count(location):                
                                data_string = re.sub(cleanr,'', element)              
                                data = list(filter(None, [s.strip() for s in data_string.splitlines()]))   #filter empty lines
                                if len(data) == len(legend):                  
                                    return dict(zip(legend, data))
                                else:
                                    logger.error('Number of elements in legend does not match data {} : {}'.format(str(len(legend)), str(len(data))))
                                
                        return {}
                In der Logik habe ich die Identifier denen aus dem HTML angepasst (TT gibt es bspw. nicht mehr, das Ding heißt jetzt wohl "Temp."). Zudem habe ich soeben (25.03.) festgestellt, dass noch Files mit mehr Infos (und wieder teils anderen Benennungen - "TEMP." anstatt "Temp.") abliegen. Daraufhin habe ich weitere Anpassungen gemacht, die je nachdem wie die Standardbenennung ist. Weiterhin habe ich rel. Luftfeuchte und Windspitzen hinzugenommen. Theoretisch gibt es noch mehr Items, wie bspw. Schneehöhen, usw., die aber auch nicht immer dabei sind. Die fand ich aktuell aber weniger interessant.

                Code:
                if "TEMP." in current:
                    sh.dwd_weather.temperatur(current["TEMP."])
                elif "Temp." in current:
                    sh.dwd_weather.temperatur(current["Temp."])
                if "RR1" in current:
                    sh.dwd_weather.niederschlag(current["RR1"])
                if "LUFTD." in current:
                    sh.dwd_weather.luftdruck(current["LUFTD."])
                elif "Luftd." in current:
                    sh.dwd_weather.luftdruck(current["Luftd."])
                if "U%" in current:
                    sh.dwd_weather.relluftfeuchte(current["U%"])
                if "FF" in current:
                    sh.dwd_weather.windgeschwindigkeit(current["FF"])
                if "FX" in current:
                    if current["FX"] != '---':
                        sh.dwd_weather.windspitzen(current["FX"])
                if "DD" in current:
                    sh.dwd_weather.windrichtung(current["DD"])
                if "Wetter+Wolken" in current:
                    sh.dwd_weather.wetter(current["Wetter+Wolken"])
                if "B&ouml;en" in current:
                    if current["B&ouml;en"] == '---':
                        sh.dwd_weather.boen('')
                    else:
                        sh.dwd_weather.boen(current["B&ouml;en"])
                Die items.conf für oberes logischerweise um folgende Items erweitern:

                Code:
                    [[relluftfeuchte]]
                        name = Relative Luftfeuchte
                        sqlite = init
                        type = num
                    [[windspitzen]]
                        name = Windspitzen
                        sqlite = yes
                        type = num
                        unit = km/h
                Zuletzt geändert von psilo; 25.03.2016, 19:31.

                Kommentar


                  #53
                  Leider stimmt die Anleitung im Wicki und dem Readme nicht mehr.

                  "Warnings" gibt es nicht mehr, Dafür liegt wohl jetzt alles in ftp://ftp-outgoing2.dwd.de/gds/speci...tables/germany 'Hier gibt es Einträge für UV und Pollen.

                  Kann ich davon ausgehen, das Problem wird durch obige Anpassung erschlagen?

                  Ich she nicht, wo das Gebiet (Süd,o.ä.) fbzw. die Station ausgewählt wird.

                  Danke und schönes Wochenende!

                  Wolfgang



                  Kommentar


                    #54
                    ich hab doch schon alles umgebaut? schau im dev
                    anleitung im neuen wiki sollte passen. sonst gerne changes einsteuern:

                    https://github.com/smarthomeNG/smart...op/plugins/dwd

                    An das README habe ich mich nicht gemacht, ansich ist das ja nicht "mein" Plugin. Wenn wo konrket Fragen sind passe ich das auf Wunsch aber gerne an. Grundlegend bleibt das meiste aber gleich, wenn man die IDs usw halt schon hat. Ich habe nur die Ablagen im Plugin selber getauscht und bei CURRENT viel rumimplementiert.

                    Die Files sind aber sehr sehr dreckig, ich baue immer noch Workarounds für schlechte DWD Files. Heute erst wieder was ins DEV committed.
                    Zuletzt geändert von psilo; 22.04.2016, 18:27.

                    Kommentar


                      #55
                      Ich muss in der Tat sagen, dass ich die /gds/gds/specials/warnings/legend_warnings.pdf auch sonst nirgends mehr finde. mit meinem codes geht es über den neuen alerts folder, aber für die Anleitung muss ich passen. Der Rest vom README sollte aber ok sein.

                      Ich habs: /gds/gds/help

                      Passe README an und pushe.. Wenn noch was fehlt melden!

                      Kommentar


                        #56
                        Hi,

                        ich habe die Änderungen jetzt übernommen. Leider funktioniert nicht mehr, ausser die Windgeschwidigkeit.

                        In den Logs steht nichts, daher scheint zumindest kein Fehler zu bestehen. Kann es sein, dass er vielleicht die Daten nicht "sauber" erhält?

                        Kommentar


                          #57
                          logik angepasst? nur der datenbezug ist anders - die ausgaben der funktionen identisch bzw erweitert aber nicht geändert. alles im wiki dokumentiert.
                          frage ist aber ob du nur das plugin oder den sh developer stand genommen hast. das plugin ist schon auf das neue logging angepasst. zudem ist im dev stand von sh.py ja noch mehr geändert.

                          'nicht funktioniert mehr' ist zudem wenig hilfreich. welche fehler wirft er denn im log

                          achso genau: in den logs steht mglw nichts, weil das logging auf den dev stand angepasst wurde
                          Zuletzt geändert von psilo; 13.05.2016, 08:03.

                          Kommentar


                            #58
                            Hi,

                            ich hab jetzt noch etwas "gefummelt" bekomme es leider trotzdem nicht hin. Aber zumindest schreibt er jetzt etwas in die Logs:

                            Code:
                            2016-05-13 06:26:46 ERROR    dwd          Logic: dwd, File: /usr/local/smarthome/logics/wetter.py, Line: 67, Method: <module>, Exception: 'SmartHome' object has no attribute 'dwd_weather'
                            Traceback (most recent call last):
                              File "/usr/local/smarthome/lib/scheduler.py", line 327, in _task
                                exec(obj.bytecode)
                              File "/usr/local/smarthome/logics/wetter.py", line 67, in <module>
                                sh.dwd_weather.temperatur(current["TEMP."])
                            AttributeError: 'SmartHome' object has no attribute 'dwd_weather'
                            Ich habe Deine Dateien aus diesem Link verwendet: https://github.com/smarthomeNG/smart...op/plugins/dwd

                            Zudem habe ich die Logik aus folgendem Link verwendet:

                            https://github.com/smarthomeNG/smarthome/wiki/DWD

                            Mehr habe ich eigentlich nicht gemacht. Also die sh.py oder andere Dinge habe ich nicht angefasst - hätte ich das müssen?

                            Ich bin mir sicher, dass der Fehler an mir liegt und nicht an Deiner Arbeit. Ich komme nur gerade nicht drauf. :-/

                            Kommentar


                              #59
                              mist in der Logik ist noch mein pers. root (dwd_weather) anstatt dem was wohl alle anderen haben drin (wetter).

                              Ersetze das mal bzw checke Dein Root-Item

                              PS: Logikbeispiel ist angepasst!

                              Kommentar


                                #60
                                Hey,

                                schön, dass wir drüber gesprochen haben. :-)

                                Ich habe jetzt auch mal ein Update auf 1.1 gemacht und die von Dir aktualisierte Logik genommen.

                                Neuer Fehler:

                                Code:
                                2016-05-14 00:29:48 ERROR    dwd          Logic: dwd, File: /usr/local/smarthome/logics/wetter.py, Line: 109, Method: <module>, Exception: 'Item' object has no attribute 'nacht'
                                Traceback (most recent call last):
                                  File "/usr/local/smarthome/lib/scheduler.py", line 327, in _task
                                    exec(obj.bytecode)
                                  File "/usr/local/smarthome/logics/wetter.py", line 109, in <module>
                                    frame = base.nacht
                                AttributeError: 'Item' object has no attribute 'nacht'
                                Liebe Grüße

                                Kommentar

                                Lädt...
                                X