kopia lustrzana https://github.com/sq9atk/sr0wx
170 wiersze
6.3 KiB
Python
Executable File
170 wiersze
6.3 KiB
Python
Executable File
#!/usr/bin/python -tt
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright 2009-2012 Michal Sadowski (sq6jnx at hamradio dot pl)
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
import urllib2
|
|
import re
|
|
import json
|
|
import logging
|
|
import base64
|
|
import subprocess
|
|
|
|
from sr0wx_module import SR0WXModule
|
|
|
|
class ImgwPodestSq9atk(SR0WXModule):
|
|
"""Klasa przetwarza dane informujące o przekroczeniach stanów rzek w regionie."""
|
|
|
|
def __init__(self, wodowskazy):
|
|
self.__wodowskazy = wodowskazy
|
|
self.__logger = logging.getLogger(__name__)
|
|
|
|
def zaladujWybraneWodowskazy(s):
|
|
global wodowskazy
|
|
s.__logger.info("::: Pobieram dane o wodowskazach...")
|
|
try:
|
|
jsonData = json.dumps(s.__wodowskazy, separators=(',', ':'))
|
|
b64data = base64.urlsafe_b64encode(jsonData)
|
|
proc = subprocess.Popen("php imgw_podest_sq9atk.php "+b64data, shell=True, stdout=subprocess.PIPE)
|
|
|
|
dane = proc.stdout.read()
|
|
s.__logger.info("::: Przetwarzam...")
|
|
wodowskazy = json.loads(dane)
|
|
|
|
except:
|
|
s.__logger.info("Nie udało się pobrać danych o wodowskazach!")
|
|
|
|
def bezpiecznaNazwa(s, nazwa):
|
|
return unicode(nazwa, 'utf-8').lower().\
|
|
replace(u'ą',u'a_').replace(u'ć',u'c_').\
|
|
replace(u'ę',u'e_').replace(u'ł',u'l_').\
|
|
replace(u'ń',u'n_').replace(u'ó',u'o_').\
|
|
replace(u'ś',u's_').replace(u'ź',u'z_').\
|
|
replace(u'ż',u'z_').replace(u' ',u'_').\
|
|
replace(u'-',u'_').replace(u'(',u'').\
|
|
replace(u')',u'')
|
|
|
|
def pobierzDaneWodowskazu(s, wodowskaz):
|
|
global wodowskazy
|
|
|
|
if '.' in wodowskaz:
|
|
wodowskaz = wodowskaz.split('.')[1]
|
|
|
|
dane = wodowskazy[wodowskaz]
|
|
|
|
# omijanie zrypanych wodowskazów
|
|
#elif dane['poziom_alarmowy'] == None:
|
|
# stan = ""
|
|
#elif dane['poziom_ostrzegawczy'] == None:
|
|
# stan = ""
|
|
|
|
if dane['stan_cm'] > dane['poziom_alarmowy']:
|
|
stan = "alarmowy"
|
|
elif dane['stan_cm'] > dane['poziom_ostrzegawczy']:
|
|
stan = "ostrzegawczy"
|
|
else:
|
|
stan = ""
|
|
|
|
|
|
if dane['tendencja'] == 1:
|
|
tendencja = "tendencja_wzrostowa"
|
|
elif dane['tendencja'] == -1:
|
|
tendencja = "tendencja_spadkowa"
|
|
else:
|
|
tendencja = ""
|
|
|
|
return {'numer': wodowskaz,
|
|
'nazwa': dane['nazwa'].strip().encode("utf-8"),
|
|
'nazwa_org': dane['nazwa'].lower().encode("utf-8"),
|
|
'rzeka': dane['rzeka'].strip().encode("utf-8"),
|
|
'stan': dane['stan_cm'],
|
|
'przekroczenieStanu': stan,
|
|
# 'przekroczenieStanuStan': stan,
|
|
'tendencja': tendencja }
|
|
|
|
|
|
|
|
def get_data(s):
|
|
|
|
stanyOstrzegawcze = {}
|
|
stanyAlarmowe = {}
|
|
|
|
zaladowaneRegiony = []
|
|
s.zaladujWybraneWodowskazy()
|
|
|
|
for wodowskaz in s.__wodowskazy:
|
|
region = wodowskaz.split('.')[0]
|
|
|
|
if region not in zaladowaneRegiony:
|
|
zaladowaneRegiony.append(region)
|
|
#w = s.pobierzDaneWodowskazu(wodowskaz)
|
|
try:
|
|
w = s.pobierzDaneWodowskazu(wodowskaz)
|
|
rzeka = w['rzeka']
|
|
w['rzeka'] = s.bezpiecznaNazwa(w['rzeka'])
|
|
w['nazwa'] = s.bezpiecznaNazwa(w['nazwa'])
|
|
|
|
if w['przekroczenieStanu'] == 'ostrzegawczy':
|
|
s.__logger.info("::: Stan ostrzegawczy: " + wodowskaz + " - " + rzeka + ' - ' + w['nazwa_org'])
|
|
if not stanyOstrzegawcze.has_key(w['rzeka']):
|
|
stanyOstrzegawcze[w['rzeka']] = [w['nazwa']+ ' ' + w['tendencja'] + ' _ ']
|
|
|
|
else:
|
|
stanyOstrzegawcze[w['rzeka']].append(w['nazwa']+ ' ' + w['tendencja'] + ' _ ')
|
|
|
|
elif w['przekroczenieStanu'] == 'alarmowy':
|
|
s.__logger.info("::: Stan alarmowy: "+ wodowskaz+" - " + rzeka + ' - ' + w['nazwa_org'])
|
|
if not stanyAlarmowe.has_key(w['rzeka']):
|
|
stanyAlarmowe[w['rzeka']] = [w['nazwa']+ ' ' + w['tendencja'] + ' _ ']
|
|
|
|
else:
|
|
stanyAlarmowe[w['rzeka']].append(w['nazwa']+ ' ' + w['tendencja'] + ' _ ')
|
|
|
|
else:
|
|
a=1
|
|
#s.__logger.info("Przetwarzam wodowskaz: " + wodowskaz + " - " + rzeka + ' - ' + w['nazwa_org'])
|
|
except:
|
|
s.__logger.info("::: Brak danych!!! "+ wodowskaz )
|
|
pass
|
|
|
|
message = "";
|
|
if stanyOstrzegawcze!={} or stanyAlarmowe!={}:
|
|
message += 'komunikat_hydrologiczny_imgw _ '
|
|
|
|
if stanyAlarmowe!={}:
|
|
# Sprawdzenie dla których wodowskazów mamy przekroczone
|
|
# stany alarmowe -- włącz ctcss
|
|
|
|
message +=' przekroczenia_stanow_alarmowych '
|
|
for rzeka in sorted(stanyAlarmowe.keys()):
|
|
message +=' rzeka %s wodowskaz %s '%(rzeka, \
|
|
" wodowskaz ".join(sorted(stanyAlarmowe[rzeka])),)
|
|
|
|
if stanyOstrzegawcze!={}:
|
|
message += '_ przekroczenia_stanow_ostrzegawczych '
|
|
for rzeka in sorted(stanyOstrzegawcze.keys()):
|
|
message += 'rzeka %s wodowskaz %s '%(format(rzeka), \
|
|
" wodowskaz ".join([format(w) for w in sorted(stanyOstrzegawcze[rzeka])]),)
|
|
|
|
s.__logger.info("::: Przekazuję przetworzone dane...\n")
|
|
|
|
message += ' _ '
|
|
|
|
return {
|
|
"message": message,
|
|
"source": "imgw",
|
|
}
|