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]
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden