Подключение метеостанции к «Народному мониторингу»

Сделаем ещё одну полезную штуку для нашей метеостанции — выведем показания датчиков на карту сервиса «Народный мониторинг». Этот сервис собирает данные о погоде с полутора тысяч датчиков по всему миру — в основном, конечно в России и СНГ. Сайт предлагает не очень удобное TCP API для отправки показаний, и более удобное REST API для получения данных с сервиса.

Для начала нужно зарегистрироваться, пароль придёт на почту. Для отправки данных проект предлагает отправлять прямо на адрес narodmon.ru по протоколу TCP пакет данных такого вида:

#AA-BB-CC-DD-EE-FF
#AABBCCDDEEFF01#25.5
#AABBCCDDEEFF02#101325
##

Где:

  • AA-BB-CC-DD-EE-FF — ваш уникальный номер, удобно использовать MAC-адрес сетевой карты
  • AABBCCDDEEFF01 — номер первого датчика, можно взять ваш уникальный номер и добавить к нему 01
  • 25.5 — показания первого датчика, к примеру термометра
  • AABBCCDDEEFF02 — номер второго датчика, можно взять ваш уникальный номер и добавить к нему 02
  • 101325 — показания второго датчика, к примеру барометра

Количество датчиков может быть любым, просто добавьте строчки с номерами и показаниями, и не забудьте в конце посылки отправить две решётки. Впрочем, о неверном формате данных сервер сообщит вам на e-mail.

Есть также второй, немного более удобный способ — передача данных POST-запросом на URL http://narodmon.ru/post.php, но он назван резервным. Конечно, проект заявляет о радикальном уменьшении объёма передаваемых данных, а POST-запрос имеет двукратный оверхед. Хотя при питании от розетки это не так уж важно. POST-метод можно проверить, например, файрфоксовским расширением Poster.

Ещё один момент — сайт просит не спамить его данными, и отправлять их не чаще раза в пять минут.

После отправки первой порции данных зайдите на сайт мониторинга, «Мои данные» -> «Мои датчики», там будут оба датчика. Дайте им имена и укажите тип, сделайте их публичными — готово! Кстати, последние пришедшие данные можно проверить по адресу http://narodmon.ru/ip.php — там отображаются данные, пришедшие с вашего IP, это удобно при тестировании передачи.

Вот и весь протокол, добавим его поддержку в наш проект метеостанции! Благодаря модулю net это будет всего несколько строк.

Сначала подключим модуль:

var net = require('net');
var tcp = new net.Socket();

Опишем функцию отправки:

function narodMon() {
tcp.connect(8283, 'narodmon.ru', function() {
tcp.write('#AA-BB-CC-DD-EE-FF\n#AABBCCDDEEFF01#' + thermo[0] + '\n#AABBCCDDEEFF02#' + thermo[1] + '\n#AABBCCDDEEFF03#' + thermo[2] + '\n##');
console.log('connect');
tcp.destroy();
});
}

И запланируем её выполнение каждые 5 минут:

setInterval(narodMon, 5*60*1000);

Вот и всё!