kopia lustrzana https://github.com/sq9atk/sr0wx
92 wiersze
3.0 KiB
Python
Executable File
92 wiersze
3.0 KiB
Python
Executable File
#!/usr/bin/python -tt
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import urllib2
|
|
import re
|
|
import logging
|
|
import pytz
|
|
import socket
|
|
|
|
from datetime import datetime
|
|
from sr0wx_module import SR0WXModule
|
|
|
|
class RadioactiveSq9atk(SR0WXModule):
|
|
"""Klasa pobierająca dane o promieniowaniu"""
|
|
|
|
def __init__(self,language,service_url,sensor_id):
|
|
self.__service_url = service_url
|
|
self.__sensor_id = sensor_id
|
|
self.__language = language
|
|
self.__logger = logging.getLogger(__name__)
|
|
|
|
def downloadFile(self, url):
|
|
try:
|
|
self.__logger.info("::: Odpytuję adres: " + url)
|
|
webFile = urllib2.urlopen(url, None, 30)
|
|
return webFile.read()
|
|
except urllib2.URLError, e:
|
|
print e
|
|
except socket.timeout:
|
|
print "Timed out!"
|
|
return ""
|
|
|
|
def isSensorMatchedById(self, sensorId, string):
|
|
pos = string.find("Details sensor "+str(sensorId))
|
|
return pos >= 0
|
|
|
|
def isSensorRow(self, string):
|
|
string = " "+string # na początku trzeba dodac spację bo inaczej find nie znajduje pierwszego znaku
|
|
pos = string.find("Last sample")
|
|
return pos >= 0
|
|
|
|
def cleanUpString(self, string):
|
|
string = string.replace("<br />","<br/>")
|
|
string = string.replace("<br>","<br/>")
|
|
string = string.replace("'","")
|
|
|
|
return string
|
|
|
|
def extractSensorData(self, string):
|
|
string = self.cleanUpString(string)
|
|
tmpArr = string.split("<br/>")
|
|
|
|
arrPart = tmpArr[0].split(".bindPopup(")
|
|
tmpArr[0] = arrPart[1]
|
|
|
|
tmpCurrent = tmpArr[0].split("Last sample: ");
|
|
tmpAverage = tmpArr[2].split("24 hours average: ");
|
|
|
|
current = tmpCurrent[1].split(" ")[0]
|
|
average = tmpAverage[1].split(" ")[0]
|
|
|
|
return {"current":current, "average": average}
|
|
|
|
def getSensorData(self, html):
|
|
dataArr = html.split("L.marker([")
|
|
ret = {}
|
|
for row in dataArr:
|
|
if self.isSensorRow(row):
|
|
if self.isSensorMatchedById(self.__sensor_id, row):
|
|
ret = self.extractSensorData(row)
|
|
return ret
|
|
|
|
def get_data(self):
|
|
self.__logger.info("::: Pobieram dane...")
|
|
html = self.downloadFile(self.__service_url)
|
|
|
|
self.__logger.info("::: Przetwarzam dane...\n")
|
|
data = self.getSensorData(html)
|
|
|
|
msvCurrent = int(float(data['current'])*100)
|
|
msvAverage = int(float(data['average'])*100)
|
|
|
|
averageValue = " ".join(["wartos_c__aktualna",self.__language.read_decimal( msvCurrent )+" ","mikrosjiwerta","na_godzine_"])
|
|
currentValue = " ".join(["s_rednia_wartos_c__dobowa",self.__language.read_decimal( msvAverage )+" ","mikrosjiwerta","na_godzine_"])
|
|
|
|
message = " ".join([" _ poziom_promieniowania _ " ,averageValue ," _ " ,currentValue ," _ "])
|
|
|
|
return {
|
|
"message": message,
|
|
"source": "radioactiveathome_org",
|
|
}
|