-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 3af9c37
Showing
5 changed files
with
231 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
import sys | ||
import Queue | ||
import syslog | ||
import weewx.restx | ||
import urllib2 | ||
|
||
|
||
# ============================================================================ | ||
# class StdRP5 | ||
# ============================================================================ | ||
|
||
class StdRP5(weewx.restx.StdRESTful): | ||
"""RESTful class for RP5""" | ||
|
||
api_url = 'http://sgate.rp5.ru' | ||
protocol_name = 'RP5-API' | ||
|
||
def __init__(self, engine, config_dict): | ||
super(StdRP5, self).__init__(engine, config_dict) | ||
|
||
_rp5_dict = weewx.restx.get_site_dict(config_dict, 'RP5', 'api_key') | ||
if _rp5_dict is None: | ||
return | ||
_rp5_dict.setdefault('server_url', StdRP5.api_url) | ||
|
||
_manager_dict = weewx.manager.get_manager_dict_from_config(config_dict, | ||
'wx_binding') | ||
|
||
self.archive_queue = Queue.Queue() | ||
self.archive_thread = RP5Thread(self.archive_queue, | ||
_manager_dict, | ||
protocol_name=StdRP5.protocol_name, | ||
**_rp5_dict) | ||
self.archive_thread.start() | ||
self.bind(weewx.NEW_ARCHIVE_RECORD, self.new_archive_record) | ||
syslog.syslog(syslog.LOG_INFO, "rp5: %s: " | ||
"Data for api key %s will be uploaded" % | ||
(StdRP5.protocol_name, _rp5_dict['api_key'])) | ||
|
||
def new_archive_record(self, event): | ||
self.archive_queue.put(event.record) | ||
|
||
|
||
# ============================================================================ | ||
# class RP5Thread | ||
# ============================================================================ | ||
|
||
class RP5Thread(weewx.restx.RESTThread): | ||
"""Class for posting data via RP5 API""" | ||
|
||
def __init__(self, queue, manager_dict, api_key, server_url, | ||
protocol_name="Unknown-RESTful", post_interval=None, | ||
max_backlog=sys.maxint, stale=None, log_success=True, | ||
log_failure=True, timeout=5, max_tries=3, retry_wait=2, | ||
skip_upload=False): | ||
|
||
super(RP5Thread, self).__init__(queue, | ||
protocol_name=protocol_name, | ||
manager_dict=manager_dict, | ||
post_interval=post_interval, | ||
max_backlog=max_backlog, | ||
stale=stale, | ||
log_success=log_success, | ||
log_failure=log_failure, | ||
timeout=timeout, | ||
max_tries=max_tries, | ||
retry_wait=retry_wait, | ||
skip_upload=skip_upload) | ||
|
||
self.api_key = api_key | ||
self.server_url = server_url | ||
|
||
_FORMATS = {'dateTime': 'updated=%i', | ||
'outTemp': 't=%.1f', | ||
'outHumidity': 'u=%.0f', | ||
'windSpeed': 'ff=%.0f', | ||
'windDir': 'dd=%.0f', | ||
'windGust': 'ff10=%.0f'} | ||
|
||
|
||
def format_url(self, incoming_record): | ||
"""Return an URL for posting """ | ||
|
||
_liststr = ["api_key=%s" % self.api_key] | ||
for _key in self._FORMATS: | ||
_v = incoming_record.get(_key) | ||
if _v is not None: | ||
_liststr.append(self._FORMATS[_key] % _v) | ||
_urlquery = '&'.join(_liststr) | ||
_url = "%s/?%s" % (self.server_url, _urlquery) | ||
if weewx.debug >= 2: | ||
syslog.syslog(syslog.LOG_DEBUG, "restx: RP5-API: url: %s" % _url) | ||
return _url | ||
|
||
def post_request(self, request, data=None): | ||
try: | ||
try: | ||
_response = urllib2.urlopen(request, timeout=self.timeout) | ||
except TypeError: | ||
_response = urllib2.urlopen(request) | ||
except urllib2.HTTPError, e: | ||
if e.code == 400 or e.code == 429: | ||
raise weewx.restx.FailedPost("server returned '%s'" % e) | ||
else: | ||
raise | ||
else: | ||
return _response |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
v0.1 06nov2018 | ||
* Initial release |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
from setup import ExtensionInstaller | ||
|
||
|
||
def loader(): | ||
return RP5Installer() | ||
|
||
|
||
class RP5Installer(ExtensionInstaller): | ||
def __init__(self): | ||
super(RP5Installer, self).__init__( | ||
version='0.1', | ||
name='rp5', | ||
description='Upload archive data to rp5.ru', | ||
author='Sapegin Oleg', | ||
author_email='[email protected]', | ||
restful_services='user.rp5.StdRP5', | ||
config={ | ||
'StdRESTful': { | ||
'RP5': { | ||
'enable': 'false', | ||
'api_key': 'ENTER_RP5_API_KEY_HERE' | ||
} | ||
} | ||
}, | ||
files=[('bin/user', ['bin/user/rp5.py'])] | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
weewx-rp5 - выгрузка данных на сайт rp5.ru. Далее Модуль. | ||
|
||
|
||
Описание: | ||
Модуль позволяет автоматически выгружать архивные данные на сайт rp5.ru, используя API (https://rp5.ru/docs/sgate/ru) | ||
|
||
Требования: | ||
Для передачи данных, необходимо предварительно получить api_key (Инструкция по получению тут | ||
https://rp5.ru/docs/sgate/ru, пункт "Регистрация") | ||
|
||
Инструкция по установке: | ||
Существует два метода установки модуля | ||
- ручной | ||
- автоматический, используя утилиту wee_extension (http://weewx.com/docs/utilities.htm#wee_extension_utility) | ||
|
||
$BIN_ROOT - директория bin утановленной версии WeeWX | ||
$DOWNLOAD_ROOT - директория для скачивания установочного файла | ||
Допустим, что $BIN_ROOT="/home/weewx/bin", а $DOWNLOAD_ROOT="/tmp" | ||
|
||
Автоматическая установка с помощью wee_extension: | ||
1. Загрузите последнюю версию Модуля https://github.com/sapegin-o1eg/weewx-rp5/releases | ||
wget -P /tmp https://github.com/sapegin-o1eg/weewx-rp5/releases/download/v0.1/weewx-rp5-0.1.tar.gz | ||
|
||
2. Остановите WeeWX | ||
sudo /etc/init.d/weewx stop | ||
или | ||
sudo service weewx stop | ||
|
||
3. Установите модуль используя утилиту wee_extension | ||
cd /home/weewx/bin | ||
./wee_extension --install=/tmp/weewx-rp5-0.1.tar.gz | ||
|
||
4. Отредактируйте конфигурационный файл weewx.conf | ||
vim /home/weewx/weewx.conf | ||
|
||
5. В файле weewx.conf под секциями [StdRESTful] [[RP5]] убедитесь, что значению enable присвоено значение true, | ||
а значению api_key присвоен Ваш api_key, полученный при регистрации (см. пункт "Требования") | ||
|
||
[[RP5]] | ||
enable = true | ||
api_key = Ваш_API_KEY | ||
|
||
6. Сохраните файл weewx.conf. | ||
|
||
7. Запустите WeeWX: | ||
sudo /etc/init.d/weewx start | ||
или | ||
sudo service weewx start | ||
|
||
8. В случае возникновения проблем с выгрузкой данных, следует указать в файле weewx.conf значение debug=2. Как | ||
следствие, в лог файле syslogd будет содержаться отладочная информация, которая, в свою очередь, будет полезна | ||
для выявления причин. | ||
|
||
Ручная установка: | ||
1. Загрузите последнюю версию Модуля https://github.com/sapegin-o1eg/weewx-rp5/releases | ||
wget -P /tmp https://github.com/sapegin-o1eg/weewx-rp5/releases/download/v0.1/weewx-rp5-0.1.tar.gz | ||
|
||
2. Остановите WeeWX | ||
sudo /etc/init.d/weewx stop | ||
или | ||
sudo service weewx stop | ||
|
||
3. Распакуйте установочный файл | ||
tar xvfz weewx-rp5-0.1.tar.gz | ||
|
||
4. Скопируйте распакованные файлы | ||
cp weewx-rp/bin/user/*.py /home/weewx/bin/user | ||
|
||
5. Отредактируйте конфигурационный файл weewx.conf | ||
vim weewx.conf | ||
|
||
6. В файле weewx.conf, под секциями [StdRESTful] [[RP5]] убедитесь, что значению enable присвоено значение true, | ||
а значению api_key присвоен Ваш api_key, полученный при регистрации (см. пункт "Требования") | ||
|
||
[[RP5]] | ||
enable = true | ||
api_key = Ваш_API_KEY | ||
|
||
7. В файле weewx.conf, под секцией [Services] добавьте user.rp5.StdRP5 в список restful_services: | ||
|
||
[Services] | ||
... | ||
restful_services = ..., user.rp5.StdRP5 | ||
... | ||
|
||
8. Сохраните файл weewx.conf. | ||
|
||
9. Запустите WeeWX: | ||
sudo /etc/init.d/weewx start | ||
или | ||
sudo service weewx start | ||
|
||
10. В случае возникновения проблем с выгрузкой данных, следует указать в файле weewx.conf значение debug=2. Как | ||
следствие, в лог файле syslogd будет содержаться отладочная информация, которая, в свою очередь, будет полезна | ||
для выявления причин. |