예제 #1
0
def readWeather(fcast):
    rv = ""
    if config.podajTemp:       rv = " ".join( (rv, "temperatura", pl.cardinal(fcast["temp"], pl.C)) )
    if config.podajTempOdcz:   rv = " ".join( (rv, "temperatura_odczuwalna ", pl.cardinal(fcast["tempOdcz"], pl.C)) )
    if config.podajZjawiska:   rv = " ".join( (rv, fcast["zjawiska"]) )
    if config.podajCisnHpa:    rv = " ".join( (rv, "cisnienie", pl.cardinal(fcast["cisn"], pl.hPa)) )
    if config.podajSileWiatru: rv = " ".join( (rv, "predkosc_wiatru", pl.cardinal(fcast["silaWiatru"], pl.mPs)) )
    if config.podajKierWiatru: rv = " ".join( (rv, "kierunek_wiatru", fcast["kierWiatru"]) )

    return rv + " zrodlo imgw"
예제 #2
0
def getData(l):

    data = {"data":"", "needCTCSS":True, "allOK":True}
    # Pobieranie danych o wodowskazach
    debug.log("IMGW-HYDRO", "downloading data...")
    command = 'links -dump http://pogodynka.pl/hydrobiuletyn.php > /tmp/imgw-hydro.tmp'
    if os.system(command) != 0:
        debug.log("IMGW-HYDRO", "Couldn't download data!", 6)
        return {"data":"", "needCTCSS":False, "allOK":False}

    hydroFile = open('/tmp/imgw-hydro.tmp')
    hydrobiuletyn = hydroFile.readlines()
    hydroFile.close()




    dane = []
    dostepneWodowskazy = []

    # odczyt danych z pliku (parsowanie)
    debug.log("IMGW-HYDRO", "parsing...")
    for line in hydrobiuletyn:
        if "|" in line:
            columns = line.split("|")
            if "Zbiornik" in columns[1]:
                break
            elif len(columns[2].strip())>0 and "-+-" not in columns[1]:
                if len(columns[1].strip())>0:
                    dane.append( {                          \
                        "rzeka"       : columns[1].strip(), \
                        "wodowskaz"   : columns[2].strip(), \
                        "stanAlarmowy": columns[4].strip(), \
                        "stanWody"    : columns[6].strip(), \
                        "dobowaZmiana": columns[7].strip()  \
                      })
                else: dane[-1]["wodowskaz"]+=" " + columns[2].strip()

    # czyszczenie nazw wodowskazów (z pliku i z konfiguracji) = ustawianie jednolitego formatu
    for i in range(0, len(dane)):
        dane[i]["rzeka"]    = format(dane[i]["rzeka"])
        dane[i]["wodowskaz"]= format(dane[i]["wodowskaz"])
        dostepneWodowskazy.append(dane[i]["wodowskaz"])

    # czy pojawiły się jakieś nowe wodowskazy? Jeśli tak to informacja idzie na debug
    try:
       # if os.path.isfile('/tmp/wodowskazy.tmp'):
        wodowskazyFile = open('/tmp/wodowskazy.tmp')
        zapisaneWodowskazy = wodowskazyFile.readlines()[0].split()
        noweWodowskazy = set(dostepneWodowskazy) - set(zapisaneWodowskazy)
        if len(noweWodowskazy) > 0: 
            debug.log('IMGW-HYDRO', 'nowe wodowskazy: '+" ".join( (noweWodowskazy) ),1)
    except:
        debug.log('IMGW-HYDRO', 'Nie można było porównać listy wodowskazów. Było to albo wynikiem wcześniejszych błędów albo świeżej instalacji.',1)
    finally:
        # lista dostepnych wodowskazów ląduje w pliku
        wodowskazyFile = open('/tmp/wodowskazy.tmp', 'w')
        wodowskazyFile.write(" ".join( (dostepneWodowskazy) ))
        wodowskazyFile.close()


    # jeśli w konfigu podano jakiś nieistniejący w danych wodowskaz info o tym ląduje w logu i wyświetlana jest lista poprawnych nazw wodowskazów
    if not set(config.wodowskazy).issubset(dostepneWodowskazy):
        debug.log("IMGW-HYDRO", "brak danych dla wodowskazów %s"%( set(config.wodowskazy)-set(dostepneWodowskazy) ),3)
        debug.log("IMGW-HYDRO", "dostępne wodowskazy: %s"%(" ".join( (dostepneWodowskazy) )), 1)
 
   # przy pierwszym ostrzeżeniu wyswietlany jest nagłówek
   # pierwszeOstrzezenie = True

    rzeki = {}

    for wodowskaz in config.wodowskazy:
        for linia in dane:
            if wodowskaz in linia["wodowskaz"] and 'brak' not in linia.values(): 
                if int(linia["stanWody"]) >= int(linia["stanAlarmowy"]):
                    if not rzeki.has_key(linia["rzeka"]):
                        rzeki[linia["rzeka"]]=""
                    rzeki[linia["rzeka"]] += " wodowskaz %s"%(linia["wodowskaz"])
                    if config.podajStan and len(linia["stanWody"])>0:
                        rzeki[linia["rzeka"]] += " " + lang.removeDiacritics(lang.cardinal(int(linia["stanWody"])))
                    if config.podajTendencje and len(linia["dobowaZmiana"])>0:
                        if int(linia["dobowaZmiana"])<0:
                            rzeki[linia["rzeka"]] += " tendencja_spadkowa "
                        elif int(linia["dobowaZmiana"])>0:
                            rzeki[linia["rzeka"]] += " tendencja_wzrostowa "

    # niewinny trick: jeśli było pierwsze ostrzezenie, to znaczy ze byly ostrzezenia i nalezy pod danymi podpisac IMGW
    # if rzeki != {}:
    #     data["data"] = "komunikat_hydrologiczny imgw przekroczenia_stanow_alarmowych "
    #     for rzeka in rzeki.keys():
    #         data["data"]+='rzeka ' + rzeka + rzeki[rzeka]
                        
    debug.log("IMGW-HYDRO", "finished...")

    return data