Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
sapegin-o1eg committed Nov 6, 2018
0 parents commit 3af9c37
Show file tree
Hide file tree
Showing 5 changed files with 231 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.idea
107 changes: 107 additions & 0 deletions bin/user/rp5.py
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
2 changes: 2 additions & 0 deletions changelog
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
v0.1 06nov2018
* Initial release
26 changes: 26 additions & 0 deletions install.py
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'])]
)
95 changes: 95 additions & 0 deletions readme.txt
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 будет содержаться отладочная информация, которая, в свою очередь, будет полезна
для выявления причин.

0 comments on commit 3af9c37

Please sign in to comment.