Сделаем ещё одну полезную штуку для нашей метеостанции — выведем показания датчиков на карту сервиса «Народный мониторинг». Этот сервис собирает данные о погоде с полутора тысяч датчиков по всему миру — в основном, конечно в России и СНГ. Сайт предлагает не очень удобное 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);
Вот и всё!