Народный мониторинг. Скрипт для отправки показаний датчиков на python

В связи с тем, что с передачей данных с датчиков по протоколу TCP сегодня у ресурса narodmon.ru наблюдались проблемы, было решено немного освоить Python и отныне передавать данные на сервис я буду по методу POST.
Текст скрипта и комментарии ниже.

Немного подредактировал под свои нужды (чтение данных из txt файлов, ну и добавил третий датчик).

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# by Roman Vishnevsky aka.x0x01 @ gmail.com

import urllib2
import urllib

# MAC адрес устройства. Заменить на свой!
DEVICE_MAC = '123456789012'

# идентификатор устройства, для простоты добавляется 01 (02) к mac устройства
SENSOR_ID_1 = DEVICE_MAC + '01'
SENSOR_ID_2 = DEVICE_MAC + '02'
SENSOR_ID_3 = DEVICE_MAC + '03'

f1 = open('/path/to/file/temp.txt', 'r')
f2 = open('/path/to/file/temp.txt', 'r')
f3 = open('/path/to/file/temp.txt', 'r')

# значения датчиков, тип float/integer
sensor_value_1 = f1.read()
sensor_value_2 = f2.read()
sensor_value_3 = f3.read()

# формирование POST запроса для единичного датчика
# data = urllib.urlencode({
#     'ID': DEVICE_MAC,
#     SENSOR_ID_1: sensor_value_1
# })

# формирование POST запроса для 3х датчиков
data = urllib.urlencode({
    'ID': DEVICE_MAC,
    SENSOR_ID_1: sensor_value_1,
    SENSOR_ID_2: sensor_value_2,
    SENSOR_ID_3: sensor_value_3
})


# формирование заголовков запроса
headers = {
    'Content-Length': str(len(data)),
    'Content-Type': 'application/x-www-form-urlencoded',
    'Host': 'narodmon.ru'
}

# непосредственно запрос
request = urllib2.Request('http://narodmon.ru/post.php', data, headers)
response = urllib2.urlopen(request)
print response.headers

Обратите внимание на пробелы в начале строк с кодом — их не должно быть. Питон коварная штука.

Ну и поместим скрипт в crontab, чтобы по расписанию выполнялся.

*/5 * * * *    root    /usr/bin/python /path/to/script/narodmon.py       >/dev/null 2>&1

>/dev/null 2>&1 — чтобы надоедливый CRON не присылал нам сообщения об успешном выполнении задания. Ибо надоел уже.

Как обычно — вопросы в комментарии.

Добавить комментарий