kopia lustrzana https://github.com/sq9atk/sr0wx
Porównaj commity
5 Commity
676949238c
...
4a26950146
Autor | SHA1 | Data |
---|---|---|
sq9atk | 4a26950146 | |
sq9atk | e30bee6eb8 | |
sq9atk | 613757d0be | |
sq9atk | c3284ef070 | |
sq9atk | 9bc0cdfd1e |
32
config.py
32
config.py
|
@ -55,7 +55,7 @@ log_handlers = [{
|
|||
}
|
||||
}]
|
||||
|
||||
ctcss_tone = 88.5
|
||||
ctcss_tone = 0
|
||||
serial_port = '/dev/ttyS0'
|
||||
serial_baud_rate = 9600
|
||||
serial_signal = 'DTR' # lub 'RTS'
|
||||
|
@ -100,6 +100,34 @@ openweathersq9atk = OpenWeatherSq9atk(
|
|||
service_url = 'http://api.openweathermap.org/data/2.5/'
|
||||
)
|
||||
|
||||
# ---------------
|
||||
# meteoalarm_sq9atk
|
||||
# ---------------
|
||||
from meteoalarm_sq9atk import MeteoalarmSq9atk
|
||||
meteoalarmsq9atk = MeteoalarmSq9atk(
|
||||
language = pl_google,
|
||||
service_url="https://www.meteoalarm.pl/index.php?w=",
|
||||
region_id='12'
|
||||
)
|
||||
# '14':'mazowieckie',
|
||||
# '08':'lubuskie',
|
||||
# '32':'zachodniopomorskie',
|
||||
# '22':'pomorskie',
|
||||
# '02':'dolnoslaskie',
|
||||
# '16':'opolskie',
|
||||
# '24':'slaskie',
|
||||
# '12':'malopolskie',
|
||||
# '18':'podkarpackie',
|
||||
# '26':'swietokrzyskie',
|
||||
# '10':'lodzkie',
|
||||
# '14':'wielkopolskie',
|
||||
# '04':'kujawsko-pomorskie',
|
||||
# '28':'warminsko-mazurskie',
|
||||
# '06':'lubelskie',
|
||||
# '20':'podlaskie',
|
||||
|
||||
|
||||
|
||||
# -------------
|
||||
# imgw_podest_sq9atk
|
||||
# ------------
|
||||
|
@ -375,6 +403,6 @@ modules = [
|
|||
vhftroposq9atk, # vhf tropo propagacja
|
||||
propagationsq9atk, # propagacja KF
|
||||
geomagneticsq9atk, # zaburzenia geomagnetyczne
|
||||
radioactivesq9atk, # promieniowanie jonizujące
|
||||
#radioactivesq9atk, # promieniowanie jonizujące
|
||||
calendarsq9atk, # wschód słońca
|
||||
]
|
||||
|
|
|
@ -94,9 +94,7 @@ class ImgwPodestSq9atk(SR0WXModule):
|
|||
'przekroczenieStanu': stan,
|
||||
# 'przekroczenieStanuStan': stan,
|
||||
'tendencja': tendencja }
|
||||
|
||||
|
||||
|
||||
|
||||
def get_data(s):
|
||||
|
||||
stanyOstrzegawcze = {}
|
||||
|
@ -140,14 +138,10 @@ class ImgwPodestSq9atk(SR0WXModule):
|
|||
s.__logger.info("::: Brak danych!!! "+ wodowskaz )
|
||||
pass
|
||||
|
||||
message = "_ _ ";
|
||||
if stanyOstrzegawcze!={} or stanyAlarmowe!={}:
|
||||
message += 'komunikat_hydrologiczny_imgw _ '
|
||||
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, \
|
||||
|
@ -158,11 +152,12 @@ class ImgwPodestSq9atk(SR0WXModule):
|
|||
for rzeka in sorted(stanyOstrzegawcze.keys()):
|
||||
message += 'rzeka %s wodowskaz %s '%(format(rzeka), \
|
||||
" wodowskaz ".join([format(w) for w in sorted(stanyOstrzegawcze[rzeka])]),)
|
||||
message += ' '
|
||||
else:
|
||||
message = ' '
|
||||
|
||||
s.__logger.info("::: Przekazuję przetworzone dane...\n")
|
||||
|
||||
message += ' _ '
|
||||
|
||||
return {
|
||||
"message": message,
|
||||
"source": "imgw",
|
||||
|
|
|
@ -0,0 +1,98 @@
|
|||
#!/usr/bin/python -tt
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import re
|
||||
import logging
|
||||
import socket
|
||||
import requests
|
||||
|
||||
from pprint import pprint
|
||||
|
||||
from sr0wx_module import SR0WXModule
|
||||
|
||||
class MeteoalarmSq9atk(SR0WXModule):
|
||||
"""Klasa pobierająca informacje z meteoalarm.pl"""
|
||||
|
||||
def __init__(self, language, service_url, region_id):
|
||||
self.__service_url = service_url
|
||||
self.__language = language
|
||||
self.__region_id = region_id
|
||||
self.__logger = logging.getLogger(__name__)
|
||||
|
||||
self.__levels = { '1' : 'niski', '2' : 'sredni', '3' : 'wysoki' }
|
||||
self.__regions = {
|
||||
'14':'mazowieckiego', '08':'lubuskiego', '32':'zachodniopomorskiego',
|
||||
'22':'pomorskiego', '02':'dolnoslaskiego', '16':'opolskiego',
|
||||
'24':'slaskiego', '12':'malopolskiego', '18':'podkarpackiego',
|
||||
'26':'swietokrzyskiego', '10':'lodzkiego', '14':'wielkopolskiego',
|
||||
'04':'kujawsko-pomorskiego', '28':'warminsko-mazurskiego', '06':'lubelskiego',
|
||||
'20':'podlaskiego',
|
||||
}
|
||||
self.__warnings = {
|
||||
'o01': 'burze', 'o02': 'deszcz_i_grad', 'o03': 'mgla',
|
||||
'o06': 'ulewny_deszcz', 'o08': 'zamiec_sniezna', 'o04': 'marznaca_mgla',
|
||||
'o11': 'snieg_lub_oblodzenie', 'o07': 'marznacy_deszcz', 'o08': 'sniezyca',
|
||||
'o09': 'przymrozki', 'o10': 'roztopy', 'o05': 'niskie_temperatury',
|
||||
'o13': 'silny_wiatr', 'o12': 'wysokie_temperatury', 'o14': 'zawieje_sniezne'
|
||||
}
|
||||
|
||||
def getHtmlFromUrl(self, url):
|
||||
try:
|
||||
self.__logger.info("::: Odpytuję adres: " + url)
|
||||
resp = requests.get(url)
|
||||
if resp.status_code == 200:
|
||||
return resp.content
|
||||
else:
|
||||
print("HTML response error")
|
||||
return None
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print("HTML download error: %s" % e)
|
||||
return None
|
||||
|
||||
|
||||
def findDataInHtml(self, html):
|
||||
self.__logger.info("::: Przetwarzam dane...\n")
|
||||
patternTable = re.compile(r'<table[^>]*class="[^>]*meteo_table[^>]*"[^>]*>.*?</table>', re.DOTALL)
|
||||
matchTable = patternTable.search(html)
|
||||
|
||||
if matchTable:
|
||||
tableHtml = matchTable.group(0)
|
||||
|
||||
levelMatch = re.search(r'<b>(\d+)</b>', tableHtml, re.DOTALL)
|
||||
level = levelMatch.group(1) if levelMatch else None
|
||||
|
||||
imgMatch = re.search(r'<div class="zagrozenia-ikony">(.*?)</div>', tableHtml, re.DOTALL)
|
||||
images = re.findall(r'<img.*?src="images/(.*?).png"', imgMatch.group(1)) if imgMatch else []
|
||||
|
||||
# Wypisujemy nazwy plików zamiast atrybutów alt
|
||||
return [level, images]
|
||||
else:
|
||||
return []
|
||||
|
||||
|
||||
def get_data(self):
|
||||
self.__logger.info("::: Pobieram dane o zagrożeniach...")
|
||||
html = self.getHtmlFromUrl(self.__service_url + str(self.__region_id))
|
||||
|
||||
data = self.findDataInHtml(html)
|
||||
level = data[0]
|
||||
warnings = data[1]
|
||||
|
||||
message = ''
|
||||
|
||||
if level and len(warnings) > 0:
|
||||
message += " ".join([
|
||||
' _ zagrozenia_meteorologiczne_dla_wojewodztwa ',
|
||||
self.__regions[self.__region_id],
|
||||
' _ ',
|
||||
' '.join(self.__warnings[key] for key in warnings),
|
||||
' _ poziom_zagrozenia ',
|
||||
' '.join([self.__levels[level]]),
|
||||
' _ '
|
||||
])
|
||||
|
||||
return {
|
||||
"message": message,
|
||||
"source": "meteoalarm_pl",
|
||||
}
|
|
@ -127,7 +127,7 @@ class OpenWeatherSq9atk(SR0WXModule):
|
|||
|
||||
def getWind(self, json):
|
||||
msg = ' _ ';
|
||||
msg += ' predkosc_wiatru '
|
||||
msg += ' predkosc_wiatru '
|
||||
msg += ' ' + self.__language.read_speed( int(json['speed']) )
|
||||
msg += ' ' + self.__language.read_speed( int(json['speed']/1000*3600),'kmph')
|
||||
|
||||
|
@ -189,8 +189,6 @@ class OpenWeatherSq9atk(SR0WXModule):
|
|||
self.getWind( forecastJson['wind'] ), \
|
||||
])
|
||||
|
||||
self.__logger.info("::: Przetwarzam dane...\n")
|
||||
|
||||
return {
|
||||
"message": message,
|
||||
"source": "open_weather_map",
|
||||
|
|
|
@ -44,9 +44,9 @@ class PropagationSq9atk(SR0WXModule):
|
|||
webFile.retrieve(url, "propagacja.png")
|
||||
return Image.open("propagacja.png",'r')
|
||||
except socket.timeout:
|
||||
print "Timed out!"
|
||||
print "Timed out!\n"
|
||||
except:
|
||||
print "Data download error!"
|
||||
print "Data download error!\n"
|
||||
return
|
||||
|
||||
def collectBandConditionsFromImage(self, image, dayTime):
|
||||
|
@ -84,24 +84,24 @@ class PropagationSq9atk(SR0WXModule):
|
|||
def get_data(self):
|
||||
image = self.downloadImage(self.__service_url)
|
||||
|
||||
self.__logger.info("::: Przetwarzam dane...\n")
|
||||
message = '';
|
||||
if image:
|
||||
self.__logger.info("::: Przetwarzam dane...\n")
|
||||
|
||||
day = self.collectBandConditionsFromImage(image, 'day')
|
||||
night = self.collectBandConditionsFromImage(image, 'night')
|
||||
day = self.collectBandConditionsFromImage(image, 'day')
|
||||
night = self.collectBandConditionsFromImage(image, 'night')
|
||||
|
||||
if len(day) and len(night):
|
||||
message = " ".join([
|
||||
" _ informacje_o_propagacji ",
|
||||
" _ dzien _ ",
|
||||
" _ pasma _ ",
|
||||
" _ " .join( day ),
|
||||
" _ noc _ ",
|
||||
" _ pasma _ ",
|
||||
" _ " .join( night ),
|
||||
" _ "
|
||||
])
|
||||
else:
|
||||
message = ''
|
||||
if len(day) and len(night):
|
||||
message = " ".join([
|
||||
" _ informacje_o_propagacji ",
|
||||
" _ dzien _ ",
|
||||
" _ pasma _ ",
|
||||
" _ " .join( day ),
|
||||
" _ noc _ ",
|
||||
" _ pasma _ ",
|
||||
" _ " .join( night ),
|
||||
" _ "
|
||||
])
|
||||
|
||||
return {
|
||||
"message": message,
|
||||
|
|
|
@ -81,7 +81,7 @@ class VhfTropoSq9atk(SR0WXModule):
|
|||
return mapCropped
|
||||
|
||||
def lonLatToMapXY(self, lon, lat, imgWidth, imgHeight):
|
||||
self.__logger.info("::: Przetwarzam dane...")
|
||||
self.__logger.info("::: Przetwarzam dane..\n.")
|
||||
imgWidth = float(imgWidth)
|
||||
imgHeight = float(imgHeight)
|
||||
lonRange = self.__mapLonEnd - self.__mapLonStart
|
||||
|
|
Ładowanie…
Reference in New Issue