NEWS
Скрипт для Narodmon.ru
-
Скрипт для забора данных датчика с narodmon.ru.
Запрос данных каждые 5 мин.
api_key подставляем свой, получаемый в разделе Мои Приложения после регистрации в проекте.
ID датчика смотрим тут.
schedule("*/5 * * * *", function () { //запускаем наш скрипт каждые 5 мин createState('Narodmon.sensor.temp', ''); //Создаем переменную в iobroker var request = require('request'); var crypto = require('crypto'); var random = Math.random().toString(); // создаем переменную случайного числа и преобразуем ее в строку var hash = crypto.createHash('md5').update(random).digest('hex'); //генерируем md5 в переменную hash request({ //Отправляем запрос на narodmon url: 'http://narodmon.ru/api', //URL api народного мониторинга method: 'POST', // Метод POST json: { // запрос в формате json "cmd":"sensorsValues", "sensors":"12345", //ID датчика. (вместо 12345 подставить нужный нам ID датчика) "uuid":hash, //наш сгенерированный MD5 "api_key":"123456789ABCDF", // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте. "lang":"ru" } }, function(error, response, body){ //обрабатываем результат if(error) { log(error); //выводим в лог в случаи ошибки ответа от сервера } else { log(JSON.stringify(body)); //выводим в лог ответа в виде строки. var sensor = body.sensors[0].value; //вытаскиваем наше значение из ответа от сервера setState("javascript.0.Narodmon.sensor.temp"/*Narodmon.sensor.temp*/, sensor); Записываем значение в переменную iobroker } }); });
-
Здравствуйте, я ваш скрипт немного поправил, чтобы несколько датчиков опрашивать
`schedule("*/5 * * * *", function () { var IDs = '12345,6789'; //ID датчика. (вместо 12345 и 6789 подставить нужные нам ID датчиков, последующий датчик указать через запятую) var apiKey = "123456789ABCDF"; // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте. var request = require('request'); var crypto = require('crypto'); var hash = crypto.createHash('md5').update(apiKey).digest('hex'); request({ url: 'http://narodmon.ru/api', method: 'POST', json: { "cmd":"sensorsValues", "sensors":IDs, "uuid":hash, "api_key":apiKey, "lang":"ru" } }, function(error, response, body){ if(error) { log(error); } else { log(JSON.stringify(body)); for (var i = 0; i < body.sensors.length; i++) { var valueSensor = Math.round(body.sensors[i].value); //тут еще округление результата идет var idSensor = body.sensors[i].id; createState("Narodmon.sensor." + idSensor, ''); setState("javascript.0.Narodmon.sensor." + idSensor, valueSensor); } } }); });` Не совсем понятно как при создании сразу тип указать, чтобы уже сразу правильно было С уважением[/i][/i]
-
Я бы поменял так:
`var request = require('request'); var crypto = require('crypto'); var IDs = ['12345', '6789']; // ID датчиков. (вместо 12345 и 6789 подставить нужные нам ID датчиков, как массив) var apiKey = '123456789ABCDF'; // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте. var hash = crypto.createHash('md5').update(apiKey).digest('hex'); for (var i = 0; i < IDs.length; i++) { createState('narodmon.sensor.' + IDs[i], { name: 'Sensor from narodmon', type: 'number', role: 'level.temperature', read: true, unit: 'C°', write: false }); } // every 5 minutes schedule('*/5 * * * *', function () { request({ url: 'http://narodmon.ru/api', method: 'POST', json: { cmd: 'sensorsValues', sensors: IDs.join(','), uuid: hash, api_key: apiKey, lang: 'ru' } }, function(error, response, body) { if (error || !body || !body.sensors) { console.error(error || JSON.stringify(body)); } else { console.log(JSON.stringify(body)); for (var i = 0; i < body.sensors.length; i++) { var valueSensor = Math.round(body.sensors[i].value * 10) / 10; // round to 0.1 step setState('javascript.0.narodmon.sensor.' + body.sensors[i].id, valueSensor, true); } } }); });`[/i][/i][/i]
-
C кодом Bluefox не заработало. Сервер народного мониторинга отдает данные но с ошибкой
javascript.0 2017-01-20 11:26:00.593 error script.js.common.narodmon: "{"error":"NO_USER_AGENT","errno":400}{"sensors":[{"id":2709,"value":0.4,"time":1484900366},{"id":19004,"value":0,"time":1484900404}]}"
Вот что написано на сайте Народного мониторинга - Без HTTP-заголовка User-Agent: MyAppName (название Вашего приложения на латинице) веб-сервер может счесть запрос за "мусорный".
Исправил вот так:
`var request = require('request'); var crypto = require('crypto'); var IDs = ['12345', '6789']; // ID датчиков. (вместо 12345 и 6789 подставить нужные нам ID датчиков, как массив) var apiKey = '123456789ABCDF'; // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте. var hash = crypto.createHash('md5').update(apiKey).digest('hex'); for (var i = 0; i < IDs.length; i++) { createState('narodmon.sensor.' + IDs[i], { name: 'Sensor from narodmon', type: 'number', role: 'level.temperature', read: true, unit: 'C°', write: false }); } // every 5 minutes schedule('*/5 * * * *', function () { request({ url: 'http://narodmon.ru/api', method: 'POST', headers: ({'User-Agent': 'Name_Of_Your_App'}), // Заменить Name_Of_Your_App на название Вашего приложения на латинице json: { cmd: 'sensorsValues', sensors: IDs.join(','), uuid: hash, api_key: apiKey, lang: 'ru' } }, function(error, response, body) { if (error || !body || !body.sensors) { console.error(error || JSON.stringify(body)); } else { console.log(JSON.stringify(body)); for (var i = 0; i < body.sensors.length; i++) { var valueSensor = Math.round(body.sensors[i].value * 10) / 10; // round to 0.1 step setState('javascript.0.narodmon.sensor.' + body.sensors[i].id, valueSensor, true); } } }); });`[/i][/i][/i]
-
Чутка перепилил скрипт. Указываете несколько датчиков и скрипт считает среднее значение температуры. На мой взгляд так получится точнее)
`var request = require('request'); var crypto = require('crypto'); var IDs = ['12345','6789']; // ID датчиков. (вместо 12345 и 6789 подставить нужные нам ID датчиков, как массив) var apiKey = '23456789ABCD'; // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте. var hash = crypto.createHash('md5').update(apiKey).digest('hex'); createState('narodmon.sensor.mid', { name: 'Sensor from narodmon', type: 'number', role: 'level.temperature', read: true, unit: 'C°', write: false }); // every 5 minutes schedule('*/5 * * * *', function () { request({ url: 'http://narodmon.ru/api', method: 'POST', headers: ({'User-Agent': 'Name_Of_Your_App'}), // Заменить Name_Of_Your_App на название Вашего приложения на латинице json: { cmd: 'sensorsValues', sensors: IDs.join(','), uuid: hash, api_key: apiKey, lang: 'ru' } }, function(error, response, body) { if (error || !body || !body.sensors) { console.error(error || JSON.stringify(body)); } else { //console.log(JSON.stringify(body)); var summval = 0; for (var i = 0; i < body.sensors.length; i++) { var valueSensor = Math.round(body.sensors[i].value * 10) / 10; // round to 0.1 step summval = summval + valueSensor; } var midval = summval / body.sensors.length; setState('javascript.0.narodmon.sensor.mid', Math.round(midval * 10) / 10, true); } }); });` [/i]