Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Скрипт для Narodmon.ru

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Скрипт для Narodmon.ru

Scheduled Pinned Locked Moved ioBroker скрипты
5 Posts 5 Posters 5.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    bondrogeen
    wrote on last edited by
    #1

    Скрипт для забора данных датчика с narodmon.ru.

    Запрос данных каждые 5 мин.

    api_key подставляем свой, получаемый в разделе Мои Приложения после регистрации в проекте.

    ID датчика смотрим тут.
    380_4.jpg

     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
        }
    });
    });
    
    1 Reply Last reply
    0
    • Z Offline
      Z Offline
      znammut
      wrote on last edited by
      #2

      Здравствуйте, я ваш скрипт немного поправил, чтобы несколько датчиков опрашивать

      `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]
      
      1 Reply Last reply
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        wrote on last edited by
        #3

        Я бы поменял так:

        `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]
        
        1 Reply Last reply
        0
        • D Offline
          D Offline
          dimon
          wrote on last edited by
          #4

          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]
          
          1 Reply Last reply
          0
          • B Offline
            B Offline
            Brujerizmo
            wrote on last edited by
            #5

            Чутка перепилил скрипт. Указываете несколько датчиков и скрипт считает среднее значение температуры. На мой взгляд так получится точнее)

            `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]
            
            1 Reply Last reply
            0
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            Support us

            ioBroker
            Community Adapters
            Donate

            734

            Online

            32.4k

            Users

            81.4k

            Topics

            1.3m

            Posts
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            ioBroker Community 2014-2025
            logo
            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • Recent
            • Tags
            • Unread 0
            • Categories
            • Unreplied
            • Popular
            • GitHub
            • Docu
            • Hilfe